diff --git a/gtf.engine/engine/README.txt b/gtf.engine/engine/README.txt
deleted file mode 100755
index 96459bdac3a94ee35b94e09ba4c63e35ebce34cf..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/README.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-Compilateur
-
-	Le compilateur utilis� est MinGW version 5.1.6
-	Il est disponible sur PICPOUL --> Partage --> Logiciel --> MinGW --> mingw-get-inst-20111118.exe
-	Une fois install�, copier le dossier openssl du dossier MinGW vers <MinGW>/include
-
-
-Compilation
-
-	Pour compiler, il suffit de double-cliquer sur compil.bat
-	La compilation r�cup�re le num�ro de r�vision SVN l'�crit dans le fichier Changelog.txt, compile l'application puis copie les fichiers dans le dossier gtf.engine
diff --git a/gtf.engine/engine/compil-linux.bat b/gtf.engine/engine/compil-linux.bat
deleted file mode 100755
index d395b209f8c493aa2c19890929d1126795d2b74b..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/compil-linux.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@ECHO OFF
-SET letter=%~d0
-SET currentPath=%~p0
-CALL :ChangeSlashes currentPath
-CALL :LoCase letter
-
-REM Compilation
-bash -c "cd  /mnt/%letter%%currentPath% && gcc -g engine.c sha1.h sha1.c -o engine -LC:\MingW\lib\ -lregex"
-REM copie vers le dossier gtf.engine
-COPY "engine" "../gtf.engines/engine"
-pause
-
-GOTO:EOF
-
-:LoCase
-:: Subroutine to convert a variable VALUE to all lower case.
-:: The argument for this subroutine is the variable NAME.
-FOR %%i IN (":=" "A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z") DO CALL SET "%1=%%%1:%%~i%%"
-
-:ChangeSlashes
-FOR %%i IN ("\=/") DO CALL SET "%1=%%%1:%%~i%%"
diff --git a/gtf.engine/engine/compil.bat b/gtf.engine/engine/compil.bat
deleted file mode 100755
index cee98ded472d3fc590dc4fbcee88d2f510ab7b02..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/compil.bat
+++ /dev/null
@@ -1,34 +0,0 @@
-@Echo OFF
-%~d0
-cd %~dp0
-REM Recuperation du numero de version
-for /f "delims=" %%i in ('svnversion "../engine"') do Set versionComp=%%i
-REM Initialisation de la variable de recuperation de version
-set versionComp = 2473:2481M
-REM Verification de la structure de num de version renvoye pas SVN
-echo %versionComp% | find ":"
-REM Si le num de version contient : version complexe sinon version simple
-if errorlevel 1 (call :simpleversion) else (call :complexeversion)
-
-
-:simpleversion
-REM Recuperation du num de version simple
-for /f "delims=" %%i in ('echo %versionComp:~0,4%') do Set version=%%i
-goto compil
-
-:complexeversion
-REM Recuperation du num de version simple
-for /f "delims=" %%i in ('echo %versionComp:~5,4%') do Set version=%%i
-goto compil
-
-:compil
-REM Suppression du fichier Changelog
-IF EXIST Changelog.txt DEL Changelog.txt
-REM Ecriture du num de version
-echo %version% > Changelog.txt
-REM Compilation en incluant la librairie psapi
-gcc -g engine.c sha1.h sha1.c -o engine.exe -l"psapi" -LC:\MingW\lib\ -lregex
-REM copie vers le dossier gtf.engine
-COPY "engine.exe" "../gtf.engines/engine.exe"
-COPY "Changelog.txt" "../gtf.engines/Changelog.txt"
-pause
\ No newline at end of file
diff --git a/gtf.engine/engine/engine.c b/gtf.engine/engine/engine.c
deleted file mode 100755
index 5dd2e7c7963e877d78caef15a11aef26a1a2dc0b..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/engine.c
+++ /dev/null
@@ -1,545 +0,0 @@
-#ifdef __unix__
-	#define OS_Windows 0
-	#define MAX_PATH 4096
-	#include <locale.h>
-	typedef unsigned long DWORD;
-	const char * separator = "/";
-#else
-	#define OS_Windows 1
-	#include <windows.h>
-	#include <Winbase.h>
-	#include <tchar.h>
-	#include <psapi.h>
-	const char * separator = "\\";
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h> 
-#include <stdlib.h>
-#include <sys/types.h>  
-#include <unistd.h> 
-#include "sha1.h"
-#include <time.h>
-#include "regex.h"
-#include "engine.h"
-
-#define TAILLE_MAX 1000
-
-int num_pid = 0, debug = 0;
-char *current_directory;
-// const char * separator = "/";
-
-int main(int argc, char *argv[]){
-	int valid = 0;;
-	unsigned int i;
-	if (argc > 1){
-		for (i = 0; i < strlen(argv[1]); ++i){
-			if (!isdigit(argv[1][i]))
-			{
-				valid = 1;
-				break;
-			}
-		}
-		if (valid ==0){
-			if (argc > 2){
-				if (strcmp(argv[2],"d") == 0){
-					debug = 1;
-				}
-			}
-		}else{
-			printf("Syntaxe : engine.exe [moteur_number] [d]\n");
-			printf("d : Debug mode\n");
-
-			exit(1);
-		}
-	}else{
-		printf("Syntaxe : engine.exe [motor_number] [d]\n");
-		printf("d : Debug mode\n");
-
-		exit(1);
-	}
-	//declaration des variables
-	int exist_pid_file = 0;
-	
-	// Nom du fichier pid
-	char* pid_file = malloc(strlen("pid_.txt") + strlen(argv[1]) + 1);
-	sprintf(pid_file, "pid_%s.txt", argv[1]);
-	int result = 0;
-	printf("1\n");
-	//R�cup�ration du r�pertoire courant du fichier courant
-	#ifdef __unix__
-		char *cwd_buffer = malloc(sizeof(char) * MAX_PATH);
-		current_directory = getcwd(cwd_buffer, MAX_PATH);
-	#else
-		char current_path[MAX_PATH];
-		GetModuleFileName( NULL, current_path, MAX_PATH );
-		current_directory = RemplacerFragment((char *)current_path, "\\engine.exe", "");
-	#endif
-	writeToDebugLog("R�pertoire courant : ", current_directory);
-	//remplacement du nom de l exe par le nom du fichier pid
-	char* pid_file_path = malloc(strlen(current_directory) + strlen("/") + strlen(pid_file) + 1);
-	sprintf(pid_file_path, "%s%s%s", current_directory, separator, pid_file);
-
-	writeToDebugLog("fichier PID : ", pid_file_path);
-	//test de l'existence des fichiers
-    exist_pid_file = findPidFile(pid_file_path);
-	
-	char tmp[5];
-	sprintf(tmp, "%i", exist_pid_file);
-	writeToDebugLog("existence Fichier pid (0, n existe pas) : ", tmp);
-	char *motor_number = argv[1];
-	//si fichier inexistant
-	if (exist_pid_file == 0){
-		writeToDebugLog("Execution", " robot non existence fichier pid.");
-		result = execRobot(pid_file_path, motor_number);
-	} else {
-		//si fichier vide
-		if (num_pid == 0){
-			writeToDebugLog("Execution", " robot fichier pid vide.");
-			result = execRobot(pid_file_path, motor_number);
-		} else {
-			sprintf(tmp, "%i", num_pid);
-			writeToDebugLog("num PID : ", tmp);
-			int process = 0;
-			process = verifyProcess(num_pid);
-			if (process == 0){
-				writeToDebugLog("Execution", " robot processus fini.");
-				result = execRobot(pid_file_path, motor_number);
-			}
-		} 
-	}
-	return result;
-}
-
-//fonction de recherche d'un numero de pid
-int findPidFile(char *pid_file_path){
-	//declaration des variables
-	char line[512];
-	int nb_lines = 0;
-	FILE *fic;
-	//ouverture du fichier
-	fic = fopen(pid_file_path, "r"); // ouvrir en lecture
-	
-	//si le programme n a pas trouve de fichier
-	if(fic == NULL){
-		return 0;
-	}
-	//si le programme a trouvee un fichier
-	else{
-		//lecture du fichier
-		while(fgets(line, 512, fic) != NULL){
-			//recuperation du pid
-			num_pid = atoi(line);
-			//passage a la ligne suivante
-			nb_lines++;
-		}
-		//fermeture du fichier
-		fclose(fic); 
-		return 1;
-	}
-}
-
-//Fonction de remplacement de chaine de caractere par une autre : n'existe pas par defaut en c.
-char *RemplacerFragment(char *source, char *vieux, char *nouveau){
-	//Recuperation des parametres
-	char *original = source;
-	char temp[256];
-	int ancienne_long = strlen (vieux);
-	int i, j, k, place = -1;
-	 
-	//recherche de la position de l'occurence tant que la fonction n a pas trouvee
-	for (i = 0; source[i] && (place == -1); ++i){
-		for (j = i, k = 0; source[j] == vieux[k]; j++, k++){
-			if (!vieux[k+1]){
-				place = i;
-			}
-		}
-	}
-	//remplacement de lancienne chaine par la nouvelle
-	if (place != -1){
-		//recuperation de la chaine jusqu a l'emplacement de la chaine a remplacer
-		for (j=0; j < place; j++){
-			temp[j] = source[j];
-		}
-		//remplacement de l ancienne valeur par la nouvelle
-		for (i=0; nouveau[i]; i++, j++){
-			temp[j] = nouveau[i];
-		}
-		//reucperation de la fin de la chaine de caracteres
-		for (k = place + ancienne_long; source[k]; k++, j++){
-			temp[j] = source[k];
-		}
-		temp[j] = 0;
-		for (i=0; (source[i] = temp[i]); i++){
-		}
-	}
-	return original;
-} 
-
-int execRobot(char *pid_file_path, char *motor_number){
-	writeToDebugLog("path pid : ", pid_file_path);
-	getWritePid(pid_file_path);
-	char var_env_engine[MAX_PATH];
-	char var_env_php[MAX_PATH];
-	
-	strcpy(var_env_engine, "GTF_ENGINE_HOME=");
-	strcat(var_env_engine, current_directory);
-	
-	strcpy(var_env_php, "PHP_HOME=");
-	strcat(var_env_php, current_directory);
-	strcat(var_env_php, "/php");
-	
-	writeToDebugLog("", var_env_php);
-	writeToDebugLog("", var_env_engine);
-	putenv(var_env_engine);
-	putenv(var_env_php);
-	putenv("PYTHONPATH=");
-	// Changement de la locale pour traiter les nombres
-	setlocale(LC_NUMERIC, "en_US.UTF8");
-	
-	char *argument = verifyLicense(motor_number);
-	writeToDebugLog("value verification : ", argument);
-	char function_robot[512];
-	if (OS_Windows == 0) {
-		sprintf(function_robot, "\"%s%sphp%sbin%sphp\" \"%s%sengine.php\" %s %s", current_directory, separator, separator, separator, current_directory, separator, motor_number, argument);	
-	} else {
-		sprintf(function_robot, "\"\"%s%sphp%sphp.exe\" \"%s%sengine.php\" %s %s\"", current_directory, separator, separator, current_directory, separator, motor_number, argument);		
-	}
-	writeToDebugLog("function : ", function_robot);
-	system(function_robot);
-
-	remove(pid_file_path);
-	return 0;
-}
-
-void getWritePid(char *pid_file_path){
-	FILE *fic;
-	//ouverture du fichier
-	fic = fopen(pid_file_path, "w"); //"w"  : mode texte en �criture (cr�ation)
-	//recuperation du pid
-	pid_t pid = getpid();
-	fprintf(fic, "%i", pid);
-	fclose(fic);
-}
-
-
-int verifyProcess(int num_pid){
-	int running = 0;
-	int i = 0;
-	int j = 0;
-	char *szProcessName;
-	char *szProcessNameWithSpaces;
-	#ifdef __unix__
-		if (getpgid(num_pid) >= 0){
-			FILE *fic;
-			char* process_path = malloc(strlen("/proc//comm") + 6);
-			sprintf(process_path, "/proc/%i/comm", num_pid);
-			//ouverture du fichier
-			fic = fopen(process_path, "r"); // ouvrir en lecture
-	
-			//si le programme n a pas trouve de fichier
-			if(fic != NULL){
-				//lecture du fichier
-				char line[512];
-				int nb_lines = 0;
-				while(fgets(line, 512, fic) != NULL){
-					//recuperation du nom du pid
-					szProcessNameWithSpaces = line;
-					//passage a la ligne suivante
-					nb_lines++;
-				}
-				//trim 
-				while(i < strlen(szProcessNameWithSpaces)){
-					if (&szProcessNameWithSpaces[i] != " " || &szProcessNameWithSpaces[i] != "\n"){
-						i++;
-					} else {
-						szProcessName[j] = szProcessNameWithSpaces[i];
-						i++;
-						j++;
-					}
-				}
-				//fermeture du fichier
-				fclose(fic);
-				writeToDebugLog("Pid name: ",  szProcessName);
-				writeToDebugLog("Exe file : engine", "");
-				if (strcmp(szProcessName, "engine") == 0){
-					running = 1;
-				}
-			}
-		}
-	#elif defined(_WIN32)
-		HANDLE hProcess=OpenProcess(PROCESS_VM_READ|PROCESS_QUERY_INFORMATION,FALSE, num_pid);
-		if(hProcess){
-			HMODULE hMod;
-			DWORD unused;
-			if(EnumProcessModules(hProcess, &hMod, sizeof(hMod), &unused)){
-				GetModuleBaseNameA(hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(char));
-				writeToDebugLog("Pid name: ",  szProcessName);
-				writeToDebugLog("Exe file : engine.exe", "");
-				if (strcmp(szProcessName, "engine.exe") == 0){
-					running = 1;
-				}
-			}
-		}
-	#endif
-	return running;
-}
-
-char *verifyLicense(char *motor_number){
-	char *returnValue = "";
-	char expireDate[TAILLE_MAX] = "";
-	char motorNumber[TAILLE_MAX] = "";
-
-	char* licence_path = malloc(strlen(current_directory) + strlen("licenseslicense.txt") + 3);
-	sprintf(licence_path, "%s%slicenses%slicense.txt", current_directory, separator, separator);
-
-	FILE* fichier = NULL;
-	writeToDebugLog("Fichier License : ",licence_path);
-	fichier = fopen(licence_path, "r");
-	if (fichier != NULL){
-		char chaine[TAILLE_MAX] = "";
-		char testChaine[TAILLE_MAX] = "";
-		// char *chaine = "";
-		char *key;
-		char *temp;
-		char toKey[TAILLE_MAX] = "";
-		int z = 0;
-		while (fgets(chaine, TAILLE_MAX, fichier) != NULL){ // On lit le fichier tant qu'on ne re�oit pas d'erreur (NULL)
-			if (chaine[0]!= '#'){
-				RemplacerFragment(chaine, "\r", "");
-				copie(chaine, testChaine);
-				if (strncmp( verifyRegexp(testChaine, "^Expiry date: (Permanent|[0-9]{6,8})"), "error", 1000)  != 0){
-					RemplacerFragment(testChaine, "Expiry date: ", "");
-					copie(testChaine, expireDate);
-				}
-				if (strncmp( verifyRegexp(testChaine, "^Engines: ([0-9]+)"), "error", 1000)  != 0){
-					RemplacerFragment(testChaine, "Engines: ", "");
-					copie(testChaine, motorNumber);
-				}
-				if (chaine[0]!= 'K'){
-					if (z == 0){
-						z = z+1;
-					}else{
-						strcat(toKey, "\n");
-					}
-					temp = RemplacerFragment(chaine, "\n", "");
-					strcat(toKey, temp);
-				}else{
-					if (chaine[1]!= 'e'){
-						if (z == 0){
-							z = z+1;
-						}else{
-							strcat(toKey, "\n");
-						}
-						temp = RemplacerFragment(chaine, "\n", "");
-						strcat(toKey, temp);
-					}else{
-						if (chaine[2]!= 'y'){
-							if (z == 0){
-								z = z+1;
-							}else{
-								strcat(toKey, "\n");
-							}
-							temp = RemplacerFragment(chaine, "\n", "");
-							strcat(toKey, temp);
-						}else{
-							key=RemplacerFragment(chaine, "Key: ", "");
-						}
-					}
-				}
-			}
-		}
-		writeToDebugLog("Expire Date: ",expireDate);
-		writeToDebugLog("Motor Number: ",motorNumber);
-		writeToDebugLog("clef: ", key);
-		writeToDebugLog("Toclef: ", toKey);
-		SHA1Context sha;
-		int i;
-		SHA1Reset(&sha);
-		for(i = 1; i <= 1000; i++) {
-			SHA1Input(&sha, toKey, strlen(toKey));
-		}
-		if (!SHA1Result(&sha)){
-			 writeToErrorLog("Erreur licence : ", "Impossible de hasher la clef");
-			 returnValue = "E001";
-		}else{
-			char clefTemp[5][TAILLE_MAX];
-			char *clef, *clefTest;
-			for(i = 0; i < 5; i++){
-				sprintf(clefTemp[i], "%X ", sha.Message_Digest[i]);
-			}
-			int j=0;
-			for(j = 0; j < 5; j++){
-				clefTest= clefTemp[j];
-				 if (j == 0){
-					clef = clefTest;
-				}else{
-					strcat(clef, clefTest);
-				}
-			}
-			writeToDebugLog("clef calcul�e: ", clef);
-			int result = strncmp(clef, key, 1000);
-			if (result == 0){
-				writeToDebugLog("Comparaison Clefs: ", "Egales");
-				time_t current_time;
-				current_time = time(NULL);
-				struct tm *nowtm;
-				int yy, mm, dd;
-				yy = makeInt(expireDate +  0, 4) -1900;
-				mm = makeInt(expireDate +  4, 2)-1;
-				dd = makeInt(expireDate +  6, 2);
-				nowtm = localtime(&current_time);
-				writeToDebugLog("Comparaison Date Nombre moteur: ",motorNumber);
-				writeToDebugLog("Comparaison Date num�ro moteur: ",motor_number);
-				if (strncmp(expireDate, "permanent", 1000) ==0){
-					writeToDebugLog("Comparaison Date : ", "OK");
-					if (atoi(motor_number) <= atoi(motorNumber)){
-						writeToDebugLog("Comparaison Moteur : ", "Ok");
-						returnValue = "0";
-					}else{
-						writeToDebugLog("Comparaison Moteur : ", "Num�ro de moteur trop grand");
-						returnValue = "E003";
-					}
-				}else{
-					if (yy < nowtm->tm_year){
-						writeToDebugLog("Comparaison Date : ", "Ann�e courante sup�rieure");
-						writeToErrorLog("Erreur licence : ", "Ann�e courante sup�rieure");
-						returnValue = "E002";
-					}else{
-						if (mm < nowtm->tm_mon){
-							writeToDebugLog("Comparaison Date : ", "Mois courant sup�rieur");
-							returnValue = "E002";
-						}else{
-							if (dd < nowtm->tm_mday){
-								writeToDebugLog("Comparaison Date : ", "Jour courant sup�rieur");
-								returnValue = "E002";
-							}else{
-								writeToDebugLog("Comparaison Date : ", "OK");
-								if (atoi(motor_number) <= atoi(motorNumber)){
-									writeToDebugLog("Comparaison Moteur : ", "Ok");
-									returnValue = "0";
-								}else{
-									writeToDebugLog("Comparaison Moteur : ", "Num�ro de moteur trop grand");
-									writeToErrorLog("Erreur licence : ", "Num�ro de moteur trop grand");
-									returnValue = "E003";
-								}
-							}
-						}
-					}
-				}
-				
-			}else{
-				returnValue = "E001";
-				writeToDebugLog("Comparaison Clefs : ", "Diff�rentes");
-				writeToErrorLog("Erreur licence : ", "Clefs diff�rentes");
-			}
-		} 
-		fclose(fichier);
-	}else{
-		// On affiche un message d'erreur si on veut
-		writeToErrorLog("Erreur licence : ", "Ouverture du fichier impossible");
-		returnValue = "E001";
-	}
-	
-	return returnValue;
-}
-
-void writeToDebugLog(char *titre, char *error){
-	if (debug == 1){
-		FILE *fic;
-		//ouverture du fichier
-		char* debug_file_path = malloc(strlen(current_directory) + strlen("engine.log") + 2);
-		sprintf(debug_file_path, "%s%sengine.log", current_directory, separator);
-		fic = fopen(debug_file_path, "a"); //"w"  : mode texte en �criture (cr�ation)
-		char resultat[MAX_PATH];
-		strcpy(resultat, titre);
-		strcat(resultat, error);
-		strcat(resultat, "\n");
-		//recuperation du pid
-		fprintf(fic, "%s", resultat);
-		fclose(fic); 
-	}
-}
-
-void writeToErrorLog(char *titre, char *error){
-	FILE *fic;
-	//ouverture du fichier
-	char* error_file_path = malloc(strlen(current_directory) + strlen("engine_error.log") + 2);
-	sprintf(error_file_path, "%s%sengine_error.log", current_directory, separator);
-	fic = fopen(error_file_path, "a"); //"w"  : mode texte en �criture (cr�ation)
-	char resultat[MAX_PATH];
-	strcpy(resultat, titre);
-	strcat(resultat, error);
-	strcat(resultat, "\n");
-	//recuperation du pid
-	fprintf(fic, "%s", resultat);
-	fclose(fic);
-}
-
-char *verifyRegexp (char *str_request, char *str_regex){
-	char *returnValue = "error";
-	int err;
-	regex_t preg;
-	err = regcomp (&preg, str_regex, REG_EXTENDED);
-	if (err == 0){
-		int match;
-		size_t nmatch = 0;
-		regmatch_t *pmatch = NULL;
-		nmatch = preg.re_nsub;
-		pmatch = malloc (sizeof (*pmatch) * nmatch);
-		if (pmatch){
-			match = regexec (&preg, str_request, nmatch, pmatch, 0);
-			regfree (&preg);
-			if (match == 0){
-				char *site = NULL;
-				int start = pmatch[0].rm_so;
-				int end = pmatch[0].rm_eo;
-				size_t size = end - start;
-				site = malloc (sizeof (*site) * (size + 1));
-				if (site){
-				   strncpy (site, &str_request[start], size);
-				   site[size] = '\0';
-				   returnValue = site;
-				   free (site);
-				}
-			}else if (match == REG_NOMATCH){
-				returnValue = "error";
-			}else{
-				char *text;
-				size_t size;
-				size = regerror (err, &preg, NULL, 0);
-				text = malloc (sizeof (*text) * size);
-				if (text){
-				   regerror (err, &preg, text, size);
-				   returnValue = text;
-				   free (text);
-				}else{
-				   returnValue = "error";
-				}
-			}
-		}else{
-			 returnValue = "error";
-		}	
-	}else{
-		returnValue = "error";
-	}
-	
-	return returnValue;
-}
-
-void copie(char srce[] , char dest[]) { 
-  register int i;     /* un indice est necessaire */
-  for( i=0 ; (dest[i] = srce[i]) != 0 ; i++) 
-     ;
-}
-
-int makeInt(const char *p, int size){
-    const char *endp;
-    int intval = 0;
-    endp = p + size;
-    while (p < endp){
-        intval = intval * 10 + *p - '0';
-        p++;
-    }
-    return intval;
-}
diff --git a/gtf.engine/engine/engine.h b/gtf.engine/engine/engine.h
deleted file mode 100755
index 88fa8fbd29a4e4588485da5f25c0cdff7e9e086d..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/engine.h
+++ /dev/null
@@ -1,11 +0,0 @@
-int execRobot(char *pid_file_path, char *motor_number);
-void getWritePid(char *pid_file_path);
-int verifyProcess(int num_pid);
-int findPidFile(char *pid_file_path);
-void copie(char srce[] , char dest[]);
-void writeToDebugLog(char *titre, char *error);
-void writeToErrorLog(char *titre, char *error);
-char *RemplacerFragment(char *source, char *vieux, char *nouveau);
-char *verifyRegexp(char *str_request, char *str_regex);
-char *verifyLicense(char *motor_number);
-int makeInt(const char *,int);
\ No newline at end of file
diff --git a/gtf.engine/engine/php.ini b/gtf.engine/engine/php.ini
deleted file mode 100755
index 982525bc240cc3348dcaae579a6d87cb56112ae5..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/php.ini
+++ /dev/null
@@ -1,162 +0,0 @@
-[PHP]
-engine = On
-short_open_tag = Off
-asp_tags = Off
-precision = 14
-output_buffering = 4096
-zlib.output_compression = Off
-implicit_flush = Off
-unserialize_callback_func =
-serialize_precision = 17
-disable_functions =
-disable_classes =
-zend.enable_gc = On
-expose_php = On
-max_execution_time = 30
-max_input_time = 60
-memory_limit = 128M
-error_reporting = E_ALL & ~E_NOTICE 
-display_errors = Off
-display_startup_errors = Off
-log_errors = On
-log_errors_max_len = 1024
-ignore_repeated_errors = Off
-ignore_repeated_source = Off
-report_memleaks = On
-track_errors = Off
-html_errors = On
-error_log = php.log
-variables_order = "GPCS"
-request_order = "GP"
-register_argc_argv = Off
-auto_globals_jit = On
-post_max_size = 8M
-auto_prepend_file =
-auto_append_file =
-default_mimetype = "text/html"
-include_path = ".;"
-doc_root =
-user_dir =
- extension_dir = "ext"
-enable_dl = Off
-file_uploads = On
-upload_max_filesize = 2M
-max_file_uploads = 20
-allow_url_fopen = On
-allow_url_include = Off
-default_socket_timeout = 60
-extension=php_curl.dll
-extension=php_gd2.dll
-extension=php_ldap.dll
-extension=php_mbstring.dll
-extension=php_openssl.dll
-extension=php_pdo_pgsql.dll
-extension=php_xsl.dll
-[CLI Server]
-cli_server.color = On
-[Date]
-date.timezone = "EUROPE/Paris"
-[Pdo_mysql]
-pdo_mysql.cache_size = 2000
-pdo_mysql.default_socket=
-[mail function]
-SMTP = localhost
-smtp_port = 25
-mail.add_x_header = On
-[SQL]
-sql.safe_mode = Off
-[ODBC]
-odbc.allow_persistent = On
-odbc.check_persistent = On
-odbc.max_persistent = -1
-odbc.max_links = -1
-odbc.defaultlrl = 4096
-odbc.defaultbinmode = 1
-[Interbase]
-ibase.allow_persistent = 1
-ibase.max_persistent = -1
-ibase.max_links = -1
-ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
-ibase.dateformat = "%Y-%m-%d"
-ibase.timeformat = "%H:%M:%S"
-[MySQL]
-mysql.allow_local_infile = On
-mysql.allow_persistent = On
-mysql.cache_size = 2000
-mysql.max_persistent = -1
-mysql.max_links = -1
-mysql.default_port =
-mysql.default_socket =
-mysql.default_host =
-mysql.default_user =
-mysql.default_password =
-mysql.connect_timeout = 60
-mysql.trace_mode = Off
-[MySQLi]
-mysqli.max_persistent = -1
-mysqli.allow_persistent = On
-mysqli.max_links = -1
-mysqli.cache_size = 2000
-mysqli.default_port = 3306
-mysqli.default_socket =
-mysqli.default_host =
-mysqli.default_user =
-mysqli.default_pw =
-mysqli.reconnect = Off
-[mysqlnd]
-mysqlnd.collect_statistics = On
-mysqlnd.collect_memory_statistics = Off
-[PostgreSQL]
-pgsql.allow_persistent = On
-pgsql.auto_reset_persistent = Off
-pgsql.max_persistent = -1
-pgsql.max_links = -1
-pgsql.ignore_notice = 0
-pgsql.log_notice = 0
-[Sybase-CT]
-sybct.allow_persistent = On
-sybct.max_persistent = -1
-sybct.max_links = -1
-sybct.min_server_severity = 10
-sybct.min_client_severity = 10
-[bcmath]
-bcmath.scale = 0
-[Session]
-session.save_handler = files
-session.use_strict_mode = 0
-session.use_cookies = 1
-session.use_only_cookies = 1
-session.name = PHPSESSID
-session.auto_start = 0
-session.cookie_lifetime = 0
-session.cookie_path = /
-session.cookie_domain =
-session.cookie_httponly =
-session.serialize_handler = php
-session.gc_probability = 1
-session.gc_divisor = 1000
-session.gc_maxlifetime = 1440
-session.referer_check =
-session.cache_limiter = nocache
-session.cache_expire = 180
-session.use_trans_sid = 0
-session.hash_function = 0
-session.hash_bits_per_character = 5
-url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
-[MSSQL]
-mssql.allow_persistent = On
-mssql.max_persistent = -1
-mssql.max_links = -1
-mssql.min_error_severity = 10
-mssql.min_message_severity = 10
-mssql.compatibility_mode = Off
-mssql.secure_connection = Off
-[Tidy]
-tidy.clean_output = Off
-[soap]
-soap.wsdl_cache_enabled=1
-soap.wsdl_cache_dir="/tmp"
-soap.wsdl_cache_ttl=86400
-soap.wsdl_cache_limit = 5
-[ldap]
-ldap.max_links = -1
diff --git a/gtf.engine/engine/sha1.c b/gtf.engine/engine/sha1.c
deleted file mode 100755
index d87c7f4830013b8e7d749e398b0a15ba15acd5c4..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/sha1.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*
- *  sha1.c
- *
- *  Copyright (C) 1998, 2009
- *  Paul E. Jones <paulej@packetizer.com>
- *  All Rights Reserved
- *
- *****************************************************************************
- *  $Id: sha1.c 12 2009-06-22 19:34:25Z paulej $
- *****************************************************************************
- *
- *  Description:
- *      This file implements the Secure Hashing Standard as defined
- *      in FIPS PUB 180-1 published April 17, 1995.
- *
- *      The Secure Hashing Standard, which uses the Secure Hashing
- *      Algorithm (SHA), produces a 160-bit message digest for a
- *      given data stream.  In theory, it is highly improbable that
- *      two messages will produce the same message digest.  Therefore,
- *      this algorithm can serve as a means of providing a "fingerprint"
- *      for a message.
- *
- *  Portability Issues:
- *      SHA-1 is defined in terms of 32-bit "words".  This code was
- *      written with the expectation that the processor has at least
- *      a 32-bit machine word size.  If the machine word size is larger,
- *      the code should still function properly.  One caveat to that
- *      is that the input functions taking characters and character
- *      arrays assume that only 8 bits of information are stored in each
- *      character.
- *
- *  Caveats:
- *      SHA-1 is designed to work with messages less than 2^64 bits
- *      long. Although SHA-1 allows a message digest to be generated for
- *      messages of any number of bits less than 2^64, this
- *      implementation only works with messages with a length that is a
- *      multiple of the size of an 8-bit character.
- *
- */
-
-#include "sha1.h"
-
-/*
- *  Define the circular shift macro
- */
-#define SHA1CircularShift(bits,word) \
-                ((((word) << (bits)) & 0xFFFFFFFF) | \
-                ((word) >> (32-(bits))))
-
-/* Function prototypes */
-void SHA1ProcessMessageBlock(SHA1Context *);
-void SHA1PadMessage(SHA1Context *);
-
-/*  
- *  SHA1Reset
- *
- *  Description:
- *      This function will initialize the SHA1Context in preparation
- *      for computing a new message digest.
- *
- *  Parameters:
- *      context: [in/out]
- *          The context to reset.
- *
- *  Returns:
- *      Nothing.
- *
- *  Comments:
- *
- */
-void SHA1Reset(SHA1Context *context)
-{
-    context->Length_Low             = 0;
-    context->Length_High            = 0;
-    context->Message_Block_Index    = 0;
-
-    context->Message_Digest[0]      = 0x67452301;
-    context->Message_Digest[1]      = 0xEFCDAB89;
-    context->Message_Digest[2]      = 0x98BADCFE;
-    context->Message_Digest[3]      = 0x10325476;
-    context->Message_Digest[4]      = 0xC3D2E1F0;
-
-    context->Computed   = 0;
-    context->Corrupted  = 0;
-}
-
-/*  
- *  SHA1Result
- *
- *  Description:
- *      This function will return the 160-bit message digest into the
- *      Message_Digest array within the SHA1Context provided
- *
- *  Parameters:
- *      context: [in/out]
- *          The context to use to calculate the SHA-1 hash.
- *
- *  Returns:
- *      1 if successful, 0 if it failed.
- *
- *  Comments:
- *
- */
-int SHA1Result(SHA1Context *context)
-{
-
-    if (context->Corrupted)
-    {
-        return 0;
-    }
-
-    if (!context->Computed)
-    {
-        SHA1PadMessage(context);
-        context->Computed = 1;
-    }
-
-    return 1;
-}
-
-/*  
- *  SHA1Input
- *
- *  Description:
- *      This function accepts an array of octets as the next portion of
- *      the message.
- *
- *  Parameters:
- *      context: [in/out]
- *          The SHA-1 context to update
- *      message_array: [in]
- *          An array of characters representing the next portion of the
- *          message.
- *      length: [in]
- *          The length of the message in message_array
- *
- *  Returns:
- *      Nothing.
- *
- *  Comments:
- *
- */
-void SHA1Input(     SHA1Context         *context,
-                    const unsigned char *message_array,
-                    unsigned            length)
-{
-    if (!length)
-    {
-        return;
-    }
-
-    if (context->Computed || context->Corrupted)
-    {
-        context->Corrupted = 1;
-        return;
-    }
-
-    while(length-- && !context->Corrupted)
-    {
-        context->Message_Block[context->Message_Block_Index++] =
-                                                (*message_array & 0xFF);
-
-        context->Length_Low += 8;
-        /* Force it to 32 bits */
-        context->Length_Low &= 0xFFFFFFFF;
-        if (context->Length_Low == 0)
-        {
-            context->Length_High++;
-            /* Force it to 32 bits */
-            context->Length_High &= 0xFFFFFFFF;
-            if (context->Length_High == 0)
-            {
-                /* Message is too long */
-                context->Corrupted = 1;
-            }
-        }
-
-        if (context->Message_Block_Index == 64)
-        {
-            SHA1ProcessMessageBlock(context);
-        }
-
-        message_array++;
-    }
-}
-
-/*  
- *  SHA1ProcessMessageBlock
- *
- *  Description:
- *      This function will process the next 512 bits of the message
- *      stored in the Message_Block array.
- *
- *  Parameters:
- *      None.
- *
- *  Returns:
- *      Nothing.
- *
- *  Comments:
- *      Many of the variable names in the SHAContext, especially the
- *      single character names, were used because those were the names
- *      used in the publication.
- *         
- *
- */
-void SHA1ProcessMessageBlock(SHA1Context *context)
-{
-    const unsigned K[] =            /* Constants defined in SHA-1   */      
-    {
-        0x5A827999,
-        0x6ED9EBA1,
-        0x8F1BBCDC,
-        0xCA62C1D6
-    };
-    int         t;                  /* Loop counter                 */
-    unsigned    temp;               /* Temporary word value         */
-    unsigned    W[80];              /* Word sequence                */
-    unsigned    A, B, C, D, E;      /* Word buffers                 */
-
-    /*
-     *  Initialize the first 16 words in the array W
-     */
-    for(t = 0; t < 16; t++)
-    {
-        W[t] = ((unsigned) context->Message_Block[t * 4]) << 24;
-        W[t] |= ((unsigned) context->Message_Block[t * 4 + 1]) << 16;
-        W[t] |= ((unsigned) context->Message_Block[t * 4 + 2]) << 8;
-        W[t] |= ((unsigned) context->Message_Block[t * 4 + 3]);
-    }
-
-    for(t = 16; t < 80; t++)
-    {
-       W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
-    }
-
-    A = context->Message_Digest[0];
-    B = context->Message_Digest[1];
-    C = context->Message_Digest[2];
-    D = context->Message_Digest[3];
-    E = context->Message_Digest[4];
-
-    for(t = 0; t < 20; t++)
-    {
-        temp =  SHA1CircularShift(5,A) +
-                ((B & C) | ((~B) & D)) + E + W[t] + K[0];
-        temp &= 0xFFFFFFFF;
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    for(t = 20; t < 40; t++)
-    {
-        temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1];
-        temp &= 0xFFFFFFFF;
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    for(t = 40; t < 60; t++)
-    {
-        temp = SHA1CircularShift(5,A) +
-               ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2];
-        temp &= 0xFFFFFFFF;
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    for(t = 60; t < 80; t++)
-    {
-        temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3];
-        temp &= 0xFFFFFFFF;
-        E = D;
-        D = C;
-        C = SHA1CircularShift(30,B);
-        B = A;
-        A = temp;
-    }
-
-    context->Message_Digest[0] =
-                        (context->Message_Digest[0] + A) & 0xFFFFFFFF;
-    context->Message_Digest[1] =
-                        (context->Message_Digest[1] + B) & 0xFFFFFFFF;
-    context->Message_Digest[2] =
-                        (context->Message_Digest[2] + C) & 0xFFFFFFFF;
-    context->Message_Digest[3] =
-                        (context->Message_Digest[3] + D) & 0xFFFFFFFF;
-    context->Message_Digest[4] =
-                        (context->Message_Digest[4] + E) & 0xFFFFFFFF;
-
-    context->Message_Block_Index = 0;
-}
-
-/*  
- *  SHA1PadMessage
- *
- *  Description:
- *      According to the standard, the message must be padded to an even
- *      512 bits.  The first padding bit must be a '1'.  The last 64
- *      bits represent the length of the original message.  All bits in
- *      between should be 0.  This function will pad the message
- *      according to those rules by filling the Message_Block array
- *      accordingly.  It will also call SHA1ProcessMessageBlock()
- *      appropriately.  When it returns, it can be assumed that the
- *      message digest has been computed.
- *
- *  Parameters:
- *      context: [in/out]
- *          The context to pad
- *
- *  Returns:
- *      Nothing.
- *
- *  Comments:
- *
- */
-void SHA1PadMessage(SHA1Context *context)
-{
-    /*
-     *  Check to see if the current message block is too small to hold
-     *  the initial padding bits and length.  If so, we will pad the
-     *  block, process it, and then continue padding into a second
-     *  block.
-     */
-    if (context->Message_Block_Index > 55)
-    {
-        context->Message_Block[context->Message_Block_Index++] = 0x80;
-        while(context->Message_Block_Index < 64)
-        {
-            context->Message_Block[context->Message_Block_Index++] = 0;
-        }
-
-        SHA1ProcessMessageBlock(context);
-
-        while(context->Message_Block_Index < 56)
-        {
-            context->Message_Block[context->Message_Block_Index++] = 0;
-        }
-    }
-    else
-    {
-        context->Message_Block[context->Message_Block_Index++] = 0x80;
-        while(context->Message_Block_Index < 56)
-        {
-            context->Message_Block[context->Message_Block_Index++] = 0;
-        }
-    }
-
-    /*
-     *  Store the message length as the last 8 octets
-     */
-    context->Message_Block[56] = (context->Length_High >> 24) & 0xFF;
-    context->Message_Block[57] = (context->Length_High >> 16) & 0xFF;
-    context->Message_Block[58] = (context->Length_High >> 8) & 0xFF;
-    context->Message_Block[59] = (context->Length_High) & 0xFF;
-    context->Message_Block[60] = (context->Length_Low >> 24) & 0xFF;
-    context->Message_Block[61] = (context->Length_Low >> 16) & 0xFF;
-    context->Message_Block[62] = (context->Length_Low >> 8) & 0xFF;
-    context->Message_Block[63] = (context->Length_Low) & 0xFF;
-
-    SHA1ProcessMessageBlock(context);
-}
diff --git a/gtf.engine/engine/sha1.h b/gtf.engine/engine/sha1.h
deleted file mode 100755
index 1ca4b104a9647ebdc20f257b9525af825a3575b7..0000000000000000000000000000000000000000
--- a/gtf.engine/engine/sha1.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  sha1.h
- *
- *  Copyright (C) 1998, 2009
- *  Paul E. Jones <paulej@packetizer.com>
- *  All Rights Reserved
- *
- *****************************************************************************
- *  $Id: sha1.h 12 2009-06-22 19:34:25Z paulej $
- *****************************************************************************
- *
- *  Description:
- *      This class implements the Secure Hashing Standard as defined
- *      in FIPS PUB 180-1 published April 17, 1995.
- *
- *      Many of the variable names in the SHA1Context, especially the
- *      single character names, were used because those were the names
- *      used in the publication.
- *
- *      Please read the file sha1.c for more information.
- *
- */
-
-#ifndef _SHA1_H_
-#define _SHA1_H_
-
-/* 
- *  This structure will hold context information for the hashing
- *  operation
- */
-typedef struct SHA1Context
-{
-    unsigned Message_Digest[5]; /* Message Digest (output)          */
-
-    unsigned Length_Low;        /* Message length in bits           */
-    unsigned Length_High;       /* Message length in bits           */
-
-    unsigned char Message_Block[64]; /* 512-bit message blocks      */
-    int Message_Block_Index;    /* Index into message block array   */
-
-    int Computed;               /* Is the digest computed?          */
-    int Corrupted;              /* Is the message digest corruped?  */
-} SHA1Context;
-
-/*
- *  Function Prototypes
- */
-void SHA1Reset(SHA1Context *);
-int SHA1Result(SHA1Context *);
-void SHA1Input( SHA1Context *,
-                const unsigned char *,
-                unsigned);
-
-#endif
diff --git a/gtf.engine/gtf.engines/Traitement.class.inc b/gtf.engine/gtf.engines/Traitement.class.inc
index 1a5c2f39e252daa395ee5fddd73a4a2bc1b43c75..f00fcf53eaae2f6bc60b93aa4fd6a5ea6f090c8f 100755
--- a/gtf.engine/gtf.engines/Traitement.class.inc
+++ b/gtf.engine/gtf.engines/Traitement.class.inc
@@ -132,7 +132,7 @@ class Traitement {
         $aLigne = explode("|", $sAllParams);
         //$aLigne = stringExplode($sAllParams, "|", "\"", "\"");
         foreach ($aLigne as $sValeur) {
-            $aValeurs = explode("=", $sValeur, 2);
+            $aValeurs = explode("=", $sValeur);
             if ($aValeurs[1] == "") {
                 writeToLog(INFO_NULL_ELEMENT . $aValeurs[0] . ".", $this->sRobotLogFile);
             }
@@ -234,11 +234,8 @@ class Traitement {
     function unZipSource($sParam) {
         $this->sSource = $sParam;
         // Si la chaine contient un accent, la chaine sera en UTF-8, la fonction file_exists et la fonction de dézippage ne gèrent pas utf-8, il faut donc convertir la chaine en ISO-8859-1
-        $bUtf8Param = false;
-        if (mb_check_encoding($sParam, 'UTF-8')) {
+        if (mb_check_encoding($sParam, 'UTF-8'))
             $sParam = utf8_decode($sParam);
-            $bUtf8Param = true;
-        }
         // Si le fichier n'est pas trouvé alors il se trouve dans le répertoire upload
         if (!file_exists($sParam))
             $sParam = $this->aProperties["upload_dir"] . "/" . $sParam;
@@ -251,9 +248,6 @@ class Traitement {
             $sDir = $sParam;
             $this->sSourceTemp = "";
         }
-        // Si le paramètre passé était encodé en UTF-8 il faut le réencoder sinon problème avec les accents.
-        if ($bUtf8Param)
-            $sDir = utf8_encode($sDir);
         return $sDir;
     }
 
@@ -289,50 +283,30 @@ class Traitement {
      * $sDirSource : Chaine de caractère contenant le chemin d'accés à la source de données
      */
 
-    function updateSourceParam($oGui, $oGtfFmwParser, $sDirSource, $bUsePattern) {
-        $sdelimiterFichier = '"""';
-        $sdelimiterParam = '"';
+    function updateSourceParam($oGui, $oGtfFmwParser, $sDirSource) {
+        $sdelimiterFichier = '""';
+        $sdelimiterParam = '""';
         $sSourceMacro = $sdelimiterFichier;
-		$aSourceMacro = array();
         $i = 0;
 
         if (is_dir($sDirSource)) {
-            $this->aExtension = $oGui->getExtensionArrayNoLower($oGui->sFiltreSource);
+            $this->aExtension = $oGui->getExtensionArray($oGui->sFiltreSource);
             $iExtension = count($this->aExtension);
             if (($this->aExtension[0] == "*.*" and $oGui->sType == "FILE_OR_URL") or $oGui->sType == "DIRNAME_SRC" or $oGui->sType == "SOURCE_GEODATABASE") {
                 writeToLog(INFO_VALID_DATA_SOURCE_FILE_EXTENSION . $this->aExtension[0], $this->sRobotLogFile);
                 $sSourceMacro.= $sdelimiterParam . $sDirSource . '/**/' . $sdelimiterParam;
             } else {
-				if ($bUsePattern){
-					writeToLog(INFO_USE_PATTERN, $this->sRobotLogFile);
-					foreach ($this->aExtension as $sExtension) {
-						if ($sExtension != "*.*" or ( $sExtension == "*.*" and $iExtension == 1)) { // Si le filtre est différent de *.* (ex : *.mdb) ou si le filtre est seulement *.*. Si le filtre est multiple et que l'un d'eux est *.* (ex : *.*, *.mdb...), il ne sera pas pris en compte
-							$aExtension = explode(".", $sExtension);
-							if ($this->countFilesExtension($sDirSource, $aExtension[1]) > 0) {
-								if ($i != 0)
-									$sSourceMacro.= "<space>";
-								writeToLog(INFO_VALID_DATA_SOURCE_FILE_EXTENSION . $sExtension, $this->sRobotLogFile);
-								$sSourceMacro.= $sdelimiterParam . $sDirSource . '/**/' . $sExtension . $sdelimiterParam;
-								$i++;
-							}
-						}
-					}
-				}else{
-					writeToLog(INFO_NO_USE_PATTERN, $this->sRobotLogFile);
-					foreach ($this->aExtension as $sExtension) {
-						if ($sExtension != "*.*" or ( $sExtension == "*.*" and $iExtension == 1)) { // Si le filtre est différent de *.* (ex : *.mdb) ou si le filtre est seulement *.*. Si le 
-							$aExtension = explode(".", $sExtension);
-							$aSourceMacroTmp = array_merge($aSourceMacro, $this->returnFileListToString($sDirSource, $aExtension[1]));
-							$aSourceMacro = array_unique($aSourceMacroTmp);
-							$i++;
-						}
-					}
-					foreach ($aSourceMacro as $source) {
-						if ($sSourceMacro != $sdelimiterFichier){
-							$sSourceMacro.= "<space>";
-						}
-						$sSourceMacro.= $sdelimiterParam . $source . $sdelimiterParam;
-					}
+                foreach ($this->aExtension as $sExtension) {
+                    if ($sExtension != "*.*" or ( $sExtension == "*.*" and $iExtension == 1)) { // Si le filtre est différent de *.* (ex : *.mdb) ou si le filtre est seulement *.*. Si le filtre est multiple et que l'un d'eux est *.* (ex : *.*, *.mdb...), il ne sera pas pris en compte
+                        $aExtension = explode(".", $sExtension);
+                        if ($this->countFilesExtension($sDirSource, $aExtension[1]) > 0) {
+                            if ($i != 0)
+                                $sSourceMacro.= "<space>";
+                            writeToLog(INFO_VALID_DATA_SOURCE_FILE_EXTENSION . $sExtension, $this->sRobotLogFile);
+                            $sSourceMacro.= $sdelimiterParam . $sDirSource . '/**/' . $sExtension . $sdelimiterParam;
+                            $i++;
+                        }
+                    }
                 }
             }
         }else {
@@ -340,7 +314,6 @@ class Traitement {
         }
         $sSourceMacro .= $sdelimiterFichier;
         $this->aParametre[$oGui->sDefault_Macro] = $sSourceMacro;
-		
         return $sSourceMacro;
     }
 
@@ -351,7 +324,7 @@ class Traitement {
         $num = 0;
         if (!is_dir($sDirSource)) {
             $path_parts = pathinfo($sDirSource);
-            if (is_file($sDirSource) && $path_parts['extension'] == $sExtension)
+            if (is_file($sDirSource) && strtoupper($path_parts['extension']) == strtoupper($sExtension))
                 return 1;
             else
                 return false;
@@ -362,26 +335,6 @@ class Traitement {
         }
         return $num;
     }
-	
-	function returnFileListToString($sDirSource, $sExtension) {
-        $aFileList = array();
-        if (!is_dir($sDirSource)) {
-            $path_parts = pathinfo($sDirSource);
-            if (is_file($sDirSource) && strtolower($path_parts['extension']) == strtolower($sExtension)){
-                array_push($aFileList,$sDirSource);
-			}
-            
-        }else{
-			foreach (scandir($sDirSource) AS $entry) {
-				if (!in_array($entry, array('..', '.'))){
-					$aFileListTmp = $aFileList;
-					$aFileList = array_merge($aFileListTmp,$this->returnFileListToString($sDirSource . "/" . $entry, $sExtension));
-				}
-				
-			}
-		}
-        return $aFileList;
-    }
 
     /*
      * Fonction qui se charge de la mise à jour du paramètre "source" s'il existe
@@ -513,6 +466,9 @@ class Traitement {
             $cChr = $this->unichr($iCode);
             $sReplaced = str_replace($matches[0][$i], $cChr, $sReplaced);
         }
+		if (mb_detect_encoding($sReplaced, "UTF-8, ISO-8859-1") != "ISO-8859-1") {
+			$sReplaced = iconv("UTF-8", "ISO-8859-1", $sReplaced);
+		}
         return $sReplaced;
     }
 
@@ -528,6 +484,7 @@ class Traitement {
     function isEncode($sStr) {
         for ($i = 0; $i < count($this->aReplaceFME); $i++) {
             if (strpos($sStr, $this->aReplaceFME[$i]) === false && strpos($sStr, $this->aReplaceGTF[$i]) !== false) {
+                error_log($this->aReplaceFME[$i]);
                 return false;
             }
         }
@@ -545,23 +502,17 @@ class Traitement {
     function getTclParams($oGtfFmwParser, $sNewDir) {
         $aTGui = array();
         $sChaine = "";
-		$bUsePattern = false;
         foreach ($oGtfFmwParser->aGuiObject as $aGui) {
             if ($aGui->sDefault_Macro != "") {
                 array_push($aTGui, $aGui);
             }
-			if ($aGui->sDefault_Macro == "GTF_FORCE_PATTERN") {
-				if (strtolower($aGui->sDefaultValue) == "true"){
-					$bUsePattern = true;
-				}
-			}
         }
         foreach ($aTGui as $oGui) {
             //Teste si le paramètre est une source
             if ($oGui->bIsSource) {
                 if ($this->aParametre[$oGui->sDefault_Macro] != "" && substr($this->aParametre[$oGui->sDefault_Macro], 0, 7) != "<quote>") {
                     $sDirSource = $this->unZipSource($this->aParametre[$oGui->sDefault_Macro]);
-                    $this->updateSourceParam($oGui, $oGtfFmwParser, $sDirSource, $bUsePattern);
+                    $this->updateSourceParam($oGui, $oGtfFmwParser, $sDirSource);
                 }
             }
             if ($oGui->bIsDest) {
@@ -603,20 +554,19 @@ class Traitement {
                             $sGTFOutput = $this->decoderFME($sGTFOutput);
                         break;
                     default :
-                        //$sGTFOutput = str_replace('"', '""', $sGTFOutput);
+                        $sGTFOutput = str_replace('"', '""', $sGTFOutput);
                         if (!$this->isDecode($sGTFOutput))
                             $sGTFOutput = $this->decoderFME($sGTFOutput);
                         break;
                 }
-                // Echappement des doubles quotes pour FME.
-                $sGTFOutput = str_replace('"', '\"', $sGTFOutput);
-                //
+
                 $sChaine .= " --" . $oGui->sDefault_Macro . " \"" . $sGTFOutput . "\"";
             }
         }
 
         // $sChaine = substr($sChaine, 0, -1)."\"";
         //$sChaine = substr($sChaine, 0, -1);
+
         return $sChaine;
     }
 
@@ -706,36 +656,12 @@ class Traitement {
         //1 Initialisation & calcul du chemin d'accés du fichier TCL
         $sCommandLine = '"' . $this->aProperties["fme_path"] . '" "' . getenv("GTF_HOME") . "/" . utf8_decode($this->sFmwFileName) . '"';
 
-
-
         //3 Ajout des paramètres propres au traitement
         $sTclParams = $this->getTclParams($oGtfFmwParser, $sNewDir);
         if ($sTclParams != "")
             $sCommandLine .= $sTclParams;
-
-		$aTGui = array();
-        $sChaine = "";
-		  // Ajout des paramètres GTF_ s'ils sont associés à un paramètre publié du traitement
-        foreach ($oGtfFmwParser->aGuiObject as $aGui) {
-			switch($aGui->sDefault_Macro) {
-				 case 'GTF_ORDER_ID':
-					$sCommandLine .= " --GTF_ORDER_ID \"" . $this->iDemandeId . "\"";
-					break;
-				 case 'GTF_SHARED_DIR':
-					$sCommandLine .= " --GTF_SHARED_DIR \"" . $this->aProperties["shared_dir"] . "\"";
-					break;
-				 case 'GTF_CONNECTION_STRING':
-					if ($aGui->sType == "PASSWORD"){
-						 $sCommandLine .= "  --GTF_CONNECTION_STRING \"" . $this->aProperties["server"] . "," . $this->aProperties["port"] . "," . $this->aProperties["database"] . "," . $this->aProperties["login_scheduler"] . "," . $this->aProperties["password_scheduler"] . "\"";
-					}
-					 break;
-				 case 'GTF_REST_URL':
-					 $sCommandLine .= "  --GTF_REST_URL \"" . $this->aProperties["web_server_name"] . "/" . $this->aProperties["services_alias"] . "/\"";
-					 break;
-				 //case 'GTF_FORCE_PATTERN':
-			}
-           
-        }
+        // Ajout de trois paramètres GTF_ORDER_ID, GTF_SHARED_DIR et GTF_CONNECTION_STRING qui seront passés à chaque demande de traitement
+        $sCommandLine .= " --GTF_ORDER_ID \"" . $this->iDemandeId . "\" --GTF_SHARED_DIR \"" . $this->aProperties["shared_dir"] . "\" --GTF_CONNECTION_STRING \"" . $this->aProperties["server"] . "," . $this->aProperties["port"] . "," . $this->aProperties["database"] . "," . $this->aProperties["login"] . "\" --GTF_REST_URL \"" . $this->aProperties["web_server_name"] . "/" . $this->aProperties["services_alias"] . "/\"" ;
         /*
          * 2 Passage des paramètres généraux
          * - FMWFILENAME : fichier Fmw
@@ -775,7 +701,115 @@ class Traitement {
         }
         return $sZipFile;
     }
-
+    
+    /**
+     * Get the log file of a job.
+     * @param {object} $oFmeServer FmeServer class object.
+     * @param {array} $aOrder Order parameters.
+     * @param {array} $aWorkspace Workpace parameters.
+     * @param {array} $aUser User infos.
+     */
+    function processFmeServerOrder($oFmeServer, $aOrder, $aWorkspace, $aUser, $oAmazonS3 = null) {
+        $sNewDir = $this->UniqFileName();
+        $oGtfFmwParser = new GtfFmwParser($this->aProperties["workspace_dir"] . "/" . $this->sFmwFileName);
+        // Fichiers sources en entrée et sortie.
+        $aSourceFiles = array();
+        $aDestinationFiles = '';
+        foreach ($oGtfFmwParser->aGuiObject as $oGui) {
+            if ($oGui->sDefault_Macro != "") {
+                //Teste si le paramètre est une source
+                if ($oGui->bIsSource)
+                    $aSourceFiles[] = $oGui->sDefault_Macro;
+                else if ($oGui->bIsDest)
+                    $aDestinationFiles = $oGui->sDefault_Macro;
+            }
+        }
+        // Liste des paramètres publiés.
+        $aWkParams = explode('|', $aOrder['wk_params']);
+        $aPublishedParams = array();
+        foreach($aWkParams as $sWkParam) {
+            $aWkParam = explode('=', $sWkParam);
+            $aPublishedParams[$aWkParam[0]] = $aWkParam[1];
+        }
+        // Création d'un dépot pour l'utilisateur si inexistant.
+        $sRepository = $aUser["login"];
+        $oFmeServer->createRepository($sRepository, $aUser["name"]);
+        // Création d'un répertoire dans les ressources si inexistant.
+        $sResource = 'FME_SHAREDRESOURCE_TEMP';
+        $sPath = 'gtf';
+        $oFmeServer->createResourceConnectionDirectory($sResource, $sPath, $sNewDir);
+        $sPath .= '/' . $sNewDir;
+        // Upload des fichiers sources.
+        foreach($aSourceFiles as $sParamName) {
+            // Si un objet de la classe AmazonS3 est passé, les ressources seront envoyées sur S3 puis téléchargéss dans FME Server.
+            if (empty($oAmazonS3))
+                $oFmeServer->uploadResourceFile($this->aProperties['upload_dir'] . '/' . $aPublishedParams[$sParamName], $sResource, $sPath, true, true);
+            else {
+                // Upload d'un fichier source vers S3.
+                $sBucket = 'dev-gtf-fmecloud';
+                $sKey = $sPath . '/' . $aPublishedParams[$sParamName];
+                $oAmazonS3->uploadFile($sBucket, $sKey, $this->aProperties['upload_dir'] . '/' . $aPublishedParams[$sParamName]);
+                // Upload du fichier S3Downloader.fmw (si inexistant).
+                $oFmeServer->uploadWorkspaceFile('E:\_Docs\GTF moteur serveur\S3Downloader.fmw', $sRepository);
+                // Téléchargement depuis FME Server du fichier envoyé sur S3.
+                $aS3Params = array(
+                    'access_key_id' => $oAmazonS3->sAwsAccessKeyId,
+                    'secret_access_key' => $oAmazonS3->sAwsSecretAccessKey,
+                    'bucket_name' => $sBucket,
+                    'object_key' => $sKey
+                );
+                $oJobResult = $oFmeServer->uploadResourceFileFromS3($aS3Params, $sRepository, $sResource, $sPath);
+            }
+        }
+        // Upload du fichier .fmw.
+        $sFmwFileName = $this->aProperties["workspace_dir"] . "/" .$this->sFmwFileName;
+        $oFmeServer->uploadWorkspaceFile($sFmwFileName, $sRepository, true);
+        // Paramètres publiés dans les données de la requête.
+        $aJobParams = array(
+            'publishedParameters' => array(),
+            'NMDirectives' => array(
+                'successTopics' => array(
+                    'TEST_TOPIC_FRED'
+                ),
+                'failureTopics' => array(
+                    'TEST_TOPIC_FRED'
+                ),
+                'directives' => array(
+                    array('name' => 'order_id', 'value' => $this->iDemandeId)
+                )
+                //'subsection' => 'REST_SERVICE'
+            )
+        );
+        foreach ($aPublishedParams as $sParamName => $sParamValue) {
+            if (in_array($sParamName, $aSourceFiles))
+                $aJobParams['publishedParameters'][] = array("name" => $sParamName, "value" => array('$(' . $sResource . ')/' . $sPath . '/' . pathinfo($sParamValue, PATHINFO_BASENAME)));
+            else
+                $aJobParams['publishedParameters'][] = array("name" => $sParamName, "value" => '$(' . $sResource . ')/' . $sPath . '/' . $sNewDir . '.zip/' . $sParamValue);
+        }
+        // Envoi d'une demande sur un traitement.
+        $this->oJobResult = $oFmeServer->submitJob($sRepository, $aWorkspace['fmw_file'], $aJobParams);
+        // Téléchargement du fichier de log du traitement.
+        $sZipFile = '';
+        if (!empty($this->oJobResult->id)) {
+            // Sauve l'url de log fme.
+            $this->sLogFme = $sNewDir . "/fme_" . $this->iDemandeId . ".log";
+            $sSql = "UPDATE " . $this->aProperties['schema_gtf'] . ".order SET log_url='" . $this->sLogFme . "' WHERE order_id=" . $this->iDemandeId;
+            $this->oBd->execute($sSql);
+            // Création du répertoire de sortie des données
+             if (!file_exists($this->aProperties["dir_export"] . "/gtf/"))
+                mkdir($this->aProperties["dir_export"] . "/gtf/");
+            $sDestDir = $this->aProperties["dir_export"] . "/gtf/" . $sNewDir;
+            mkdir($sDestDir);
+            // Création de l'URL de téléchargement des données
+            $sDestUrl = $this->aProperties["url_export"] . "/gtf/" . $sNewDir;
+            $oFmeServer->getJobLog($this->oJobResult->id, $sDestDir . "/fme_" . $this->iDemandeId . ".log");
+            // Télécharge les fichiers de résultat.
+            if (!empty($aDestinationFiles)) {
+                $oFmeServer->downloadResourceFile($sResource, $sPath . '/' . $sNewDir . '.zip', $sDestDir . '/' . $this->iDemandeId . '.zip');
+                $sZipFile = $sNewDir . '/' . $this->iDemandeId . '.zip';
+            }
+        }
+        return $sZipFile;
+    }
 }
-
 ?>
diff --git a/gtf.engine/gtf.engines/cacert.pem b/gtf.engine/gtf.engines/cacert.pem
new file mode 100755
index 0000000000000000000000000000000000000000..39ba33683c57f4edfc507b1d3dff0a894660d536
--- /dev/null
+++ b/gtf.engine/gtf.engines/cacert.pem
@@ -0,0 +1,3646 @@
+##
+## Bundle of CA Root Certificates
+##
+## Certificate data from Mozilla as of: Wed Sep 20 03:12:05 2017 GMT
+##
+## This is a bundle of X.509 certificates of public Certificate Authorities
+## (CA). These were automatically extracted from Mozilla's root certificates
+## file (certdata.txt).  This file can be found in the mozilla source tree:
+## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
+##
+## It contains the certificates in PEM format and therefore
+## can be directly used with curl / libcurl / php_curl, or with
+## an Apache+mod_ssl webserver for SSL client authentication.
+## Just configure this file as the SSLCACertificateFile.
+##
+## Conversion done with mk-ca-bundle.pl version 1.27.
+## SHA256: 2b2dbe5244e0047e088c597998883a913f6c5fffd1cb5c0fe5a368c8466cb2ec
+##
+
+
+GlobalSign Root CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
+GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
+b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
+BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
+VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
+DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
+THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
+Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
+c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
+gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
+AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
+Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
+j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
+hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
+X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
+ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
+s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
+S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
+TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
+ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
+YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
+BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
+9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
+01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
+9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+
+Verisign Class 3 Public Primary Certification Authority - G3
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
+dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
+EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
+cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
+EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
+055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
+ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
+j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
+xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
+t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+
+Entrust.net Premium 2048 Secure Server CA
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
+ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
+bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
+NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
+d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
+ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
+Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
+hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
+nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
+VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
+KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
+T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
+zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
+J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
+nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
+-----END CERTIFICATE-----
+
+Baltimore CyberTrust Root
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
+ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
+ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
+SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
+dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
+uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
+UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
+G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
+XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
+l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
+VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
+BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
+cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
+hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
+Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
+RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+
+AddTrust External Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
+VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
+NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
+cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
+Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
+Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
+aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
+2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
+7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
+BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
+VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
+VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
+j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
+e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
+G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+
+Entrust Root Certification Authority
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
+BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
+b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
+A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
+MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
+MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
+Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
+A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
+Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
+j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
+rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
+MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
+hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
+Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
+v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
+W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
+tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+
+GeoTrust Global CA
+==================
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
+MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
+LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
+BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
+8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
+T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
+vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
+DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
+zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
+d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
+mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
+XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
+Mw==
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
+MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
+Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
+JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
+RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
+7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
+8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
+qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
+Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
+Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
+KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
+ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
+XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
+hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
+qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
+oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
+xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
+KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
+DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
+xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
+p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
+P/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
+
+GeoTrust Universal CA 2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
+R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
+MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
+SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
+DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
+j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
+JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
+QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
+WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
+20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
+ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
+SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
+8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
+BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
+4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
+A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
+Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
+pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
+FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
+gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
+X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
+
+Visa eCommerce Root
+===================
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
+EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
+QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
+WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
+VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
+F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
+RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
+TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
+/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
+GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
+CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
+YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
+zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
+YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
+
+Certum Root CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
+ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
+Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
+by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
+wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
+kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
+89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
+Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
+NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
+hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
+GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
+GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
+0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
+qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+
+Comodo AAA Services root
+========================
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
+R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
+TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
+MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
+c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
+BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
+C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
+i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
+Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
+Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
+Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
+BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
+cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
+LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
+7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
+8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
+12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
+
+QuoVadis Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
+ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
+MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
+cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
+EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
+J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
+F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
+YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
+AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
+PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
+ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
+MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
+YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
+ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
+Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
+Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
+BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
+FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
+tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
+fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
+LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
+gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
+5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
+5nrQNiOKSnQ2+Q==
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2
+==================
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
+ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
+XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
+lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
+lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
+lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
+66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
+wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
+D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
+BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
+J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
+DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
+a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
+Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
+UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
+VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
+IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
+WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
+f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
+4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
+VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3
+==================
+-----BEGIN CERTIFICATE-----
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
+EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
+OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
+aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
+DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
+KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
+DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
+BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
+p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
+nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
+MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
+Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
+uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
+BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
+YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
+BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
+VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
+ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
+AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
+qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
+hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
+POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
+Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
+8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
+bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
+g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
+vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
+qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+
+Security Communication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
+U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
+8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
+DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
+5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
+DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
+JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
+DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
+0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
+mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
+s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
+6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
+FL39vmwLAw==
+-----END CERTIFICATE-----
+
+Sonera Class 2 Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
+U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
+NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
+IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
+/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
+dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
+f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
+tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
+nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
+XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
+0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
+cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
+Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
+EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
+llpwrN9M
+-----END CERTIFICATE-----
+
+Camerfirma Chambers of Commerce Root
+====================================
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
+NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
+cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
+MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
+AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
+xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
+NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
+DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
+d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
+EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
+cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
+AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
+bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
+VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
+fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
+L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
+UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
+ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
+erfutGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
+
+Camerfirma Global Chambersign Root
+==================================
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
+QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
+ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
+NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
+YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
+MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
+ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
+1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
+by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
+6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
+8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
+BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
+aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
+Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
+aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
+ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
+PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
+gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
+PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
+IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
+t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+
+XRamp Global CA Root
+====================
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
+BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
+dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
+HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
+U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
+IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
+foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
+zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
+AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
+xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
+oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
+AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
+/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
+nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
+8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+
+Go Daddy Class 2 CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
+VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
+A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
+RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
+ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
+2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
+qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
+YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
+vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
+BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
+atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
+MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
+PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
+I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
+Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
+vZ8=
+-----END CERTIFICATE-----
+
+Starfield Class 2 CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
+U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
+MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
+A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
+SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
+bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
+JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
+epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
+F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
+MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
+hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
+bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
+afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
+PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
+KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
+QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
+FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
+Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
+YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
+AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
+Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
+U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
+LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
+cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
+dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
+AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
+3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
+vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
+fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
+fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
+EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
+yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
+1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
+lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
+g14=
+-----END CERTIFICATE-----
+
+Taiwan GRCA
+===========
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
+EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
+DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
+dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
+w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
+BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
+1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
+htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
+J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
+Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
+B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
+O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
+lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
+HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
+09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
+Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
+Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
+D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
+DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
+Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
+7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
+CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
+MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
+9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
+UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
+/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
+oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
+GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
+66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
+hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
+EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
+SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
+8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+
+DigiCert Global Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
+MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
+TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
+BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
+4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
+7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
+o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
+8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
+BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
+EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
+tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
+UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+
+DigiCert High Assurance EV Root CA
+==================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
+KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
+MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
+MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
+Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
+Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
+OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
+MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
+NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
+h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
+Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
+JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
+V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
+myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
+mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
+-----END CERTIFICATE-----
+
+Certplus Class 2 Primary CA
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
+BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
+OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
+dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
+5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
+Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
+YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
+e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
+CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
+YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
+L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
+P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
+TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
+7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
+//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
+
+DST Root CA X3
+==============
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
+ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
+DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
+cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
+rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
+UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
+xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
+utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
+MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
+dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
+GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
+RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
+fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+
+DST ACES CA X6
+==============
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
+MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
+MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
+CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
+DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
+pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
+GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
+MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
+EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
+Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
+dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
+CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
+5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
+Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
+vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
+oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
+
+SwissSign Gold CA - G2
+======================
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
+EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
+MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
+c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
+t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
+jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
+vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
+ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
+AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
+jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
+peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
+7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
+GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
+OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
+5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
+44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
+Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
+Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
+mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
+vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
+KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
+NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
+viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
+-----END CERTIFICATE-----
+
+SwissSign Silver CA - G2
+========================
+-----BEGIN CERTIFICATE-----
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
+BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
+DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
+aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
+N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
+6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
+MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
+qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
+FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
+ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
+celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
+CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
+tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
+4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
+kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
+3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
+/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
+DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
+e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
+WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
+DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
+DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
+CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
+cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
+b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
+nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
+RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
+tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
+hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
+Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
+NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
+Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
+1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+
+thawte Primary Root CA
+======================
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
+MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
+SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
+KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
+FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
+oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
+1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
+q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
+aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
+afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
+AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
+uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
+jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
+z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G5
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
+biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
+dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
+ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
+j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
+Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
+Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
+fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
+Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
+SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
+KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
+Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
+ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+
+SecureTrust CA
+==============
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
+dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
+BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
+OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
+DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
+GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
+01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
+ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
+aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
+SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
+mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
+nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
+
+Secure Global CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
+EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
+bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
+MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
+Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
+YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
+bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
+8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
+HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
+0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
+oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
+MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
+CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
+3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+
+COMODO Certification Authority
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
+dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
+MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
+T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
+xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
+4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
+1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
+rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
+b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
+AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
+OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
+IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
+-----END CERTIFICATE-----
+
+Network Solutions Certificate Authority
+=======================================
+-----BEGIN CERTIFICATE-----
+MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
+EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
+IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
+MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
+MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
+jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
+aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
+crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
+/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
+AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
+bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
+A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
+4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
+GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
+wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
+ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
+-----END CERTIFICATE-----
+
+COMODO ECC Certification Authority
+==================================
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
+GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
+b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
+4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
+wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
+BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
+FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
+U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
+
+Security Communication EV RootCA1
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
+BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
+Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
+/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
+WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
+ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
+bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
+9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
+iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
+Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
+mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
+T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
+-----END CERTIFICATE-----
+
+OISTE WISeKey Global Root GA CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
+BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
+A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
+bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
+VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
+IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
+IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
+Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
+Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
+d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
+/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
+LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
+KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
+MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
+hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
+okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
+-----END CERTIFICATE-----
+
+Certigna
+========
+-----BEGIN CERTIFICATE-----
+MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
+EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
+MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
+Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
+XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
+GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
+ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
+DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
+Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
+tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
+BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
+SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
+hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
+PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
+1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
+WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
+-----END CERTIFICATE-----
+
+Deutsche Telekom Root CA 2
+==========================
+-----BEGIN CERTIFICATE-----
+MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
+RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
+A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
+MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
+A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
+b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
+bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
+KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
+AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
+Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
+jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
+HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
+E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
+zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
+rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
+dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
+Cm26OWMohpLzGITY+9HPBVZkVw==
+-----END CERTIFICATE-----
+
+Cybertrust Global Root
+======================
+-----BEGIN CERTIFICATE-----
+MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
+ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
+MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
+ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
+0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
+AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
+89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
+8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
+MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
+A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
+lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
+5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
+hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
+X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
+WL1WMRJOEcgh4LMRkWXbtKaIOM5V
+-----END CERTIFICATE-----
+
+ePKI Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
+EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
+Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
+MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
+MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
+AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
+IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
+lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
+qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
+12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
+WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
+lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
+vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
+Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
+MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
+ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
+1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
+KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
+xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
+NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
+GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
+xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
+gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
+sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
+BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
+-----END CERTIFICATE-----
+
+T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
+=============================================================================================================================
+-----BEGIN CERTIFICATE-----
+MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
+DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
+aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
+b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
+BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
+S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
+MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
+IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
+n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
+IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
+dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
+cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
+Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
+xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
+6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
+hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
+BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
+N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
+y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
+LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
+dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
+-----END CERTIFICATE-----
+
+certSIGN ROOT CA
+================
+-----BEGIN CERTIFICATE-----
+MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
+VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
+Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
+CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
+JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
+rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
+ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
+0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
+AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
+Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
+AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
+SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
+x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
+vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
+TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G3
+=============================================
+-----BEGIN CERTIFICATE-----
+MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
+eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
+NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
+YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
+LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
+K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
+c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
+IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
+dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
+2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
+cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
+Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
+AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
+t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
+VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
+IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
+Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
+MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
+b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
+IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
+LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
+8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
+mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
+G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
+rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
+-----END CERTIFICATE-----
+
+thawte Primary Root CA - G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
+BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
+aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
+cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
+ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
+d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
+VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
+A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
+P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
+7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
+vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
+KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
+A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
+t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
+8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
+er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
+-----END CERTIFICATE-----
+
+GeoTrust Primary Certification Authority - G2
+=============================================
+-----BEGIN CERTIFICATE-----
+MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
+OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
+MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
+b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
+BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
+KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
+VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
+EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
+ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
+npaqBA+K
+-----END CERTIFICATE-----
+
+VeriSign Universal Root Certification Authority
+===============================================
+-----BEGIN CERTIFICATE-----
+MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
+BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
+ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
+IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
+IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
+cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
+1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
+MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
+9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
+AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
+tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
+CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
+a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
+DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
+Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
+Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
+P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
+wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
+mJO37M2CYfE45k+XmCpajQ==
+-----END CERTIFICATE-----
+
+VeriSign Class 3 Public Primary Certification Authority - G4
+============================================================
+-----BEGIN CERTIFICATE-----
+MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
+VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
+b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
+ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
+cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
+b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
+IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
+Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
+rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
+HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
+Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
+A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
+AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
+-----END CERTIFICATE-----
+
+NetLock Arany (Class Gold) Főtanúsítvány
+========================================
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
+A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
+dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
+cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
+MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
+ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
+c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
+0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
+/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
+H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
+fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
+neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
+BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
+qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
+YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
+bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
+NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
+dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA - G2
+==================================
+-----BEGIN CERTIFICATE-----
+MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
+CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
+TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
+ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ
+5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn
+vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj
+CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil
+e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR
+OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI
+CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65
+48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi
+trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737
+qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB
+AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC
+ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA
+A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz
++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj
+f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN
+kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk
+CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF
+URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb
+CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h
+oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV
+IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
+66+KAQ==
+-----END CERTIFICATE-----
+
+Hongkong Post Root CA 1
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
+DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
+NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
+IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
+ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
+auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
+qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
+V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
+HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
+h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
+l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
+IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
+T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
+c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
+-----END CERTIFICATE-----
+
+SecureSign RootCA11
+===================
+-----BEGIN CERTIFICATE-----
+MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
+SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
+b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
+KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
+cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
+TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
+wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
+g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
+O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
+bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
+t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
+OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
+bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
+Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
+y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
+lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
+-----END CERTIFICATE-----
+
+ACEDICOM Root
+=============
+-----BEGIN CERTIFICATE-----
+MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD
+T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4
+MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG
+A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk
+WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD
+YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew
+MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb
+m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk
+HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT
+xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2
+3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9
+2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq
+TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz
+4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU
+9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv
+bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg
+aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP
+eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk
+zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1
+ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI
+KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq
+nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE
+I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp
+MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o
+tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA==
+-----END CERTIFICATE-----
+
+Microsec e-Szigno Root CA 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
+MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
+c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
+dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
+BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
+U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
+fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
+0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
+pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
+1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
+AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
+QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
+FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
+lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
+I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
+tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
+yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
+LXpUq3DDfSJlgnCW
+-----END CERTIFICATE-----
+
+GlobalSign Root CA - R3
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
+YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
+bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
+aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
+bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
+iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
+0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
+rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
+OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
+xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
+lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
+EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
+bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
+YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
+kpeDMdmztcpHWD9f
+-----END CERTIFICATE-----
+
+Autoridad de Certificacion Firmaprofesional CIF A62634068
+=========================================================
+-----BEGIN CERTIFICATE-----
+MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
+BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
+QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
+NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
+Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
+B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
+7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
+ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
+plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
+MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
+LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
+bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
+vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
+EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
+DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
+cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
+bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
+ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
+51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
+R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
+T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
+Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
+osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
+crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
+saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
+KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
+6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
+-----END CERTIFICATE-----
+
+Izenpe.com
+==========
+-----BEGIN CERTIFICATE-----
+MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG
+EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz
+MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu
+QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ
+03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK
+ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU
++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC
+PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT
+OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK
+F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK
+0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+
+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB
+leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID
+AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+
+SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG
+NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx
+MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
+BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l
+Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga
+kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q
+hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs
+g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5
+aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5
+nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC
+ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo
+Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
+WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
+-----END CERTIFICATE-----
+
+Chambers of Commerce Root - 2008
+================================
+-----BEGIN CERTIFICATE-----
+MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
+Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
+ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
+EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
+cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
+XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
+h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
+ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
+NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
+D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
+lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
+0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
+ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
+EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
+G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
+BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
+bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
+bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
+CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
+AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
+wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
+3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
+RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
+M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
+YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
+9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
+zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
+nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
+OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
+-----END CERTIFICATE-----
+
+Global Chambersign Root - 2008
+==============================
+-----BEGIN CERTIFICATE-----
+MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
+MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
+bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
+QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
+NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
+Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
+QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
+aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
+VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
+XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
+ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
+/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
+TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
+H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
+Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
+HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
+wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
+AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
+BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
+BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
+aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
+aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
+1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
+dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
+/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
+ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
+dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
+9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
+foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
+qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
+P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
+c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
+09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
+-----END CERTIFICATE-----
+
+Go Daddy Root Certificate Authority - G2
+========================================
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
+MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
+MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
+b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
+A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
+9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
+fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
+NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
+BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
+vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
+5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
+N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
+-----END CERTIFICATE-----
+
+Starfield Root Certificate Authority - G2
+=========================================
+-----BEGIN CERTIFICATE-----
+MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
+eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
+DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
+VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
+dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
+W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
+bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
+N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
+ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
+JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
+TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
+4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
+F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
+pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
+c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
+-----END CERTIFICATE-----
+
+Starfield Services Root Certificate Authority - G2
+==================================================
+-----BEGIN CERTIFICATE-----
+MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
+B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
+b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
+IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
+BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
+dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
+Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
+h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
+hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
+LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
+rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
+SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
+E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
+xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
+iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
+YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
+-----END CERTIFICATE-----
+
+AffirmTrust Commercial
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
+MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
+DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
+C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
+BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
+MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
+HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
+hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
+qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
+0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
+sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
+-----END CERTIFICATE-----
+
+AffirmTrust Networking
+======================
+-----BEGIN CERTIFICATE-----
+MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
+MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
+bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
+AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
+Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
+dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
+/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
+h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
+HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
+UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
+12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
+WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
+/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
+-----END CERTIFICATE-----
+
+AffirmTrust Premium
+===================
+-----BEGIN CERTIFICATE-----
+MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
+BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
+OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
+dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
+BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
+5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
+GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
+p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
+S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
+6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
+/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
+/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
+MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
+Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
+6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
+L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
+BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
+IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
+g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
+zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
+-----END CERTIFICATE-----
+
+AffirmTrust Premium ECC
+=======================
+-----BEGIN CERTIFICATE-----
+MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
+BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
+MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
+cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
+N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
+BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
+BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
+57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
+eQ==
+-----END CERTIFICATE-----
+
+Certum Trusted Network CA
+=========================
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
+ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
+MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
+ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
+l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
+J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
+fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
+cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
+Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
+DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
+jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
+mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
+Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
+03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
+-----END CERTIFICATE-----
+
+Certinomis - Autorité Racine
+============================
+-----BEGIN CERTIFICATE-----
+MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
+Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
+LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG
+A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw
+JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa
+wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly
+Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw
+2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N
+jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q
+c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC
+lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb
+xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g
+530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna
+4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
+A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ
+KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x
+WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva
+R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40
+nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B
+CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv
+JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE
+qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b
+WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE
+wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/
+vgt2Fl43N+bYdJeimUV5
+-----END CERTIFICATE-----
+
+TWCA Root Certification Authority
+=================================
+-----BEGIN CERTIFICATE-----
+MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
+VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
+EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
+IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
+AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
+QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
+oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
+4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
+y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
+BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
+9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
+mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
+QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
+T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
+Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
+-----END CERTIFICATE-----
+
+Security Communication RootCA2
+==============================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
+U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
+dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
+SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
+aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
+3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
+spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
+EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
+QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
+CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
+u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
+3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
+tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
+mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
+-----END CERTIFICATE-----
+
+EC-ACC
+======
+-----BEGIN CERTIFICATE-----
+MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
+BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
+ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
+VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
+CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
+BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
+MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
+SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
+Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
+cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
+w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
+ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
+HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
+E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
+0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
+VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
+Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
+dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
+lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
+Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
+l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
+E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
+5EI=
+-----END CERTIFICATE-----
+
+Hellenic Academic and Research Institutions RootCA 2011
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
+O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
+aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
+AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
+IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
+IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
+1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
+71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
+8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
+3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
+MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
+MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
+b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
+XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
+TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
+/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
+7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
+-----END CERTIFICATE-----
+
+Actalis Authentication Root CA
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
+BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
+AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
+MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
+IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
+IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
+wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
+by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
+zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
+YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
+oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
+EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
+hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
+EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
+jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
+iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
+ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
+WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
+JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
+K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
+Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
+4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
+2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
+lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
+OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
+vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
+-----END CERTIFICATE-----
+
+Trustis FPS Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
+EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
+IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
+BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
+RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
+H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
+cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
+o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
+AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
+BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
+GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
+yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
+8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
+l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
+iB6XzCGcKQENZetX2fNXlrtIzYE=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority
+================================
+-----BEGIN CERTIFICATE-----
+MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
+ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
+NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
+LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
+U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
+o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
+Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
+eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
+2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
+6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
+osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
+untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
+UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
+37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
+VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
+Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
+dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
+c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
+bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
+aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
+L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
+cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
+fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
+N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
+Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
+tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
+e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
+2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
+HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
+JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
+D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
+-----END CERTIFICATE-----
+
+StartCom Certification Authority G2
+===================================
+-----BEGIN CERTIFICATE-----
+MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
+U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE
+ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O
+o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG
+4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi
+Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul
+Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs
+O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H
+vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L
+nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS
+FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa
+z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E
+BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ
+KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K
+2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk
+J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+
+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG
+/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc
+nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld
+blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc
+l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm
+7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm
+obp573PYtlNXLfbQ4ddI
+-----END CERTIFICATE-----
+
+Buypass Class 2 Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
+DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
+eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
+g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
+9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
+/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
+CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
+awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
+zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
+Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
+Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
+M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
+AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
+A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
+osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
+aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
+DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
+LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
+oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
+wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
+CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
+rJgWVqA=
+-----END CERTIFICATE-----
+
+Buypass Class 3 Root CA
+=======================
+-----BEGIN CERTIFICATE-----
+MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
+QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X
+DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
+eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH
+sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR
+5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh
+7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ
+ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH
+2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV
+/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ
+RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA
+Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq
+j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
+AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV
+cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G
+uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG
+Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8
+ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2
+KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz
+6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug
+UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe
+eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi
+Cp/HuZc=
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 3
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
+MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
+9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
+NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
+iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
+0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
+AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
+fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
+ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
+P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
+e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
+-----END CERTIFICATE-----
+
+EE Certification Centre Root CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
+EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
+dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
+MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
+UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
+ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
+TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
+rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
+93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
+P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
+AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
+MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
+BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
+xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
+lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
+uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
+3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
+dcGWxZ0=
+-----END CERTIFICATE-----
+
+TURKTRUST Certificate Services Provider Root 2007
+=================================================
+-----BEGIN CERTIFICATE-----
+MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
+bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
+MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
+QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
+DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
+a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
+BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
+bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
+YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
+KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
+KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
+rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
+AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
+BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
+Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
+aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
+Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
+BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
+poRq0Tl9
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 2009
+==============================
+-----BEGIN CERTIFICATE-----
+MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
+Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
+LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
+ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
+BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
+KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
+p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
+AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
+4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
+eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
+MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
+PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
+OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
+2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
+o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
+dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
+X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
+-----END CERTIFICATE-----
+
+D-TRUST Root Class 3 CA 2 EV 2009
+=================================
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
+DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
+OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
+egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
+zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
+7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
+sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
+11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
+cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
+ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
+MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
+b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
+c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
+PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
+nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
+ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
+NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
+w9y4AyHqnxbxLFS1
+-----END CERTIFICATE-----
+
+PSCProcert
+==========
+-----BEGIN CERTIFICATE-----
+MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
+ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
+MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
+dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
+cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
+IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
+MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
+DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
+ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
+Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
+wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
+3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
+RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
+EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
+0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
+0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
+td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
+Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
+r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
+AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
+Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
+xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
+ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
+EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
+Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
+ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
+9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
+MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
+LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
+ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
+YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
+Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
+dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
+T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
+g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
+uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
+n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
+FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
+5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
+3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
+poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
+eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
+-----END CERTIFICATE-----
+
+CA Disig Root R1
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy
+3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8
+u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2
+m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk
+CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa
+YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6
+vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL
+LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX
+ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is
+XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ
+04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR
+xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B
+LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM
+CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb
+VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85
+YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS
+ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix
+lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N
+UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ
+a7+h89n07eLw4+1knj0vllJPgFOL
+-----END CERTIFICATE-----
+
+CA Disig Root R2
+================
+-----BEGIN CERTIFICATE-----
+MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw
+EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp
+ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx
+EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp
+c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC
+w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia
+xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7
+A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S
+GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV
+g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa
+5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE
+koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A
+Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i
+Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u
+Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM
+tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV
+sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je
+dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8
+1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx
+mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01
+utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0
+sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg
+UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV
+7+ZtsH8tZ/3zbBt1RqPlShfppNcL
+-----END CERTIFICATE-----
+
+ACCVRAIZ1
+=========
+-----BEGIN CERTIFICATE-----
+MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
+SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
+MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
+UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
+DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
+jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
+RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
+aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
+0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
+WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
+8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
+5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
+9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
+Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
+Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
+Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
+VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
+Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
+QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
+AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
+YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
+AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
+IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
+aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
+dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
+MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
+hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
+R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
+YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
+nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
+TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
+sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
+I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
+Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
+3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
+EfbRD0tVNEYqi4Y7
+-----END CERTIFICATE-----
+
+TWCA Global Root CA
+===================
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
+CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
+QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
+EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
+Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
+nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
+r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
+Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
+tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
+KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
+sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
+yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
+kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
+zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
+cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
+LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
+8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
+/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
+lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
+A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
+i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
+EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
+zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
+-----END CERTIFICATE-----
+
+TeliaSonera Root CA v1
+======================
+-----BEGIN CERTIFICATE-----
+MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
+CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
+MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
+VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
+6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
+3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
+B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
+Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
+oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
+F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
+oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
+gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
+TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
+AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
+DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
+zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
+0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
+pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
+G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
+c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
+JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
+qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
+Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
+WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
+-----END CERTIFICATE-----
+
+E-Tugra Certification Authority
+===============================
+-----BEGIN CERTIFICATE-----
+MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
+DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
+ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
+ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
+NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
+QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
+cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
+DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
+hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
+CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
+ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
+BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
+E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
+rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
+jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
+rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
+dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
+/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
+kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
+XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
+VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
+a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
+dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
+KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
+Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
+8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
+C7TbO6Orb1wdtn7os4I07QZcJA==
+-----END CERTIFICATE-----
+
+T-TeleSec GlobalRoot Class 2
+============================
+-----BEGIN CERTIFICATE-----
+MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
+IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
+cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
+MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
+dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
+ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
+SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
+vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
+2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
+WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
+YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
+r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
+vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
+3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
+9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
+-----END CERTIFICATE-----
+
+Atos TrustedRoot 2011
+=====================
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
+cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
+MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
+A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
+hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
+54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
+HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
+z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
+l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
+bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
+k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
+TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
+61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
+3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 1 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
+PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm
+PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
+Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN
+ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l
+g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV
+7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX
+9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f
+iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg
+t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI
+hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC
+MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3
+GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct
+Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP
++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh
+3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa
+wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6
+O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0
+FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV
+hMJKzRwuJIczYOXD
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 2 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
+ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY
+NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t
+oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o
+MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
+V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo
+L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ
+sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD
+6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh
+lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
+hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66
+AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K
+pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9
+x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz
+dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
+U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw
+mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
+zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
+JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr
+O3jtZsSOeWmD3n+M
+-----END CERTIFICATE-----
+
+QuoVadis Root CA 3 G3
+=====================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
+A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv
+b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN
+MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg
+RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286
+IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL
+Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe
+6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3
+I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U
+VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7
+5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi
+Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
+dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt
+rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI
+hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px
+KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS
+t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ
+TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
+DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib
+Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD
+hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX
+0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW
+dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2
+PpxxVJkES/1Y+Zj0
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root G2
+===========================
+-----BEGIN CERTIFICATE-----
+MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
+IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
+MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
+ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
+35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
+bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
+VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
+YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
+lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
+w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
+0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
+d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
+hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
+jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
+IhNzbM8m9Yop5w==
+-----END CERTIFICATE-----
+
+DigiCert Assured ID Root G3
+===========================
+-----BEGIN CERTIFICATE-----
+MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
+VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
+MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
+BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
+RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
+KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
+UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
+YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
+1vUhZscv6pZjamVFkpUBtA==
+-----END CERTIFICATE-----
+
+DigiCert Global Root G2
+=======================
+-----BEGIN CERTIFICATE-----
+MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
+HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
+MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
+dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
+kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
+3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
+BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
+UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
+5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
+F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
+WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
+QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
+iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
+MrY=
+-----END CERTIFICATE-----
+
+DigiCert Global Root G3
+=======================
+-----BEGIN CERTIFICATE-----
+MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
+UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
+VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
+MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
+aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
+AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
+YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
+BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
+Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
+3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
+VOKa5Vt8sycX
+-----END CERTIFICATE-----
+
+DigiCert Trusted Root G4
+========================
+-----BEGIN CERTIFICATE-----
+MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
+HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
+MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G
+CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp
+pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o
+k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa
+vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
+QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6
+MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
+mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
+f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH
+dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8
+oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
+DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
+ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY
+ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr
+yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
+7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah
+ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN
+5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb
+/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa
+5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK
+G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP
+82Z+
+-----END CERTIFICATE-----
+
+WoSign
+======
+-----BEGIN CERTIFICATE-----
+MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g
+QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ
+BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO
+CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX
+2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5
+KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR
++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez
+EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
+lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2
+8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY
+yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C
+AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R
+8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1
+LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq
+T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj
+y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC
+2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes
+5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
+EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
+mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
+kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi
+kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w==
+-----END CERTIFICATE-----
+
+WoSign China
+============
+-----BEGIN CERTIFICATE-----
+MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv
+geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD
+VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k
+8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5
+uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
+dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5
+Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
+b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc
+76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m
++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6
+yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX
+GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA
+A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6
+yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY
+r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115
+j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A
+kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97
+qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y
+jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB
+ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv
+T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO
+kI26oQ==
+-----END CERTIFICATE-----
+
+COMODO RSA Certification Authority
+==================================
+-----BEGIN CERTIFICATE-----
+MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
+BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
+A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC
+R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
+ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn
+dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ
+FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
+5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG
+x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX
+2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL
+OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3
+sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C
+GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5
+WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
+FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
+DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt
+rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+
+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg
+tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW
+sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp
+pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
+zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq
+ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
+7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I
+LaZRfyHBNVOFBkpdn627G190
+-----END CERTIFICATE-----
+
+USERTrust RSA Certification Authority
+=====================================
+-----BEGIN CERTIFICATE-----
+MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
+ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK
+ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz
+0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j
+Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn
+RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O
++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq
+/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE
+Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM
+lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8
+yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+
+eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd
+BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW
+FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ
+7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ
+Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM
+8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi
+FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi
+yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c
+J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw
+sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx
+Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
+-----END CERTIFICATE-----
+
+USERTrust ECC Certification Authority
+=====================================
+-----BEGIN CERTIFICATE-----
+MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
+VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
+VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
+aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
+0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
+nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
+HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
+HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
+9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
+-----END CERTIFICATE-----
+
+GlobalSign ECC Root CA - R4
+===========================
+-----BEGIN CERTIFICATE-----
+MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
+R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
+EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
+R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
+EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
+OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
+AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
+MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
+JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
+-----END CERTIFICATE-----
+
+GlobalSign ECC Root CA - R5
+===========================
+-----BEGIN CERTIFICATE-----
+MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
+R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
+EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
+R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
+EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
+SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
+h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
+BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
+uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
+yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
+-----END CERTIFICATE-----
+
+Staat der Nederlanden Root CA - G3
+==================================
+-----BEGIN CERTIFICATE-----
+MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
+CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC
+TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
+ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y
+olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t
+x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy
+EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K
+Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur
+mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5
+1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp
+07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo
+FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
+41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB
+AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu
+yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
+U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq
+KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1
+v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA
+8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b
+8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r
+mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq
+1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI
+JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV
+tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk=
+-----END CERTIFICATE-----
+
+Staat der Nederlanden EV Root CA
+================================
+-----BEGIN CERTIFICATE-----
+MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE
+CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
+RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M
+MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl
+cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk
+SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW
+O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r
+0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8
+Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV
+XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr
+08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV
+0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd
+74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx
+fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa
+ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI
+eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu
+c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq
+5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN
+b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN
+f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi
+5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4
+WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK
+DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy
+eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
+-----END CERTIFICATE-----
+
+IdenTrust Commercial Root CA 1
+==============================
+-----BEGIN CERTIFICATE-----
+MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG
+EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS
+b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES
+MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB
+IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld
+hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/
+mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi
+1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C
+XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl
+3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy
+NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV
+WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg
+xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix
+uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI
+hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH
+6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg
+ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt
+ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV
+YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX
+feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro
+kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe
+2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz
+Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R
+cGzM7vRX+Bi6hG6H
+-----END CERTIFICATE-----
+
+IdenTrust Public Sector Root CA 1
+=================================
+-----BEGIN CERTIFICATE-----
+MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG
+EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv
+ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV
+UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS
+b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy
+P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6
+Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI
+rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf
+qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS
+mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn
+ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh
+LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v
+iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL
+4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B
+Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw
+DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj
+t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A
+mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt
+GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt
+m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx
+NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4
+Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI
+ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC
+ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ
+3Wl9af0AVqW3rLatt8o+Ae+c
+-----END CERTIFICATE-----
+
+Entrust Root Certification Authority - G2
+=========================================
+-----BEGIN CERTIFICATE-----
+MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
+BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
+bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
+b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
+HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
+DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
+OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
+/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
+HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
+s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
+TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
+AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
+0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
+iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
+Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
+nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
+e4pIb4tF9g==
+-----END CERTIFICATE-----
+
+Entrust Root Certification Authority - EC1
+==========================================
+-----BEGIN CERTIFICATE-----
+MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
+FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
+YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
+ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
+FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
+LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
+dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
+AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
+9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
+vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
+kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
+-----END CERTIFICATE-----
+
+CFCA EV ROOT
+============
+-----BEGIN CERTIFICATE-----
+MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE
+CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB
+IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw
+MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD
+DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV
+BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD
+7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN
+uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW
+ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7
+xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f
+py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K
+gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol
+hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ
+tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf
+BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
+/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB
+ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q
+ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua
+4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG
+E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX
+BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn
+aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy
+PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX
+kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C
+ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
+-----END CERTIFICATE-----
+
+TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
+====================================================
+-----BEGIN CERTIFICATE-----
+MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
+BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
+bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
+RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
+ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
+SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
+n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
+ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
+jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
+ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
+9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
+4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
+HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
+hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
+BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
+URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
+lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
+B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
+-----END CERTIFICATE-----
+
+Certinomis - Root CA
+====================
+-----BEGIN CERTIFICATE-----
+MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
+Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg
+LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx
+EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD
+ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos
+P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo
+d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap
+z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00
+8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x
+RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE
+6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t
+FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV
+PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH
+i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj
+YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I
+6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF
+AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV
+WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw
+Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX
+lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ
+y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9
+Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng
+DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi
+I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM
+cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr
+hkIGuUE=
+-----END CERTIFICATE-----
+
+OISTE WISeKey Global Root GB CA
+===============================
+-----BEGIN CERTIFICATE-----
+MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
+EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
+ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
+MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
+VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
+b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
+scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
+rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
+9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
+Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
+GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
+hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
+dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
+VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
+HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
+Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
+-----END CERTIFICATE-----
+
+Certification Authority of WoSign G2
+====================================
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
+EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
+CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
+aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
+XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
+W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
+5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
+v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
+AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
+hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
+P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
+TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
+7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
+-----END CERTIFICATE-----
+
+CA WoSign ECC Root
+==================
+-----BEGIN CERTIFICATE-----
+MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
+TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
+dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
+ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
+zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
+t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
+QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
+MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
+Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
+a/GRspBl9JrmkO5K
+-----END CERTIFICATE-----
+
+SZAFIR ROOT CA2
+===============
+-----BEGIN CERTIFICATE-----
+MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
+A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
+BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
+BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
+VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
+qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
+DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
+2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
+ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
+ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
+AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
+AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
+O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
+oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
+4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
+-----END CERTIFICATE-----
+
+Certum Trusted Network CA 2
+===========================
+-----BEGIN CERTIFICATE-----
+MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
+BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
+bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
+ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
+TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
+IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
+7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
+CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
+Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
+uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
+GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
+9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
+Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
+hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
+BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
+hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
+Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
+L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
+clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
+pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
+w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
+J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
+ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
+is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
+zAYspsbiDrW5viSP
+-----END CERTIFICATE-----
+
+Hellenic Academic and Research Institutions RootCA 2015
+=======================================================
+-----BEGIN CERTIFICATE-----
+MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
+BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
+aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
+YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
+MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
+QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
+BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
+MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
+bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
+iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
+6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
+FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
+i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
+GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
+fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
+iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
+Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
+AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
+hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
+D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
+d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
+d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
+82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
+davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
+Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
+J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
+JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
+p/UsQu0yrbYhnr68
+-----END CERTIFICATE-----
+
+Hellenic Academic and Research Institutions ECC RootCA 2015
+===========================================================
+-----BEGIN CERTIFICATE-----
+MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
+aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
+cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
+aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
+MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
+IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
+VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
+Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
+dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
+Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
+BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
+GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
+dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
+-----END CERTIFICATE-----
+
+Certplus Root CA G1
+===================
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV
+BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe
+Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD
+ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN
+r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx
+Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj
+BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv
+LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2
+z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc
+4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd
+4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj
+jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+
+ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G
+A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY
+lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh
+66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG
+YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/
+2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F
+6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX
+CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe
+tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC
+VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/
++mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+
+qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
+-----END CERTIFICATE-----
+
+Certplus Root CA G2
+===================
+-----BEGIN CERTIFICATE-----
+MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
+AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
+NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
+cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
+BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
+Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
+AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
+IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
+HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
+vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
+-----END CERTIFICATE-----
+
+OpenTrust Root CA G1
+====================
+-----BEGIN CERTIFICATE-----
+MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV
+BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx
+MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
+CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa
+Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87
+ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO
+YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9
+xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO
+9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq
+3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi
+n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9
+URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr
+TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px
+N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E
+PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv
+uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK
+n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh
+X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80
+nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm
+GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/
+bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o
+4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA
+OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
+-----END CERTIFICATE-----
+
+OpenTrust Root CA G2
+====================
+-----BEGIN CERTIFICATE-----
+MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV
+BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy
+MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
+CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB
+AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+
+Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz
+4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV
+eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt
+UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz
+3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj
+3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz
+9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0
+0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT
+y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59
+M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz
+Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI
+mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG
+S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp
+EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ
+6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr
+gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo
+SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0
+YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm
+u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
+-----END CERTIFICATE-----
+
+OpenTrust Root CA G3
+====================
+-----BEGIN CERTIFICATE-----
+MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
+AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
+DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
+ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
+ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
+/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
+BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
+BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
+3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
+-----END CERTIFICATE-----
+
+ISRG Root X1
+============
+-----BEGIN CERTIFICATE-----
+MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
+BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
+EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
+EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
+DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
+Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
+3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
+b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
+Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
+4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
+1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
+hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
+usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
+OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
+A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
+9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
+ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
+0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
+hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
+TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
+e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
+JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
+YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
+JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
+m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
+-----END CERTIFICATE-----
+
+AC RAIZ FNMT-RCM
+================
+-----BEGIN CERTIFICATE-----
+MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT
+AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw
+MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD
+TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf
+qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr
+btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL
+j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou
+08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw
+WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT
+tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ
+47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC
+ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa
+i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o
+dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD
+nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s
+D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ
+j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT
+Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW
++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7
+Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d
+8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm
+5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG
+rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM=
+-----END CERTIFICATE-----
+
+Amazon Root CA 1
+================
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
+VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
+MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
+bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
+FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
+gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
+dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
+VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
+/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
+DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
+CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
+8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
+2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
+xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
+-----END CERTIFICATE-----
+
+Amazon Root CA 2
+================
+-----BEGIN CERTIFICATE-----
+MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
+VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
+MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
+bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
+ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
+kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
+N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
+AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
+fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
+kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
+btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
+Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
+c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
+DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
+A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
+YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
+xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
+gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
+aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
+Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
+KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
+JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
+-----END CERTIFICATE-----
+
+Amazon Root CA 3
+================
+-----BEGIN CERTIFICATE-----
+MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
+EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
+NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
+MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
+f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
+Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
+rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
+eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
+-----END CERTIFICATE-----
+
+Amazon Root CA 4
+================
+-----BEGIN CERTIFICATE-----
+MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
+EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
+NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
+MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
+/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
+83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
+MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
+AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
+-----END CERTIFICATE-----
+
+LuxTrust Global Root 2
+======================
+-----BEGIN CERTIFICATE-----
+MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG
+A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh
+bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW
+MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC
+AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm
+Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2
+xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
+wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
+1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm
+FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF
+wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/
+a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U
+ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ
+MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB
+/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5
+Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ
+FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN
+H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW
+7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu
+ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
+VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR
+TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
+/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc
+7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
+iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
+-----END CERTIFICATE-----
+
+TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
+D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
+IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
+TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
+ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
+VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
+c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
+bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
+IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
+6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
+wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
+3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
+WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
+ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
+AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
+lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
+e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
+q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
+-----END CERTIFICATE-----
diff --git a/gtf.engine/gtf.engines/engine.php b/gtf.engine/gtf.engines/engine.php
index 70a33d3367b59ef821e172a0f9b9d13d36d9ef03..ecd6de0b583d2e419710b292fc9c2f9a5b6312b2 100755
--- a/gtf.engine/gtf.engines/engine.php
+++ b/gtf.engine/gtf.engines/engine.php
@@ -10,7 +10,10 @@
  */
 $properties["id_gtf_engine"] = $_SERVER['argv'][1]; //Identifiant du moteur calculé à partir de la valeur passée en argument
 $ErrorLicense = $_SERVER['argv'][2]; //Identifiant du moteur calculé à partir de la valeur passée en argument
-
+// Si "$_SERVER["HTTP_HOST"]" n'est pas renseigné -> php notice.
+if (!isset($_SERVER["HTTP_HOST"]))
+    $_SERVER["HTTP_HOST"] = 'localhost';
+//
 require_once ("php_engine_conf.inc");
 require_once ("vmlib/BD.class.inc");
 require_once ("vmlib/logUtil.inc");
@@ -28,6 +31,12 @@ require_once("gtf_lib/gtf_object/Order.class.inc");
 require_once("vmlib/error.inc");
 require_once 'string.inc';
 
+require_once 'gtf_lib/FmeCloud.class.inc';
+require_once 'gtf_lib/FmeServer.class.inc';
+require_once 'gtf_lib/AmazonS3.class.inc';
+require_once 'gtf_lib/FmeCloudForGtf.class.inc';
+
+
 loadLang("engines", $properties["language"]);
 if ($ErrorLicense == "0") {
     //writeToLog('|INFO |PHP| dump prop '. var_export($properties,true),$properties["engine_log_file"]);
@@ -36,27 +45,37 @@ if ($ErrorLicense == "0") {
     $sDateFin = new DateTime(date("Y-m-d H:i:s"));
 
     //Connexion à la base de données de Données gtf : pas de mot de passe pour le robot
-    $oBd = new BD($properties['login_scheduler'], $properties['password_scheduler'], $properties["database"], $properties["server"], $properties["port"], $properties["sgbd"], $properties["page_encoding"]);
+    $oBd = new BD($properties["login"], '', $properties["database"], $properties["server"], $properties["port"], $properties["sgbd"], $properties["page_encoding"]);
     //$oBd = new Vm  ('admin', 'admin', $properties["database"], $properties["server"], $properties["port"], $properties["sgbd"], $properties["page_encoding"]);
     if ($oBd->erreurRencontree) {
         writeToLog(INFO_BASE_CONNECTION_ERROR . $properties["database"], $properties["engine_log_file"]);
     } else {
         writeToLog(INFO_BASE_CONNECTION . $properties["database"], $properties["engine_log_file"]);
 
-        //Recherche du Moteur V2 (ExecuteWithParams)
-        //Selection du chemin fme
+        // Données du moteur fme utilisé.
         $aParams = array();
-        $aParams['sSchemaGtf'] = array('value' => $properties['schema_gtf'], 'type' => 'schema_name');
+        $aParams['sSchemaGtf'] = array('value' => $properties["schema_gtf"], 'type' => 'schema_name');
         $aParams['gtf_engine_id'] = array('value' => $properties['id_gtf_engine'], 'type' => 'number');
-        $oPDOResult = $oBd->executeWithParams($aSql['pgsql']['select_fme_path'], $aParams);
-
-        if ($aRecord = $oBd->ligneSuivante($oPDOResult)) {
-            $properties["fme_path"] = $aRecord['fme_path'];
-        } else {
-            $properties["fme_path"] = '';
+        $oPDOResult4 = $oBd->executeWithParams($aSql[$properties["sgbd"]]["getFmeEngine"], $aParams);
+        $aFmeEngine = $oBd->ligneSuivante($oPDOResult4);
+        
+        // Variables d'environnement.
+        if ($aFmeEngine['fme_engine_type_id'] == 'desktop') {
+            //Recherche du Moteur V2 (ExecuteWithParams)
+            //Selection du chemin fme
+            $aParams = array();
+            $aParams['sSchemaGtf'] = array('value' => $properties['schema_gtf'], 'type' => 'schema_name');
+            $aParams['gtf_engine_id'] = array('value' => $properties['id_gtf_engine'], 'type' => 'number');
+            $oPDOResult = $oBd->executeWithParams($aSql['pgsql']['select_fme_path'], $aParams);
+
+            if ($aRecord = $oBd->ligneSuivante($oPDOResult)) {
+                $properties["fme_path"] = $aRecord['fme_path'];
+            } else {
+                $properties["fme_path"] = '';
+            }
+            putenv("FME_PATH=" . $properties["fme_path"]);
+            putenv("GTF_HOME=" . $properties["workspace_dir"] . "/");
         }
-        putenv("FME_PATH=" . $properties["fme_path"]);
-        putenv("GTF_HOME=" . $properties["workspace_dir"] . "/");
 
         /*
         // Traitement des demandes en fonction du moteur
@@ -266,135 +285,226 @@ if ($ErrorLicense == "0") {
                         // $aAction = $oBd->ligneSuivante ($oPDOResult4);
                         // $properties["transit_dir"] = $aAction["value"];
                         // $oPDOResult4 = $oBd->fermeResultat();
+                        
                         //Lancement du traitement correspondant à la demande.
-                        $aLicence = getFmeLicence($properties['fme_path']);
-                        $bLicenceIsValid = $aLicence['valid'];
-                        $aLicence['valid'] = 1;
-                        if ($aLicence['valid'] == 1) {
-                            $sDateDebut = new DateTime(date("Y-m-d H:i:s"));
-                            $oTraitement = new Traitement($oBd, $aDemande['order_id'], $properties["engine_log_file"], $aDemande['wk_params'], $properties, $aDemande['workspace_id'] . "/fme/" . $aTraitement['fmw_file']);
-
-                            if (!$oTraitement->bErreur) {
-                                $sResultat = $oTraitement->Process();
-                                $sDateFin = new DateTime(date("Y-m-d H:i:s"));
-                                $sLogFme = $oTraitement->sLogFme;
-                            }
-                            //Gestion des erreurs.
-
-                            if ($oTraitement->bFmeCrash)
-                                $iStatut = 1;
-                            elseif ($oTraitement->bErreur) {
-                                if ($aTraitement["failed_action_id"] != "" && $oTraitement->sSource != "") {
-                                    $aSource = explode("/", $oTraitement->sSource);
-                                    $sSourceDirectory = $properties["upload_dir"] . $aSource[0];
-
-                                    if ($aTraitement["failed_action_id"] == 1) {
-                                        clearDir($sSourceDirectory);
-                                        writeToLog(INFO_DELETE_DIRECTORY . $sSourceDirectory . '.', $properties["engine_log_file"]);
-                                    } elseif ($aTraitement["failed_action_id"] == 2) {
-                                        /*
-                                          $sSql = $aSql[$properties["sgbd"]]["select_user"];
-                                          $sSql = str_replace("[iUserId]", $aDemande['user_id'], $sSql);
-                                          $sSql = str_replace("[sSchemaFramework]", $properties["schema_framework"], $sSql);
-                                          $oPDOResult2 = $oBd->execute($sSql);
-                                          // */
-                                        ///*
-                                        // Selection de l'utilisateur
-                                        $aParams = array();
-                                        $aParams['iUserId'] = array('value' => $aDemande['user_id'], 'type' => 'number');
-                                        $aParams['sSchemaFramework'] = array('value' => $properties["schema_framework"], 'type' => 'schema_name');
-                                        $oPDOResult2 = $oBd->executeWithParams($aSql[$properties["sgbd"]]["select_user"], $aParams);
-                                        //*/
-                                        if ($oBd->erreurRencontree) {
-                                            writeToLog(INFO_GET_USER_INFO_ERROR . $aDemande['user_id'] . ". (SQL = " . $sSql . ")", $properties["engine_log_file"]);
-                                        } else {
-                                            $aUser = $oBd->ligneSuivante($oPDOResult2);
-
-                                            $sUser = userToFolder($aUser["name"]);
-                                            if (file_exists($properties["transit_dir"])) {
-                                                if (!file_exists($properties["transit_dir"] . "/failed/")) {
-                                                    mkdir($properties["transit_dir"] . "/failed/");
-                                                }
-                                                if (!file_exists($properties["transit_dir"] . "/failed/" . $sUser)) {
-                                                    mkdir($properties["transit_dir"] . "/failed/" . $sUser);
-                                                }
-                                                if (!file_exists($properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"])) {
-                                                    mkdir($properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"]);
-                                                }
-                                                rename($sSourceDirectory, $properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"]);
-                                                writeToLog(str_replace('[sSourceDirectory]', $sSourceDirectory, INFO_MOVING_FILE) . $properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"] . '.', $properties["engine_log_file"]);
-                                            } else {
-                                                writeToLog(str_replace("[properties['transit_dir']]", $properties['transit_dir'], INFO_DIRECTORY_NOT_FOUND_ENGINE), $properties["engine_log_file"]);
+                        $bValidFmeLicence = false;
+                        switch($aFmeEngine['fme_engine_type_id']) {
+                            // Traitement exécuté par une occurrence de FME Cloud via l'api rest.
+                            case 'fme_cloud_for_gtf':
+                                $oFmeCloudForGtf = new FmeCloudForGtf($aFmeEngine['iam_access_key_id'], $aFmeEngine['iam_secret_access_key'], $aFmeEngine['s3_region'], 'u0jtg81u4c', 'te', $properties['gtf_instance_id']);
+                            break;
+                            // Traitement exécuté par une occurrence de FME Cloud via l'api rest.
+                            case 'fme_cloud':
+                                $oFmeCloud = new FmeCloud($aFmeEngine['server_url'], $aFmeEngine['fme_cloud_api_token']);
+                                // Liste des occurrences de FME Server.
+                                $aFmeServerInstances = $oFmeCloud->serviceRequest('instances');
+                                if (!empty($aFmeServerInstances)) {
+                                    //print_r($aFmeServerInstances);
+                                    $oFmeServerInstance = $aFmeServerInstances[0];
+                                    // Démarrage de l'occurence si elle est en pause.
+                                    if ($oFmeServerInstance->state == 'PAUSED') {
+                                        $oFmeCloud->startInstance($oFmeServerInstance->id);
+                                        // Statut = en cours.
+                                        $iStatut = 1;
+                                    }
+                                    else if ($oFmeServerInstance->state == 'RUNNING') {
+                                        //print_r($oFmeServer->getToken());
+                                        $oFmeServer = new FmeServer($oFmeServerInstance->instance_url, $aFmeEngine['login'], $aFmeEngine['password'], 'day', 1);
+                                        // Statut de la licence FME --> erreur avec FME Cloud .
+                                        //$oLicenseStatus = $oFmeServer->serviceRequest('licensing/license/status');
+                                        //if ($oLicenseStatus->isLicensed === true && $oLicenseStatus->isLicenseExpired === false) {
+                                            $bValidFmeLicence = true;
+                                            //
+                                            $oAmazonS3 = new AmazonS3($aFmeEngine['s3_access_key_id'], $aFmeEngine['s3_secret_access_key'], $aFmeEngine['s3_region']);
+                                            //
+                                            $oTraitement = new Traitement($oBd, $aDemande['order_id'], $properties["engine_log_file"], $aDemande['wk_params'], $properties, $aDemande['workspace_id'] . "/fme/" . $aTraitement['fmw_file']);
+                                            if (!$oTraitement->bErreur) {
+                                                $sResultat = $oTraitement->processFmeServerOrder($oFmeServer, $aDemande, $aTraitement, $aUser, $oAmazonS3);
+                                                //$sDateFin = new DateTime(date("Y-m-d H:i:s"));
+                                                $sLogFme = $oTraitement->sLogFme;
+                                            }
+                                            // http 200 : $oFmeServer->aLastCurlRequestInfo->http_code
+                                            if ($oTraitement->oJobResult->status == 'SUCCESS') {
+                                                $sMessage = "";
+                                                $iStatut = 3;
+                                                // Fichier de résultat.
+                                                //if ($sResultat != "")
+                                                    //$sLienResultat = $sResultat;
+                                                $sLienLogFme = $sLogFme;
+                                            }
+                                            else {
+                                                $sMessage = "";
                                                 $iStatut = $sEnErreur;
                                             }
-                                        }
+                                        //}
+                                        // Mise en pause de l'occurence.
+                                        $oFmeCloud->pauseInstance($oFmeServerInstance->id);
                                     }
                                 }
-                                $sMessage = $oTraitement->sMessageErreur;
-                                $iStatut = $sEnErreur;
-                                $sResultat = '';
-                                // $sContenuMail = 'Votre demande de traitement "'.$aDemande['workspace_nom'].'" a échoué. Voici le message d\'erreur renvoyé : <br><font color="#FF0000">'.$sMessage.'</font><br>';
-                                // $sContenuMail .= "Contactez l'administrateur pour consulter le fichier de log du robot.<br>";
-                                $sLienLogFme = $sLogFme;
-                            } else {
-                                if ($aTraitement["success_action_id"] != "" && $oTraitement->sSource != "") {
-                                    $aSource = explode("/", $oTraitement->sSource);
-                                    $sSourceDirectory = $properties["upload_dir"] . $aSource[0];
-                                    if ($aTraitement["success_action_id"] == 1) {
-                                        clearDir($sSourceDirectory);
-                                        writeToLog(INFO_DELETE_DIRECTORY . $sSourceDirectory . '.', $properties["engine_log_file"]);
-                                    } elseif ($aTraitement["success_action_id"] == 2) {
-
-                                        /*
-                                          $sSql = $aSql[$properties["sgbd"]]["select_user"];
-                                          $sSql = str_replace("[iUserId]", $aDemande['user_id'], $sSql);
-                                          $sSql = str_replace("[sSchemaFramework]", $properties["schema_framework"], $sSql);
-                                          $oPDOResult2 = $oBd->execute($sSql);
-                                          // */
-                                        ///*
-                                        //Selection de l'utilisateur
-                                        $aParams = array();
-                                        $aParams['iUserId'] = array('value' => $aDemande['user_id'], 'type' => 'number');
-                                        $aParams['sSchemaFramework'] = array('value' => $properties["schema_framework"], 'type' => 'schema_name');
-                                        $oPDOResult2 = $oBd->executeWithParams($aSql[$properties["sgbd"]]["select_user"], $aParams);
-                                        //*/
-
-                                        if ($oBd->erreurRencontree) {
-                                            writeToLog(INFO_GET_USER_INFO_ERROR . $aDemande['user_id'] . ". (SQL = " . $sSql . ")", $properties["engine_log_file"]);
-                                        } else {
-                                            $aUser = $oBd->ligneSuivante($oPDOResult2);
-                 
-                                            $sUser = userToFolder($aUser["name"]);
-                                            if (file_exists($properties["transit_dir"])) {
-                                                if (!file_exists($properties["transit_dir"] . "/success/")) {
-                                                    mkdir($properties["transit_dir"] . "/success/");
-                                                }
-                                                if (!file_exists($properties["transit_dir"] . "/success/" . $sUser)) {
-                                                    mkdir($properties["transit_dir"] . "/success/" . $sUser);
+                            break;
+                            // Traitement exécuté par un serveur fme via l'api rest.
+                            case 'fme_server':
+                                $oFmeServer = new FmeServer($aFmeEngine['server_url'], $aFmeEngine['login'], $aFmeEngine['password'], 'day', 1);
+                                // Statut de la licence FME.
+                                $oLicenseStatus = $oFmeServer->serviceRequest('licensing/license/status');
+                                if ($oLicenseStatus->isLicensed === true && $oLicenseStatus->isLicenseExpired === false) {
+                                    $bValidFmeLicence = true;
+                                    $oTraitement = new Traitement($oBd, $aDemande['order_id'], $properties["engine_log_file"], $aDemande['wk_params'], $properties, $aDemande['workspace_id'] . "/fme/" . $aTraitement['fmw_file']);
+                                    if (!$oTraitement->bErreur) {
+                                        $sResultat = $oTraitement->processFmeServerOrder($oFmeServer, $aDemande, $aTraitement, $aUser);
+                                        //$sDateFin = new DateTime(date("Y-m-d H:i:s"));
+                                        $sLogFme = $oTraitement->sLogFme;
+                                    }
+                                    // http 200 : $oFmeServer->aLastCurlRequestInfo->http_code
+                                    if ($oTraitement->oJobResult->status == 'SUCCESS') {
+                                        $sMessage = "";
+                                        $iStatut = 3;
+                                        // Fichier de résultat.
+                                        //if ($sResultat != "")
+                                            //$sLienResultat = $sResultat;
+                                        $sLienLogFme = $sLogFme;
+                                    }
+                                    else {
+                                        $sMessage = "";
+                                        $iStatut = $sEnErreur;
+                                    }
+                                }
+                            break;
+                            // Traitement exécuté par un fme local.
+                            case 'desktop':
+                                $aLicence = getFmeLicence($properties['fme_path']);
+                                $bLicenceIsValid = $aLicence['valid'];
+                                $aLicence['valid'] = 1;
+                                if ($aLicence['valid'] == 1) {
+                                    $bValidFmeLicence = true;
+                                    $sDateDebut = new DateTime(date("Y-m-d H:i:s"));
+                                    $oTraitement = new Traitement($oBd, $aDemande['order_id'], $properties["engine_log_file"], $aDemande['wk_params'], $properties, $aDemande['workspace_id'] . "/fme/" . $aTraitement['fmw_file']);
+
+                                    if (!$oTraitement->bErreur) {
+                                        $sResultat = $oTraitement->Process();
+                                        $sDateFin = new DateTime(date("Y-m-d H:i:s"));
+                                        $sLogFme = $oTraitement->sLogFme;
+                                    }
+                                    //Gestion des erreurs.
+
+                                    if ($oTraitement->bFmeCrash)
+                                        $iStatut = 1;
+                                    elseif ($oTraitement->bErreur) {
+                                        if ($aTraitement["failed_action_id"] != "" && $oTraitement->sSource != "") {
+                                            $aSource = explode("/", $oTraitement->sSource);
+                                            $sSourceDirectory = $properties["upload_dir"] . $aSource[0];
+
+                                            if ($aTraitement["failed_action_id"] == 1) {
+                                                clearDir($sSourceDirectory);
+                                                writeToLog(INFO_DELETE_DIRECTORY . $sSourceDirectory . '.', $properties["engine_log_file"]);
+                                            } elseif ($aTraitement["failed_action_id"] == 2) {
+                                                /*
+                                                  $sSql = $aSql[$properties["sgbd"]]["select_user"];
+                                                  $sSql = str_replace("[iUserId]", $aDemande['user_id'], $sSql);
+                                                  $sSql = str_replace("[sSchemaFramework]", $properties["schema_framework"], $sSql);
+                                                  $oPDOResult2 = $oBd->execute($sSql);
+                                                  // */
+                                                ///*
+                                                // Selection de l'utilisateur
+                                                $aParams = array();
+                                                $aParams['iUserId'] = array('value' => $aDemande['user_id'], 'type' => 'number');
+                                                $aParams['sSchemaFramework'] = array('value' => $properties["schema_framework"], 'type' => 'schema_name');
+                                                $oPDOResult2 = $oBd->executeWithParams($aSql[$properties["sgbd"]]["select_user"], $aParams);
+                                                //*/
+                                                if ($oBd->erreurRencontree) {
+                                                    writeToLog(INFO_GET_USER_INFO_ERROR . $aDemande['user_id'] . ". (SQL = " . $sSql . ")", $properties["engine_log_file"]);
+                                                } else {
+                                                    $aUser = $oBd->ligneSuivante($oPDOResult2);
+
+                                                    $sUser = userToFolder($aUser["name"]);
+                                                    if (file_exists($properties["transit_dir"])) {
+                                                        if (!file_exists($properties["transit_dir"] . "/failed/")) {
+                                                            mkdir($properties["transit_dir"] . "/failed/");
+                                                        }
+                                                        if (!file_exists($properties["transit_dir"] . "/failed/" . $sUser)) {
+                                                            mkdir($properties["transit_dir"] . "/failed/" . $sUser);
+                                                        }
+                                                        if (!file_exists($properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"])) {
+                                                            mkdir($properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"]);
+                                                        }
+                                                        rename($sSourceDirectory, $properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"]);
+                                                        writeToLog(str_replace('[sSourceDirectory]', $sSourceDirectory, INFO_MOVING_FILE) . $properties["transit_dir"] . "/failed/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"] . '.', $properties["engine_log_file"]);
+                                                    } else {
+                                                        writeToLog(str_replace("[properties['transit_dir']]", $properties['transit_dir'], INFO_DIRECTORY_NOT_FOUND_ENGINE), $properties["engine_log_file"]);
+                                                        $iStatut = $sEnErreur;
+                                                    }
                                                 }
-                                                if (!file_exists($properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"])) {
-                                                    mkdir($properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"]);
+                                            }
+                                        }
+                                        $sMessage = $oTraitement->sMessageErreur;
+                                        $iStatut = $sEnErreur;
+                                        $sResultat = '';
+                                        // $sContenuMail = 'Votre demande de traitement "'.$aDemande['workspace_nom'].'" a échoué. Voici le message d\'erreur renvoyé : <br><font color="#FF0000">'.$sMessage.'</font><br>';
+                                        // $sContenuMail .= "Contactez l'administrateur pour consulter le fichier de log du robot.<br>";
+                                        $sLienLogFme = $sLogFme;
+                                    } else {
+                                        if ($aTraitement["success_action_id"] != "" && $oTraitement->sSource != "") {
+                                            $aSource = explode("/", $oTraitement->sSource);
+                                            $sSourceDirectory = $properties["upload_dir"] . $aSource[0];
+                                            if ($aTraitement["success_action_id"] == 1) {
+                                                clearDir($sSourceDirectory);
+                                                writeToLog(INFO_DELETE_DIRECTORY . $sSourceDirectory . '.', $properties["engine_log_file"]);
+                                            } elseif ($aTraitement["success_action_id"] == 2) {
+
+                                                /*
+                                                  $sSql = $aSql[$properties["sgbd"]]["select_user"];
+                                                  $sSql = str_replace("[iUserId]", $aDemande['user_id'], $sSql);
+                                                  $sSql = str_replace("[sSchemaFramework]", $properties["schema_framework"], $sSql);
+                                                  $oPDOResult2 = $oBd->execute($sSql);
+                                                  // */
+                                                ///*
+                                                //Selection de l'utilisateur
+                                                $aParams = array();
+                                                $aParams['iUserId'] = array('value' => $aDemande['user_id'], 'type' => 'number');
+                                                $aParams['sSchemaFramework'] = array('value' => $properties["schema_framework"], 'type' => 'schema_name');
+                                                $oPDOResult2 = $oBd->executeWithParams($aSql[$properties["sgbd"]]["select_user"], $aParams);
+                                                //*/
+
+                                                if ($oBd->erreurRencontree) {
+                                                    writeToLog(INFO_GET_USER_INFO_ERROR . $aDemande['user_id'] . ". (SQL = " . $sSql . ")", $properties["engine_log_file"]);
+                                                } else {
+                                                    $aUser = $oBd->ligneSuivante($oPDOResult2);
+
+                                                    $sUser = userToFolder($aUser["name"]);
+                                                    if (file_exists($properties["transit_dir"])) {
+                                                        if (!file_exists($properties["transit_dir"] . "/success/")) {
+                                                            mkdir($properties["transit_dir"] . "/success/");
+                                                        }
+                                                        if (!file_exists($properties["transit_dir"] . "/success/" . $sUser)) {
+                                                            mkdir($properties["transit_dir"] . "/success/" . $sUser);
+                                                        }
+                                                        if (!file_exists($properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"])) {
+                                                            mkdir($properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"]);
+                                                        }
+                                                        rename($sSourceDirectory, $properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"]);
+                                                        writeToLog(str_replace('[sSourceDirectory]', $sSourceDirectory, INFO_MOVING_FILE) . $properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"] . '.', $properties["engine_log_file"]);
+                                                    } else {
+                                                        writeToLog(str_replace("[properties['transit_dir']]", $properties['transit_dir'], INFO_DIRECTORY_NOT_FOUND_ENGINE), $properties["engine_log_file"]);
+                                                        $iStatut = $sEnErreur;
+                                                    }
                                                 }
-                                                rename($sSourceDirectory, $properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"]);
-                                                writeToLog(str_replace('[sSourceDirectory]', $sSourceDirectory, INFO_MOVING_FILE) . $properties["transit_dir"] . "/success/" . $sUser . "/" . $aTraitement["workspace_id"] . "/" . $aDemande["order_id"] . '.', $properties["engine_log_file"]);
-                                            } else {
-                                                writeToLog(str_replace("[properties['transit_dir']]", $properties['transit_dir'], INFO_DIRECTORY_NOT_FOUND_ENGINE), $properties["engine_log_file"]);
-                                                $iStatut = $sEnErreur;
                                             }
                                         }
+                                        $sMessage = "";
+                                        $iStatut = 3;
+                                        // $sContenuMail = "Votre demande de traitement '".$aDemande['workspace_nom']."' a réussi.<br>";
+                                        if ($sResultat != "") {
+                                            // $sContenuMail .= '<A href="'.$properties["url_export"]."/".$sResultat.'">Télécharger le résultat</A><br>';
+                                            $sLienResultat = $sResultat;
+                                        }
+                                        $sLienLogFme = $sLogFme;
                                     }
+                                    unset($oTraitement);
                                 }
-                                $sMessage = "";
-                                $iStatut = 3;
-                                // $sContenuMail = "Votre demande de traitement '".$aDemande['workspace_nom']."' a réussi.<br>";
-                                if ($sResultat != "") {
-                                    // $sContenuMail .= '<A href="'.$properties["url_export"]."/".$sResultat.'">Télécharger le résultat</A><br>';
-                                    $sLienResultat = $sResultat;
-                                }
-                                $sLienLogFme = $sLogFme;
-                            }
-                            unset($oTraitement);
-                        } else {
+                            break;
+                        }
+                        // Licence invalide.
+                        if (!$bValidFmeLicence) {
                             $iTentative = $iTentative - 1;
                             $sTable = $properties["schema_gtf"] . ".order";
                             $sChamp = "attempt";
@@ -408,6 +518,7 @@ if ($ErrorLicense == "0") {
                             $iStatut = 1;
                             $sLienLogFme = 'Non disponible';
                         }
+                        
                     } else {
                         writeToLog(INFO_NO_USER_GRANT . $aDemande['workspace_nom'] . ' n\'a pas été défini.', $properties["engine_log_file"]);
                         writeToLog(INFO_CONTACT_ADMINISTRATOR, $properties["engine_log_file"]);
@@ -506,13 +617,12 @@ if ($ErrorLicense == "0") {
                   $aParams = array();
                   $aParams['sSchemaGtf'] = array('value' => $properties["schema_gtf"], 'type' => 'schema_name');
                   if ($iStatut != 1) {
-                  $timeFirst = strtotime(date_format($sDateDebut, 'Y-m-d H:i:s'));
-                  $timeSecond = strtotime(date_format($sDateFin, 'Y-m-d H:i:s'));
-                  $diff = $timeSecond - $timeFirst;
-                  $iNbSec = $diff;
-                  } else {
-                  $iNbSec = "NULL";
-                  }
+                      $timeFirst = strtotime(date_format($sDateDebut, 'Y-m-d H:i:s'));
+                      $timeSecond = strtotime(date_format($sDateFin, 'Y-m-d H:i:s'));
+                      $diff = $timeSecond - $timeFirst;
+                      $iNbSec = $diff;
+                  } else
+                    $iNbSec = "NULL";
                   // OG 27/03/2013 for table job
                   $date = new DateTime();
                   $iTimeStampEnd = $date->getTimestamp();
@@ -675,15 +785,14 @@ if ($ErrorLicense == "0") {
                     ///*
                     
                     //Mise a jour de la demande si resultat null
-                    /*
                     $aParams = array();
-                    $aParams['iOrderId'] = array('value' => $aDemande['order_id'], 'type' => 'number');
-                    $aParams['sSchemaGtf'] = array('value' => $properties["schema_gtf"], 'type' => 'schema_name');
+                    $aParams['iUserId'] = array('value' => $aDemande['user_id'], 'type' => 'number');
+                    $aParams['sSchemaFramework'] = array('value' => $properties["schema_framework"], 'type' => 'schema_name');
                     $oPDOResult2 = $oBd->executeWithParams($aSql[$properties["sgbd"]]["update_demande_resultat_null"], $aParams);
+                    //*/
                     if ($oBd->erreurRencontree) {
                         writeToLog(INFO_GET_USER_INFO_ERROR . $aDemande['user_id'] . ". (SQL = " . $sSql . ")", $properties["engine_log_file"]);
                     } else {
-                    */
                         // $aUser = $oBd->ligneSuivante ($oPDOResult2);
                         // $sContenuMail = "Bonjour ".$aUser["name"].",<br><br><br>".$sContenuMail;
                         // $sContenuMail .= "<br><br><cite><h6>Cet e-mail a été envoyé par un robot, merci de ne pas répondre.</h6></cite><br>";
@@ -730,7 +839,7 @@ if ($ErrorLicense == "0") {
                         $oEmail = new Email($oBd, $iEmailTemplateId, $properties, $aObjects);
                         if (!empty($oEmail->oEmailTemplate->name))
                             $oEmail->send();
-                    //}
+                    }
                     $oPDOResult2 = $oBd->fermeResultat();
                 } else {
                     // pas d'envoi de mail
diff --git a/gtf.engine/gtf.engines/engine.sql.inc b/gtf.engine/gtf.engines/engine.sql.inc
index 3a36a236f9eefc973449705b4cd9de69dee1e0b7..9238c05f34c70114a95d81de0ce93e15aad66ef5 100755
--- a/gtf.engine/gtf.engines/engine.sql.inc
+++ b/gtf.engine/gtf.engines/engine.sql.inc
@@ -14,4 +14,5 @@ $aSql['pgsql']['delete_message']="DELETE FROM [sSchemaGtf].message where order_i
 $aSql['pgsql']['get_gtf_engine_name'] = 'SELECT gtf_engine.name AS gtf_engine_name,fme_engine.name AS fme_engine_name FROM [sSchemaGtf].gtf_engine,[sSchemaGtf].fme_engine WHERE gtf_engine.fme_engine_id=fme_engine.fme_engine_id AND gtf_engine_id=[gtf_engine_id]';
 $aSql['pgsql']["getLogin"] = 'SELECT "login" from [sSchemaFramework]."user" where user_id = [iUserId]';
 $aSql['pgsql']["insertJob"] = 'INSERT INTO [sSchemaGtf].job(order_id, workspace_id, "user_id", execution_date, length_sec, engine_id, order_status_id) VALUES ([iOrderId], [iWorkspaceId], [iUserId], [sBeginExecutionDate] , [iDelay], [iGtfEngineId], [iStatut])';
+$aSql['pgsql']["getFmeEngine"] = 'SELECT * from [sSchemaGtf].fme_engine WHERE fme_engine_id = (SELECT fme_engine_id FROM [sSchemaGtf].gtf_engine WHERE gtf_engine_id = [gtf_engine_id])';
 ?>
diff --git a/gtf.engine/gtf.engines/licenses/license.txt b/gtf.engine/gtf.engines/licenses/license.txt
new file mode 100755
index 0000000000000000000000000000000000000000..3c36fb544038981697144e6b626959999445908d
--- /dev/null
+++ b/gtf.engine/gtf.engines/licenses/license.txt
@@ -0,0 +1,7 @@
+#GTF  License file
+Product: GTF
+License number: Sgtf-0001
+Expiry date: Permanent
+Engines: 5
+Owner: Veremes
+Key: 295C919B 5A83DA4D 23CC819F 68CB7E3A A41BB54F 
\ No newline at end of file
diff --git a/gtf.engine/gtf.engines/php_engine_conf.inc b/gtf.engine/gtf.engines/php_engine_conf.inc
index 6985372b36c29afb9c6db09e3c4867eb379ea49b..f43c4cc8e9e90bd3b0113870ae1a1155623a6118 100755
--- a/gtf.engine/gtf.engines/php_engine_conf.inc
+++ b/gtf.engine/gtf.engines/php_engine_conf.inc
@@ -1,4 +1,4 @@
 <?php
-set_include_path(dirname($_SERVER["PHP_SELF"]). PATH_SEPARATOR .dirname($_SERVER["PHP_SELF"]).'/../vas/rest/conf'. PATH_SEPARATOR .dirname($_SERVER["PHP_SELF"]).'/../vas/rest/class');
-ini_set ('error_log', dirname($_SERVER["PHP_SELF"]).'/php/log/php.log');
+set_include_path('C:\svn\gtf_next_version\gtf.engines;C:\svn\vitis_next_version\vas\rest\conf;C:\svn\vitis_next_version\vas\rest\class');
+ini_set ('error_log', 'C:/svn/gtf_next_version/gtf.engines/php/log/php_errors.log');
 ?>
\ No newline at end of file
diff --git a/gtf.engine/gtf.engines/properties_engine.inc b/gtf.engine/gtf.engines/properties_engine.inc
index faf47c8dec9ca0a95a8bc1dc4d39883301b1394f..83162f38c8cfa9e062df6c79879b94556699aafc 100755
--- a/gtf.engine/gtf.engines/properties_engine.inc
+++ b/gtf.engine/gtf.engines/properties_engine.inc
@@ -14,6 +14,4 @@ $properties["notify_log_file"] = $properties["engine_log_home"]."/notify.log";
 $properties["sql_log_file"] = $properties["engine_log_home"]."/sql.log";
 $properties["subscription_log_file"] = $properties["engine_log_home"]."/subscription.log";
 $properties["error_log_file"] = $properties['vas_home']."/log/engines"."/error.log";
-
-$properties['web_server_name'] = 'https://dev.veremes.net';
 ?>
\ No newline at end of file
diff --git a/gtf.engine/gtf.engines/string.inc b/gtf.engine/gtf.engines/string.inc
index 24e8c0e4dad3153051f23879cd9a3c5e5e9c66b4..26ffca304f8d99f30136f889c18a8ec11f367835 100755
--- a/gtf.engine/gtf.engines/string.inc
+++ b/gtf.engine/gtf.engines/string.inc
@@ -39,8 +39,6 @@
 	define('INFO_GTF_HOME', '|INFORM|PHP| GTF_HOME=');
 	define('INFO_FME_PATH', '|INFORM|PHP| FME_PATH=');
 	define('INFO_TREATMENT_COMMAND_LINE', '|INFORM|PHP| Ligne de commande exécutant le traitement : ');
-	define('INFO_NO_USE_PATTERN', '|INFORM|PHP| Utilisation des noms de fichier, sans utilisation des motifs');
-	define('INFO_USE_PATTERN', '|INFORM|PHP|  Utilisation des motifs ');
 	
 // engine.php
 	define('INFO_BASE_CONNECTION', '|INFORM|PHP| Connexion à la base de données ');
diff --git a/gtf.engine/gtf.engines/subscription.php b/gtf.engine/gtf.engines/subscription.php
index c12c25e37c1e5420fa297990d647fae3fce1ef97..68d5006129c8a22b1ff2e319691b5804e4d65db0 100755
--- a/gtf.engine/gtf.engines/subscription.php
+++ b/gtf.engine/gtf.engines/subscription.php
@@ -10,6 +10,10 @@
  */
 //set_include_path(dirname($_SERVER["PHP_SELF"]).'/../gtf.client'.';'.dirname($_SERVER["PHP_SELF"]).'/php/lib');
 //ini_set ('writeToErrorLog', dirname($_SERVER["PHP_SELF"]).'/php/php.log');
+// Si "$_SERVER["HTTP_HOST"]" n'est pas renseigné -> php notice.
+if (!isset($_SERVER["HTTP_HOST"]))
+    $_SERVER["HTTP_HOST"] = 'localhost';
+
 require_once ("php_engine_conf.inc");
 require_once ("gtf_lib/GtfFmwParser.class.inc");
 require_once ("vmlib/Vm.class.inc");
@@ -37,7 +41,7 @@ require_once 'string.inc';
   }
  */
 //Pas besoin de mot de passe pour le robot
-$oBd = new Vm($properties["login_scheduler"], $properties['password_scheduler'], $properties["database"], $properties["server"], $properties["port"], $properties["sgbd"], $properties["page_encoding"]);
+$oBd = new Vm($properties["login"], '', $properties["database"], $properties["server"], $properties["port"], $properties["sgbd"], $properties["page_encoding"]);
 if ($oBd->erreurRencontree) {
     writeToLog(INFO_BASE_CONNECTION_ERROR . $properties["database"], $properties["subscription_log_file"]);
 } else {
diff --git a/gtf.engine/gtf.messages/class/Action.class.inc b/gtf.engine/gtf.messages/class/Action.class.inc
deleted file mode 100755
index 037a03a7e3c266d861d90a185f7435d40ea78b07..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/class/Action.class.inc
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-require_once("vmlib/logUtil.inc");
-
-class Action {
-	protected $messageclass_action_id;
-	protected $aParams;
-	protected $oMessage;
-	protected $aProperties;
-	
-/***********************************************************
-  Récupère les paramètres de l'action d'un message
-	\$messageclass_action_id : id de l'actionclass
-	\$oMessage : objet du message
-	\$aParams :  paramètres de l'actionclass
-***********************************************************/
-	function __construct($messageclass_action_id, $oMessage, $aParams) {
-		$this->oMessage = $oMessage;
-		$this->messageclass_action_id = $messageclass_action_id;
-		$this->aProperties = $oMessage->aProperties;
-	// Application des paramètres
-		$this->setActionClassParameters($aParams);
-	}
-
-/*******************************************************
-*******************************************************/
-	function execute() {
-	}
-
-	function getError(){
-		writeToLog("You need to implement your action error controller", $properties["processMessage_log_file"], false);
-		writeToErrorLog("You need to implement your action error controller");
-		return true;
-	}
-
-/*******************************************************
-  
-  \$aParams : Tableau des paramètres définis en base
-*******************************************************/
-	function setActionClassParameters($aParams) {
-		if (!empty($aParams)) {
-			$this->aParams = array();
-			foreach($aParams as $sActionParam) {
-				list($sActionParamName, $sActionParamValue) = explode('=', $sActionParam);
-				eval('$this->aParams[\'' . $sActionParamName . '\'] = ' . $sActionParamValue . ';');
-			}
-			$this->aParams["token"] = $this->getToken($this->aProperties);
-		}
-	}
-
-	function getToken ($properties) {
-
-		if($properties['web_server_name'] === "[HTTP_HOST]"){
-			$properties['web_server_name'] = "https://localhost";
-		}
-		$sUrl = $properties['web_server_name'] . '/' . $properties['services_alias'] . '/vitis/privatetoken';
-		$postfields = array('user'=>$properties["login_bot"], 'password'=>$properties["pass_bot"]);
-
-		$oToken = json_decode($this->postCurlRequest ($sUrl, $postfields));
-		return $oToken->token;
-	}
-
-	function postCurlRequest ($sUrl, $postfields) {
-		$ch = curl_init($sUrl);
-		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
-		curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json"));
-		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-		curl_setopt($ch, CURLOPT_POST, 1);
-		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
-		curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
-		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
-		return curl_exec($ch);
-	}
-}
-?>
diff --git a/gtf.engine/gtf.messages/class/BoAction.class.inc b/gtf.engine/gtf.messages/class/BoAction.class.inc
deleted file mode 100755
index 46eb93548990a8edd405225d5f8f6ae29a2cd011..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/class/BoAction.class.inc
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-require_once("vmlib/logUtil.inc");
-require_once("Action.class.inc");
-
-class BoAction Extends Action {
-	protected $oBusinessObject;
-	protected $bError;
-/**********************************************************
-  Class constructor
-	\$oBd : objet PDO
-	\$messageclass_action_id : id de l'actionclass
-	\$oMessage : Objet de la classe message
-	\$aParams :  paramètres de l'actionclass
-**********************************************************/
-	function __construct($oBd, $messageclass_action_id, $oMessage, $aParams, $properties) {
-		parent::__construct($messageclass_action_id, $oMessage, $aParams);
-		$iBoId = $oMessage->getBody($this->aParams['bo_id_attribute']);
-		if (!empty($iBoId)){
-			require_once($properties["vas_home"] ."/rest/ws/" . $this->aParams['module'] . "/" . $this->aParams['class'] . ".class.inc");
-			$aPath = array($this->aParams['module'], $this->aParams['class'], $iBoId);
-			$aValues = array($this->aParams['bo_id_attribute'] => $iBoId, "token" => $this->aParams['token']);
-
-			$this->oBusinessObject = new $this->aParams['class']($aPath, $aValues, $properties);
-			$this->oBusinessObject->oConnection->oBd = $oBd;
-			$this->bError = false;
-		} else {
-			$this->bError = true;
-		}
-	}
-
-/*******************************************************
-  Change le statut.
-*******************************************************/
-	function execute() {
-		$sTransitionMethod = $this->aParams['method'];
-		$this->oBusinessObject->$sTransitionMethod();
-	}
-
-	function getError() {
-		return $this->bError;
-	}
-}
-?>
diff --git a/gtf.engine/gtf.messages/class/EmailAction.class.inc b/gtf.engine/gtf.messages/class/EmailAction.class.inc
deleted file mode 100755
index fa4d14cb7da96e8092881f668c9d4a26ad196fed..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/class/EmailAction.class.inc
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-require_once("vmlib/logUtil.inc");
-require_once("vmlib/Email.class.inc");
-require_once("Action.class.inc");
-
-class EmailAction Extends Action {
-	protected $oEmail;
-	protected $bError;
-/**********************************************************
-  - Récupère les paramètres de l'action d'un message
-  - Crée un objet de la classe "Email".
-  - Applique les paramètres 
-	\$oBd : objet PDO
-	\$messageclass_action_id : id de l'actionclass
-	\$oMessage : Objet de la classe message
-	\$aParams :  paramètres de l'actionclass
-**********************************************************/
-	function __construct($oBd, $messageclass_action_id, $oMessage, $aParams) {
-		parent::__construct($messageclass_action_id, $oMessage, $aParams);
-		$aObjects['oMessage'] = $oMessage;
-		$iEmailTemplateId = $this->aParams['template_id'];
-		if (empty($iEmailTemplateId))
-			$iEmailTemplateId = $oMessage->aProperties['default_mail_model'];
-		$this->oEmail = new Email($oBd, $iEmailTemplateId, $oMessage->aProperties, $aObjects);
-		$this->bError = false;
-	}
-
-/*******************************************************
-  Envoi un email.
-*******************************************************/
-	function execute() {
-		if (!empty($this->oEmail->oEmailTemplate->name))
-			$this->oEmail->send();
-	}
-
-	function getError() {
-		return $this->bError;
-	}
-}
-?>
diff --git a/gtf.engine/gtf.messages/class/Message.class.inc b/gtf.engine/gtf.messages/class/Message.class.inc
deleted file mode 100755
index 59ad4a9ebbf6ca3c73a433a86ebbeb7f23039193..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/class/Message.class.inc
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/**
-* \class Message
-* \file Message.class.inc
-*/
-
-require_once("vmlib/logUtil.inc");
-
-class Message {
-	protected $message_id;
-	public $messageclass;
-	protected $creation_date;
-	protected $status;
-	protected $body;
-	protected $bo_class_name;
-	protected $bo_class;
-	protected $bo_id;
-	protected $sender;
-	protected $oBo;
-	protected $oBd;
-	protected $aBodyValue;
-	public $aProperties;
-	protected $aSql;
-
-	/**
-	* Class constructor
-	* \param $oBd Connection object.
-	* \param $message_id Message id.
-	* \param $aProperties Array of properties.
-	*/
-	function __construct($oBd, $message_id , $aProperties) {
-		require("Message.class.sql.inc");
-		$this->aProperties = $aProperties;
-		$this->oBd = $oBd;
-		$this->aSql = $aSql;
-		$sSql = $this->aSql[$oBd->sgbd]['getMessage'];
-		//$sSql = str_replace('[message_id]',$message_id , $sSql);
-		//$sSql = str_replace('[schema]',$aProperties['schema_gtf'] , $sSql);
-		$aParams = array(
-			"message_id" => array("value"=> $message_id, "type"=> 'number'),
-			"schema" => array("value"=> $aProperties['schema_gtf'], "type"=> 'column_name')
-			);
-		$oResult = $oBd->executeWithParams($sSql, $aParams);
-		if($oBd->erreurRencontree)
-			$sErrorMsg = $oBd->getBDMessage();
-		else {
-			if ($oBd->nombreLigne ($oResult) > 0) {
-				$oRow = $oBd->objetSuivant ($oResult);
-				$this->message_id = $oRow->message_id;
-				$this->messageclass = $oRow->messageclass;
-				$this->creation_date = $oRow->creation_date;
-				$this->status = $oRow->status;
-				$this->body = $oRow->body;
-				//$this->bo_class_name = $oRow->bo_class_name;
-				//$this->bo_id = $oRow->bo_id;
-				$this->sender = $oRow->sender;
-			// Extrait les paramètres pour les actions de body
-				if (!empty($this->body)) {
-					preg_match_all('/(.)+:(.)+/', $this->body, $aActionParams);
-					if (!empty($aActionParams[0])) {
-						foreach ($aActionParams[0] as $sActionParam) {
-							list($sIndex, $sValue) = explode(':', $sActionParam);
-							$this->aBodyValue[trim($sIndex)] = trim($sValue);
-						}
-					}
-				}
-			}
-		}
-		if (isset($sErrorMsg)){
-			writeToLog("The message " . $message_id . "encountered this error : " . $sErrorMsg, $properties["processMessage_log_file"], false);
-		}
-	}
-
-	/*
-	* function setProcessed
-	* \brief Change the status of a message.
-	* \param $processed boolean.
-	*/
-	function setProcessed($processed) {
-		if ($processed === true)
-                $this->status = 3; // Traité
-            else
-                $this->status = 2; // En erreur
-        }
-
-	/*
-	* function process
-	* \brief Executes all actions of the message.
-	*/
-	function process() {
-	// Liste des actions du message	
-		$sSql = $this->aSql['pgsql']['getMessageActions'];
-		//$sSql = str_replace("[messageclass]", $this->messageclass, $sSql);
-		//$sSql = str_replace("[schema]", $this->aProperties['schema_gtf'], $sSql);
-		$aParams = array(
-			"messageclass" => array("value"=> $this->messageclass, "type"=> 'string'),
-			"schema" => array("value"=> $this->aProperties['schema_gtf'], "type"=> 'column_name')
-			);
-		$oActionResult = $this->oBd->executeWithParams($sSql, $aParams);
-		if(!$this->oBd->erreurRencontree) {
-			if ($this->oBd->nombreLigne($oActionResult) > 0) {
-				while ($oActionRow = $this->oBd->objetSuivant ($oActionResult)) {
-					if (file_exists(__DIR__ . '/' . $oActionRow->actionclass . '.class.inc')) {
-						require_once __DIR__ . '/' . $oActionRow->actionclass . '.class.inc';
-						if (!empty($oActionRow->parameters))
-							$aParams = explode('|', $oActionRow->parameters);
-						$oAction = new $oActionRow->actionclass($this->oBd, $oActionRow->messageclass_action_id, $this, $aParams, $this->aProperties);
-						if($oAction->getError() == false){
-							$oAction->execute();
-						} else {
-							writeToLog("ERROR : cannot create action with this body's parameters", $properties["processMessage_log_file"], false);
-							throw new Exception("ERROR : cannot create action with this body's parameters");
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	/*
-	* function getBody
-	* \param $key boolean.
-	* \return Returns the value of a parameter of action (or all the parameters and values).
-	*/
-	function getBody($key = null) {
-		if (is_null($key))
-			return $this->body;
-		else {
-			if (isset($this->aBodyValue[$key]))
-				return $this->aBodyValue[$key];
-			else
-				return null;
-		}
-	}
-
-	/*
-	* function update
-	* \brief Saves the settings of a message.
-	*/
-	function update() {
-	// Tous les paramètres sauf les tableaux et objets	
-		foreach (get_object_vars($this) as $sIndex => $value) {
-			if (!is_array($value) && !is_object($value)) {
-			// Le paramètre est une date ?	
-				/*if (strtotime($value) !== false)
-					$aValues[$sIndex] = "'$value'";
-				else*/
-					$aValues[$sIndex] = $value;
-			}
-		}
-		//error_log(print_r($this->oBd, true));
-		$this->oBd->update($this->aProperties['schema_gtf'], 'message', $aValues, 'message_id', $this->message_id, 'numeric');
-	}
-}
-?>
diff --git a/gtf.engine/gtf.messages/class/Message.class.sql.inc b/gtf.engine/gtf.messages/class/Message.class.sql.inc
deleted file mode 100755
index 47a0f8e9d35285d7b987010d69d8850e88a887d1..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/class/Message.class.sql.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-	$aSql['pgsql']['getMessage'] = "SELECT * FROM [schema].message WHERE message_id = [message_id]";
-	$aSql['pgsql']['getMessageActions'] = "SELECT * FROM [schema].messageclass_action WHERE messageclass = [messageclass] ORDER BY index";
-?>
\ No newline at end of file
diff --git a/gtf.engine/gtf.messages/processMessages.bat b/gtf.engine/gtf.messages/processMessages.bat
deleted file mode 100755
index ae8efcb51a1f8fac481668670c5bad68f23a0272..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/processMessages.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-set GTF_MESSAGE_HOME=%~dp0
-set PHP_HOME=%GTF_MESSAGE_HOME%..\gtf.engines\php
-rem %1 correspond au paramètre passé par pycron
-"%PHP_HOME%\php.exe" "%GTF_MESSAGE_HOME%processMessages.php" %1
diff --git a/gtf.engine/gtf.messages/processMessages.php b/gtf.engine/gtf.messages/processMessages.php
deleted file mode 100755
index bfa420081d3d60e0607bc66189a68a73444f1b1e..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/processMessages.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-	session_start();
-	
-	require_once dirname($_SERVER['PHP_SELF']).'/../gtf.engines/php_engine_conf.inc';
-	require_once dirname($_SERVER['PHP_SELF']).'/../gtf.engines/properties_engine.inc';
-	
-	require_once("vmlib/BD.class.inc");
-	require_once("vmlib/Vm.class.inc"); 
-	require_once("processMessages.sql.inc");
-	require_once("class/Message.class.inc");
-
-	$sPidFile = __DIR__ . "/PID_processMessages.pid";
-
-	$oNow = new DateTime();
-	$properties["processMessage_log_file"] = $properties['log_directories'] ['Application'] . "/processMessage/log_" . $oNow->format('Y-m-d') . ".log";
-
-	processIsRunnning ($sPidFile, $properties);
-	createPidFile($sPidFile, $properties);
-
-	//journalisation des logs pour le mailReader aussi 
-	// instanciation d'un objet pour accéder à la base compte u_vitis
-	$oBd = new BD ($properties['login_scheduler'], $properties['password_scheduler'], $properties["database"], $properties["server"], $properties["port"], $properties["sgbd"], $properties["page_encoding"]);
-
-	$iMessages = 0;
-	$iMessagesTraite = 0;
-
-	if ($oBd->erreurRencontree)
-		writeToLog('can\'t connect to database ' . $properties["database"] . " on " . $properties["server"] . ":" . $properties["port"] , $properties["processMessage_log_file"], false);
-	else {
-		// Traitement des messages en attente.
-		$sSql = $aSql['pgsql']['getWaitingMessages'];
-
-		$aParams = array(
-			"messageclass_type" => array("value"=> 'action', "type"=> 'string'),
-			"schema" => array("value"=> $properties['schema_gtf'], "type"=> 'column_name')
-			);
-
-		$oMessageResult=$oBd->executeWithParams($sSql, $aParams);
-		if(!$oBd->erreurRencontree) {
-			$iMessages = $oBd->nombreLigne($oMessageResult);
-			if ($iMessages > 0) {
-                // fonction à appeler à la fin du script.
-                register_shutdown_function('shutdownCallBack', $oBd, $properties);
-                // Traitement des messages en attente.
-                while ($oMessageRow = $oBd->objetSuivant ($oMessageResult)) {
-                    $iMessageId = $oMessageRow->message_id;
-                    $oMessage = new Message($oBd, $oMessageRow->message_id, $properties);
-                    $iOrderId = $oMessage->getBody("order_id");
-					if (!empty($iOrderId)){
-						$sSql = $aSql['pgsql']['getOrderStatus'];;
-						$sSql = str_replace("[ORDER_ID]", $iOrderId, $sSql);
-						$oOrderResult=$oBd->execute($sSql);
-						if(!$oBd->erreurRencontree) {
-							$oOrderRow = $oBd->objetSuivant ($oOrderResult);
-							if ($oOrderRow->order_status_id == 3 ){
-								$oMessage->process();
-								$oMessage->setProcessed(true);
-							    $oMessage->update();
-							    $iMessagesTraite ++;
-							}else{
-								writeToLog("message " . $iMessageId . " : can't be processing for the moment because the linked GTF order is not completed or it status is not 'valid'", $properties["processMessage_log_file"], false);
-							}
-						} else {
-							$oMessage->setProcessed(false);
-							$oMessage->update();
-							writeToLog("message " . $iMessageId . " : can't be processing because we can't find the linked GTF order", $properties["processMessage_log_file"], false);
-						}
-					} else {
-						$oMessage->process();
-						$oMessage->setProcessed(true);
-						$oMessage->update();
-						$iMessagesTraite ++;
-					}
-                }
-			}
-		}else{
-			writeToLog($oBd->getBDMessage(), $properties["processMessage_log_file"], false);
-		}
-	}
-
-	writeToLog("Iteration of the process completed : " . $iMessages . "(". $iMessagesTraite ." as OK)", $properties["processMessage_log_file"], false);
-
-	unlink($sPidFile);
-        
-	/*
-	* function shutDownCallBack
-	*   @oBd Database connection object.
-	*   @properties
-	*/
-        function shutDownCallBack($oBd, $properties) {
-            $aError = error_get_last();
-            // Erreur fatale pendant le traitement d'un message ?
-            if ($aError['type'] & E_ERROR > 0) {
-                writeToLog("[ERROR] [PHP] while processing the message " . $GLOBALS['iMessageId'] . "check the main log file", $properties["processMessage_log_file"], false);
-                // Change le statut du message : "en erreur".
-                $oMessage = new Message($oBd, $GLOBALS['iMessageId'], $properties);
-                $oMessage->setProcessed(false);
-                $oMessage->update();
-                // Re-exécute le script (au cas où il resterait des messages non traités).
-                if(DIRECTORY_SEPARATOR === "/"){
-                	// if linux
-                	exec(__DIR__ . '/processMessages.sh');
-                } else {
-                	// if windows
-                	exec(__DIR__ . '\processMessages.bat');
-                }
-            }
-        }
-
-        function processIsRunnning ($sPidFile, $properties){
-			if (file_exists ($sPidFile)){
-				// récupération du fichier .pid
-				$sPid = file_get_contents($sPidFile);
-				
-				$bProcessIsRunning = true;
-				$sOsName = PHP_OS;
-				// detection de l'os pour savoir comment controler le PID
-				if (strtoupper(substr($sOsName, 0, 3)) === 'WIN') {
-			    	$bProcessIsRunning = windowsPidCheck($sPid);
-				} else {
-				    $bProcessIsRunning = linuxPidCheck($sPid);
-				}
-
-				if($bProcessIsRunning === false){
-					//si le fichier PID est présent mais que le PID n'existe pas sur le serveur
-					// on supprime le fichier .pid et on lance le mailReader 
-					writeToLog("previous process exited without cleaning pidfile, removing", $properties["processMessage_log_file"], false);
-					unlink($sPidFile);
-				} else {
-					//si le process tourne déjà on ferme le process courant
-					writeToLog("found a running instance of processMessages.php, exiting.", $properties["processMessage_log_file"], false);
-					exit(0);
-				}
-			}
-			return true;
-		}
-
-		function windowsPidCheck ($iPid){
-			// fonction pour controller si un pid existe sous windows
-			$processes = explode( "\n", shell_exec('tasklist.exe /fi "PID eq ' . $iPid . '"'));
-
-			foreach( $processes as $process ) {
-
-			     if( ! empty($process) && (strpos("===", $process ) === 0) ){
-			          continue;
-			     }
-
-			     $matches = array();
-			     preg_match("/(.*?)\s+(\d+).*$/", $process, $matches);
-
-			     if(count($matches) > 0){
-			     	return true;
-			     }
-			}
-			return false;
-		}
-
-		function linuxPidCheck ($iPid){
-			// fonction pour controller si un pid existe sous linux
-			return file_exists("/proc/" . $iPid);
-		}
-
-		function createPidFile($sPidFile , $properties){
-		   	$file = fopen($sPidFile, 'w');
-		   	
-		   	if($file){ 
-		   		writeToLog("PID file creation with pid : " . getmypid(), $properties["processMessage_log_file"], false);
-		   		fwrite($file, getmypid());
-			}
-
-		   	fclose($file);
-		}
-?>
\ No newline at end of file
diff --git a/gtf.engine/gtf.messages/processMessages.sh b/gtf.engine/gtf.messages/processMessages.sh
deleted file mode 100755
index 89dadbfb61faff67c07e7a7c4918d45f7287a10e..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/processMessages.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-set GTF_MESSAGE_HOME=%~dp0
-set PHP_HOME=%GTF_MESSAGE_HOME%..\gtf.engines\php
-#rem %1 correspond au paramètre passé par pycron
-"../gtf.engines/php/bin/php" "./processMessages.php" %1
\ No newline at end of file
diff --git a/gtf.engine/gtf.messages/processMessages.sql.inc b/gtf.engine/gtf.messages/processMessages.sql.inc
deleted file mode 100755
index 6f4814573cb781855de841e3f8395d2cb12cf17a..0000000000000000000000000000000000000000
--- a/gtf.engine/gtf.messages/processMessages.sql.inc
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-	$aSql['pgsql']['getWaitingMessages']='SELECT message.message_id FROM [schema].message,[schema].messageclass WHERE status=1 AND message.messageclass=messageclass.messageclass AND lower(messageclass_type)=lower([messageclass_type]) ORDER BY message_id;';
-	$aSql['pgsql']['getOrderStatus']='SELECT order_status_id FROM s_gtf.order WHERE order_id = [ORDER_ID] LIMIT 1';
-?>
\ No newline at end of file
diff --git a/module/forms/configuration/configuration_vitis_configuration_gtfConfig.json b/module/forms/configuration/configuration_vitis_configuration_gtfConfig.json
old mode 100755
new mode 100644
index ab1ba4d18e8a3e551a34384f6aa78b991e010fa7..2c3d7e25557d9a332a252de8c57f13252c5bf535
--- a/module/forms/configuration/configuration_vitis_configuration_gtfConfig.json
+++ b/module/forms/configuration/configuration_vitis_configuration_gtfConfig.json
@@ -17,6 +17,32 @@
                     }
                 ]
             },
+            {
+                "class": "form-field-inline gtf-instance-id",
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"gtf_instance_id",
+                        "label":"FORM_GTF_INSTANCE_ID_CONFIGURATION_CONFIGURATION_GTF_CONFIG",
+                        "read_only":true,
+                        "nb_cols":10
+                    },
+                    {
+                        "type": "button",
+                        "class": "btn-ungroup btn-group-sm",
+                        "nb_cols": 2,
+                        "buttons": [
+                            {
+                                "type": "button",
+                                "name": "btn_generate_gtf_instance_id",
+                                "label": "FORM_BTN_GENERATE_GTF_INSTANCE_ID_WORKSPACE_EDIT_WIDGET",
+                                "class": "btn-primary",
+                                "event": "generateGtfInstanceId()"
+                            }
+                        ]
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -129,6 +155,31 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "label":"FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_GTF_CONFIG",
+                        "name":"title_properties_ext_conn_string",
+                        "nb_cols":12
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"connectionStringExternalIp",
+                        "label":"FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_CONNECTIONSTRINGIP",
+                        "nb_cols":6
+                    },{
+                        "type":"number",
+                        "name":"connectionStringExternalPort",
+                        "label":"FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_CONNECTIONSTRINGPORT",
+                        "nb_cols":6
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
diff --git a/module/forms/engine/engine_gtf_fme_engine.json b/module/forms/engine/engine_gtf_fme_engine.json
old mode 100755
new mode 100644
index d24ab707829c9578af51cbfc68d369bb9250eac9..5aee23e556f2b293b27cc4cf195ab82d01f5edb2
--- a/module/forms/engine/engine_gtf_fme_engine.json
+++ b/module/forms/engine/engine_gtf_fme_engine.json
@@ -26,6 +26,34 @@
                             }
                         },
                         "nb_cols":4
+                    },
+                    {
+                        "type":"select",
+                        "name":"fme_engine_type_id",
+                        "label":"FORM_TYPE_ENGINE_FME_ENGINE",
+                        "web_service":{
+                            "ressource_id":"gtf/fmeenginetypes",
+                            "id_key":"fme_engine_type_id",
+                            "label_key":"fme_engine_type_label",
+                            "parameters":{
+                                    "filter":{
+                                            "lang":"getProperty('language')"
+                                    },
+                                    "order_by":"fme_engine_type_label"
+                            }
+                        },
+                        "nb_cols":4
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"url",
+                        "name":"server_url",
+                        "label":"FORM_SERVER_URL_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":4
                     }
                 ]
             },
@@ -60,6 +88,7 @@
         "name":"gtf_v_fme_engine_update_form",
         "title":"FORM_TITLE_ENGINE_FME_ENGINE",
         "input_size":"xs",
+        "initEvent":"initGtfFmeEngineForm()",
         "event":"sendSimpleForm()",
         "nb_cols":6,
         "rows":[
@@ -102,6 +131,50 @@
                         "nb_cols":12
                     }
                 ]
+            },{
+                "fields": [
+                  {
+                    "type": "radio",
+                    "name": "useexternaldbconnection",
+                    "label": "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE",
+                    "nb_cols": 12,
+                    "id": "Element_0_1_1",
+                    "options": {
+                      "choices": [
+                        {
+                          "label": "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_YES",
+                          "value": true
+                        },
+                        {
+                          "label": "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_NO",
+                          "value": false
+                        }
+                      ]
+                    }
+                  }
+                ]
+              },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"fme_engine_type_id",
+                        "label":"FORM_TYPE_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "web_service":{
+                            "ressource_id":"gtf/fmeenginetypes",
+                            "id_key":"fme_engine_type_id",
+                            "label_key":"fme_engine_type_label",
+                            "parameters":{
+                                    "filter":{
+                                            "lang":"getProperty('language')"
+                                    },
+                                    "order_by":"fme_engine_type_label"
+                            }
+                        },
+                        "nb_cols":12
+                    }
+                ]
             },
             {
                 "fields":[
@@ -115,18 +188,274 @@
                 ]
             },
             {
+                "fields":[
+                    {
+                        "type":"url",
+                        "name":"server_url",
+                        "label":"FORM_SERVER_URL_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"fme_cloud_api_token",
+                        "label":"FORM_FME_CLOUD_API_TOKEN_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"fme_server_instance_title",
+                        "label":"FORM_FME_SERVER_INSTANCE_TITLE_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "class":"h5",
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"fme_server_instance_name",
+                        "label":"FORM_FME_SERVER_INSTANCE_NAME_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"login",
+                        "label":"FORM_LOGIN_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"password",
+                        "name":"password",
+                        "label":"FORM_PASSWORD_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"fme_server_instance_status",
+                        "label":"FORM_FME_SERVER_INSTANCE_STATUS_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "class":"fme_cloud_button",
                 "fields":[
                     {
                         "type":"button",
                         "class":"btn-ungroup btn-group-sm",
                         "nb_cols":12,
+                        "name":"fme_cloud_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"start_fme_server_instance",
+                                "label":"FORM_BTN_START_FME_SERVER_INSTANCE_ENGINE_FME_ENGINE",
+                                "class":"btn-success",
+                                "event":"StartFmeServerInstance()",
+                                "disabled": true
+                            },
+                            {
+                                "type":"button",
+                                "name":"pause_fme_server_instance",
+                                "label":"FORM_BTN_PAUSE_FME_SERVER_INSTANCE_ENGINE_FME_ENGINE",
+                                "class":"btn-warning",
+                                "event":"PauseFmeServerInstance()",
+                                "disabled": true
+                            },
+                            {
+                                "type":"button",
+                                "name":"fme_server_instance_version",
+                                "label":"FORM_BTN_FME_SERVER_INSTANCE_VERSION_ENGINE_FME_ENGINE",
+                                "class":"btn-primary",
+                                "event":"displayFmeServerInstanceInfo()",
+                                "disabled": true
+                            },
+                            {
+                                "type":"button",
+                                "name":"refresh_fme_server_instance_status",
+                                "glyphicon":"refresh",
+                                "class":"btn-primary",
+                                "event":"refreshFmeServerInstanceStatus()",
+                                "tooltip": {
+                                    "title":"FORM_BTN_REFRESH_FME_SERVER_INSTANCE_STATUT_STATUT_ENGINE_FME_ENGINE",
+                                    "placement": "bottom",
+                                    "trigger": "hover",
+                                    "container": "body"
+                                }
+                            }
+                        ]
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"amazon_s3_title",
+                        "label":"FORM_AMAZON_S3_TITLE_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "class":"h5",
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"s3_access_key_id",
+                        "label":"FORM_S3_ACCESS_KEY_ID_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"password",
+                        "name":"s3_secret_access_key",
+                        "label":"FORM_S3_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"fme_server_s3_bucket",
+                        "label":"FORM_FME_SERVER_S3_BUCKET_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"iam_access_key_id",
+                        "label":"FORM_IAM_ACCESS_KEY_ID_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"password",
+                        "name":"iam_secret_access_key",
+                        "label":"FORM_IAM_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"s3_region",
+                        "label":"FORM_S3_REGION_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "options":[
+                            "FORM_S3_REGION_US-EAST-2_ENGINE_FME_ENGINE|us-east-2",
+                            "FORM_S3_REGION_US-EAST-1_ENGINE_FME_ENGINE|us-east-1",
+                            "FORM_S3_REGION_US-WEST-1_ENGINE_FME_ENGINE|us-west-1",
+                            "FORM_S3_REGION_US-WEST-2_ENGINE_FME_ENGINE|us-west-2",
+                            "FORM_S3_REGION_AP-SOUTH-1_ENGINE_FME_ENGINE|ap-south-1",
+                            "FORM_S3_REGION_AP-NORTHEAST-2_ENGINE_FME_ENGINE|ap-northeast-2",
+                            "FORM_S3_REGION_AP-SOUTHEAST-1_ENGINE_FME_ENGINE|ap-southeast-1",
+                            "FORM_S3_REGION_AP-SOUTHEAST-2_ENGINE_FME_ENGINE|ap-southeast-2",
+                            "FORM_S3_REGION_AP-NORTHEAST-1_ENGINE_FME_ENGINE|ap-northeast-1",
+                            "FORM_S3_REGION_CA-CENTRAL-1_ENGINE_FME_ENGINE|ca-central-1",
+                            "FORM_S3_REGION_CN-NORTH-1_ENGINE_FME_ENGINE|cn-north-1",
+                            "FORM_S3_REGION_EU-CENTRAL-1_ENGINE_FME_ENGINE|eu-central-1",
+                            "FORM_S3_REGION_EU-WEST-1_ENGINE_FME_ENGINE|eu-west-1",
+                            "FORM_S3_REGION_EU-WEST-2_ENGINE_FME_ENGINE|eu-west-2",
+                            "FORM_S3_REGION_EU-WEST-3_ENGINE_FME_ENGINE|eu-west-3",
+                            "FORM_S3_REGION_SA-EAST-1_ENGINE_FME_ENGINE|sa-east-1"
+                        ],
+                        "visible":false,
+                        "nb_cols":12
+                    }
+                ]
+            },            
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"amazon_s3_button",
+                        "buttons":[
+                            {
+                                "type":"button",
+                                "name":"test_amazon_s3_bucket",
+                                "label":"FORM_BTN_TEST_AMAZON_S3_BUCKET_ENGINE_FME_ENGINE",
+                                "class":"btn-primary",
+                                "event":"testAmazonS3BucketConnection()"
+                            }
+                        ]
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"button",
+                        "class":"btn-ungroup btn-group-sm",
+                        "nb_cols":12,
+                        "name":"update_button",
                         "buttons":[
                             {
                                 "type":"button",
                                 "name":"test_fme_engine",
                                 "label":"FORM_BTN_TEST_FME_ENGINE_ENGINE_FME_ENGINE",
                                 "class":"btn-primary",
-                                "event":"testFmeEngine('local_path')"
+                                "event":"testFmeEngine('local_path')",
+                                "visible": false
                             },
                             {
                                 "type":"submit",
@@ -151,6 +480,7 @@
         "name":"gtf_v_fme_engine_insert_form",
         "title":"FORM_TITLE_ENGINE_FME_ENGINE",
         "input_size":"xs",
+        "initEvent":"initGtfFmeEngineForm()",
         "event":"sendSimpleForm()",
         "afterEvent":"editSectionForm()",
         "nb_cols":6,
@@ -185,6 +515,51 @@
                         "nb_cols":12
                     }
                 ]
+            },{
+                "fields": [
+                  {
+                    "type": "radio",
+                    "name": "useexternaldbconnection",
+                    "label": "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE",
+                    "nb_cols": 12,
+                    "id": "Element_0_1_1",
+                    "options": {
+                      "choices": [
+                        {
+                          "label": "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_YES",
+                          "value": true
+                        },
+                        {
+                          "label": "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_NO",
+                          "value": false
+                        }
+                      ]
+                    },
+                    "default_value": false
+                  }
+                ]
+              },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"fme_engine_type_id",
+                        "label":"FORM_TYPE_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "web_service":{
+                            "ressource_id":"gtf/fmeenginetypes",
+                            "id_key":"fme_engine_type_id",
+                            "label_key":"fme_engine_type_label",
+                            "parameters":{
+                                    "filter":{
+                                            "lang":"getProperty('language')"
+                                    },
+                                    "order_by":"fme_engine_type_label"
+                            }
+                        },
+                        "nb_cols":12
+                    }
+                ]
             },
             {
                 "fields":[
@@ -193,16 +568,192 @@
                         "name":"local_path",
                         "label":"FORM_PATH_ENGINE_FME_ENGINE",
                         "required":true,
-                        "nb_cols":12
+                        "nb_cols":12,
+                        "visible":false
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"url",
+                        "name":"server_url",
+                        "label":"FORM_SERVER_URL_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"fme_cloud_api_token",
+                        "label":"FORM_FME_CLOUD_API_TOKEN_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"fme_server_instance_title",
+                        "label":"FORM_FME_SERVER_INSTANCE_TITLE_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "class":"h5",
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"fme_server_instance_name",
+                        "label":"FORM_FME_SERVER_INSTANCE_NAME_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"login",
+                        "label":"FORM_LOGIN_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"password",
+                        "name":"password",
+                        "label":"FORM_PASSWORD_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"amazon_s3_title",
+                        "label":"FORM_AMAZON_S3_TITLE_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "class":"h5",
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"s3_access_key_id",
+                        "label":"FORM_S3_ACCESS_KEY_ID_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"password",
+                        "name":"s3_secret_access_key",
+                        "label":"FORM_S3_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"fme_server_s3_bucket",
+                        "label":"FORM_FME_SERVER_S3_BUCKET_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"text",
+                        "name":"iam_access_key_id",
+                        "label":"FORM_IAM_ACCESS_KEY_ID_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"password",
+                        "name":"iam_secret_access_key",
+                        "label":"FORM_IAM_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"select",
+                        "name":"s3_region",
+                        "label":"FORM_S3_REGION_ENGINE_FME_ENGINE",
+                        "required":true,
+                        "options":[
+                            "FORM_S3_REGION_US-EAST-2_ENGINE_FME_ENGINE|us-east-2",
+                            "FORM_S3_REGION_US-EAST-1_ENGINE_FME_ENGINE|us-east-1",
+                            "FORM_S3_REGION_US-WEST-1_ENGINE_FME_ENGINE|us-west-1",
+                            "FORM_S3_REGION_US-WEST-2_ENGINE_FME_ENGINE|us-west-2",
+                            "FORM_S3_REGION_AP-SOUTH-1_ENGINE_FME_ENGINE|ap-south-1",
+                            "FORM_S3_REGION_AP-NORTHEAST-2_ENGINE_FME_ENGINE|ap-northeast-2",
+                            "FORM_S3_REGION_AP-SOUTHEAST-1_ENGINE_FME_ENGINE|ap-southeast-1",
+                            "FORM_S3_REGION_AP-SOUTHEAST-2_ENGINE_FME_ENGINE|ap-southeast-2",
+                            "FORM_S3_REGION_AP-NORTHEAST-1_ENGINE_FME_ENGINE|ap-northeast-1",
+                            "FORM_S3_REGION_CA-CENTRAL-1_ENGINE_FME_ENGINE|ca-central-1",
+                            "FORM_S3_REGION_CN-NORTH-1_ENGINE_FME_ENGINE|cn-north-1",
+                            "FORM_S3_REGION_EU-CENTRAL-1_ENGINE_FME_ENGINE|eu-central-1",
+                            "FORM_S3_REGION_EU-WEST-1_ENGINE_FME_ENGINE|eu-west-1",
+                            "FORM_S3_REGION_EU-WEST-2_ENGINE_FME_ENGINE|eu-west-2",
+                            "FORM_S3_REGION_EU-WEST-3_ENGINE_FME_ENGINE|eu-west-3",
+                            "FORM_S3_REGION_SA-EAST-1_ENGINE_FME_ENGINE|sa-east-1"
+                        ],
+                        "visible":false,
+                        "nb_cols":12
+                    }
+                ]
+            },            
             {
                 "fields":[
                     {
                         "type":"button",
                         "class":"btn-ungroup btn-group-sm",
                         "nb_cols":12,
+                        "name":"insert_button",
                         "buttons":[
                             {
                                 "type":"submit",
@@ -226,6 +777,7 @@
     "display":{
         "name":"gtf_v_fme_engine_display_form",
         "title":"FORM_TITLE_ENGINE_FME_ENGINE",
+        "initEvent":"initGtfFmeEngineForm()",
         "input_size":"xs",
         "nb_cols":6,
         "rows":[
@@ -259,6 +811,16 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"fme_engine_type_label",
+                        "label":"FORM_TYPE_ENGINE_FME_ENGINE",
+                        "nb_cols":12
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -269,11 +831,157 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"server_url",
+                        "label":"FORM_SERVER_URL_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"fme_cloud_api_token",
+                        "label":"FORM_FME_CLOUD_API_TOKEN_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"fme_server_instance_title",
+                        "label":"FORM_FME_SERVER_INSTANCE_TITLE_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "class":"h5",
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"fme_server_instance_name",
+                        "label":"FORM_FME_SERVER_INSTANCE_NAME_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"login",
+                        "label":"FORM_LOGIN_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"password",
+                        "label":"FORM_PASSWORD_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"title",
+                        "name":"amazon_s3_title",
+                        "label":"FORM_AMAZON_S3_TITLE_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "class":"h5",
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"s3_access_key_id",
+                        "label":"FORM_S3_ACCESS_KEY_ID_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"s3_secret_access_key",
+                        "label":"FORM_S3_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"fme_server_s3_bucket",
+                        "label":"FORM_FME_SERVER_S3_BUCKET_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"iam_access_key_id",
+                        "label":"FORM_IAM_ACCESS_KEY_ID_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"iam_secret_access_key",
+                        "label":"FORM_IAM_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE",
+                        "nb_cols":12,
+                        "visible":false
+                    }
+                ]
+            },
+            {
+                "fields":[
+                    {
+                        "type":"label",
+                        "name":"s3_region",
+                        "label":"FORM_S3_REGION_ENGINE_FME_ENGINE",
+                        "visible":false,
+                        "nb_cols":12
+                    }
+                ]
+            },            
             {
                 "fields":[
                     {
                         "type":"button",
                         "class":"btn-ungroup btn-group-sm",
+                        "name":"display_button",
                         "nb_cols":12,
                         "buttons":[
                             {
diff --git a/module/forms/my_work/my_work_gtf_user_order.json b/module/forms/my_work/my_work_gtf_user_order.json
index c0c4d1ee9a84c4629a729bc23470024f0d0a2456..a8ca40f83a1445996af53f5c338b65b308edff2e 100755
--- a/module/forms/my_work/my_work_gtf_user_order.json
+++ b/module/forms/my_work/my_work_gtf_user_order.json
@@ -46,27 +46,6 @@
                     }
                 ]
             },
-            {
-                "fields":[
-                    {
-                        "type":"select",
-                        "name":"priority_id",
-                        "label":"FORM_PRIORITY_MY_WORK_USER_ORDER",
-                        "web_service":{
-                            "ressource_id":"gtf/priorities",
-                            "id_key":"priority_id",
-                            "label_key":"priority_label",
-                            "parameters":{
-                                    "filter":{
-                                            "lang":"getProperty('language')"
-                                    },
-                                    "order_by":"priority_label"
-                            }
-                        },
-                        "nb_cols":4
-                    }
-                ]
-            },
             {
                 "fields":[
                     {
@@ -156,28 +135,6 @@
                     }
                 ]
             },
-            {
-                "fields":[
-                    {
-                        "type":"select",
-                        "name":"priority_id",
-                        "label":"FORM_PRIORITY_MY_WORK_USER_ORDER",
-                        "web_service":{
-                            "ressource_id":"gtf/priorities",
-                            "id_key":"priority_id",
-                            "label_key":"priority_label",
-                            "parameters":{
-                                    "filter":{
-                                            "lang":"getProperty('language')"
-                                    },
-                                    "order_by":"priority_label"
-                            }
-                        },
-                        "default_value":1,
-                        "nb_cols":12
-                    }
-                ]
-            },
             {
                 "fields":[
                     {
@@ -212,6 +169,19 @@
                     }
                 ]
             },
+            {
+                "fields":[
+                    {
+                        "type":"datetime",
+                        "name":"minexecdate",
+                        "label":"FORM_MINEXECDATE_MY_WORK_USER_ORDER",
+                        "options": {
+                            "minDate": []
+                        },
+                        "nb_cols":12
+                    }
+                ]
+            },
             {
                 "fields":[
                     {
@@ -284,8 +254,8 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"priority_label",
-                        "label":"FORM_PRIORITY_MY_WORK_USER_ORDER",
+                        "name":"minexecdate",
+                        "label":"FORM_MINEXECDATE_MY_WORK_USER_ORDER",
                         "nb_cols":12
                     }
                 ]
diff --git a/module/forms/publication/publication_gtf_workspace.json b/module/forms/publication/publication_gtf_workspace.json
index 2c3777af1c5687c6d54fa856dec69ba9a9ce7357..acd287f47cceeacf9375eb5195a6b2bc4236ee1b 100755
--- a/module/forms/publication/publication_gtf_workspace.json
+++ b/module/forms/publication/publication_gtf_workspace.json
@@ -185,14 +185,14 @@
                             "content": "FORM_KEY_TOOLTIP_CONTENT_PUBLICATION_WORKSPACE",
                             "width": "500px"
                         },
-                        "nb_cols": 4
+                        "nb_cols": 5
                     },
                     {
                         "type": "linkurl",
                         "name": "fmw_file_url",
                         "label": "FORM_FMW_FILE_URL_PUBLICATION_WORKSPACE",
                         "target": "_self",
-                        "nb_cols": 8
+                        "nb_cols": 7
                     }
                 ]
             },
@@ -297,7 +297,7 @@
                                     "value": false
                                 }]
                         },
-                        "nb_cols": 4
+                        "nb_cols": 5
                     },
                     {
                         "type": "radio",
@@ -314,7 +314,65 @@
                                     "value": false
                                 }]
                         },
-                        "nb_cols": 4
+                        "nb_cols": 5
+                    }
+                ]
+            },
+            {
+                "fields": [
+                    {
+                        "type": "radio",
+                        "name": "dataencrypt",
+                        "label": "FORM_DATAENCRYPT_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5,
+                        "options": {
+                            "choices": [
+                                {
+                                    "label": "Oui",
+                                    "value": true
+                                },
+                                {
+                                    "label": "Non",
+                                    "value": false
+                                }
+                            ]
+                        },
+                        "default_value": false
+                    },
+                    {
+                        "type": "radio",
+                        "name": "usepersonaldata",
+                        "label": "FORM_USEPERSONALDATA_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5,
+                        "options": {
+                            "choices": [
+                                {
+                                    "label": "Oui",
+                                    "value": true
+                                },
+                                {
+                                    "label": "Non",
+                                    "value": false
+                                }
+                            ]
+                        },
+                        "default_value": false
+                    }
+                ]
+            },
+            {
+                "fields": [
+                    {
+                        "type": "float",
+                        "name": "unitcost",
+                        "label": "FORM_UNITCOST_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
+                    },
+                    {
+                        "type": "float",
+                        "name": "costpersecond",
+                        "label": "FORM_COSTPERSECOND_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
                     }
                 ]
             },
@@ -450,7 +508,7 @@
                                 }]
                         },
                         "default_value": 0,
-                        "nb_cols": 4
+                        "nb_cols": 5
                     },
                     {
                         "type": "radio",
@@ -468,7 +526,65 @@
                                 }]
                         },
                         "default_value": 0,
-                        "nb_cols": 4
+                        "nb_cols": 5
+                    }
+                ]
+            },
+            {
+                "fields": [
+                    {
+                        "type": "radio",
+                        "name": "dataencrypt",
+                        "label": "FORM_DATAENCRYPT_USER_USER",
+                        "nb_cols": 5,
+                        "options": {
+                            "choices": [
+                                {
+                                    "label": "Oui",
+                                    "value": true
+                                },
+                                {
+                                    "label": "Non",
+                                    "value": false
+                                }
+                            ]
+                        },
+                        "default_value": false
+                    },
+                    {
+                        "type": "radio",
+                        "name": "usepersonaldata",
+                        "label": "FORM_USEPERSONALDATA_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5,
+                        "options": {
+                            "choices": [
+                                {
+                                    "label": "Oui",
+                                    "value": true
+                                },
+                                {
+                                    "label": "Non",
+                                    "value": false
+                                }
+                            ]
+                        },
+                        "default_value": false
+                    }
+                ]
+            },
+            {
+                "fields": [
+                    {
+                        "type": "float",
+                        "name": "unitcost",
+                        "label": "FORM_UNITCOST_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
+                    },
+                    {
+                        "type": "float",
+                        "name": "costpersecond",
+                        "label": "FORM_COSTPERSECOND_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
                     }
                 ]
             },
@@ -607,13 +723,45 @@
                         "type": "label",
                         "name": "subscription",
                         "label": "FORM_SUBSCRIPTION_AVAILABLE_PUBLICATION_WORKSPACE",
-                        "nb_cols": 4
+                        "nb_cols": 5
                     },
                     {
                         "type": "label",
                         "name": "survey",
                         "label": "FORM_SURVEY_AVAILABLE_PUBLICATION_WORKSPACE",
-                        "nb_cols": 4
+                        "nb_cols": 5
+                    }
+                ]
+            },
+            {
+                "fields": [
+                    {
+                        "type": "label",
+                        "name": "dataencrypt",
+                        "label": "FORM_DATAENCRYPT_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
+                    },
+                    {
+                        "type": "label",
+                        "name": "usepersonaldata",
+                        "label": "FORM_USEPERSONALDATA_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
+                    }
+                ]
+            },
+            {
+                "fields": [
+                    {
+                        "type": "label",
+                        "name": "unitcost",
+                        "label": "FORM_UNITCOST_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
+                    },
+                    {
+                        "type": "label",
+                        "name": "costpersecond",
+                        "label": "FORM_COSTPERSECOND_PUBLICATION_WORKSPACE",
+                        "nb_cols": 5
                     }
                 ]
             },
diff --git a/module/forms/supervision/supervision_gtf_order.json b/module/forms/supervision/supervision_gtf_order.json
index 9ba137b52d1ba548900a4f95c13d4cb5c2043797..9cf0cd54df09f18516a7c3caa9140090bd4f9147 100755
--- a/module/forms/supervision/supervision_gtf_order.json
+++ b/module/forms/supervision/supervision_gtf_order.json
@@ -62,23 +62,6 @@
                         "label":"FORM_DATE_SUPERVISION_ORDER",
                         "nb_cols":4
                     },
-                    {
-                        "type":"select",
-                        "name":"priority_id",
-                        "label":"FORM_PRIORITY_SUPERVISION_ORDER",
-                        "web_service":{
-                            "ressource_id":"gtf/priorities",
-                            "id_key":"priority_id",
-                            "label_key":"priority_label",
-                            "parameters":{
-                                    "filter":{
-                                            "lang":"getPropertie('language')"
-                                    },
-                                    "order_by":"priority_label"
-                            }
-                        },
-                        "nb_cols":4
-                    },
                     {
                         "type":"select",
                         "name":"gtf_engine_id",
@@ -178,8 +161,8 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"priority_label",
-                        "label":"FORM_PRIORITY_SUPERVISION_ORDER",
+                        "name":"login",
+                        "label":"FORM_OWNER_SUPERVISION_ORDER",
                         "nb_cols":12
                     }
                 ]
@@ -188,8 +171,8 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"login",
-                        "label":"FORM_OWNER_SUPERVISION_ORDER",
+                        "name":"order_date",
+                        "label":"FORM_DATE_SUPERVISION_ORDER",
                         "nb_cols":12
                     }
                 ]
@@ -198,8 +181,8 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"order_date",
-                        "label":"FORM_DATE_SUPERVISION_ORDER",
+                        "name":"execution_date",
+                        "label":"FORM_WORK_DATE_SUPERVISION_ORDER",
                         "nb_cols":12
                     }
                 ]
@@ -208,8 +191,8 @@
                 "fields":[
                     {
                         "type":"label",
-                        "name":"execution_date",
-                        "label":"FORM_WORK_DATE_SUPERVISION_ORDER",
+                        "name":"minexecdate",
+                        "label":"FORM_MINEXECDATE_SUPERVISION_ORDER",
                         "nb_cols":12
                     }
                 ]
diff --git a/module/forms/users/users_vitis_group_qualigeo.json b/module/forms/users/users_vitis_group_qualigeo.json
new file mode 100755
index 0000000000000000000000000000000000000000..88b3dbe798162c8f5f4cd42ef131aab01aadc925
--- /dev/null
+++ b/module/forms/users/users_vitis_group_qualigeo.json
@@ -0,0 +1,155 @@
+{
+  "display": {
+    "name": "qualigeo_group-display-form",
+    "title": "FORM_TITLE_USERS_GROUP",
+    "input_size": "xxs",
+    "nb_cols": 9,
+    "javascript": false,
+    "rows": [
+    {
+        "fields": [
+          {
+            "type": "label",
+            "name": "group_schema",
+            "label": "FORM_USERS_GROUP_QUALIGEO_DOUBLE_SELECT",
+            "nb_cols": 12,
+            "id": "Element_0_2_1"
+          }
+        ]
+    }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "group_schema"
+          ]
+        }
+      ]
+    },
+    "event": "sendSimpleForm()",
+    "afterEvent": "editSectionForm()"
+  },
+  "search": {},
+  "insert": {},
+  "update": {
+	
+    "name": "qualigeo_group-update-form",
+    "title": "FORM_TITLE_USERS_GROUP",
+    "input_size": "xxs",
+    "nb_cols": 9,
+    "javascript": false,
+    "rows": [
+      {
+        "fields": [
+          {
+            "type": "double_select",
+            "name": "group_schema",
+            "label": "FORM_USERS_GROUP_QUALIGEO_DOUBLE_SELECT",
+            "required": false,
+            "nb_cols": 12,
+            "id": "Element_0_2_1",
+            "name_to": "group_schema",
+            "name_from": "group_schema_from",
+            "label_from": "FORM_USERS_GROUP_QUALIGEO_SCHEMA_AVAILABLE",
+            "label_to": "FORM_USERS_GROUP_QUALIGEO_SCHEMA_ASSOCIATE",
+            "id_from": "Element_0_2_1_from",
+            "datasource": {
+              "datasource_id": "datasource_3",
+              "sort_order": "ASC",
+              "distinct": "true",
+              "id_key": "id_schema",
+              "label_key": "schema",
+              "attributs": "schema|id_schema",
+              "order_by": "schema"
+            },
+            "size": 12
+          }
+        ]
+      },
+      {
+        "fields": [
+          {
+            "type": "button",
+            "class": "btn-ungroup btn-group-sm",
+            "nb_cols": 12,
+            "name": "insert_button",
+            "buttons": [
+              {
+                "type": "submit",
+                "name": "form_submit",
+                "label": "FORM_UPDATE",
+                "class": "btn-primary"
+              },
+              {
+                "type": "button",
+                "name": "return_list",
+                "label": "FORM_RETURN_LIST",
+                "class": "btn-primary",
+                "event": "setMode(\"search\")"
+              }
+            ],
+            "id": "undefined_5_1"
+          }
+        ]
+      }
+    ],
+    "tabs": {
+      "position": "top",
+      "list": [
+        {
+          "label": "Tab 0",
+          "elements": [
+            "insert_button",
+            "group_schema"
+          ]
+        }
+      ]
+    },
+    "event": "sendSimpleForm()"
+  },
+  "datasources": {
+    "datasource_1": {
+      "type": "web_service",
+      "dataType": "tableValue",
+      "name": "datasource_1",
+      "description": "",
+      "parameters": {
+        "schema": "s_wab",
+        "table": "v_module_t"
+      },
+      "ressource_id": "vitis/genericquerys",
+      "id": "datasource_1"
+    },
+    "datasource_2": {
+      "type": "web_service",
+      "dataType": "tableValue",
+      "name": "datasource_2",
+      "description": "",
+      "parameters": {
+        "schema": "s_wab",
+        "table": "v_privilege_t"
+      },
+      "ressource_id": "vitis/genericquerys",
+      "id": "datasource_2"
+    },
+    "datasource_3": {
+      "type": "web_service",
+      "dataType": "tableValue",
+      "name": "datasource_3",
+      "description": "",
+      "parameters": {
+        "filter": {
+          "relation": "AND",
+          "operators": []
+        },
+        "schema": "q_constraint",
+        "table": "schema"
+      },
+      "ressource_id": "vitis/genericquerys",
+      "id": "datasource_3"
+    }
+  }
+}
\ No newline at end of file
diff --git a/module/javascript/controllers/userOrderCtrl.js b/module/javascript/controllers/userOrderCtrl.js
index b038298914776c9c66705d0e62fb29b80c2217c4..498efbab65ea5391ba3dda58e684425dc4ddcaf7 100755
--- a/module/javascript/controllers/userOrderCtrl.js
+++ b/module/javascript/controllers/userOrderCtrl.js
@@ -6,10 +6,30 @@ goog.require("vitis.modules.main");
  * userOrder Controller.
  * .
  * @param {angular.$log} $log Angular log service.
+ * @param {angular.$rootScope} $rootScope Angular rootScope.
+ * @param {$translateProvider.$translate} $translate TranslateProvider translate service.
+ * @param {service} envSrvc Paramètres d'environnement.
+ * @param {service} formSrvc Service de gestion des formulaires.
  * @ngInject
  **/
-vitisApp.userOrderCtrl = function ($log) {
+vitisApp.userOrderCtrl = function ($log, $rootScope, $translate, envSrvc, formSrvc) {
         // Initialisation
         $log.info("initUserOrder");
+        // Attends la fin de la compilation du formulaire.
+        var clearListener = $rootScope.$on("formExtracted", function(event) {
+                // Supprime le "listener".
+                clearListener();
+                // Texte indicatif (placeholder) si aucune date de planification est sélectionnée.
+                $translate(["FORM_MINEXECDATE_PLACE_HOLDER_MY_WORK_USER_ORDER"]).then(function (translations) {
+                    if (envSrvc["sMode"] == "insert") {
+                        var oMinExecDateFormElemDef = formSrvc["getFormElementDefinition"]("minexecdate", envSrvc["sFormDefinitionName"]);
+                        document.getElementById(oMinExecDateFormElemDef["id"]).setAttribute("placeholder", translations["FORM_MINEXECDATE_PLACE_HOLDER_MY_WORK_USER_ORDER"]);
+                    }
+                    else {
+                        if (!goog.isDefAndNotNull(envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["minexecdate"]))
+                            envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["minexecdate"] = translations["FORM_MINEXECDATE_PLACE_HOLDER_MY_WORK_USER_ORDER"];
+                    }
+                });
+        });
 };
 vitisApp.module.controller("userOrderCtrl", vitisApp.userOrderCtrl);
diff --git a/module/javascript/script_module.js b/module/javascript/script_module.js
old mode 100755
new mode 100644
index 0aae7bb9c4ed4bc4c2a06a47cf0fc017c54dc5a4..9db879f2ff817b62c6e25b2fedeb6007a19f8eff
--- a/module/javascript/script_module.js
+++ b/module/javascript/script_module.js
@@ -238,8 +238,13 @@ vitisApp.on('appMainDrtvLoaded', function () {
                     }
                     // Test en erreur ? 
                     var sErrorMessage;
-                    if (scope["oTestFmeEngineResult"]["exists"] !== true)
-                        sErrorMessage = "ERROR_FME_PATH_ENGINE_FME_ENGINE";
+                    var sServerType = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["fme_engine_type_id"];
+                    if (sServerType == "desktop" && scope["oTestFmeEngineResult"]["exists"] !== true)
+                        sErrorMessage = "ERROR_FME_PATH_ENGINE_FME_ENGINE"; // 
+                    else if (scope["oTestFmeEngineResult"]["expired"] === true)
+                        sErrorMessage = "ERROR_FME_LICENSE_EXPIRED_ENGINE_FME_ENGINE";
+                    else if (scope["oTestFmeEngineResult"]["request_error"] === true)
+                        sErrorMessage = "ERROR_FME_REQUEST_ERROR_ENGINE_FME_ENGINE";
                     else if (scope["oTestFmeEngineResult"]["valid"] !== true)
                         sErrorMessage = "ERROR_FME_LICENSE_ENGINE_FME_ENGINE";
                     if (typeof (sErrorMessage) !== "undefined") {
@@ -1105,7 +1110,6 @@ vitisApp.on('appMainDrtvLoaded', function () {
         var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
         var $timeout = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$timeout"]);
         var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
-        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
         $log.info("initSubForm");
         // Attends la fin de l'affichage du 1er formulaire.
         var clearListener = $rootScope.$on('formExtracted', function (event) {
@@ -1119,10 +1123,6 @@ vitisApp.on('appMainDrtvLoaded', function () {
                         scope["loadSubForm"](this.value, scope, element);
                     });
                 }, 100);
-            } else {
-                // Formatage de la date de demande.
-                if (goog.isDefAndNotNull(envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["order_date"]))
-                    envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["order_date"] = moment(envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["order_date"]).format('L LTS');
             }
         });
 
@@ -1216,7 +1216,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
         }
     };
     vitisApp["compileProvider"].directive("appMessageStatusIconColumn", vitisApp.appMessageStatusIconColumnDrtv);
-
+    
     /**
      * appMessageBodyColumn directive.
      * Mise en forme de la colonne "body" dans la liste de l'onglet "my_work_3" (messages de gtf).
@@ -1453,7 +1453,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             }
             sColumn = "order_status_id";
         }
-        // Onglet "Abonnements" / "Surveillances".
+        // Onglet "Messages".
         else if (envSrvc["oSelectedObject"]["name"] == "supervision_gtf_message"){
             if (typeof (envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]) != "undefined" && typeof (envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["enabled"]) != "undefined")
                 envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["status"] = JSON.parse(sFilter.toLowerCase());
@@ -2363,7 +2363,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             "sUrl": "modules/gtf/forms/" + envSrvc["oSelectedMode"]["mode_id"] + "/" + sTable + "_" + envSrvc["oSectionForm"][sTable]["sections"][envSrvc["oSectionForm"][sTable]["iSelectedSectionIndex"]]["name"] + ".json"
         };
     };
-
+	
     /**
      * loadLicenseConfig function.
      * Chargement de la section "Licence" dans l'onglet "Configuration".
@@ -2524,7 +2524,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             var oFormValues = envSrvc['oFormValues'][envSrvc['sFormDefinitionName']];
             // Paramètres pour le template du widget.
             scope['oWidgetParams'] = {
-                'client_url': propertiesSrvc['web_server_name'] + '/' + sessionStorage['appEnv'],
+                'client_url': propertiesSrvc['web_server_name'] + '/' + propertiesSrvc['application_name'],
                 'button_label': vitisApp['htmlentities'](oFormValues['buttonText'])
             };
             // Fichiers js à charger.
@@ -2841,9 +2841,6 @@ vitisApp.on('appMainDrtvLoaded', function () {
             oFormValues["form_type"] = aTranslation[sTranslationId];
             angular.element(vitisApp.appMainDrtv).scope().$emit("WorkspaceGeneralSectionReady");
         });
-        // Formatage de la date de création du projet FME.
-        if (goog.isDefAndNotNull(oFormValues["creation_date"]))
-            oFormValues["creation_date"] = moment(oFormValues["creation_date"]).format('L');
         // Traduction des valeurs booléennes (disponible sur abonnement, disponible pour surveillance, verrou).
         if (envSrvc["sMode"] === "display") {
             var scope = this;
@@ -2853,6 +2850,17 @@ vitisApp.on('appMainDrtvLoaded', function () {
             scope.$root["getBooleanTranslation"](oFormValues["survey"]).then(function (sTranslation) {
                 oFormValues["survey"] = sTranslation;
             });
+            scope.$root["getBooleanTranslation"](oFormValues["dataencrypt"]).then(function (sTranslation) {
+                oFormValues["dataencrypt"] = sTranslation;
+            });
+            scope.$root["getBooleanTranslation"](oFormValues["usepersonaldata"]).then(function (sTranslation) {
+                oFormValues["usepersonaldata"] = sTranslation;
+            });
+            // Symbole "Euro".
+            if (goog.isDefAndNotNull(oFormValues["unitcost"]) && !isNaN(oFormValues["unitcost"]))
+                oFormValues["unitcost"] += " €";
+            if (goog.isDefAndNotNull(oFormValues["costpersecond"]) && !isNaN(oFormValues["costpersecond"]))
+                oFormValues["costpersecond"] += " €";
         }
         // Paramètres du lien vers le fichier fmw du projet fme.
         var oFmwFileUrlElementDef = formSrvc["getFormElementDefinition"]("fmw_file_url", envSrvc["sFormDefinitionName"]);
@@ -2958,12 +2966,6 @@ vitisApp.on('appMainDrtvLoaded', function () {
         var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
         //
         $log.info("initPublicationWorkspaceUpdateMetaDataForm");
-        // Formatage de la date de dernière sauvegarde des métadonnées.
-        var scope = this;
-        if (goog.isDefAndNotNull(envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["last_save_date"])) {
-            envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["last_save_date"] = moment(envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["last_save_date"]).format('L LTS');
-            scope.$apply();
-        }
     };
 
     /**
@@ -3172,22 +3174,180 @@ vitisApp.on('appMainDrtvLoaded', function () {
     };
     
     /**
-     * loadGtfGroupQualigeo function.
-     * Chargement de la section "Qualigeo" dans l'onglet "Groupes" (mode "Utilisateurs").
+     * displayFormFields function.
+     * Affiche la liste des champs de formulaire passée en paramètre et cache les autres.
+     * @param {array} aFormFieldsToDisplay Tableau de champs de formulaire à afficher.
      **/
-    angular.element(vitisApp.appMainDrtv).scope()["loadGtfGroupQualigeo"] = function () {
-        console.log("FJHGIFHGFIHGIFHGIHGIORGHIO");
+    angular.element(vitisApp.appMainDrtv).scope()["displayFormFields"] = function (aFormFieldsToDisplay) {
         // Injection des services.
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
-        var envSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["envSrvc"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        var formSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formSrvc"]);
+        var externFunctionSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["externFunctionSrvc"]);
         //
-        $log.info("loadGtfGroupQualigeo");
-        // Surcharge l'url du formulaire des groupes de Gtf.
-        var scope = this;
-        var sTable = envSrvc["oSelectedObject"]["name"];
-        scope["oFormRequestParams"] = {
-            "sUrl": "modules/gtf/forms/" + envSrvc["oSelectedMode"]["mode_id"] + "/" + sTable + "_" + envSrvc["oSectionForm"][sTable]["sections"][envSrvc["oSectionForm"][sTable]["iSelectedSectionIndex"]]["name"] + ".json"
+        $log.info("displayFormFields");
+        //
+        var aFormFields = formSrvc["getAllFormElementDefinition"](envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
+        var i, j;
+        if (Array.isArray(aFormFields)) {
+            for (i = 0; i < aFormFields.length; i++) {
+                if (aFormFieldsToDisplay.indexOf(aFormFields[i]["name"]) == -1)
+                    aFormFields[i]["visible"] = false;
+                else
+                    aFormFields[i]["visible"] = true;
+                // Boutons
+                if (Array.isArray(aFormFields[i]["buttons"])) {
+                    for (j = 0; j < aFormFields[i]["buttons"].length; j++) {
+                        if (aFormFieldsToDisplay.indexOf(aFormFields[i]["buttons"][j]["name"]) == -1)
+                            aFormFields[i]["buttons"][j]["visible"] = false;
+                        else {
+                            aFormFields[i]["buttons"][j]["visible"] = true;
+                            aFormFields[i]["visible"] = true;
+                        }
+                    }
+                }
+            }
+            // Rafraîchit le formulaire.
+            var formScope = angular.element("form[name='" + envSrvc["oFormDefinition"][envSrvc["sFormDefinitionName"]]["name"]).scope();
+            formScope.$broadcast('$$rebind::refresh');
+            formScope.$applyAsync();
+            // 
+            externFunctionSrvc["resizeWin"]();
+        }
+    };
+    
+    /**
+     * initGtfFmeEngineForm function.
+     * Traitements avant l'affichage du formulaire de l'onglet "Moteur FME".
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["initGtfFmeEngineForm"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appMainDrtv).injector().get(["$rootScope"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        var formSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formSrvc"]);
+        //
+        $log.info("initGtfFmeEngineForm");
+        //
+        var clearListener = $rootScope.$on('formExtracted', function (event, sFormDefinitionName) {
+            // Supprime le "listener".
+            clearListener();
+            // Affiche et cache les champs de form. suivant le type de moteur fme.
+            var oServerType = formSrvc["getFormElementDefinition"]("fme_engine_type_id", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
+            var sServerType = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["fme_engine_type_id"];
+            if (typeof(sServerType) == "object")
+                sServerType = sServerType["selectedOption"]["value"];
+            var formScope = angular.element("form[name='" + envSrvc["oFormDefinition"][envSrvc["sFormDefinitionName"]]["name"]).scope();
+            formScope["server_url"] = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["server_url"];
+            // Affichage des champs de form. en fonction du type de moteur sélectionné.
+            if (envSrvc["sMode"] != "insert")
+                $rootScope["setGtfFmeEngineForm"](sServerType);
+            if (envSrvc["sMode"] != "display") {
+                document.getElementById(oServerType["id"]).addEventListener("change", function () {
+                    $rootScope["setGtfFmeEngineForm"](this.value);
+                });
+            }
+            // Désactivation des boutons de l'instance Fme Server suivant son statut .
+            if (sServerType == "fme_cloud" && envSrvc["sMode"] == "update")
+                $rootScope["refreshFmeServerInstanceStatus"]();
+        });
+    };
+    
+    /**
+     * setGtfFmeEngineForm function.
+     * Affichage des champs du formulaire de l'onglet "Moteur FME" suivant le type passé.
+     * @param {string} sServerType Type de moteur fme.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["setGtfFmeEngineForm"] = function (sServerType) {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appMainDrtv).injector().get(["$rootScope"]);
+        var $timeout = angular.element(vitisApp.appMainDrtv).injector().get(["$timeout"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        var formSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formSrvc"]);
+        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
+        //
+        $log.info("setGtfFmeEngineForm");
+        var formScope = angular.element("form[name='" + envSrvc["oFormDefinition"][envSrvc["sFormDefinitionName"]]["name"]).scope();
+        // Champs de form. à afficher suivant le type de moteur fme.
+        var aFormFieldsToConcat = ["fme_engine_id", "name", "server_id", "fme_engine_type_id","form_submit","return_list", "useexternaldbconnection"];
+        var oFormFieldsToDisplay = {
+            "desktop": ["local_path", "test_fme_engine"],
+            "fme_server": ["server_url", "login", "password", "test_fme_engine"],
+            "fme_cloud": ["server_url", "login", "password", "fme_cloud_api_token", "fme_server_instance_title", "start_fme_server_instance", "pause_fme_server_instance", "fme_server_instance_version", "fme_server_instance_name", "refresh_fme_server_instance_status", "fme_server_instance_status"], // , "s3_access_key_id", "s3_secret_access_key", "s3_region", "amazon_s3_title", "fme_server_s3_bucket", "test_amazon_s3_bucket"
+            "fme_cloud_for_gtf": ["iam_access_key_id", "iam_secret_access_key", "s3_region", "fme_server_s3_bucket"]
         };
+        if (envSrvc["sMode"] == "display")
+            aFormFieldsToConcat = aFormFieldsToConcat.concat(["fme_engine_type_label", "server_name"]);
+        var aFormFieldsToDisplay = [];
+        if (typeof (oFormFieldsToDisplay[sServerType]) != "undefined")
+            aFormFieldsToDisplay = oFormFieldsToDisplay[sServerType];
+        aFormFieldsToDisplay = aFormFieldsToDisplay.concat(aFormFieldsToConcat);
+        $rootScope["displayFormFields"](aFormFieldsToDisplay);
+        //
+        if (envSrvc["sMode"] != "display") {
+            $timeout(function () {
+                // Bug avec les champs de form. "password" qui reste en "readonly".
+                var aPasswordElem = document.querySelectorAll("form[name='" + envSrvc["oFormDefinition"][envSrvc["sFormDefinitionName"]]["name"] + "'] input[type='password']");
+                for(var i= 0; i < aPasswordElem.length; i++)
+                     aPasswordElem[i].readOnly = false;
+                // Url du serveur non modifiable si le type de moteur = fme cloud.
+                var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+                var oServerUrl = formSrvc["getFormElementDefinition"]("server_url", envSrvc["sFormDefinitionName"]);
+                var oServerUrlElem = document.getElementById(oServerUrl["id"]);
+                if (oServerUrlElem != null) {
+                    if (sServerType == "fme_cloud") {
+                        oServerUrlElem.readOnly = true;
+                        formScope["server_url"] = oFormValues["server_url"];
+                        oFormValues["server_url"] = propertiesSrvc['fme_cloud_api_url'];
+                    }
+                    else {
+                        oServerUrlElem.readOnly = false;
+                        if (typeof(formScope["server_url"]) != "undefined")
+                            oFormValues["server_url"] = formScope["server_url"];
+                        else
+                            oFormValues["server_url"] = '';
+                    }
+                }
+            });
+        }
+    }
+    
+    /**
+     * generateGtfInstanceId function.
+     * Génération de l'identifiant de l'instance de GTF.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["generateGtfInstanceId"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $translate = angular.element(vitisApp.appMainDrtv).injector().get(["$translate"]);
+        var envSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["envSrvc"]);
+        var propertiesSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["propertiesSrvc"]);
+        //
+        $log.info("generateGtfInstanceId");
+        // Charge le résumé de la supervision.
+        var formScope = angular.element('form[name=\'' + envSrvc['oFormDefinition'][envSrvc['sFormDefinitionName']]['name'] + '\']').scope();
+        ajaxRequest({
+            "method": "POST",
+            "scope": formScope,
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/instance/generate",
+            "success": function(response) {
+                if (response["data"]["status"] === 1) {
+                    envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["gtf_instance_id"] = response["data"]["instance_id"];
+                    // Affiche le message de succés.
+                    $translate("SUCCESSFUL_OPERATION").then(function (sTranslation) {
+                        $.notify(sTranslation, "success");
+                    });
+                } 
+                else {
+                    var oOptions = {"className": "modal-danger"};
+                    // Message d'erreur ?
+                    if (response["data"]["errorMessage"] !== null)
+                        oOptions["message"] = response["data"]["errorMessage"];
+                    scope["modalWindow"]("alert", "REQUEST_ERROR", oOptions);
+                }
+            }
+        });
     };
     
     /**
@@ -3271,4 +3431,434 @@ vitisApp.on('appMainDrtvLoaded', function () {
             }
         });
     };
+    
+    /**
+     * StartFmeServerInstance function.
+     * Démarre une instance Fme Server (Fme Cloud).
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["StartFmeServerInstance"] = function () {
+        // Injection des services.
+        var $translate = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$translate"]);
+        var $log = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("StartFmeServerInstance");
+        $rootScope["removeFmeServerInstanceInfo"]();
+        var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+        var oParams = {
+            "fme_engine_id": oFormValues['fme_engine_id'],
+        };
+        ajaxRequest({
+            "method": "PUT",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/fmeengines/" + oFormValues['fme_engine_id'] + "/instances/" + oFormValues["fme_server_instance_name"] + "/start",
+            "data": oParams,
+            "success": function(response) {
+                if (response["data"]["status"] == 0) {
+                    var oOptions = {
+                        "className": "modal-danger",
+                        "message": response["data"]["errorMessage"]
+                    };
+                    $rootScope["modalWindow"]("dialog", "REQUEST_ERROR", oOptions);
+                } else {
+                    // Mise à jour du statut de l'instance.
+                    $rootScope["setFmeServerInstanceStatus"](response["data"]["instance"]["state"]);
+                    // Affichage du message de succés.
+                    $translate("MSG_FME_SERVER_INSTANCE_EXECUTING_START_ENGINE_FME_ENGINE").then(function (sTranslation) {
+                        $.notify(sTranslation, "success");
+                    });
+                }
+            }
+        });
+    };
+    
+    /**
+     * PauseFmeServerInstance function.
+     * Met en pause une instance Fme Server (Fme Cloud).
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["PauseFmeServerInstance"] = function () {
+        // Injection des services.
+        var $translate = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$translate"]);
+        var $log = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("PauseFmeServerInstance");
+        //
+        $rootScope["removeFmeServerInstanceInfo"]();
+        var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+        var oParams = {
+            "fme_engine_id": oFormValues['fme_engine_id'],
+        };
+        ajaxRequest({
+            "method": "PUT",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/fmeengines/" + oFormValues['fme_engine_id'] + "/instances/" + oFormValues["fme_server_instance_name"] + "/pause",
+            "data": oParams,
+            "success": function(response) {
+                if (response["data"]["status"] == 0) {
+                    // Affichage du message d'erreur.
+                    var oOptions = {
+                        "className": "modal-danger",
+                        "message": response["data"]["errorMessage"]
+                    };
+                    $rootScope["modalWindow"]("dialog", "REQUEST_ERROR", oOptions);
+                } else {
+                    // Mise à jour du statut de l'instance.
+                    $rootScope["setFmeServerInstanceStatus"](response["data"]["instance"]["state"]);
+                    // Affichage du message de succés.
+                    $translate("MSG_FME_SERVER_INSTANCE_EXECUTING_PAUSE_ENGINE_FME_ENGINE").then(function (sTranslation) {
+                        $.notify(sTranslation, "success");
+                    });
+                }
+            }
+        });
+    };
+    
+    /**
+     * getFmeServerInstance function.
+     * Retourne une instance Fme Server (Fme Cloud).
+     * @param {number} sFmeEngineId Id du moteur Fme.
+     * @param {string} sFmeServerInstanceName Nom de l'instance Fme Server.
+     * @return {object}
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["getFmeServerInstance"] = function (sFmeEngineId, sFmeServerInstanceName) {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $q = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$q"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var propertiesSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["propertiesSrvc"]);
+        //
+        $log.info("getFmeServerInstance");
+        // Charge les infos de l'instance Fme Server sur Fme Cloud.
+        var deferred = $q.defer();
+        var promise = deferred.promise;
+        ajaxRequest({
+            "method": "GET",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/fmeengines/" + sFmeEngineId + "/instances/" + sFmeServerInstanceName,
+            "success": function(response) {
+                if (response["data"]["status"] == 0) {
+                    var oOptions = {
+                        "className": "modal-danger",
+                        "message": response["data"]["errorMessage"]
+                    };
+                    $rootScope["modalWindow"]("dialog", "REQUEST_ERROR", oOptions);
+                    deferred.reject(false);
+                } else {
+                    deferred.resolve(response["data"]["instance"]);
+                }
+            }
+        });
+        return promise;
+    };
+
+    /**
+     * displayFmeServerInstanceInfo function.
+     * Affiche les informations d'une instance Fme Server sur Fme Cloud.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["displayFmeServerInstanceInfo"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var $templateRequest = angular.element(vitisApp.appMainDrtv).injector().get(["$templateRequest"]);
+        var $compile = angular.element(vitisApp.appMainDrtv).injector().get(["$compile"]);
+        var propertiesSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["propertiesSrvc"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("displayFmeServerInstanceInfo");
+        var scope = this;
+        var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+        // Charge les infos de l'instance Fme Server sur Fme Cloud.
+        ajaxRequest({
+            "method": "GET",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/fmeengines/" + oFormValues['fme_engine_id'] + "/instances/" + oFormValues["fme_server_instance_name"] + "/info",
+            "success": function(response) {
+                if (response["data"]["status"] == 0) {
+                    var oOptions = {
+                        "className": "modal-danger",
+                        "message": response["data"]["errorMessage"]
+                    };
+                    $rootScope["modalWindow"]("dialog", "REQUEST_ERROR", oOptions);
+                } else {
+                    // Informations sur Fme server pour le template.
+                    scope["oTestFmeEngineResult"] = {
+                        "exists" : true,
+                        "valid" : true,
+                        "host" : response["data"]["info"]["host"],
+                        "type" : response["data"]["info"]["version"],
+                        "version" : response["data"]["info"]["build"],
+                    };
+                    // Création de l'élément html pour afficher le template.
+                    var sContainerElementName = scope["sFormDefinitionName"] + "_fme_server_info_container";
+                    var oLastFormElement = document.querySelector(".fme_cloud_button").nextSibling;
+                    if (document.getElementById(sContainerElementName) === null) {
+                        var oDiv = document.createElement("div");
+                        oDiv.id = scope["sFormDefinitionName"] + "_fme_server_info_container";
+                        oLastFormElement.parentElement.insertBefore(oDiv, oLastFormElement);
+                    }
+                    // Compile le template du résultat.
+                    $templateRequest("modules/gtf/templates/testFmeEngineTpl.html").then(function (sTemplate) {
+                        $compile($("#" + sContainerElementName).html(sTemplate).contents())(scope);
+                    });
+                }
+            }
+        });
+    };
+    
+    /**
+     * setFmeServerInstanceButtonsStatus function.
+     * Active ou désactive les boutons de l'instance Fme Server suivant son statut.
+     * @param {string} sFmeServerInstanceName Nom de l'instance Fme Server.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["setFmeServerInstanceButtonsStatus"] = function (sFmeServerInstanceStatut) {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var formSrvc = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["formSrvc"]);
+        var envSrvc = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("setFmeServerInstanceButtonsStatus");
+        // Les boutons sont désactivés par défaut.
+        var oStartInstanceFormElem = formSrvc["getFormElementDefinition"]("start_fme_server_instance", envSrvc["sFormDefinitionName"]);
+        var oPauseInstanceFormElem = formSrvc["getFormElementDefinition"]("pause_fme_server_instance", envSrvc["sFormDefinitionName"]);
+        var oInstanceVersionFormElem = formSrvc["getFormElementDefinition"]("fme_server_instance_version", envSrvc["sFormDefinitionName"]);
+        oStartInstanceFormElem["disabled"] = true;
+        oPauseInstanceFormElem["disabled"] = true;
+        oInstanceVersionFormElem["disabled"] = true;
+        if (sFmeServerInstanceStatut == "RUNNING") {
+            oPauseInstanceFormElem["disabled"] = false;
+            oInstanceVersionFormElem["disabled"] = false;
+        }
+        else if (sFmeServerInstanceStatut == "PAUSED")
+            oStartInstanceFormElem["disabled"] = false;
+        // Rafraîchit le formulaire.
+        var formScope = angular.element("form[name='" + envSrvc["oFormDefinition"][envSrvc["sFormDefinitionName"]]["name"]).scope();
+        formScope.$broadcast('$$rebind::refresh');
+        formScope.$applyAsync();
+    };
+    
+    /**
+     * removeFmeServerInstanceInfo function.
+     * Supprime les informations d'une instance Fme Server sur Fme Cloud.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["removeFmeServerInstanceInfo"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var envSrvc = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("removeFmeServerInstanceInfo");
+        var oContainerElement = document.getElementById(envSrvc["sFormDefinitionName"] + "_fme_server_info_container");
+        if (oContainerElement !== null)
+            oContainerElement.parentElement.removeChild(oContainerElement);
+    };
+    
+    /**
+     * refreshFmeServerInstanceStatus function.
+     * Charge et met à jour le statut d'une instance Fme Server.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["refreshFmeServerInstanceStatus"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var envSrvc = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["envSrvc"]);
+        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
+        //
+        $log.info("refreshFmeServerInstanceStatus");
+        var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+        // Charge le statut de l'instance Fme Server sur Fme Cloud.
+        ajaxRequest({
+            "method": "GET",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/fmeengines/" + oFormValues['fme_engine_id'] + "/instances/" + oFormValues["fme_server_instance_name"],
+            "success": function(response) {
+                if (response["data"]["status"] == 0) {
+                    var oOptions = {
+                        "className": "modal-danger",
+                        "message": response["data"]["errorMessage"]
+                    };
+                    $rootScope["modalWindow"]("dialog", "REQUEST_ERROR", oOptions);
+                } else {
+                    // Met à jour le statut.
+                    $rootScope["setFmeServerInstanceStatus"](response["data"]["instance"]["state"]);
+                }
+            }
+        });
+    };
+    
+    /**
+     * setFmeServerInstanceStatus function.
+     * Met à jour le statut d'une instance Fme Server dans le formulaire "Moteur FME".
+     * @param {string} sFmeServerInstanceState Statut de l'instance Fme Server.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["setFmeServerInstanceStatus"] = function (sFmeServerInstanceState) {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var $translate = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$translate"]);
+        var envSrvc = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("setFmeServerInstanceStatus");
+        var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+        // Activation des boutons de l'instance Fme Server suivant son statut.
+        $rootScope["setFmeServerInstanceButtonsStatus"](sFmeServerInstanceState);
+        // Supprime le loader Ajax à côté des boutons de Fme Cloud.
+        var oFmeServerInstanceStatusRefreshBtnElem = document.querySelector("button[name='refresh_fme_server_instance_status'] > span");
+        oFmeServerInstanceStatusRefreshBtnElem.classList.remove("fme-server-instance-status-button-rotation");
+        // Traitements spécifiques si une action est cours d'exécution sur l'instance Fme Server.
+        if (sFmeServerInstanceState == "executing_action") {
+            // Loader Ajax à côté des boutons de Fme Cloud.
+            oFmeServerInstanceStatusRefreshBtnElem.classList.add("fme-server-instance-status-button-rotation");
+            // Création d'un interval (si inexistant).
+            if (!goog.isNumber($rootScope["iFmeServerInstanceStatusInterval"])) {
+                // Vérification du statut de l'instance Fme Server jusqu'à démarrage.
+                var iIntervalId = setInterval(function() {
+                    $rootScope["getFmeServerInstance"](oFormValues['fme_engine_id'], oFormValues["fme_server_instance_name"]).then(function(oInstance){
+                        if (goog.isObject(oInstance)) {
+                            $rootScope["setFmeServerInstanceStatus"](oInstance["state"]);
+                            if (oInstance["state"] != "executing_action") {
+                                // Suppression de l'intervalle.
+                                clearInterval(iIntervalId);
+                                delete($rootScope["iFmeServerInstanceStatusInterval"]);
+                                // L'instance a démarré.
+                                if (oInstance["state"] == "RUNNING") {
+                                    // Affichage du message de succés.
+                                    $translate("MSG_FME_SERVER_INSTANCE_START_ENGINE_FME_ENGINE").then(function (sTranslation) {
+                                        $.notify(sTranslation, "success");
+                                    });
+                                }
+                                // L'instance est arrétée.
+                                else if (oInstance["state"] == "PAUSED") {
+                                    // Affichage du message de succés.
+                                    $translate("MSG_FME_SERVER_INSTANCE_PAUSE_ENGINE_FME_ENGINE").then(function (sTranslation) {
+                                        $.notify(sTranslation, "success");
+                                    });
+                                }
+                            }
+                        }
+                        else {
+                            clearInterval(iIntervalId);
+                            delete($rootScope["iFmeServerInstanceStatusInterval"]);
+                        }
+                    });
+                }, 6000);
+                $rootScope["iFmeServerInstanceStatusInterval"] = iIntervalId;
+                // Attends la suppression du scope.
+                var formScope = angular.element('form[name=\'' + envSrvc['oFormDefinition'][envSrvc['sFormDefinitionName']]['name'] + '\']').scope();
+                formScope.$on("$destroy", function () {
+                    clearInterval(iIntervalId);
+                    delete($rootScope["iFmeServerInstanceStatusInterval"]);
+                });
+            }
+        }
+        // Mise à jour l'affichage du statut.
+        var oFmeServerInstanceStateTranslation = {
+            "RUNNING": "FORM_FME_SERVER_INSTANCE_STATUS_RUNNING_ENGINE_FME_ENGINE",
+            "PAUSED": "FORM_FME_SERVER_INSTANCE_STATUS_PAUSED_ENGINE_FME_ENGINE",
+            "executing_action": "FORM_FME_SERVER_INSTANCE_STATUS_executing_action_ENGINE_FME_ENGINE"
+        };
+        $translate(oFmeServerInstanceStateTranslation[sFmeServerInstanceState]).then(function (sTranslation) {
+            oFormValues["fme_server_instance_status"] = sTranslation;
+        });
+    };
+    
+    /**
+     * testAmazonS3BucketConnection function.
+     * Teste la connexion vers un bucket Amazon S3.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["testAmazonS3BucketConnection"] = function () {
+        // Injection des services.
+        var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var $translate = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$translate"]);
+        var envSrvc = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["envSrvc"]);
+        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
+        //
+        $log.info("testAmazonS3BucketConnection");
+        var oFormValues = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]];
+        // Charge le statut de l'instance Fme Server sur Fme Cloud.
+        ajaxRequest({
+            "method": "GET",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/vitis/amazonawsservices/s3/" + oFormValues['fme_server_s3_bucket'] + "/test",
+            "params": {
+                "access_key_id": oFormValues["s3_access_key_id"],
+                "secret_access_key_id": oFormValues["s3_secret_access_key"],
+                "region": oFormValues["s3_region"]["selectedOption"]["value"],
+                "bucket_name": oFormValues["fme_server_s3_bucket"]
+            },
+            "success": function(response) {
+                if (response["data"]["status"] == 0) {
+                    // Affichage du message d'erreur.
+                    var oOptions = {
+                        "className": "modal-danger"
+                    };
+                    $translate([
+                        "TEST_AMAZON_S3_BUCKET_ERROR_NO_SUCH_BUCKET_ENGINE_FME_ENGINE",
+                        "TEST_AMAZON_S3_BUCKET_ERROR_INVALID_ACCESS_KEY_ID_FME_ENGINE",
+                        "TEST_AMAZON_S3_BUCKET_ERROR_SIGNATURE_DOES_NOT_MATCH_FME_ENGINE"
+                    ]).then(function (oTranslations) {
+                        switch (response["data"]["message"]) {
+                            case "NoSuchBucket":
+                                oOptions["message"] = oTranslations["TEST_AMAZON_S3_BUCKET_ERROR_NO_SUCH_BUCKET_ENGINE_FME_ENGINE"];
+                                break;
+                            case "InvalidAccessKeyId":
+                                oOptions["message"] = oTranslations["TEST_AMAZON_S3_BUCKET_ERROR_INVALID_ACCESS_KEY_ID_FME_ENGINE"];
+                                break;
+                            case "SignatureDoesNotMatch":
+                                oOptions["message"] = oTranslations["TEST_AMAZON_S3_BUCKET_ERROR_SIGNATURE_DOES_NOT_MATCH_FME_ENGINE"];
+                                break;
+                        };
+                        $rootScope["modalWindow"]("dialog", "REQUEST_ERROR", oOptions);
+                    });
+                } else {
+                    // Affiche le message de succés.
+                    $translate("SUCCESSFUL_OPERATION").then(function (sTranslation) {
+                        $.notify(sTranslation, "success");
+                    });
+                }
+            }
+        });
+    };
+    
+    /**
+     * deleteGtfOrders function.
+     * Suppression d'une ou plusieurs demandes.
+     **/
+    angular.element(vitisApp.appMainDrtv).scope()["deleteGtfOrders"] = function () {
+        // Injection des services.
+        var $rootScope = angular.element(vitisApp.appStatisticsFormDrtv).injector().get(["$rootScope"]);
+        var $log = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["$log"]);
+        var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
+        var envSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["envSrvc"]);
+        //
+        $log.info("deleteGtfOrders");
+        // Charge la liste des pid (job id) de demandes en cours de traitement.
+        ajaxRequest({
+            "method": "GET",
+            "url": propertiesSrvc["web_server_name"] + "/" + propertiesSrvc["services_alias"] + "/gtf/orders/running",
+            "success": function(response) {
+                if (response["data"]["status"] === 1) {
+                    // Liste des demandes sélectionnées.
+                    var aSelectedRows = $rootScope["gridApi"][envSrvc["sSelectedGridOptionsName"]]["selection"]["getSelectedRows"]();
+                    var aOrders = response["data"]["orders"];
+                    if (goog.isArray(aOrders) && aSelectedRows.length > 0) {
+                        var sMessage;
+                        for (var i = 0; i < aSelectedRows.length; i++) {
+                            if (aOrders.indexOf(aSelectedRows[i]["order_id"]) != -1) {
+                                sMessage = "CONFIRM_DELETE_ORDERS_SUPERVISION_ORDER";
+                                break;
+                            }
+                        }
+                    }
+                    // Supprime les enregistrements.
+                    $rootScope["DeleteSelection"]({"sMessage": sMessage});
+                }
+                else {
+                    var oOptions = {"className": "modal-danger"};
+                    // Message d'erreur ?
+                    if (response["data"]["errorMessage"] !== null)
+                        oOptions["message"] = response["data"]["errorMessage"];
+                    $rootScope["modalWindow"]("alert", "REQUEST_ERROR", oOptions);
+                }
+            }
+        });
+    };
 });
\ No newline at end of file
diff --git a/module/javascript/widget/script_widget.js b/module/javascript/widget/script_widget.js
index 4ade98a80c32086f8f8a2f63b6455205b0465b45..80fe1b777052202c006f3249572fa7332093e269 100755
--- a/module/javascript/widget/script_widget.js
+++ b/module/javascript/widget/script_widget.js
@@ -135,6 +135,8 @@ widget.initWidget = function () {
                     var clearFormDefListener = scope.$root.$on('formDefinitionLoaded', function (event, sFormDefinitionName) {
                         // Supprime le "listener".
                         clearFormDefListener();
+                        // Sauve les valeurs d'origine.
+                        scope["oOriginalFormValues"] = angular.copy(envSrvc["oFormValues"][sFormDefinitionName]);
                         // Vérification avant l'envoi du formulaire
                         envSrvc["oFormDefinition"][sFormDefinitionName]["beforeEvent"] = function () {
                             var deferred = $q.defer();
@@ -313,10 +315,8 @@ widget.sendSubForm = function () {
                     // Affichage du message de succés.
                     $translate("FORM_VALIDATION_OK").then(function (sTranslation) {
                         $.notify(sTranslation, "success");
+                        formScope[sFormElementName]["appFormSubmitted"] = false;
                         // Recharge le widget.
-                        setTimeout(function(){
-                            window.location.reload();
-                        }, 2000);
                         // Vidage du formulaire.
                         //angular.element("#widget_form_container").empty();
                         /*
@@ -558,9 +558,6 @@ widget.formatSubForm = function (scope) {
                             }
                             else
                                 sDirectory = envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]]["upload_directory"];
-                            //
-                            envSrvc["oFormDefinition"][envSrvc["sFormDefinitionName"]]["rows"].push({"fields": [formSrvc["getFormElementDefinition"](val["name"], scope["sFormDefinitionName"])]});
-                            envSrvc["oFormValues"][envSrvc["sFormDefinitionName"]][val["name"]] = envSrvc["oFormValues"][scope["sFormDefinitionName"]][val["name"]];
 
                             // Fichier sélectionné.
                             if (typeof (tmp["aFiles"]) != "undefined" && tmp["aFiles"].length > 0) {
@@ -612,7 +609,7 @@ widget.formatSubForm = function (scope) {
     var aWkParams = [];
     i = 0;
     while (i < aKeys.length) {
-        if (aKeys[i] != "email_notifications")
+        if (aKeys[i] != "email_notifications" && aKeys[i] != "upload_directory")
             aWkParams.push(aKeys[i] + "=" + oFormValues[aKeys[i]]);
         i++;
     }
diff --git a/module/lang/lang-en.json b/module/lang/lang-en.json
old mode 100755
new mode 100644
index 7adda04952dd6356c25f9ca9375ebcceea502047..8db960cb04e9401ce05af7062e7e349c12b79530
--- a/module/lang/lang-en.json
+++ b/module/lang/lang-en.json
@@ -6,12 +6,14 @@
         "TITLE_MODE_SUPERVISION" : "Supervision",
         "TITLE_MODE_STATISTICS" : "Statistics",
         "TITLE_MODE_PUBLICATION_AUTHOR" : "Publication",
+        "TITLE_MODE_EXPLOITATION" : "Exploitation",
         "TEXT_MODE_MY_WORK" : "User activities",
         "TEXT_MODE_ENGINE" : "FME settings",
         "TEXT_MODE_PUBLICATION" : "Publish FME workspaces",
         "TEXT_MODE_SUPERVISION" : "Supervision",
         "TEXT_MODE_STATISTICS" : "Production of graphs and tables",
         "TEXT_MODE_PUBLICATION_AUTHOR" : "Publish FME workspaces",
+        "TEXT_MODE_EXPLOITATION" : "Exploitation",
         "" : "",
         "SECTION_UPDATE_TITLE_PUBLICATION_GTF_WORKSPACE" : "FME Project n°{{sId}}",
         "SECTION_DISPLAY_TITLE_PUBLICATION_GTF_WORKSPACE" : "FME Project n°{{sId}}",
@@ -19,9 +21,7 @@
         "SECTION_UPDATE_TITLE_PUBLICATION_GTF_EMAIL_TEMPLATE" : "Email template n°{{sId}}",
         "SECTION_DISPLAY_TITLE_PUBLICATION_GTF_EMAIL_TEMPLATE" : "Email template n°{{sId}}",
         "SECTION_INSERT_TITLE_PUBLICATION_GTF_EMAIL_TEMPLATE" : "Email template",
-        "SECTION_UPDATE_TITLE_PUBLICATION_AUTHOR_GTF_WORKSPACE_AUTHOR" : "FME Project n°{{sId}}",
-        "SECTION_DISPLAY_TITLE_PUBLICATION_AUTHOR_GTF_WORKSPACE_AUTHOR" : "FME Project n°{{sId}}",
-        "SECTION_INSERT_TITLE_PUBLICATION_AUTHOR_GTF_WORKSPACE_AUTHOR" : "FME Project",
+        "SECTION_UPDATE_TITLE_EXPLOITATION_EXPLOITATION" : "Exploitation",
         "" : "",
         "FORM_CALCULATE_STATS" : "Calculate",
         "FORM_TITLE_STATISTICS" : "Select parameters for the statistics",
@@ -62,6 +62,8 @@
         "FORM_WORK_DATE_SUPERVISION_ORDER" : "Processing date",
         "FORM_NOTIFICATION_SUPERVISION_ORDER" : "Notification",
         "FORM_URL_SUPERVISION_ORDER" : "Order URL",
+        "FORM_MINEXECDATE_SUPERVISION_ORDER" : "Planning date",
+        "CONFIRM_DELETE_ORDERS_SUPERVISION_ORDER" : "One or more orders are being executed and their processes will be deleted.",
         "" : "",
         "STATUS_TITLE_SUPERVISION_SUBSCRIPTION" : "Subscriptions",
         "ENABLED_SUBSCRIPTION_BOX_TITLE_SUPERVISION_SUBSCRIPTION" : "Enabled",
@@ -122,6 +124,10 @@
         "FORM_MISSING_FORM_PUBLICATION_WORKSPACE" : "Missing form",
         "FORM_WORKSPACE_NAME_EXISTS_PUBLICATION_WORKSPACE" : "This name is already used by another workspace",
         "FORM_FMW_FILE_URL_PUBLICATION_WORKSPACE" : "fmw file of the workspace",
+        "FORM_DATAENCRYPT_PUBLICATION_WORKSPACE" : "Data encryption",
+        "FORM_USEPERSONALDATA_PUBLICATION_WORKSPACE" : "Use of personal data",
+        "FORM_UNITCOST_PUBLICATION_WORKSPACE": "Unit cost",
+        "FORM_COSTPERSECOND_PUBLICATION_WORKSPACE": "Cost per second",
         "" : "",
         "FORM_ID_PUBLICATION_WORKSPACE_UPDATE_METADATA" : "ID",
         "FORM_TITLE_PUBLICATION_WORKSPACE_UPDATE_METADATA" : "Project title",
@@ -229,6 +235,8 @@
         "FORM_TREATMENT_WORKSPACES_MY_WORK_USER_ORDER" : "Workspaces linked to treatment",
         "ERROR_NO_GTF_ENGINE_CONTENT_MY_WORK_USER_ORDER" : "Please create a GTF engine to add orders",
         "ERROR_NO_GTF_ENGINE_TITLE_MY_WORK_USER_ORDER" : "No GTF engine",
+        "FORM_MINEXECDATE_MY_WORK_USER_ORDER" : "Planning date",
+        "FORM_MINEXECDATE_PLACE_HOLDER_MY_WORK_USER_ORDER" : "As soon as possible",
         "" : "",
         "FORM_EXECUTE_WORKSPACE_PUBLICATION_WORKSPACE_SUB_FORM" : "Execute",
         "FORM_PREVISU_PUBLISHED_PUBLICATION_WORKSPACE_SUB_FORM" : "Preview the published form",
@@ -251,6 +259,21 @@
         "FME_VERSION_ENGINE_FME_ENGINE" : "Version",
         "FME_VALIDITY_ENGINE_FME_ENGINE" : "Validity",
         "FME_TYPE_ENGINE_FME_ENGINE" : "Type",
+        "ERROR_FME_LICENSE_EXPIRED_ENGINE_FME_ENGINE" : "The licence has expired",
+        "ERROR_FME_REQUEST_ERROR_ENGINE_FME_ENGINE" : "The request returned an error",
+        "FORM_BTN_START_FME_SERVER_INSTANCE_ENGINE_FME_ENGINE" : "Start",
+        "FORM_BTN_PAUSE_FME_SERVER_INSTANCE_ENGINE_FME_ENGINE" : "Stop",
+        "FORM_BTN_FME_SERVER_INSTANCE_VERSION_ENGINE_FME_ENGINE" : "Version",
+        "MSG_FME_SERVER_INSTANCE_EXECUTING_PAUSE_ENGINE_FME_ENGINE" : "The Fme Server instance is in the process of being stopped",
+        "MSG_FME_SERVER_INSTANCE_PAUSE_ENGINE_FME_ENGINE" : "The Fme Server instance is stopped",
+        "MSG_FME_SERVER_INSTANCE_EXECUTING_START_ENGINE_FME_ENGINE" : "The Fme Server instance is starting up",
+        "MSG_FME_SERVER_INSTANCE_START_ENGINE_FME_ENGINE" : "The Fme Server instance is running",
+        "FORM_FME_SERVER_INSTANCE_NAME_ENGINE_FME_ENGINE" : "Nom de l'instance",
+        "FORM_BTN_REFRESH_FME_SERVER_INSTANCE_STATUT_STATUT_ENGINE_FME_ENGINE" : "Refresh",
+        "FORM_FME_SERVER_INSTANCE_STATUS_ENGINE_FME_ENGINE" : "Status",
+        "FORM_FME_SERVER_INSTANCE_STATUS_RUNNING_ENGINE_FME_ENGINE" : "Instance started",
+        "FORM_FME_SERVER_INSTANCE_STATUS_PAUSED_ENGINE_FME_ENGINE" : "Instance stopped",
+        "FORM_FME_SERVER_INSTANCE_STATUS_executing_action_ENGINE_FME_ENGINE" : "Instance in the process of stopping or starting",
         "" : "",
         "FORM_BTN_CREATE_SUBSCRIPTION_MY_WORK_GTF_USER_SUBSCRIPTION" : "Order",
         "FORM_BTN_UPDATE_SUBSCRIPTION_MY_WORK_GTF_USER_SUBSCRIPTION" : "Update subscription",
@@ -402,9 +425,13 @@
         "FORM_PASSWORD_PROXY_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Proxy server password",
         "FORM_DEFAULT_MAIL_MODEL_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Default email template",
         "FORM_LOG_SECTION_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Log",
-        "FORM_PYCRON_DIR_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Pycron directory (Windows) / Cron (Linux)",
-        "FORM_PYCRON_LOG_DIRECTORY_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Directory Pycron logs",
-        "FORM_GTF_DOC_ALIAS_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "GTF documentation alias",
+        "FORM_PYCRON_DIR_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Pycron directory",
+        "FORM_PYCRON_LOG_DIRECTORY_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Directory Pycron logs",
+        "FORM_GTF_INSTANCE_ID_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "GTF instance identifier",
+        "FORM_BTN_GENERATE_GTF_INSTANCE_ID_WORKSPACE_EDIT_WIDGET" : "Generate",
+        "FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_GTF_CONFIG" :"External use of GTF_CONNECTION_STRING",
+        "FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_CONNECTIONSTRINGIP" : "Public IP for database's connection",
+        "FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_CONNECTIONSTRINGPORT" : "Public Port for database's connection",
         "" : "",
         "FORM_SUBTITLE_INFORMATIONS_CONFIGURATION_CONFIGURATION_GTF_LICENSE" : "Informations",
         "FORM_SUBTITLE_REQUEST_CONFIGURATION_CONFIGURATION_GTF_LICENSE" : "Request license",
@@ -452,6 +479,42 @@
         "FORM_ID_ENGINE_FME_ENGINE" : "ID",
         "FORM_PATH_ENGINE_FME_ENGINE" : "Path to the FME executable",
         "FORM_TITLE_ENGINE_FME_ENGINE" : "FME engine {{::name}}",
+        "FORM_TYPE_ENGINE_FME_ENGINE" : "Type",
+        "FORM_SERVER_URL_ENGINE_FME_ENGINE" : "Server url",
+        "FORM_LOGIN_ENGINE_FME_ENGINE" : "User",
+        "FORM_PASSWORD_ENGINE_FME_ENGINE" : "Password",
+        "FORM_S3_ACCESS_KEY_ID_ENGINE_FME_ENGINE" : "S3 access key id",
+        "FORM_S3_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE" : "S3 secret access key",
+        "FORM_FME_CLOUD_API_TOKEN_ENGINE_FME_ENGINE" : "FME Cloud API token",
+        "FORM_S3_REGION_ENGINE_FME_ENGINE" : "S3 region",
+        "FORM_S3_REGION_US-EAST-2_ENGINE_FME_ENGINE" : "US East (Ohio)",
+        "FORM_S3_REGION_US-EAST-1_ENGINE_FME_ENGINE" : "US East (N. Virginia)",
+        "FORM_S3_REGION_US-WEST-1_ENGINE_FME_ENGINE" : "US West (N. California)",
+        "FORM_S3_REGION_US-WEST-2_ENGINE_FME_ENGINE" : "US West (Oregon)",
+        "FORM_S3_REGION_AP-SOUTH-1_ENGINE_FME_ENGINE" : "Asia Pacific (Mumbai)",
+        "FORM_S3_REGION_AP-NORTHEAST-2_ENGINE_FME_ENGINE" : "Asia Pacific (Seoul)",
+        "FORM_S3_REGION_AP-SOUTHEAST-1_ENGINE_FME_ENGINE" : "Asia Pacific (Singapore)",
+        "FORM_S3_REGION_AP-SOUTHEAST-2_ENGINE_FME_ENGINE" : "Asia Pacific (Sydney)",
+        "FORM_S3_REGION_AP-NORTHEAST-1_ENGINE_FME_ENGINE" : "Asia Pacific (Tokyo)",
+        "FORM_S3_REGION_CA-CENTRAL-1_ENGINE_FME_ENGINE" : "Canada (Central)",
+        "FORM_S3_REGION_CN-NORTH-1_ENGINE_FME_ENGINE" : "China (Beijing)",
+        "FORM_S3_REGION_EU-CENTRAL-1_ENGINE_FME_ENGINE" : "EU (Frankfurt)",
+        "FORM_S3_REGION_EU-WEST-1_ENGINE_FME_ENGINE" : "EU (Ireland)",
+        "FORM_S3_REGION_EU-WEST-2_ENGINE_FME_ENGINE" : "EU (London)",
+        "FORM_S3_REGION_EU-WEST-3_ENGINE_FME_ENGINE" : "EU (Paris)",
+        "FORM_S3_REGION_SA-EAST-1_ENGINE_FME_ENGINE" : "South America (São Paulo)",
+        "FORM_FME_SERVER_INSTANCE_TITLE_ENGINE_FME_ENGINE" : "FME Server instance",
+        "FORM_AMAZON_S3_TITLE_ENGINE_FME_ENGINE" : "Amazon S3",
+        "FORM_IAM_ACCESS_KEY_ID_ENGINE_FME_ENGINE" : "IAM access key to the FME Cloud for GTF service",
+        "FORM_IAM_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE" : "IAM secret access key to the FME Cloud for GTF service",
+        "FORM_FME_SERVER_S3_BUCKET_ENGINE_FME_ENGINE" : "Bucket name",
+        "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE" : "Do you want use external GTF_CONNECTION_STRING ?",
+        "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_YES" : "Yes (Public database informations)",
+        "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_NO" : "No (Private database informations)",
+        "FORM_BTN_TEST_AMAZON_S3_BUCKET_ENGINE_FME_ENGINE" : "Tester",
+        "TEST_AMAZON_S3_BUCKET_ERROR_NO_SUCH_BUCKET_ENGINE_FME_ENGINE" : "The specified bucket does not exist",
+        "TEST_AMAZON_S3_BUCKET_ERROR_INVALID_ACCESS_KEY_ID_FME_ENGINE" : "The S3 Access Key you provided does not exist",
+        "TEST_AMAZON_S3_BUCKET_ERROR_SIGNATURE_DOES_NOT_MATCH_FME_ENGINE" : "The calculation of the signature does not match. Check your S3 secret access key.",
         "" : "",
         "FORM_ID_ENGINE_SERVER" : "ID",
         "FORM_NAME_ENGINE_SERVER" : "Name",
@@ -501,5 +564,8 @@
         "FORM_WIDGET_NOTIFICATIONS_NEEDED_PUBLICATION_WORKSPACE_EDIT_WIDGET" : "Email (Mandatory)",
         "FORM_WIDGET_NOTIFICATIONS_OPTIONAL_PUBLICATION_WORKSPACE_EDIT_WIDGET" : "Email (Optional)",
         "EXPIRED_WIDGET_TOKEN_ERROR_TITLE": "Session timed out",
-        "INVALID_WIDGET_TOKEN_ERROR_TITLE": "Invalid Session"
-}
\ No newline at end of file
+        "INVALID_WIDGET_TOKEN_ERROR_TITLE": "Invalid Session",
+        "FORM_USERS_GROUP_QUALIGEO_DOUBLE_SELECT": "Schemas",
+        "FORM_USERS_GROUP_QUALIGEO_SCHEMA_AVAILABLE": "Available schemas",
+        "FORM_USERS_GROUP_QUALIGEO_SCHEMA_ASSOCIATE": "Associated schemas"
+}
diff --git a/module/lang/lang-fr.json b/module/lang/lang-fr.json
old mode 100755
new mode 100644
index 2073cf66c3c2813e6750a39e9276b3b1e269c153..09079f6d35ef38c455a7f5f8cd819c4434f9670f
--- a/module/lang/lang-fr.json
+++ b/module/lang/lang-fr.json
@@ -6,12 +6,14 @@
         "TITLE_MODE_SUPERVISION" : "Supervision",
         "TITLE_MODE_STATISTICS" : "Statistiques",
         "TITLE_MODE_PUBLICATION_AUTHOR" : "Publication",
+        "TITLE_MODE_EXPLOITATION" : "Exploitation",
         "TEXT_MODE_MY_WORK" : "Activités propres à l'utilisateur connecté",
         "TEXT_MODE_ENGINE" : "Gestion des moteurs",
         "TEXT_MODE_PUBLICATION" : "Publication des projets FME",
         "TEXT_MODE_SUPERVISION" : "Supervision",
         "TEXT_MODE_STATISTICS" : "Production de graphiques et d'états sur l'utilisation des ressources",
         "TEXT_MODE_PUBLICATION_AUTHOR" : "Publication des projets FME",
+        "TEXT_MODE_EXPLOITATION" : "Exploitation",
         "" : "",
         "SECTION_UPDATE_TITLE_PUBLICATION_GTF_WORKSPACE" : "Projet FME n°{{sId}}",
         "SECTION_DISPLAY_TITLE_PUBLICATION_GTF_WORKSPACE" : "Projet FME n°{{sId}}",
@@ -19,9 +21,7 @@
         "SECTION_UPDATE_TITLE_PUBLICATION_GTF_EMAIL_TEMPLATE" : "Modèle e-mail n°{{sId}}",
         "SECTION_DISPLAY_TITLE_PUBLICATION_GTF_EMAIL_TEMPLATE" : "Modèle e-mail n°{{sId}}",
         "SECTION_INSERT_TITLE_PUBLICATION_GTF_EMAIL_TEMPLATE" : "Modèle e-mail",
-        "SECTION_UPDATE_TITLE_PUBLICATION_AUTHOR_GTF_WORKSPACE_AUTHOR" : "Projet FME n°{{sId}}",
-        "SECTION_DISPLAY_TITLE_PUBLICATION_AUTHOR_GTF_WORKSPACE_AUTHOR" : "Projet FME n°{{sId}}",
-        "SECTION_INSERT_TITLE_PUBLICATION_AUTHOR_GTF_WORKSPACE_AUTHOR" : "Projet FME",
+        "SECTION_UPDATE_TITLE_EXPLOITATION_EXPLOITATION" : "Exploitation",
         "" : "",
         "FORM_CALCULATE_STATS" : "Calculer",
         "FORM_TITLE_STATISTICS" : "Sélectionnez les différents critères afin de générer votre rapport statistique",
@@ -62,6 +62,8 @@
         "FORM_WORK_DATE_SUPERVISION_ORDER" : "Date de traitement",
         "FORM_NOTIFICATION_SUPERVISION_ORDER" : "Notification",
         "FORM_URL_SUPERVISION_ORDER" : "URL de la demande",
+        "FORM_MINEXECDATE_SUPERVISION_ORDER" : "Date de planification",
+        "CONFIRM_DELETE_ORDERS_SUPERVISION_ORDER" : "Une ou plusieurs demandes sont en cours d'exécution et leurs processus seront supprimés.",
         "" : "",
         "STATUS_TITLE_SUPERVISION_SUBSCRIPTION" : "Abonnements",
         "ENABLED_SUBSCRIPTION_BOX_TITLE_SUPERVISION_SUBSCRIPTION" : "Actif",
@@ -122,6 +124,10 @@
         "FORM_MISSING_FORM_PUBLICATION_WORKSPACE" : "Formulaire absent",
         "FORM_WORKSPACE_NAME_EXISTS_PUBLICATION_WORKSPACE" : "Ce nom est déja utilisé par un autre projet.",
         "FORM_FMW_FILE_URL_PUBLICATION_WORKSPACE" : "Fichier fmw du projet",
+        "FORM_DATAENCRYPT_PUBLICATION_WORKSPACE" : "Cryptage des données",
+        "FORM_USEPERSONALDATA_PUBLICATION_WORKSPACE" : "Utilisation de données personnelles",
+        "FORM_UNITCOST_PUBLICATION_WORKSPACE": "Coût unitaire",
+        "FORM_COSTPERSECOND_PUBLICATION_WORKSPACE": "Coût à la seconde",
         "" : "",
         "FORM_ID_PUBLICATION_WORKSPACE_UPDATE_METADATA" : "ID",
         "FORM_TITLE_PUBLICATION_WORKSPACE_UPDATE_METADATA" : "Titre du projet",
@@ -199,7 +205,7 @@
         "FORM_DOWNLOAD_FILE_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Télécharger le fichier",
         "FORM_DELETE_FILE_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Supprimer le fichier",
         "FORM_RELOAD_DIRECTORY_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Recharger le répertoire",
-        "FORM_UPLOAD_FMW_FILE_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Mettre à jour",
+        "FORM_UPLOAD_FMW_FILE_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Télécharger",
         "FORM_UPLOAD_ADDITIONAL_RESOURCE_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Télécharger",
         "DELETE_FILE_ERROR_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Erreur pendant la suppression du fichier",
         "FILE_NOT_FOUND_PUBLICATION_WORKSPACE_LOAD_PROJECT_DIRECTORY" : "Le fichier est introuvable",
@@ -229,6 +235,8 @@
         "FORM_TREATMENT_WORKSPACES_MY_WORK_USER_ORDER" : "Projets liés à la demande",
         "ERROR_NO_GTF_ENGINE_CONTENT_MY_WORK_USER_ORDER" : "Veuillez créer un moteur GTF pour ajouter des demandes.",
         "ERROR_NO_GTF_ENGINE_TITLE_MY_WORK_USER_ORDER" : "Aucun Moteur GTF",
+        "FORM_MINEXECDATE_MY_WORK_USER_ORDER" : "Date de planification",
+        "FORM_MINEXECDATE_PLACE_HOLDER_MY_WORK_USER_ORDER" : "Au plus tôt",
         "" : "",
         "FORM_EXECUTE_WORKSPACE_PUBLICATION_WORKSPACE_SUB_FORM" : "Exécuter",
         "FORM_PREVISU_PUBLISHED_PUBLICATION_WORKSPACE_SUB_FORM" : "Prévisualiser le formulaire publié",
@@ -251,6 +259,21 @@
         "FME_VERSION_ENGINE_FME_ENGINE" : "Version",
         "FME_VALIDITY_ENGINE_FME_ENGINE" : "Validité",
         "FME_TYPE_ENGINE_FME_ENGINE" : "Type",
+        "ERROR_FME_LICENSE_EXPIRED_ENGINE_FME_ENGINE" : "La licence a expiré",
+        "ERROR_FME_REQUEST_ERROR_ENGINE_FME_ENGINE" : "La requête a retourné une erreur",
+        "FORM_BTN_START_FME_SERVER_INSTANCE_ENGINE_FME_ENGINE" : "Démarrer",
+        "FORM_BTN_PAUSE_FME_SERVER_INSTANCE_ENGINE_FME_ENGINE" : "Arrêter",
+        "FORM_BTN_FME_SERVER_INSTANCE_VERSION_ENGINE_FME_ENGINE" : "Version",
+        "MSG_FME_SERVER_INSTANCE_EXECUTING_PAUSE_ENGINE_FME_ENGINE" : "L'instance Fme Server est en cours d'arrêt",
+        "MSG_FME_SERVER_INSTANCE_PAUSE_ENGINE_FME_ENGINE" : "L'instance Fme Server est arrêtée",
+        "MSG_FME_SERVER_INSTANCE_EXECUTING_START_ENGINE_FME_ENGINE" : "L'instance Fme Server est en cours de démarrage",
+        "MSG_FME_SERVER_INSTANCE_START_ENGINE_FME_ENGINE" : "L'instance Fme Server est opérationnelle",
+        "FORM_FME_SERVER_INSTANCE_NAME_ENGINE_FME_ENGINE" : "Nom de l'instance",
+        "FORM_BTN_REFRESH_FME_SERVER_INSTANCE_STATUT_STATUT_ENGINE_FME_ENGINE" : "Actualiser",
+        "FORM_FME_SERVER_INSTANCE_STATUS_ENGINE_FME_ENGINE" : "Statut",
+        "FORM_FME_SERVER_INSTANCE_STATUS_RUNNING_ENGINE_FME_ENGINE" : "Instance démarrée",
+        "FORM_FME_SERVER_INSTANCE_STATUS_PAUSED_ENGINE_FME_ENGINE" : "Instance arrêtée",
+        "FORM_FME_SERVER_INSTANCE_STATUS_executing_action_ENGINE_FME_ENGINE" : "Instance en cours d'arrêt ou de démarrage",
         "" : "",
         "FORM_BTN_CREATE_SUBSCRIPTION_MY_WORK_GTF_USER_SUBSCRIPTION" : "Demander",
         "FORM_BTN_UPDATE_SUBSCRIPTION_MY_WORK_GTF_USER_SUBSCRIPTION" : "MAJ abonnement",
@@ -386,7 +409,6 @@
         "FORM_GTF_SCHEMA_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Schéma de GTF",
         "FORM_GTF_HOME_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Répertoire de GTF",
         "FORM_NOT_COMPRESSED_EXTENSION_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Extensions des fichiers à ne pas compresser",
-        
         "FORM_NBR_ORDER_MAX_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Nombre maximum de demandes traitées simultanément",
         "FORM_MAX_ATTEMPT_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Nombre maximum de tentatives",
         "FORM_RADIO_TRUE_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Oui",
@@ -402,10 +424,14 @@
         "FORM_LOGIN_PROXY_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Login du serveur proxy",
         "FORM_PASSWORD_PROXY_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Mot de passe du serveur proxy",
         "FORM_DEFAULT_MAIL_MODEL_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Modèle d' e-mail par défaut",
-        "FORM_LOG_SECTION_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Journaux",
-        "FORM_PYCRON_DIR_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Répertoire de pycron (Windows) / Cron (Linux)",
+        "FORM_LOG_SECTION_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Journaux",
+        "FORM_PYCRON_DIR_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Répertoire de pycron",
         "FORM_PYCRON_LOG_DIRECTORY_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Répertoire des logs de pycron",
-        "FORM_GTF_DOC_ALIAS_CONFIGURATION_CONFIGURATION_GTF_CONFIG": "Alias de la documentation de GTF",
+        "FORM_GTF_INSTANCE_ID_CONFIGURATION_CONFIGURATION_GTF_CONFIG" : "Identifiant de l'instance de GTF",
+        "FORM_BTN_GENERATE_GTF_INSTANCE_ID_WORKSPACE_EDIT_WIDGET" : "Générer",
+        "FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_GTF_CONFIG" :"Utilisation de GTF_CONNECTION_STRING Externe",
+        "FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_CONNECTIONSTRINGIP" : "IP Public de la base de donnée",
+        "FORM_EXTERNAL_CONNSTRING_SECTION_CONFIGURATION_CONFIGURATION_CONNECTIONSTRINGPORT" : "Port Public de la base de donnée",
         "" : "",
         "FORM_SUBTITLE_INFORMATIONS_CONFIGURATION_CONFIGURATION_GTF_LICENSE" : "Informations",
         "FORM_SUBTITLE_REQUEST_CONFIGURATION_CONFIGURATION_GTF_LICENSE" : "Demander la licence",
@@ -453,6 +479,42 @@
         "FORM_ID_ENGINE_FME_ENGINE" : "ID",
         "FORM_PATH_ENGINE_FME_ENGINE" : "Chemin vers l'exécutable de FME",
         "FORM_TITLE_ENGINE_FME_ENGINE" : "Moteur FME {{::name}}",
+        "FORM_TYPE_ENGINE_FME_ENGINE" : "Type",
+        "FORM_SERVER_URL_ENGINE_FME_ENGINE" : "Url du serveur",
+        "FORM_LOGIN_ENGINE_FME_ENGINE" : "Utilisateur",
+        "FORM_PASSWORD_ENGINE_FME_ENGINE" : "Mot de passe",
+        "FORM_S3_ACCESS_KEY_ID_ENGINE_FME_ENGINE" : "Id de la clé d'accès S3",
+        "FORM_S3_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE" : "Clé d'accès secrète S3",
+        "FORM_FME_CLOUD_API_TOKEN_ENGINE_FME_ENGINE" : "Token de l'API de FME Cloud",
+        "FORM_S3_REGION_ENGINE_FME_ENGINE" : "Région S3",
+        "FORM_S3_REGION_US-EAST-2_ENGINE_FME_ENGINE" : "USA Est (Ohio)",
+        "FORM_S3_REGION_US-EAST-1_ENGINE_FME_ENGINE" : "USA Est (Virginie du Nord)",
+        "FORM_S3_REGION_US-WEST-1_ENGINE_FME_ENGINE" : "USA Ouest (Californie du Nord)",
+        "FORM_S3_REGION_US-WEST-2_ENGINE_FME_ENGINE" : "USA Ouest (Oregon)",
+        "FORM_S3_REGION_AP-SOUTH-1_ENGINE_FME_ENGINE" : "Asie-Pacifique (Mumbai)",
+        "FORM_S3_REGION_AP-NORTHEAST-2_ENGINE_FME_ENGINE" : "Asie-Pacifique (Séoul)",
+        "FORM_S3_REGION_AP-SOUTHEAST-1_ENGINE_FME_ENGINE" : "Asie-Pacifique (Singapour)",
+        "FORM_S3_REGION_AP-SOUTHEAST-2_ENGINE_FME_ENGINE" : "Asie-Pacifique (Sydney)",
+        "FORM_S3_REGION_AP-NORTHEAST-1_ENGINE_FME_ENGINE" : "Asie-Pacifique (Tokyo)",
+        "FORM_S3_REGION_CA-CENTRAL-1_ENGINE_FME_ENGINE" : "Canada (Centre)",
+        "FORM_S3_REGION_CN-NORTH-1_ENGINE_FME_ENGINE" : "Chine (Pékin)",
+        "FORM_S3_REGION_EU-CENTRAL-1_ENGINE_FME_ENGINE" : "UE (Francfort)",
+        "FORM_S3_REGION_EU-WEST-1_ENGINE_FME_ENGINE" : "UE (Irlande)",
+        "FORM_S3_REGION_EU-WEST-2_ENGINE_FME_ENGINE" : "UE (Londres)",
+        "FORM_S3_REGION_EU-WEST-3_ENGINE_FME_ENGINE" : "EU (Paris)",
+        "FORM_S3_REGION_SA-EAST-1_ENGINE_FME_ENGINE" : "Amérique du Sud (São Paulo)",
+        "FORM_FME_SERVER_INSTANCE_TITLE_ENGINE_FME_ENGINE" : "Instance FME Server",
+        "FORM_AMAZON_S3_TITLE_ENGINE_FME_ENGINE" : "Amazon S3",
+        "FORM_IAM_ACCESS_KEY_ID_ENGINE_FME_ENGINE" : "Id de la clé d'accès IAM au service FME Cloud for GTF",
+        "FORM_IAM_SECRET_ACCESS_KEY_ENGINE_FME_ENGINE" : "Clé d'accès secrète IAM au service FME Cloud for GTF",
+        "FORM_FME_SERVER_S3_BUCKET_ENGINE_FME_ENGINE" : "Nom du compartiment",
+        "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE" : "Voulez-vous utiliser la GTF_CONNECTION_STRING externe ?",
+        "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_YES" : "Oui (Informations de connexion public à la base)",
+        "FORM_USEEXTERNALDBCONNECTION_ENGINE_FME_ENGINE_NO" : "Non (Informations de connexion privée à la base)",
+        "FORM_BTN_TEST_AMAZON_S3_BUCKET_ENGINE_FME_ENGINE" : "Tester",
+        "TEST_AMAZON_S3_BUCKET_ERROR_NO_SUCH_BUCKET_ENGINE_FME_ENGINE" : "Le compartiment spécifié n'existe pas.",
+        "TEST_AMAZON_S3_BUCKET_ERROR_INVALID_ACCESS_KEY_ID_FME_ENGINE" : "La clé d'accès S3 spécifiée n'existe pas.",
+        "TEST_AMAZON_S3_BUCKET_ERROR_SIGNATURE_DOES_NOT_MATCH_FME_ENGINE" : "Le calcul de la signature ne correspond pas. Vérifiez votre clé d'accès secrète S3.",
         "" : "",
         "FORM_ID_ENGINE_SERVER" : "ID",
         "FORM_NAME_ENGINE_SERVER" : "Nom",
@@ -502,5 +564,8 @@
         "FORM_WIDGET_NOTIFICATIONS_NEEDED_PUBLICATION_WORKSPACE_EDIT_WIDGET" : "Adresse e-mail (Obligatoire)",
         "FORM_WIDGET_NOTIFICATIONS_OPTIONAL_PUBLICATION_WORKSPACE_EDIT_WIDGET" : "Adresse e-mail (Optionnelle)",
         "EXPIRED_WIDGET_TOKEN_ERROR": "Votre session a expirée.",
-        "INVALID_WIDGET_TOKEN_ERROR": "Votre session est invalide."
+        "INVALID_WIDGET_TOKEN_ERROR": "Votre session est invalide.",
+        "FORM_USERS_GROUP_QUALIGEO_DOUBLE_SELECT": "Schémas",
+        "FORM_USERS_GROUP_QUALIGEO_SCHEMA_AVAILABLE": "Schémas disponibles",
+        "FORM_USERS_GROUP_QUALIGEO_SCHEMA_ASSOCIATE": "Schémas associés"
 }
diff --git a/module/less/configuration.less b/module/less/configuration.less
index 6f1045428fc4186b06544205a917f791be2176c4..99d9f38605959cb8c7e2aefda35c2758f5b93ad4 100755
--- a/module/less/configuration.less
+++ b/module/less/configuration.less
@@ -2,3 +2,7 @@
 .gtf-license-file-request-connect-btn {
         float: right !important;
 }
+// Bouton de génération de l'instance de GTF.
+.gtf-instance-id > div:nth-child(2) {
+    padding: 0;
+}
diff --git a/module/less/fmeEngines.less b/module/less/fmeEngines.less
new file mode 100755
index 0000000000000000000000000000000000000000..1b6dcc949574b6d4f5cf7e5f784ca7c705be7ef2
--- /dev/null
+++ b/module/less/fmeEngines.less
@@ -0,0 +1,6 @@
+// Rotation du bouton d'actualisation d'une l'instance Fme Server.
+.fme-server-instance-status-button-rotation {
+    -webkit-animation:spin 1.5s linear infinite;
+    -moz-animation:spin 1.5s linear infinite;
+    animation:spin 1.5s linear infinite;
+}
\ No newline at end of file
diff --git a/module/less/main.less b/module/less/main.less
index 74edecbdc0eabbbfae48224ed282d5f8a9bdb85e..c220a40001548b885fc48ab63e78dac96b2bcd6c 100755
--- a/module/less/main.less
+++ b/module/less/main.less
@@ -16,6 +16,7 @@
 @import 'importWorkspace.less';
 @import 'configuration.less';
 @import 'workspace.less';
+@import 'fmeEngines.less';
 
 // Récap. de supervision (Etat des demandes, abo., surv.)
 .recap{
diff --git a/module/templates/testFmeEngineTpl.html b/module/templates/testFmeEngineTpl.html
index afb5a574fc549ed6a038308095447dbf51e12a65..d56899187e9dfce9bae48396fcacce7637cdd61f 100755
--- a/module/templates/testFmeEngineTpl.html
+++ b/module/templates/testFmeEngineTpl.html
@@ -5,10 +5,10 @@
                         <h3 class="panel-title" data-translate="SUCCESS_FME_ENGINE_FME_ENGINE"></h3>
                 </div>
                 <ul class="list-group">
-                        <li class="list-group-item"><span data-translate="FME_HOST_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.host}}</li>
-                        <li class="list-group-item"><span data-translate="FME_VERSION_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.version}}</li>
-                        <li class="list-group-item"><span data-translate="FME_TYPE_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.type}}</li>
-                        <li class="list-group-item"><span data-translate="FME_VALIDITY_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.validity}}</li>
+                        <li ng-if="::oTestFmeEngineResult.host" class="list-group-item"><span data-translate="FME_HOST_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.host}}</li>
+                        <li ng-if="::oTestFmeEngineResult.version"class="list-group-item"><span data-translate="FME_VERSION_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.version}}</li>
+                        <li ng-if="::oTestFmeEngineResult.type"class="list-group-item"><span data-translate="FME_TYPE_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.type}}</li>
+                        <li ng-if="::oTestFmeEngineResult.validity"class="list-group-item"><span data-translate="FME_VALIDITY_ENGINE_FME_ENGINE"></span> : {{::oTestFmeEngineResult.validity}}</li>
                 </ul>                        
         </div>
         <!-- Erreur -->
diff --git a/web_service/class/gtf_lib/AmazonAWS.class.inc b/web_service/class/gtf_lib/AmazonAWS.class.inc
deleted file mode 100755
index 11931ea05a4a5867ee02cb23b64021505908aa27..0000000000000000000000000000000000000000
--- a/web_service/class/gtf_lib/AmazonAWS.class.inc
+++ /dev/null
@@ -1,383 +0,0 @@
-<?php
-require_once("vmlib/logUtil.inc");
-
-/**
- * \file AmazonAWS.php
- * \brief Main class to use AWS services (keyGen, CrulRequest, ...)
- *
- * \author Frederic Carretero <frederic.carretero@veremes.com>
- */
-
-Class AmazonAWS {
-    const HASHING_ALGORITHM = 'sha256';
-    public $sAwsRegion;
-    public $aLastCurlRequestInfo;
-    public $sHost;
-    private $sAwsAccessKeyId;
-    private $sAwsSecretAccessKey;
-    private $sHashingAlgorithmString;
-    
-    /**
-     * construct
-     * @param {string} $sAwsAccessKeyId Access key ID.
-     * @param {string} $sAwsSecretAccessKey Secret access key.
-     * @param {string} $sAwsRegion Region.
-     */
-    function __construct ($sAwsAccessKeyId, $sAwsSecretAccessKey, $sAwsRegion) {
-        $this->sAwsAccessKeyId = $sAwsAccessKeyId;
-        $this->sAwsSecretAccessKey = $sAwsSecretAccessKey;
-        $this->sAwsRegion = $sAwsRegion;
-        $this->sHashingAlgorithmString = 'AWS4-HMAC-' . strtoupper(self::HASHING_ALGORITHM);
-    }
-    
-    /**
-     * Get value of inaccessible property.
-     * @param {string} $sPropertyName Name of the property.
-     * @return Paramter's value
-     */
-    function __get($sPropertyName) {
-        if (isset($this->$sPropertyName))
-            return $this->$sPropertyName;
-    }
-    
-    /**
-     * generate an header for AWS request
-     * @param {string} $sMainRequestString Main request String with this pattern: 'GET https://s3.amazonaws.com/azerty/?Action=ListUsers&Version=2010-05-08 HTTP/1.1'.
-     * @return array request header for AWS or false if error
-     */
-    function generateAwsSignedHeaders ($sMainRequestString, $sHost, $sService, $aHeaders = array(), $sRequestPayload = 'UNSIGNED-PAYLOAD'){
-        $aMainRequest = explode(" ", $sMainRequestString);
-
-        if(count($aMainRequest) < 2){
-            writeToErrorLog('sMainRequestString has to be as this pattern : GET https://s3.amazonaws.com/azerty/?Action=ListUsers&Version=2010-05-08 HTTP/1.1 and yours is ' . $sMainRequestString);
-            return false;
-        }
-
-        $sTimestamp = time();
-        // Entêtes obligatoires.
-        //$sXAmzDate = '20150830T123600Z';//gmdate('Ymd\THis\Z', $sTimestamp);
-        //$sDate = '20150830';//gmdate('Ymd', $sTimestamp);
-        $sXAmzDate = gmdate('Ymd\THis\Z', $sTimestamp);
-        $sDate = gmdate('Ymd', $sTimestamp);
-
-        $sHashedPayload = $this->createHashedPayload($sRequestPayload);
-
-        array_push($aHeaders, 'x-amz-date: ' . $sXAmzDate);
-        array_push($aHeaders, 'host: ' . $sHost);
-        array_push($aHeaders, 'x-amz-content-' . self::HASHING_ALGORITHM . ': ' . $sHashedPayload);
-        
-        sort($aHeaders);
-
-        $sSignedHeaders = $this->prepareQuerySignedHeaders($aHeaders);
-
-        // 1. Création d'une demande canonique pour Signature V4.
-        $sCanonicalRequest = $this->mainRequestArrayToCanonicalString($aMainRequest, $sHost, $aHeaders, $sHashedPayload, $sSignedHeaders);
-
-        // 2. Création d'une chaîne à signer pour Signature V4.
-        $sStringToSign = $this->createStringToSignv2($sDate, $sXAmzDate, $sCanonicalRequest, $sService);
-
-        // 3. Calcul de la signature pour AWS Signature V4.
-        $sSigningKey = $this->createSigningKey($sService, $sDate);
-        $sSignature = $this->calculateSignature($sStringToSign, $sSigningKey);
-
-        // 4. Création de l'entête "Authorization" pour la requête.
-        $sCredentialScope = $this->createCredentialScope($sDate, $sService);
-        $sAuthorizationHeader = $this->generateAuthorizationHeader($this->sHashingAlgorithmString, $sCredentialScope, $sSignedHeaders, $sSignature);
-
-        array_push($aHeaders, 'Authorization: ' . $sAuthorizationHeader);
-
-        return $aHeaders;
-    }
-
-    /**
-     * generate an canonical request for AWS request
-     * @param {array} $aMainRequest Main request String with this pattern: 'GET https://s3.amazonaws.com/azerty/?Action=ListUsers&Version=2010-05-08 HTTP/1.1' exploded on spaces.
-     * @param {string} $sHost HostName to parse url
-     * @param {array} $aHeaders sorted array of all the headers of this request
-     * @param {string} $sHashedPayload hash of the payload request 
-     * @return array request header for AWS or false if error
-     */
-    function mainRequestArrayToCanonicalString($aMainRequest, $sHost, $aHeaders, $sHashedPayload, $sSignedHeaders){
-        $sHTTPRequestMethod = $aMainRequest[0]; 
-
-        $aFullUrl = explode("?", $aMainRequest[1]);
-        
-        $sCanonicalQueryString  = "";
-        if(count($aFullUrl) > 1){
-            $sCanonicalQueryString  = $this->prepareQueryString($aFullUrl[1]);
-        }
-
-        $sCanonicalUri = $this->prepareQueryUri($aFullUrl[0], $sHost);
-        $sCanonicalHeaders = $this->prepareQueryHeaders($aHeaders);
-        $sCanonicalSignedHeaders = $sSignedHeaders;
-
-        return  $sHTTPRequestMethod . chr(10) .
-                $sCanonicalUri . chr(10) .
-                $sCanonicalQueryString . chr(10) .
-                $sCanonicalHeaders . chr(10) .
-                $sCanonicalSignedHeaders . chr(10) .
-                $sHashedPayload;
-    }
-
-    /**
-     * Curl request
-     * @param {string} $sUrl Url of the Curl request.
-     * @param {string} $sType Type of the Curl request (GET, POST).
-     * @param {array} $aData Data of the Curl request.
-     * @param {array} $aHeaders Headers of the Curl request.
-     * @return Request result
-     */
-    // 
-    function curlRequest($sUrl, $sType, $aData = array(), $aHeaders = array(), $bMultipartFormData = false) {
-        //
-        $this->aLastCurlRequestInfo = '';
-        //
-        $ch = curl_init();
-        $sType = strtoupper($sType);
-        // Force la méthode de requête utilisée (GET, POST...).
-        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $sType);
-        // Url à utiliser.
-        if (($sType == 'GET' || $sType == 'DELETE') && !empty($aData))
-            $sUrl .= '?' . http_build_query($aData);
-        curl_setopt($ch, CURLOPT_URL, $sUrl);
-        // Retour sous forme de texte. 
-        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
-        // Requête POST.
-        if ($sType == 'POST') {
-            curl_setopt($ch, CURLOPT_POST, true);
-            // Chaîne de requête en encodage URL.
-            if (is_array($aData) && !$bMultipartFormData)
-                $aData = http_build_query($aData);
-            // Données de la requête.
-            curl_setopt($ch, CURLOPT_POSTFIELDS, $aData);
-            //
-            curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
-            // Entête pour la requête en POST.
-            //$aHeaders[] = 'Content-Type: application/x-www-form-urlencoded';
-        }
-        // Entête pour la requête
-        //$aHeaders[] = 'Accept: application/json';
-        //if (!empty($this->sToken))
-            //$aHeaders[] = 'Authorization: Bearer ' . $this->sToken; // Token obligatoire pour éxécuter la requête.
-        curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeaders);
-        // Durée max. de la requête.
-        //curl_setopt($ch, CURLOPT_TIMEOUT, 120);
-        // Exécute la session CURL.
-        // Log.
-        /*
-        $handle = fopen("curl_log.txt", "a");
-        fwrite($handle, PHP_EOL . '-----------------------' . PHP_EOL);
-        curl_setopt($ch, CURLOPT_VERBOSE, true);
-        curl_setopt($ch, CURLOPT_STDERR , $handle);
-        */
-        curl_setopt($ch, CURLINFO_HEADER_OUT, true);
-        // Curl error: SSL certificate problem: unable to get local issuer certificate
-        // Curl error n°60
-        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);      
-        //
-        $output = curl_exec($ch);
-        // Erreur de la requête CURL.
-        if(curl_errno($ch)) {
-            writeToErrorLog('Curl error: ' . curl_error($ch));
-            writeToErrorLog('Curl error n°' . curl_errno($ch));
-        }
-        // Informations de la requête.
-        $aCurlInfo = curl_getinfo($ch);
-        $this->aLastCurlRequestInfo = $aCurlInfo;
-        //file_put_contents('C:/svn/gtf_cloud/gtf.engines/log/response.log', print_r($aCurlInfo, true));
-        //writeToErrorLog(print_r(curl_getinfo($ch), true));
-        
-        // Ferme la session CURL.
-        curl_close($ch);
-        //
-        //fclose($handle);
-        //
-        return $output;
-    }
-    
-    /**
-     * Creating a credential scope.
-     * @param {string} $sDate Date (YYYYMMDD).
-     * @param {string} $sApiComponentService Api component service.
-     * @return Credential scope.
-     */
-    function createCredentialScope($sDate, $sApiComponentService) {
-        return $sDate . "/" . $this->sAwsRegion . '/' . $sApiComponentService . '/aws4_request';
-    }
-    
-    /**
-     * Creating a string to sign.
-     * @param {string} $sDate Date (YYYYMMDD).
-     * @param {string} $sTimestamp Unix timestamp.
-     * @param {string} $sCanonicalRequest Canonical request.
-     * @param {string} $sApiComponentService Api component service.
-     * @return String to sign.
-     */
-    function createStringToSign($sDate, $sTimestamp, $sCanonicalRequest, $sApiComponentService) {
-        $sRequestDateTime = $sDate . 'T' . gmdate('His', $sTimestamp) . 'Z';
-        $sCredentialScope = $this->createCredentialScope($sDate, $sApiComponentService);
-        $sHashedCanonicalRequest = hash(self::HASHING_ALGORITHM, $sCanonicalRequest, false);
-        $sStringToSign = $this->sHashingAlgorithmString . chr(10) .
-                        $sRequestDateTime . chr(10) .
-                        $sCredentialScope . chr(10) .
-                        $sHashedCanonicalRequest;
-        return $sStringToSign;
-    }
-
-    /**
-     * Creating a string to sign.
-     * @param {string} $sDate Date (YYYYMMDD).
-     * @param {string} $sTimestamp Unix timestamp.
-     * @param {string} $sCanonicalRequest Canonical request.
-     * @param {string} $sApiComponentService Api component service.
-     * @return String to sign.
-     */
-    function createStringToSignv2($sDate, $sXAmzDate, $sCanonicalRequest, $sApiComponentService) {
-        $sCredentialScope = $this->createCredentialScope($sDate, $sApiComponentService);
-        $sHashedCanonicalRequest = hash(self::HASHING_ALGORITHM, $sCanonicalRequest, false);
-        $sStringToSign = $this->sHashingAlgorithmString . chr(10) .
-                        $sXAmzDate . chr(10) .
-                        $sCredentialScope . chr(10) .
-                        $sHashedCanonicalRequest;
-        return $sStringToSign;
-    }
-
-    /**
-     * Creating a hashed payload.
-     * @param {string} $sPayload CurrentPayload.
-     * @return String hashed Payload.
-     */
-    function createHashedPayload($sPayload){
-        if($sPayload == "UNSIGNED-PAYLOAD"){
-            return $sPayload;
-        }else{
-            return hash(self::HASHING_ALGORITHM, $sPayload, false);
-        }
-    }
-
-    /**
-     * Prepare a query string for signature calculation .
-     * @param {string} $sQueryString queryString to prepare.
-     * @return QueryString prepared
-     */
-    function prepareQueryString ($sQueryString){
-        $aUri = explode("?", $sQueryString);
-        $sParameters = $aUri[count($aUri) - 1];
-        $aParameters = explode("&", $sParameters);
-
-        $sReturn = ""; 
-
-        //order array before treatement F < a Case sensitive
-        sort($aParameters);
-
-        for ($i = 0; $i < count($aParameters); $i++){
-            $aParameter = explode("=",$aParameters[$i]);
-            if(count($aParameter) === 2){
-                $sReturn .= rawurlencode($aParameter[0]);
-                $sReturn .= "=";
-                $sReturn .= rawurlencode($aParameter[1]);
-                if ($i < count($aParameters) - 1){
-                    $sReturn .= "&";
-                }
-            }
-        }
-        return $sReturn;
-    }
-
-    /**
-     * Prepare a Uri for signature calculation .
-     * @param {string} $sUriWithoutQuery queryURI to prepare. (https://s3.amazon.aws.com/toto/tata)
-     * @param {string} $sHost Hostname to extract the path after domain name
-     * @return QueryString prepared
-     */
-    function prepareQueryUri ($sUriWithoutQuery, $sHost){
-        $aUrl = explode("/", $sUriWithoutQuery);
-
-        $i = 0;
-        $aUri = array();
-        $bDomainNameFound = false;
-
-        while ($i < count($aUrl)){
-            if($aUrl[$i] === $sHost && !$bDomainNameFound){
-                $bDomainNameFound = true;
-            }else if ($bDomainNameFound){
-                array_push($aUri, $aUrl[$i]);
-            }
-            $i++;
-        }
-
-        return "/" . str_replace('%2F', '/', rawurlencode(implode("/", $aUri)));
-    }
-
-    /**
-     * Prepare headers for signature calculation .
-     * @param {array} $aHeaders array of the headers for the request (array of string)
-     * @return QueryString prepared
-     */
-    function prepareQueryHeaders ($aHeaders){
-        $sReturn = "";
-        for ($i = 0; $i < count($aHeaders); $i++){
-            $aHeader = explode(":", $aHeaders[$i]);
-            if (count($aHeader) === 2){
-                $sReturn .= strtolower($aHeader[0]);
-                $sReturn .= ":";
-                $sReturn .= trim($aHeader[1]);
-                $sReturn .= chr(10);
-            }
-        }
-        return $sReturn;
-    }
-
-    /**
-     * Prepare signed headers for signature calculation .
-     * @param {array} $aHeaders array of the headers for the request (array of string)
-     * @return QueryString prepared
-     */
-    function prepareQuerySignedHeaders ($aHeaders){
-        $sReturn = "";
-        for ($i = 0; $i < count($aHeaders); $i++){
-            $aHeader = explode(":", $aHeaders[$i]);
-            if (count($aHeader) === 2){
-                $sReturn .= strtolower($aHeader[0]);
-                if ($i < count($aHeaders) - 1){
-                    $sReturn .= ";";
-                }
-                
-            }
-        }
-        return $sReturn;
-    }
-    
-    /**
-     * Creating a signing Key.
-     * @param {string} $sApiComponentService Component service for API execution.
-     * @param {string} $sDate Date (YYYYMMDD).
-     * @return Signing key.
-     */
-    function createSigningKey($sApiComponentService, $sDate) {
-        return hash_hmac(self::HASHING_ALGORITHM, 'aws4_request', hash_hmac(self::HASHING_ALGORITHM, $sApiComponentService, hash_hmac(self::HASHING_ALGORITHM, $this->sAwsRegion, hash_hmac(self::HASHING_ALGORITHM, $sDate, 'AWS4' . $this->sAwsSecretAccessKey, true), true), true), true);
-    }
-    
-    /**
-     * Calculating a Signature (Version 4 algorithm).
-     * @param {string} $sStringToSign String to sign.
-     * @param {string} $sSigningKey Signing key.
-     * @return Signature.
-     */
-    function calculateSignature($sStringToSign, $sSigningKey) {
-        return hash_hmac(self::HASHING_ALGORITHM, $sStringToSign, $sSigningKey);
-    }
-    
-    /**
-     * Generating an authorization header.
-     * @param {string} $sAlgorithm String of the hashing algorithm.
-     * @param {string} $sCredentialScope Credential scope.
-     * @param {string} $sSignedHeaders Request header names.
-     * @param {string} $sSignature Calculated signature.
-     * @return Headers for request.
-     */
-    function generateAuthorizationHeader($sAlgorithm, $sCredentialScope, $sSignedHeaders, $sSignature) {
-        return $sAlgorithm . ' Credential=' . $this->sAwsAccessKeyId . '/' . $sCredentialScope . ', SignedHeaders=' . $sSignedHeaders . ', Signature=' . $sSignature;
-    }
-}
-?>
\ No newline at end of file
diff --git a/web_service/class/gtf_lib/AmazonApiGateway.class.inc b/web_service/class/gtf_lib/AmazonApiGateway.class.inc
deleted file mode 100755
index 0943464f3992027eea302e84b35986b5534c240c..0000000000000000000000000000000000000000
--- a/web_service/class/gtf_lib/AmazonApiGateway.class.inc
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-require_once 'gtf_lib/AmazonAwWS.class.inc';
-
-/**
- * \file AmazonApiGateway.php
- * \brief Class to use API Gateway FME cloud
- *
- * \author Frederic Carretero <frederic.carretero@veremes.com>
- */
-
-Class AmazonApiGateway extends AmazonAWS {
-    const API_COMPONENT_SERVICE = 'execute-api';
-    public $sRestApiId; // Identifiant de l'API.
-    public $sStageName; // Nom de l'étape d'un déploiement de l'API.
-    
-    /**
-     * construct
-     * @param {string} $sAwsAccessKeyId Access key ID.
-     * @param {string} $sAwsSecretAccessKey Secret access key.
-     * @param {string} $sAwsRegion Region.
-     * @param {string} $sRestApiId API identifier.
-     * @param {string} $sStageName Stage name of an API deployment.
-     */
-    function __construct ($sAwsAccessKeyId, $sAwsSecretAccessKey, $sAwsRegion, $sRestApiId, $sStageName) {
-        // Paramètres obligatoires de la classe mère AmazonAWS.
-        parent::__construct($sAwsAccessKeyId, $sAwsSecretAccessKey, $sAwsRegion);
-        // Paramètres pour l'url racine de l'API.
-        $this->sRestApiId = $sRestApiId;
-        $this->sStageName = $sStageName;
-        //if($sAwsRegion == 'us-east-1')
-            //$this->sHost = trim('' . self::API_COMPONENT_SERVICE . '.amazonaws.com');
-        //else
-            $this->sHost =  trim($sRestApiId . '.' . self::API_COMPONENT_SERVICE . '.' . $sAwsRegion . '.amazonaws.com');
-    }
-    
-    /**
-     * Generating all the headers for the request.
-     * @return Headers for request.
-     */
-    function generateRequestHeaders() {
-        $sTimestamp = time();
-        // Entêtes obligatoires.
-        $sXAmzDate = gmdate('Ymd\THis\Z', $sTimestamp);
-        $sDate = gmdate('Ymd', $sTimestamp);
-        // Charge utile vide hachée.
-        $sRequestPayload = '';
-        
-        // 1. Création d'une demande canonique pour Signature V4.
-        $sHttpRequestMethod = 'GET';
-        $sCanonicalUri = str_replace('%2F', '/', rawurlencode('/' . $this->sStageName));
-        $sCanonicalQueryString = '';
-        $sCanonicalHeaders = 'host:' . $this->sHost . chr(10) .
-                            'x-amz-date:' . $sXAmzDate . chr(10);
-        $sSignedHeaders = 'host;x-amz-date';
-        $sHashedPayload = hash(self::HASHING_ALGORITHM, $sRequestPayload, false);
-        $sCanonicalRequest = $sHttpRequestMethod . chr(10) .
-                            $sCanonicalUri . chr(10) .
-                            $sCanonicalQueryString . chr(10) .
-                            $sCanonicalHeaders . chr(10) .
-                            $sSignedHeaders . chr(10) .
-                            $sHashedPayload;
-
-        // 2. Création d'une chaîne à signer pour Signature V4.
-        $sStringToSign = $this->createStringToSign($sDate, $sTimestamp, $sCanonicalRequest, self::API_COMPONENT_SERVICE);
-
-        // 3. Calcul de la signature pour AWS Signature V4.
-        $sSigningKey = $this->createSigningKey(self::API_COMPONENT_SERVICE, $sDate);
-        $sSignature = $this->calculateSignature($sStringToSign, $sSigningKey);
-
-        // 4. Création de l'entête "Authorization" pour la requête.
-        $sCredentialScope = $this->createCredentialScope($sDate, self::API_COMPONENT_SERVICE);
-        $sAuthorizationHeader = $this->generateAuthorizationHeader($this->sHashingAlgorithmString, $sCredentialScope, $sSignedHeaders, $sSignature);
-
-        // Entêtes pour la requete.
-        $aHeaders = array(
-            'Authorization: ' . $sAuthorizationHeader,
-            'X-Amz-Date: ' . $sXAmzDate
-        );
-        /*
-        echo PHP_EOL . 'Canonical request:' . PHP_EOL;
-        print_r($sCanonicalRequest);
-        echo PHP_EOL . PHP_EOL . 'String To Sign:' . PHP_EOL;
-        print_r($sStringToSign);
-        */
-        return $aHeaders;
-    }
-}
-?>
\ No newline at end of file
diff --git a/web_service/class/gtf_lib/AmazonS3.class.inc b/web_service/class/gtf_lib/AmazonS3.class.inc
deleted file mode 100755
index 5b8265d9bcc229a501602ccd7ba5abd2d0af25d1..0000000000000000000000000000000000000000
--- a/web_service/class/gtf_lib/AmazonS3.class.inc
+++ /dev/null
@@ -1,297 +0,0 @@
-<?php
-require_once 'gtf_lib/AmazonAWS.class.inc';
-
-/**
- * \file AmazonS3.php
- * \brief Class to upload and get file in a bucket S3
- *
- * \author Frederic Carretero <frederic.carretero@veremes.com>
- * \author Anthony Borghi <anthony.borghi@veremes.com>
- */
-
-Class AmazonS3 extends AmazonAWS {
-    const API_COMPONENT_SERVICE = 's3';
-    
-    /**
-     * construct
-     * @param {string} $sAwsAccessKeyId Access key ID.
-     * @param {string} $sAwsSecretAccessKey Secret access key.
-     * @param {string} $sAwsRegion Region.
-     */
-    function __construct ($sAwsAccessKeyId, $sAwsSecretAccessKey, $sAwsRegion) {
-        // Paramètres obligatoires de la classe mère AmazonAWS.
-        parent::__construct($sAwsAccessKeyId, $sAwsSecretAccessKey, $sAwsRegion);
-        /*
-        if($sAwsRegion == 'us-east-1')
-            $this->sHost = trim('s3.amazonaws.com');
-        else
-            $this->sHost =  trim('s3-' . $sAwsRegion . '.amazonaws.com');
-        */
-        // Url racine de l'API.
-        $this->sHost =  trim(self::API_COMPONENT_SERVICE . '-' . $sAwsRegion . '.amazonaws.com');
-    }
-    
-    /**
-     * Generating all the headers for a GET request. deprecated
-     * @param {string} $sBucket A container for objects stored in Amazon S3.
-     * @param {string} $sKey The unique identifier for an object within a bucket.
-     * @return Headers for request.
-     */
-    function generateRequestHeaders($sBucket, $sKey, $sQueryParameter = '', $sRequestPayload = 'UNSIGNED-PAYLOAD') {
-        // 
-        $sServiceEndpoint = $sBucket . '.' . $this->sHost;
-        $query_string = "";
-        $sTimestamp = time();
-        // Entêtes obligatoires.
-        $sXAmzDate = gmdate('Ymd\THis\Z', $sTimestamp);
-        $sDate = gmdate('Ymd', $sTimestamp);
-        //$sRequestPayload = '$sRequestPayload ';
-        
-        // 1. Création d'une demande canonique pour Signature V4.
-        $sHttpRequestMethod = 'GET';
-        $sCanonicalUri = str_replace('%2F', '/', rawurlencode('/' . $sKey));
-        $sCanonicalQueryString = $this->prepareQueryString($sQueryParameter);
-        $sCanonicalHeaders = 'host:' . $sServiceEndpoint . chr(10) .
-                            'x-amz-content-' . self::HASHING_ALGORITHM . ':' . $sRequestPayload . chr(10) .
-                            'x-amz-date:' . $sXAmzDate . chr(10);
-        $sSignedHeaders = 'host;x-amz-content-' . self::HASHING_ALGORITHM . ';x-amz-date';
-        $sHashedPayload = $this->createHashedPayload($sRequestPayload);
-        //$sHashedPayload = $sRequestPayload;
-        $sCanonicalRequest = $sHttpRequestMethod . chr(10) .
-                            $sCanonicalUri . chr(10) .
-                            $sCanonicalQueryString . chr(10) .
-                            $sCanonicalHeaders . chr(10) .
-                            $sSignedHeaders . chr(10) .
-                            $sHashedPayload;
-
-        // 2. Création d'une chaîne à signer pour Signature V4.
-        $sStringToSign = $this->createStringToSign($sDate, $sTimestamp, $sCanonicalRequest, self::API_COMPONENT_SERVICE);
-
-        // 3. Calcul de la signature pour AWS Signature V4.
-        $sSigningKey = $this->createSigningKey(self::API_COMPONENT_SERVICE, $sDate);
-        $sSignature = $this->calculateSignature($sStringToSign, $sSigningKey);
-
-        // 4. Création de l'entête "Authorization" pour la requête.
-        $sCredentialScope = $this->createCredentialScope($sDate, self::API_COMPONENT_SERVICE);
-        $sAuthorizationHeader = $this->generateAuthorizationHeader($this->sHashingAlgorithmString, $sCredentialScope, $sSignedHeaders, $sSignature);
-
-        // Entêtes pour la requete.
-        $aHeaders = array(
-            'host: ' . $sServiceEndpoint,
-            'x-amz-content-' . self::HASHING_ALGORITHM . ': ' . $sHashedPayload,
-            'x-amz-date: ' . $sXAmzDate,
-            'Authorization: ' . $sAuthorizationHeader
-        );
-
-        return $aHeaders;
-    }
-    
-    /**
-     * Generating all the data for a POST request.
-     * @param {string} $sBucket A container for objects stored in Amazon S3.
-     * @param {string} $sKey The unique identifier for an object within a bucket.
-     * @return Headers for request.
-     */
-    function generatePostData($sBucket, $sKey, $sMethod = 'get') {
-        $sTimestamp = time();
-        $sXAmzDate = gmdate('Ymd\THis\Z', $sTimestamp);
-        $sDate = gmdate('Ymd', $sTimestamp);
-        $sAcl = 'public-read';
-        $sCredential = $this->sAwsAccessKeyId . '/' . $sDate . '/' . $this->sAwsRegion . '/' . self::API_COMPONENT_SERVICE . '/aws4_request';
-        // 1. Création d'une chaîne à signer pour Signature V4
-        $aPolicy = array(
-            'expiration' => gmdate('Y-m-d\TH:i:s.000\Z', $sTimestamp + 86400),
-            'conditions' => array(
-                array('acl' => $sAcl),
-                array('bucket' => $sBucket),
-                array('starts-with', '$Content-Type', ''),
-                array('starts-with', '$key', ''),
-                array('x-amz-algorithm' => $this->sHashingAlgorithmString),
-                array('x-amz-credential' => $sCredential),
-                array('x-amz-date' => $sXAmzDate)
-            )
-        );
-        $sStringToSign = base64_encode(json_encode($aPolicy));
-
-        // 2. Calcul de la signature pour AWS Signature V4.
-        $sSigningKey = hash_hmac(self::HASHING_ALGORITHM, 'aws4_request', hash_hmac(self::HASHING_ALGORITHM,  self::API_COMPONENT_SERVICE, hash_hmac(self::HASHING_ALGORITHM, $this->sAwsRegion, hash_hmac(self::HASHING_ALGORITHM, $sDate, 'AWS4' . $this->sAwsSecretAccessKey, true), true), true), true);
-        $sSignature = hash_hmac(self::HASHING_ALGORITHM, $sStringToSign, $sSigningKey);
-
-        // 3. Données (post).
-        $aPostData = array(
-            'key' => $sKey,
-            'acl' => $sAcl,
-            'Content-Type' => '',
-            'X-Amz-Credential' => $sCredential,
-            'X-Amz-Algorithm' => $this->sHashingAlgorithmString,
-            'X-Amz-Date' => $sXAmzDate,
-            'Policy' => $sStringToSign,
-            'X-Amz-Signature' => $sSignature
-        );
-        return $aPostData;
-    }
-    
-    /**
-     * Downloads a file.
-     * @param {string} $sBucket Name of a container for objects.
-     * @param {string} $sKey Name of a unique identifier for an object within a bucket.
-     * @param {string} $sFilePath Path of the file to save.
-     * @return File content
-     */
-    function downloadFile($sBucket, $sKey, $sFilePath = null) {
-        // Url vers le fichier.
-        $sUrl = 'https://' . $sBucket . '.' . $this->sHost . '/' . $sKey;
-        // Génération des entêtes pour la requete.
-        //$aHeaders = $this->generateRequestHeaders($sBucket, $sKey);
-        $sFullUrl = 'GET ' . $sUrl . ' HTTP/1.1';
-        $aHeaders = $this->generateAwsSignedHeaders($sFullUrl, $sBucket . '.' . $this->sHost, self::API_COMPONENT_SERVICE);
-
-        $aHeaders[] = 'Accept: application/octet-stream';
-        // Transfert cURL.
-        $sRequestResult = $this->curlRequest($sUrl, 'get', null, $aHeaders);
-        //
-        if ($this->aLastCurlRequestInfo['http_code'] != 200)
-            writeToErrorLog($sRequestResult);
-        else {
-            if (!empty($sFilePath))
-                file_put_contents($sFilePath, $sRequestResult);
-            else
-                return $sRequestResult;
-        }
-    }
-    
-    /**
-     * Upload a file.
-     * @param {string} $sBucket Name of a container for objects.
-     * @param {string} $sKey Name of a unique identifier for an object within a bucket.
-     * @param {string} $sFilePath Path of the file to save.
-     * @return File content
-     */
-    function uploadFile($sBucket, $sKey, $sFilePath) {
-        if (file_exists($sFilePath)) {
-            $sFileName = pathinfo($sFilePath, PATHINFO_BASENAME);
-            // Url vers le fichier.
-            //$sUrl = 'https://' . $sBucket . '.' . $this->sHost . '/' . $sKey;
-            $sUrl = 'https://' . $sBucket . '.' . $this->sHost;
-            // Génération des entêtes pour la requete.
-            $aPostData = $this->generatePostData($sBucket, $sKey, 'post');
-            $aPostData['Content-Type'] = mime_content_type($sFilePath);
-            $aPostData['file'] = new CurlFile(realpath($sFilePath), $aPostData['Content-Type'], $sFileName);
-            $aHeaders = array(
-                'Content-Type: multipart/form-data',
-            );
-            $sRequestResult = $this->curlRequest($sUrl, 'post', $aPostData, $aHeaders, true);
-            if ($this->aLastCurlRequestInfo['http_code'] != 204)
-                writeToErrorLog($sRequestResult);
-        }
-    }
-
-    /**
-     * ScanDir in a bucket
-     * @param {string} $sBucket Name of a container for objects.
-     * @param {string} $sPrefix Path of the folder to scan
-     * @param {boolean} $bWithFileInfos boolean to add fileInfo with filename
-     * @return Array  associative array describing directory scanned
-     */
-    function scanDir($sBucket, $sPrefix, $bWithFileInfos = false){
-        $oFiles = false;
-        $sQueryString = '?list-type=2&prefix=' . $sPrefix;
-        //URL to send request
-        $sUrl = 'https://' . $sBucket . '.' . $this->sHost . "/" . $sQueryString;
-        $sFullUrl = 'GET ' . $sUrl . ' HTTP/1.1';
-
-        // Génération des entêtes pour la requete.
-        $aHeaders = $this->generateAwsSignedHeaders($sFullUrl, $sBucket . '.' . $this->sHost, self::API_COMPONENT_SERVICE, array('Content-Type: application/x-www-form-urlencoded'), '');
-  
-        // Transfert cURL.
-        $sRequestResult = $this->curlRequest($sUrl, 'get', null, $aHeaders);
-        //error_log($sRequestResult);
-        if ($this->aLastCurlRequestInfo['http_code'] != 200){
-            writeToErrorLog("ERROR: ScanDir can't scan this prefix or this bucket");
-        } else {
-            $oXMLContent= json_decode(json_encode(simplexml_load_string($sRequestResult)), true);
-            $oFiles = $this->awsObjectListXmlToTree($oXMLContent, $bWithFileInfos);
-        }
-
-        return $oFiles;
-    }
-
-    /**
-     * ScanDir in a bucket
-     * @param {object} $oXMLObject Result of the list object request AWS
-     * @param {boolean} $bWithFileInfos boolean to add fileInfo with filename
-     * @return Array  associative array describing directory scanned
-     */
-    function awsObjectListXmlToTree ($oXMLObject, $bWithFileInfos){
-
-        $aSave = array();
-
-        $sPrefix = (count($oXMLObject["Prefix"]) === 0) ? "" : $oXMLObject["Prefix"];
-        
-        if(substr($sPrefix, -1) !== "/"){
-            $sPrefix .= "/";
-        }
-
-        $oFiles = array(
-            "bucket" => $oXMLObject["Name"], 
-            "sPath"=> $sPrefix, 
-            "aContent" => array()
-        );
-
-        for($i = 0; $i < count($oXMLObject["Contents"]); $i++){
-            $sFinalKey = $oXMLObject["Contents"][$i]["Key"];
-            if($sPrefix !== "/"){
-                $sFinalKey = str_replace($sPrefix, "", $sFinalKey);
-            }
-            $aPath = explode("/", $sFinalKey);
-            $sObjectName = $aPath[0];
-
-            $oFile = $sObjectName;
-            // check si existe déja
-            if(!in_array($sObjectName, $aSave) && $sObjectName !== ""){
-                if($bWithFileInfos){
-                    $oFile = array(
-                        "name"=> $sObjectName,
-                        "isDirectory"=> (count($aPath) > 1)? 1 : 0,
-                        "size" => $oXMLObject["Contents"][$i]["Size"],
-                        "lastModification" => $oXMLObject["Contents"][$i]["LastModified"],
-                        "storageType" => $oXMLObject["Contents"][$i]["StorageClass"]
-                    );
-                }
-                
-                array_push($oFiles["aContent"], $oFile);
-                array_push($aSave, $sObjectName);
-            } 
-        }
-        return $oFiles;
-    }
-
-    /**
-     * Delete a file.
-     * @param {string} $sBucket Name of the container for remove an objects.
-     * @param {string} $sKey Object's identifier to delete it.
-     * @return boolean true if removed false else
-     */
-    function deleteFile($sBucket, $sKey){
-        $bReturn = false;
-        //URL to send request
-        $sUrl = 'https://' . $sBucket . '.' . $this->sHost . "/" . $sKey;
-        $sFullUrl = 'DELETE ' . $sUrl . ' HTTP/1.1';
-
-        // Génération des entêtes pour la requete.
-        $aHeaders = $this->generateAwsSignedHeaders($sFullUrl, $sBucket . '.' . $this->sHost, self::API_COMPONENT_SERVICE, array(), '');
-  
-        // Transfert cURL.
-        $sRequestResult = $this->curlRequest($sUrl, 'delete', null, $aHeaders);
-
-        if ($this->aLastCurlRequestInfo['http_code'] != 200){
-            writeToErrorLog("ERROR: it's impossible to delete this key in this bucket");
-        } else {
-            $bReturn = true;
-            error_log($sRequestResult);
-        }
-
-        return $bReturn;
-    }
-}
-?>
\ No newline at end of file
diff --git a/web_service/class/gtf_lib/FmeCloud.class.inc b/web_service/class/gtf_lib/FmeCloud.class.inc
index 2c6ba6120d1e0ead75c458772b7d195b1213cbbd..fc8eaec69cf47949e8f7546769d228bdd03dc839 100755
--- a/web_service/class/gtf_lib/FmeCloud.class.inc
+++ b/web_service/class/gtf_lib/FmeCloud.class.inc
@@ -1,9 +1,17 @@
 <?php
 require_once("vmlib/logUtil.inc");
 
+/**
+ * \file FmeCloud.php
+ * \brief Main class to use Fme Cloud services.
+ *
+ * \author Frederic Carretero <frederic.carretero@veremes.com>
+ */
+
 Class FmeCloud {
     public $sUrl;
     public $aLastCurlRequestInfo;
+    public $sLogFilePath;   // Chemin optionnel vers le fichier de log pour Fme Cloud.
     private $sToken;
     
     /**
@@ -104,9 +112,18 @@ Class FmeCloud {
         $sUrl = $this->sUrl;
         // Url vers le service d'information.
         $sUrl = $this->sUrl . '/v1/' . $sService;
-        echo $sUrl . PHP_EOL;
         // Transfert cURL
-        return json_decode($this->curlRequest($sUrl, $sMethod, $aData));
+        $sRequestResponse = $this->curlRequest($sUrl, $sMethod, $aData);
+        if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+            $oRequestResponse = json_decode($sRequestResponse);
+            if (is_object($oRequestResponse) && !empty($oRequestResponse->exception) && !empty($oRequestResponse->exception->message))
+                $this->writeToErrorLog('|' . $sService . '|' . ' ' . $oRequestResponse->message);
+            else
+                $this->writeToErrorLog('|' . $sService . '|' . ' ' . $sRequestResponse);
+            return false;
+        }
+        else
+            return json_decode($sRequestResponse);
     }
     
     /**
@@ -119,9 +136,18 @@ Class FmeCloud {
         $sUrl = $this->sUrl;
         // Url vers le service d'information.
         $sUrl = $this->sUrl . '/v1/instances/' . $iId . '/start';
-        echo $sUrl . PHP_EOL;
         // Transfert cURL
-        return json_decode($this->curlRequest($sUrl, 'PUT'));
+        $sRequestResponse = $this->curlRequest($sUrl, 'PUT');
+        if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+            $oRequestResponse = json_decode($sRequestResponse);
+            if (is_object($oRequestResponse) && !empty($oRequestResponse->exception) && !empty($oRequestResponse->exception->message))
+                $this->writeToErrorLog($oRequestResponse->exception->message);
+            else
+                $this->writeToErrorLog($sRequestResponse);
+            return false;
+        }
+        else
+            return json_decode($sRequestResponse);
     }
     
     /**
@@ -134,9 +160,18 @@ Class FmeCloud {
         $sUrl = $this->sUrl;
         // Url vers le service d'information.
         $sUrl = $this->sUrl . '/v1/instances/' . $iId . '/pause';
-        echo $sUrl . PHP_EOL;
         // Transfert cURL
-        return json_decode($this->curlRequest($sUrl, 'PUT'));
+        $sRequestResponse = $this->curlRequest($sUrl, 'PUT');
+        if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+            $oRequestResponse = json_decode($sRequestResponse);
+            if (is_object($oRequestResponse) && !empty($oRequestResponse->exception) && !empty($oRequestResponse->exception->message))
+                $this->writeToErrorLog($oRequestResponse->exception->message);
+            else
+                $this->writeToErrorLog($sRequestResponse);
+            return false;
+        }
+        else
+            return json_decode($sRequestResponse);
     }
     
     /**
@@ -149,9 +184,31 @@ Class FmeCloud {
         $sUrl = $this->sUrl;
         // Url vers le service d'information.
         $sUrl = $this->sUrl . '/v1/instances/' . $iId . '/credentials';
-        echo $sUrl . PHP_EOL;
         // Transfert cURL
-        return json_decode($this->curlRequest($sUrl, 'GET'));
+        $sRequestResponse = $this->curlRequest($sUrl, 'GET');
+        if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+            $oRequestResponse = json_decode($sRequestResponse);
+            if (is_object($oRequestResponse) && !empty($oRequestResponse->exception) && !empty($oRequestResponse->exception->message))
+                $this->writeToErrorLog($oRequestResponse->exception->message);
+            else
+                $this->writeToErrorLog($sRequestResponse);
+            return false;
+        }
+        else
+            return json_decode($sRequestResponse);
+    }
+    
+    /**
+     * Write a message to the error log file.
+     * @param {string} $sMessage Message to write to the log file.
+     */
+    function writeToErrorLog($sMessage) {
+        $aDebugBacktrace = debug_backtrace();
+        $sLogMessage = '|ERROR|' . $aDebugBacktrace[1]['class'] . '::' . $aDebugBacktrace[1]['function'] . '| ' . $sMessage;
+        if (empty($this->sLogFilePath))
+            writeToErrorLog($sLogMessage);
+        else
+            writeToLog($sLogMessage, $this->sLogFilePath);
     }
 }
 ?>
\ No newline at end of file
diff --git a/web_service/class/gtf_lib/FmeCloudForGtf.class.inc b/web_service/class/gtf_lib/FmeCloudForGtf.class.inc
index da2e8793f716a5d4c1c4ad2c74ee7b098e020c98..b0f5a1ebb7f52a6cfdd923bc3daf8198d562c572 100755
--- a/web_service/class/gtf_lib/FmeCloudForGtf.class.inc
+++ b/web_service/class/gtf_lib/FmeCloudForGtf.class.inc
@@ -1,5 +1,5 @@
 <?php
-require 'gtf_lib/AmazonApiGateway.class.inc';
+require 'aws_lib/AmazonApiGateway.class.inc';
 
 Class FmeCloudForGtf extends AmazonApiGateway {
     public $sGtfInstanceId; // Id de l'instance de GTF.
diff --git a/web_service/class/gtf_lib/FmeServer.class.inc b/web_service/class/gtf_lib/FmeServer.class.inc
old mode 100755
new mode 100644
index e05b1bf7101d0d58a99f2f6bb804164e7183e627..f2cb3f205b4ccc9a451d92f953350bf3eea8222e
--- a/web_service/class/gtf_lib/FmeServer.class.inc
+++ b/web_service/class/gtf_lib/FmeServer.class.inc
@@ -1,11 +1,25 @@
 <?php
 require_once("vmlib/logUtil.inc");
 
+/**
+ * \file FmeServer.php
+ * \brief Main class to use Fme Server services.
+ *
+ * \author Frederic Carretero <frederic.carretero@veremes.com>
+ */
+
 Class FmeServer {
+    const CURL_CONNECTION_TIMEOUT = 0;
+    const CURL_TIMEOUT = 360;
+    const INFO_FME_SERVER_ASYNCHRONOUS_JOB_CANCELED = '|INFORM|PHP| Le traitement asynchrone a été annulé sur Fme Server';
+    const INFO_FME_SERVER_ASYNCHRONOUS_JOB_STOPPED = '|INFORM|PHP| Le traitement asynchrone a été arrêté sur Fme Server';
+    const INFO_FME_SERVER_ASYNCHRONOUS_JOB_REMOVED = '|INFORM|PHP| Le traitement asynchrone a été supprimé sur Fme Server';
+    
     public $sUrl;
     public $sTimeUnit;
     public $iExpiration;
     public $aLastCurlRequestInfo;
+    public $sLogFilePath;   // Chemin optionnel vers le fichier de log pour Fme Server.
     private $sUser;
     private $sPassword;
     private $sToken;
@@ -46,7 +60,13 @@ Class FmeServer {
             'update' => $this->bUpdate
         );
         // Transfert cURL
-        $this->sToken = $this->curlRequest($sUrl, 'post', $aRequestData);
+        $sRequestResponse = $this->curlRequest($sUrl, 'post', $aRequestData);
+        if ($this->aLastCurlRequestInfo['http_code'] != 200) {
+            $this->writeToErrorLog($sRequestResponse);
+            $this->sToken = false;
+        }
+        else
+            $this->sToken = $sRequestResponse;
         return $this->sToken;
     }
     
@@ -91,8 +111,10 @@ Class FmeServer {
         if (!empty($this->sToken))
             $aHeaders[] = 'Authorization: fmetoken token=' . $this->sToken; // Token obligatoire pour éxécuter la requête.
         curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeaders);
-        // Durée max. de la requête.
-        //curl_setopt($ch, CURLOPT_TIMEOUT, 120);
+        // Le nombre de secondes à attendre durant la tentative de connexion.
+        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::CURL_CONNECTION_TIMEOUT);
+        // Le temps maximum d'exécution de la fonction cURL (secondes).
+        curl_setopt($ch, CURLOPT_TIMEOUT, self::CURL_TIMEOUT);
         // Exécute la session CURL.
         // Log.
         /*
@@ -104,13 +126,16 @@ Class FmeServer {
         curl_setopt($ch, CURLINFO_HEADER_OUT, true);
         // Curl error: SSL certificate problem: unable to get local issuer certificate
         // Curl error n°60
-        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);      
+        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
+        // Curl error: SSL: no alternative certificate subject name matches target host name '52.205.208.184' (si utilisation de l'adresse ip et non )
+        // Curl error n°51
+        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
         //
         $output = curl_exec($ch);
         // Erreur de la requête CURL.
         if(curl_errno($ch)) {
-            writeToErrorLog('Curl error: ' . curl_error($ch));
-            writeToErrorLog('Curl error n°' . curl_errno($ch));
+            $this->writeToErrorLog('Curl error: ' . curl_error($ch));
+            $this->writeToErrorLog('Curl error n°' . curl_errno($ch));
         }
         // Informations de la requête.
         $aCurlInfo = curl_getinfo($ch);
@@ -133,42 +158,78 @@ Class FmeServer {
      * @param {array} $aData Data of the Curl request.
      * @return Request result
      */
-    function serviceRequest($sService, $sMethod = 'get', $aData = array()) {
+    function serviceRequest($sService, $sMethod = 'get', $aData = array(), $bWriteToErrorLog = true) {
         // Demande de token.
         $this->getToken();
-        // Url vers le serveur fme.
-        $sUrl = $this->sUrl;
-        // Url vers le service d'information.
-        $sUrl = $this->sUrl . '/fmerest/v3/' . $sService;
-        // Transfert cURL
-        return json_decode($this->curlRequest($sUrl, $sMethod, $aData));
+        if ($this->sToken !== false) {
+            // Url vers le serveur fme.
+            $sUrl = $this->sUrl;
+            // Url vers le service d'information.
+            $sUrl = $this->sUrl . '/fmerest/v3/' . $sService;
+            // Transfert cURL
+            $sRequestResponse = $this->curlRequest($sUrl, $sMethod, $aData);
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                if ($bWriteToErrorLog) {
+                    $oRequestResponse = json_decode($sRequestResponse);
+                    if (is_object($oRequestResponse) && !empty($oRequestResponse->message))
+                        $this->writeToErrorLog('|' . $sService . '|' . ' ' . $oRequestResponse->message);
+                    else
+                        $this->writeToErrorLog('|' . $sService . '|' . ' ' . $sRequestResponse);
+                }
+                return false;
+            }
+            else
+                return json_decode($sRequestResponse);
+        }
+        else
+            return false;
     }
     
     /**
      * Upload a file
      * @param {string} $sFilePath Path of the file to upload.
      * @param {string} $sServiceUrl Url of the web service to upload the file.
+     * @param {string} $sFileName Name of the created file.
      * @return Request result
      */
-    function uploadFile($sServiceUrl, $sFilePath) {
+    function uploadFile($sServiceUrl, $sFilePath, $sFileName = '') {
         if (file_exists($sFilePath)) {
             // Demande de token.
             $this->getToken();
-            // Nom du fichier.
-            $sFileName = pathinfo($sFilePath, PATHINFO_BASENAME);
-            // Type MIME du fichier.
-            //$finfo = finfo_open(FILEINFO_MIME_TYPE);            
-            // Crée un objet CURLFile.
-            //$oCfile = new CURLFile($sFilePath, finfo_file($finfo, $sFilePath), $sFileName);
-            //finfo_close($finfo);
-            // Entêtes de la requête Curl.
-            $aRequestHeaders = array(
-                'Content-Type: application/octet-stream',
-                'Content-Disposition: attachment; filename="' . $sFileName . '"',
-                //'Content-Length: ' . filesize($sFilePath)
-            );
-            //
-            return json_decode($this->curlRequest($sServiceUrl, 'post', file_get_contents($sFilePath), $aRequestHeaders));
+            if ($this->sToken !== false) {
+                // Nom du fichier.
+                if (empty($sFileName))
+                    $sFileName = pathinfo($sFilePath, PATHINFO_BASENAME);
+                // Type MIME du fichier.
+                //$finfo = finfo_open(FILEINFO_MIME_TYPE);            
+                // Crée un objet CURLFile.
+                //$oCfile = new CURLFile($sFilePath, finfo_file($finfo, $sFilePath), $sFileName);
+                //finfo_close($finfo);
+                // Entêtes de la requête Curl.
+                $aRequestHeaders = array(
+                    'Content-Type: application/octet-stream',
+                    'Content-Disposition: attachment; filename="' . $sFileName . '"',
+                    //'Content-Length: ' . filesize($sFilePath)
+                );
+                //
+                $sRequestResponse = $this->curlRequest($sServiceUrl, 'post', file_get_contents($sFilePath), $aRequestHeaders);
+                if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                    $oRequestResponse = json_decode($sRequestResponse);
+                    if (is_object($oRequestResponse) && !empty($oRequestResponse->message))
+                        $this->writeToErrorLog($oRequestResponse->message);
+                    else
+                        $this->writeToErrorLog($sRequestResponse);
+                    return false;
+                }
+                else
+                    return json_decode($sRequestResponse);
+            }
+            else
+                return false;
+        }
+        else {
+            $this->writeToErrorLog('The file does not exist (' . $sFilePath . ')');
+            return false;
         }
     }
     
@@ -184,32 +245,94 @@ Class FmeServer {
     function uploadResourceFile($sFilePath, $sResource, $sPath, $bCreateDirectories = false, $bOverwrite = false) {
         // Demande de token.
         $this->getToken();
-        // Url du service de ressources.
-        $sUrl = $this->sUrl . '/fmerest/v3/resources/connections/' . $sResource . '/filesys/' . $sPath;
-        $sUrl .= '?createDirectories=' . var_export($bCreateDirectories, true) . '&overwrite=' . var_export($bOverwrite, true);
-        return $this->uploadFile($sUrl, $sFilePath);
+        if ($this->sToken !== false) {
+            // Url du service de ressources.
+            $sUrl = $this->sUrl . '/fmerest/v3/resources/connections/' . $sResource . '/filesys/' . $sPath;
+            $sUrl .= '?createDirectories=' . var_export($bCreateDirectories, true) . '&overwrite=' . var_export($bOverwrite, true);
+            return $this->uploadFile($sUrl, $sFilePath);
+        }
+        else
+            return false;
     }
     
     /**
-     * Upload a file to the resource connection
+     * Publish a file to a repository
      * @param {string} $sFilePath Path of the file to upload.
      * @param {string} $sRepository Name of the repository.
      * @param {boolean} $bOverwrite Overwrite the file if it already exists.
+     * @param {string} $sRepositoryFileName File name in the repository.
      * @return Request result
      */
-    function uploadWorkspaceFile($sFilePath, $sRepository, $bOverwrite = false) {
+    function uploadWorkspaceFile($sFilePath, $sRepository, $bOverwrite = false, $sRepositoryFileName = '') {
         // Demande de token.
         $this->getToken();
-        // Supprime le fichier s'il existe déja.
-        if ($bOverwrite) {
+        if ($this->sToken !== false) {
+            // Vérification de l'existence du fichier.
+            $bUploadFile = true;
+            if (!empty($sRepositoryFileName))
+                $sSourceFileName = $sRepositoryFileName;
+            else
+                $sSourceFileName = pathinfo($sFilePath, PATHINFO_BASENAME);
+            $this->serviceRequest('repositories/' . $sRepository . '/items/' . $sSourceFileName, 'get', null, false);
+            // Supprime le fichier s'il existe déja.
+            if ($this->aLastCurlRequestInfo['http_code'] == 200) {
+                if ($bOverwrite) {
+                    if ($this->serviceRequest('repositories/' . $sRepository . '/items/' . $sSourceFileName, 'delete') === false)
+                        return false;
+                }
+                else
+                    $bUploadFile = false;
+            }
+            //Upload du fichier.
+            if ($bUploadFile) {
+                $sUrl = $this->sUrl . '/fmerest/v3/repositories/' . $sRepository . '/items';
+                return $this->uploadFile($sUrl, $sFilePath, $sRepositoryFileName);
+            }
+        }
+        else
+            return false;
+    }
+    
+    /**
+     * Upload a resource to a repository item
+     * @param {string} $sFilePath Path of the file to upload.
+     * @param {string} $sRepository Name of the repository.
+     * @param {string} $sItem Name of the repository item.
+     * @param {boolean} $bOverwrite Overwrite the file if it already exists.
+     * @return Request result
+     */
+    function uploadWorkspaceResourceFile($sFilePath, $sRepository, $sItem, $bOverwrite = false) {
+        // Demande de token.
+        $this->getToken();
+        if ($this->sToken !== false) {
+            $bUploadFile = true;
             $sFileName = pathinfo($sFilePath, PATHINFO_BASENAME);
-            $this->serviceRequest('repositories/' . $sRepository . '/items/' . $sFileName);
-            if ($this->aLastCurlRequestInfo['http_code'] == 200)
-                $this->serviceRequest('repositories/' . $sRepository . '/items/' . $sFileName, 'delete');
+            // Télécharge la liste des ressources complémentaires du projet.
+            $aResources = $this->serviceRequest('repositories/' . $sRepository . '/items/' . $sItem . '/resources', 'get');
+            if ($aResources !== false) {
+                // Vérification de l'existence du fichier.
+                foreach ($aResources as $oResource) {
+                    // Supprime le fichier s'il existe déja.
+                    if ($oResource->name == $sFileName) {
+                        if ($bOverwrite) {
+                            if ($this->serviceRequest('repositories/' . $sRepository . '/items/' . $sItem . '/resources/' . $sFileName, 'delete') === false)
+                                return false;
+                        }
+                        else
+                            $bUploadFile = false;
+                    }
+                }
+            }
+            else
+                return false;
+            // Upload du fichier.
+            if ($bUploadFile) {
+                $sUrl = $this->sUrl . '/fmerest/v3/repositories/' . $sRepository . '/items/' . $sItem . '/resources';
+                return $this->uploadFile($sUrl, $sFilePath);
+            }
         }
-        // Url du service vers le dépôt spécifié.
-        $sUrl = $this->sUrl . '/fmerest/v3/repositories/' . $sRepository . '/items';
-        return $this->uploadFile($sUrl, $sFilePath);
+        else
+            return false;
     }
     
     /**
@@ -221,10 +344,25 @@ Class FmeServer {
     function getWorkspaceParams($sRepository, $sWorkspace) {
         // Demande de token.
         $this->getToken();
-        // Url du service vers le traitement (fichier.fmw) spécifié.
-        $sUrl = $this->sUrl . '/fmerest/v3/repositories/' . $sRepository . '/items/' . $sWorkspace;
-        // Transfert cURL.
-        return json_decode($this->curlRequest($sUrl, 'get'));
+        if ($this->sToken !== false) {
+            // Url du service vers le traitement (fichier.fmw) spécifié.
+            $sUrl = $this->sUrl . '/fmerest/v3/repositories/' . $sRepository . '/items/' . $sWorkspace;
+            // Transfert cURL.
+            $sRequestResponse = $this->curlRequest($sUrl, 'get');
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                $oRequestResponse = json_decode($sRequestResponse);
+                if (is_object($oRequestResponse) && !empty($oRequestResponse->message))
+                    $this->writeToErrorLog($oRequestResponse->message);
+                else
+                    $this->writeToErrorLog($sRequestResponse);
+                return false;
+            }
+            else
+                return json_decode($sRequestResponse);
+            
+        }
+        else
+            return false;
     }
     
     /**
@@ -238,15 +376,33 @@ Class FmeServer {
     function submitJob($sRepository, $sWorkspace, $aParams, $bAsync = false) {
         // Demande de token.
         $this->getToken();
-        // Url du service vers le traitement (fichier.fmw) spécifié.
-        if ($bAsync)
-            $sUrl = $this->sUrl . '/fmerest/v3/transformations/submit/' . $sRepository . '/' . $sWorkspace;
+        if ($this->sToken !== false) {
+            // Url du service vers le traitement (fichier.fmw) spécifié.
+            if ($bAsync)
+                $sUrl = $this->sUrl . '/fmerest/v3/transformations/submit/' . $sRepository . '/' . $sWorkspace;
+            else
+                $sUrl = $this->sUrl . '/fmerest/v3/transformations/transact/' . $sRepository . '/' . $sWorkspace;
+            // Données au format json.
+            $aHeaders = array('Content-Type: application/json');
+            // Transfert cURL.
+            $sRequestResponse = $this->curlRequest($sUrl, 'post', json_encode($aParams), $aHeaders);
+            $oRequestResponse = json_decode($sRequestResponse);
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                if (is_object($oRequestResponse)) {
+                    if (empty($oRequestResponse->id)) {
+                        $this->writeToErrorLog($oRequestResponse->message);
+                        return false;
+                    }
+                    else
+                        $this->writeToErrorLog($oRequestResponse->statusMessage);
+                }
+                else
+                    $this->writeToErrorLog($sRequestResponse);
+            }
+            return $oRequestResponse;
+        }
         else
-            $sUrl = $this->sUrl . '/fmerest/v3/transformations/transact/' . $sRepository . '/' . $sWorkspace;
-        // Données au format json.
-        $aHeaders = array('Content-Type: application/json');
-        // Transfert cURL.
-        return json_decode($this->curlRequest($sUrl, 'post', json_encode($aParams), $aHeaders));
+            return false;
     }
     
     /**
@@ -259,23 +415,37 @@ Class FmeServer {
     function downloadResourceFile($sResource, $sPath, $sFilePath = null) {
         // Demande de token.
         $this->getToken();
-        // Url du service vers le traitement (fichier.fmw) spécifié.
-        $sUrl = $this->sUrl . '/fmerest/v3/resources/connections/' . $sResource . '/filesys/' . $sPath;
-        // Obligatoire pour récupérer le contenu du fichier.
-        $aHeaders = array('Accept: application/octet-stream');
-        // Données de la requête.
-        /*
-        $aRequestData = array (
-            'accept' => 'contents',
-            'disposition' => 'inline'
-        );
-        */
-        // Transfert cURL.
-        $sFileContent = $this->curlRequest($sUrl, 'get', null, $aHeaders);
-        if (!empty($sFilePath))
-            file_put_contents($sFilePath, $sFileContent);
+        if ($this->sToken !== false) {
+            // Url du service vers le traitement (fichier.fmw) spécifié.
+            $sUrl = $this->sUrl . '/fmerest/v3/resources/connections/' . $sResource . '/filesys/' . $sPath;
+            // Obligatoire pour récupérer le contenu du fichier.
+            $aHeaders = array('Accept: application/octet-stream');
+            // Données de la requête.
+            /*
+            $aRequestData = array (
+                'accept' => 'contents',
+                'disposition' => 'inline'
+            );
+            */
+            // Transfert cURL.
+            $sRequestResponse = $this->curlRequest($sUrl, 'get', null, $aHeaders);
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                $oRequestResponse = json_decode($sRequestResponse);
+                if (is_object($oRequestResponse) && !empty($oRequestResponse->message))
+                    $this->writeToErrorLog($oRequestResponse->message);
+                else
+                    $this->writeToErrorLog($sRequestResponse);
+                return false;
+            }
+            else {
+                if (!empty($sFilePath))
+                    file_put_contents($sFilePath, $sRequestResponse);
+                else
+                    return $sRequestResponse;
+            }
+        }
         else
-            return $sFileContent;
+            return false;
     }
     
     /**
@@ -286,16 +456,30 @@ Class FmeServer {
     function getJobLog($sJobId, $sFilePath = '') {
         // Demande de token.
         $this->getToken();
-        // Url du service vers le traitement (fichier.fmw) spécifié.
-        $sUrl = $this->sUrl . '/fmerest/v3/transformations/jobs/id/' . $sJobId . '/log';
-        // Obligatoire pour récupérer le contenu du fichier.
-        $aHeaders = array('Accept: text/plain');
-        // Transfert cURL.
-        $sFileContent = $this->curlRequest($sUrl, 'get', null, $aHeaders);
-        if (!empty($sFilePath))
-            file_put_contents($sFilePath, $sFileContent);
+        if ($this->sToken !== false) {
+            // Url du service vers le traitement (fichier.fmw) spécifié.
+            $sUrl = $this->sUrl . '/fmerest/v3/transformations/jobs/id/' . $sJobId . '/log';
+            // Obligatoire pour récupérer le contenu du fichier.
+            $aHeaders = array('Accept: text/plain');
+            // Transfert cURL.
+            $sRequestResponse = $this->curlRequest($sUrl, 'get', null, $aHeaders);
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                $oRequestResponse = json_decode($sRequestResponse);
+                if (is_object($oRequestResponse) && !empty($oRequestResponse->message))
+                    $this->writeToErrorLog($oRequestResponse->message);
+                else
+                    $this->writeToErrorLog($sRequestResponse);
+                return false;
+            }
+            else {
+                if (!empty($sFilePath))
+                    file_put_contents($sFilePath, $sRequestResponse);
+                else
+                    return $sRequestResponse;
+            }
+        }
         else
-            return $sFileContent;
+            return false;
     }
     
     /**
@@ -307,16 +491,20 @@ Class FmeServer {
     function createRepository($sRepository, $sDescription) {
         // Demande de token.
         $this->getToken();
-        // Crée le dépot s'il n'existe pas déja.
-        $aRequestResult = $this->serviceRequest('repositories/' . $sRepository);
-        if ($this->aLastCurlRequestInfo['http_code'] == 404) {
-            $aRequestData = array (
-                'name' => $sRepository,
-                'description' => $sDescription
-            );
-            $aRequestResult = $this->serviceRequest('repositories', 'post', $aRequestData);
+        if ($this->sToken !== false) {
+            // Crée le dépot s'il n'existe pas déja.
+            $aRequestResult = $this->serviceRequest('repositories/' . $sRepository, 'get', null, false);
+            if ($this->aLastCurlRequestInfo['http_code'] == 404) {
+                $aRequestData = array (
+                    'name' => $sRepository,
+                    'description' => $sDescription
+                );
+                $aRequestResult = $this->serviceRequest('repositories', 'post', $aRequestData);
+            }
+            return $aRequestResult;
         }
-        return $aRequestResult;
+        else
+            return false;
     }
     
     /**
@@ -330,18 +518,22 @@ Class FmeServer {
     function uploadResourceFileFromS3($aS3Params, $sRepository, $sResource, $sPath) {
         // Demande de token.
         $this->getToken();
-        //
-        $aJobParams = array(
-            'publishedParameters' => array(
-                array('name' => 'access_key_id', 'value' => $aS3Params['access_key_id']),
-                array('name' => 'secret_access_key', 'value' => $aS3Params['secret_access_key']),
-                array('name' => 'bucket_name', 'value' => $aS3Params['bucket_name']),
-                array('name' => 'object_key', 'value' => $aS3Params['object_key']),
-                array('name' => 'target_file', 'value' => '$(' . $sResource . ')/' . $sPath . '/' . pathinfo($aS3Params['object_key'], PATHINFO_BASENAME))
-            )
-        );
-        $oJobResult = $this->submitJob($sRepository, 'S3Downloader.fmw', $aJobParams);
-        return $oJobResult;
+        if ($this->sToken !== false) {
+            //
+            $aJobParams = array(
+                'publishedParameters' => array(
+                    array('name' => 'access_key_id', 'value' => $aS3Params['access_key_id']),
+                    array('name' => 'secret_access_key', 'value' => $aS3Params['secret_access_key']),
+                    array('name' => 'bucket_name', 'value' => $aS3Params['bucket_name']),
+                    array('name' => 'object_key', 'value' => $aS3Params['object_key']),
+                    array('name' => 'target_file', 'value' => '$(' . $sResource . ')/' . $sPath . '/' . pathinfo($aS3Params['object_key'], PATHINFO_BASENAME))
+                )
+            );
+            $oJobResult = $this->submitJob($sRepository, 'S3Downloader.fmw', $aJobParams);
+            return $oJobResult;
+        }
+        else
+            return false;
     }
     
     /**
@@ -354,15 +546,19 @@ Class FmeServer {
     function createResourceConnectionDirectory($sResource, $sPath, $DirectoryName) {
         // Demande de token.
         $this->getToken();
-        // Crée le répertoire s'il n'existe pas déja.
-        $aRequestResult = $this->serviceRequest('resources/connections/' . $sResource . '/filesys/' . $sPath . '/' . $DirectoryName);
-        if ($this->aLastCurlRequestInfo['http_code'] == 404) {
-            $aRequestData = array (
-                'directoryname' => $DirectoryName
-            );
-            $aRequestResult = $this->serviceRequest('resources/connections/' . $sResource . '/filesys/' . $sPath, 'post', $aRequestData);
+        if ($this->sToken !== false) {
+            // Crée le répertoire s'il n'existe pas déja.
+            $aRequestResult = $this->serviceRequest('resources/connections/' . $sResource . '/filesys/' . $sPath . '/' . $DirectoryName, 'get', null, false);
+            if ($this->aLastCurlRequestInfo['http_code'] == 404) {
+                $aRequestData = array (
+                    'directoryname' => $DirectoryName
+                );
+                $aRequestResult = $this->serviceRequest('resources/connections/' . $sResource . '/filesys/' . $sPath, 'post', $aRequestData);
+            }
+            return $aRequestResult;
         }
-        return $aRequestResult;
+        else
+            return false;
     }
     
     /**
@@ -372,10 +568,24 @@ Class FmeServer {
     function getInfo() {
         // Demande de token.
         $this->getToken();
-        // Url du web service info.
-        $sUrl = $this->sUrl . '/fmerest/v3/info';
-        // Transfert cURL.
-        return json_decode($this->curlRequest($sUrl, 'get'));
+        if ($this->sToken !== false) {
+            // Url du web service info.
+            $sUrl = $this->sUrl . '/fmerest/v3/info';
+            // Transfert cURL.
+            $sRequestResponse = $this->curlRequest($sUrl, 'get');
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                $oRequestResponse = json_decode($sRequestResponse);
+                if (is_object($oRequestResponse) && !empty($oRequestResponse->message))
+                    $this->writeToErrorLog($oRequestResponse->message);
+                else
+                    $this->writeToErrorLog($sRequestResponse);
+                return false;
+            }
+            else
+                return json_decode($sRequestResponse);
+        }
+        else
+            return false;
     }
     
     /**
@@ -385,10 +595,106 @@ Class FmeServer {
     function getLicenceStatus() {
         // Demande de token.
         $this->getToken();
-        // Url du web service info.
-        $sUrl = $this->sUrl . '/fmerest/v3/licensing/license/status';
-        // Transfert cURL.
-        return json_decode($this->curlRequest($sUrl, 'get'));
+        if ($this->sToken !== false) {
+            // Url du web service info.
+            $sUrl = $this->sUrl . '/fmerest/v3/licensing/license/status';
+            // Transfert cURL.
+            $sRequestResponse = $this->curlRequest($sUrl, 'get');
+            if ($this->aLastCurlRequestInfo['http_code'] >= 400) {
+                $this->writeToErrorLog($sRequestResponse);
+                return false;
+            }
+            else
+                return json_decode($sRequestResponse);
+        }
+        else
+            return false;
+    }
+    
+    /**
+     * Write a message to the error log file.
+     * @param {string} $sMessage Message to write to the log file.
+     */
+    function writeToErrorLog($sMessage) {
+        $aDebugBacktrace = debug_backtrace();
+        $sLogMessage = '|ERROR|' . $aDebugBacktrace[1]['class'] . '::' . $aDebugBacktrace[1]['function'] . '| ' . $sMessage;
+        if (empty($this->sLogFilePath))
+            writeToErrorLog($sLogMessage);
+        else
+            writeToLog($sLogMessage, $this->sLogFilePath);
+    }
+    
+    /**
+     * Delete a job.
+     * @param {number} $iJobId The id of the job.
+     * @return Request result
+     */
+    function deleteJob($iJobId) {
+        // Demande de token.
+        $this->getToken();
+        if ($this->sToken !== false) {
+            // Annule une demande en attente ou arrête une demande en cours.
+            if ($this->stopJob($iJobId) !== false) {
+                // Supprime définitivement la demande sur Fme Server.
+                if ($this->serviceRequest('transformations/jobs/completed/' . $iJobId, 'delete') !== false)
+                    writeToLog(self::INFO_FME_SERVER_ASYNCHRONOUS_JOB_REMOVED . " (job id $iJobId).", $this->sLogFilePath);
+                else
+                    return false;
+            }
+        }
+        else
+            return false;
+    }
+    
+    /**
+     * Cancel a queued job.
+     * @param {number} $iJobId The id of the job.
+     * @return Request result
+     */
+    function cancelJob($iJobId) {
+        // Demande de token.
+        $this->getToken();
+        if ($this->sToken !== false) {
+            // Annule le traitement.
+            if ($this->serviceRequest('transformations/jobs/queued/' . $iJobId, 'delete') !== false)
+                writeToLog(self::INFO_FME_SERVER_ASYNCHRONOUS_JOB_CANCELED . " (job id $iJobId).", $this->sLogFilePath);
+            else
+                return false;
+        }
+        else
+            return false;
+    }
+    
+    /**
+     * Stop a queued or running job.
+     * @param {number} $iJobId The id of the job.
+     * @return Request result
+     */
+    function stopJob($iJobId) {
+        // Demande de token.
+        $this->getToken();
+        if ($this->sToken !== false) {
+            $oJobLog = $this->serviceRequest('transformations/jobs/id/' . $iJobId);
+            if ($oJobLog !== false) {
+                // Annule une demande en attente ou arrête une demande en cours.
+                $aQueuedStatus = array('SUBMITTED', 'QUEUED', 'DELAYED', 'PAUSED');
+                $aRunningStatus = array('IN_PROCESS', 'PULLED');
+                error_log($oJobLog->status);
+                if (in_array($oJobLog->status, $aQueuedStatus))
+                    $this->cancelJob($iJobId);
+                else {
+                    // Annule le traitement.
+                    if ($this->serviceRequest('transformations/jobs/running/' . $iJobId, 'delete') !== false)
+                        writeToLog(self::INFO_FME_SERVER_ASYNCHRONOUS_JOB_STOPPED . " (job id $iJobId).", $this->sLogFilePath);
+                    else
+                        return false;
+                }
+            }
+            else
+                return false;
+        }
+        else
+            return false;
     }
 }
 ?>
\ No newline at end of file
diff --git a/web_service/class/gtf_lib/gtf_object/Category.class.inc b/web_service/class/gtf_lib/gtf_object/Category.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/class/gtf_lib/gtf_object/FmeEngine.class.inc b/web_service/class/gtf_lib/gtf_object/FmeEngine.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/class/gtf_lib/gtf_object/GtfEngine.class.inc b/web_service/class/gtf_lib/gtf_object/GtfEngine.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/class/gtf_lib/gtf_object/Order.class.inc b/web_service/class/gtf_lib/gtf_object/Order.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/class/gtf_lib/gtf_object/User.class.inc b/web_service/class/gtf_lib/gtf_object/User.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/class/gtf_lib/gtf_object/Workspace.class.inc b/web_service/class/gtf_lib/gtf_object/Workspace.class.inc
old mode 100755
new mode 100644
diff --git a/web_service/class/gtf_lib/imap_reader/ImapConnection.php b/web_service/class/gtf_lib/imap_reader/ImapConnection.php
old mode 100644
new mode 100755
diff --git a/web_service/class/gtf_lib/imap_reader/MailBox.php b/web_service/class/gtf_lib/imap_reader/MailBox.php
old mode 100644
new mode 100755
diff --git a/web_service/class/gtf_lib/imap_reader/MailStruct.php b/web_service/class/gtf_lib/imap_reader/MailStruct.php
old mode 100644
new mode 100755
index 5f79b22e8e3a2e9554d794d9d8f074b9ec73136e..b45ce29d6e78e921d5dfac475ad4a2e27721285b
--- a/web_service/class/gtf_lib/imap_reader/MailStruct.php
+++ b/web_service/class/gtf_lib/imap_reader/MailStruct.php
@@ -100,13 +100,20 @@ class MailStruct {
         foreach ($aPart as $oPart) {
            if ($oPart["part_object"]->encoding == 3 || $oPart["part_object"]->encoding == 4) {
                 $sMimeType = $this->oConnection->getMimeType($oPart["part_object"]);
+
+                //$this->sBody = $this->oConnection->getPart($this->iUid, $oPart["part_object"]->encoding, $oPart["part_number"]);
+
                if ($sMimeType === "TEXT/HTML") {
-                   $this->sBody = $this->oConnection->getPart($this->iUid, $oPart["part_object"]->encoding, $oPart["part_number"]);
+                    //error_log(print_r($oPart, true));
+                    $this->sBody = $this->convertToUtf8($this->oConnection->getPart($this->iUid, $oPart["part_object"]->encoding, $oPart["part_number"]));
                    $this->bIsHTML = true;
                } else if($sMimeType === "TEXT/PLAIN"){
-                    $this->sBody = $this->oConnection->getPart($this->iUid, $oPart["part_object"]->encoding, $oPart["part_number"]);
+                    //error_log(print_r($oPart, true));
+                    $this->sBody = $this->convertToUtf8($this->oConnection->getPart($this->iUid, $oPart["part_object"]->encoding, $oPart["part_number"]));
                     $this->bIsHTML = false;
                }
+               //error_log($this->sBody);
+               //error_log(mb_detect_encoding($this->sBody));
             } 
         }
     }
diff --git a/web_service/class/gtf_lib/phpUtility.inc b/web_service/class/gtf_lib/phpUtility.inc
index 13f6f5ce3071cc411b816b67e5d0902521d29d88..e44481c94444ba704185eb73232075a7013a2a96 100755
--- a/web_service/class/gtf_lib/phpUtility.inc
+++ b/web_service/class/gtf_lib/phpUtility.inc
@@ -292,4 +292,39 @@ function getFmeLicence($fmepath)
 function array_iunique($aArray){
     return array_intersect_key($aArray, array_unique(array_map("StrToLower",$aArray)));
 }
+
+/**
+ * Generate a GTF instance id.
+ * @return GTF instance id
+ */
+function generateGtfInstanceId() {
+    $aOutput = array();
+    $iReturnStatus = 1;
+    if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+        // Paramètres à concaténer pour un identifiant unique par machine.
+        $aCommands = array(
+            'NICCONFIG',    // cartes réseaux (adresses MAC)
+            'CPU',  // modèle, vitesse, id...
+            'DISKDRIVE',    // N° de série...
+            'MEMORYCHIP',
+            'CDROM',    // Lecteur DVD...
+            'path win32_VideoController',   // Carte vidéo
+            'IDECONTROLLER',
+            'SCSICONTROLLER',
+            'DESKTOPMONITOR',
+            'LOGON',
+            'NETLOGIN'
+        );
+        $sCommandLine = 'wmic '. implode(' & wmic ', $aCommands);
+        exec($sCommandLine, $aOutput, $iReturnStatus);
+    }
+    else if (strtolower(substr(PHP_OS, 0, 5)) == 'linux') {
+        $aLinuxCommand = array('lscpu', 'lspci', 'df', 'free', 'ip a', 'cat /var/lib/dbus/machine-id'); // , 'sudo cat /sys/class/dmi/id/product_uuid'
+        foreach ($aLinuxCommand as $sCommand) {
+            exec($sCommand, $aOutput, $iReturnStatus);
+        }
+        $aOutput['ses_Login'] = $_SESSION['ses_Login'];
+    }
+    return 'GTF_' . hash_hmac('sha256', implode(chr(20), $aOutput), uniqid('', true));
+}
 ?>
\ No newline at end of file
diff --git a/web_service/conf/properties.inc b/web_service/conf/properties.inc
old mode 100755
new mode 100644
index e24cac584152a12744f069552c2ebf5a1be2bcdc..ff978e12472d7f8c64c66b723ca595c89a72a409
--- a/web_service/conf/properties.inc
+++ b/web_service/conf/properties.inc
@@ -6,4 +6,6 @@ $properties['heure_creuse_min'] = '19:30';
 $properties['heure_creuse_max'] = '08:30';
 $properties['nbr_order_max'] = 10;
 $properties['max_attempt'] = 2;
+$properties['connectionStringExternalIp'] = '52.47.201.61';
+$properties['connectionStringExternalPort'] = 5432;
 ?>
\ No newline at end of file
diff --git a/web_service/conf/properties_server.inc b/web_service/conf/properties_server.inc
index 87791cf6bfa5efe4f8825d3351340d65c7b67f44..6ff1a41eed1f2e7b166ee0e65e3f35adf22057d4 100755
--- a/web_service/conf/properties_server.inc
+++ b/web_service/conf/properties_server.inc
@@ -3,4 +3,5 @@ $properties['schema_gtf'] = 's_gtf';
 $properties['gtf_doc_alias'] = 'gtf_doc';
 $properties['login_scheduler'] = 'u_scheduler';
 $properties['password_scheduler'] = '[PASSWORD_SCHEDULER]';
+$properties['application_name'] = 'gtf[ENV]';
 ?>
\ No newline at end of file
diff --git a/web_service/conf/selected_properties.inc b/web_service/conf/selected_properties.inc
old mode 100755
new mode 100644
index 9de194fdb67670e71ea3201417dc1905372cfc94..8f07f5c1cc500f18b2636677eb4852f9566cd201
--- a/web_service/conf/selected_properties.inc
+++ b/web_service/conf/selected_properties.inc
@@ -15,7 +15,12 @@ $aAdminFields = Array(
     'pycron_dir',
     'login_scheduler',
     'password_scheduler',
-    'gtf_doc_alias'
+    'gtf_doc_alias',
+    'application_name',
+    'fme_cloud_api_url',
+    'gtf_instance_id',
+    'connectionStringExternalIp',
+    'connectionStringExternalPort'
 );
 $aUserFields = Array(
     'schema_gtf',
@@ -32,9 +37,14 @@ $aUserFields = Array(
     'pycron_dir',
     'login_scheduler',
     'password_scheduler',
-    'gtf_doc_alias'
+    'gtf_doc_alias',
+    'application_name',
+    'fme_cloud_api_url',
+    'gtf_instance_id',
+    'connectionStringExternalIp',
+    'connectionStringExternalPort'
 );
 
 $properties['aAdminFields'] = array_merge($properties['aAdminFields'], $aAdminFields);
 $properties['aUserFields'] = array_merge($properties['aUserFields'], $aUserFields);
-?>
\ No newline at end of file
+?>
diff --git a/web_service/sql/maj.sql b/web_service/sql/maj.sql
old mode 100755
new mode 100644
index f24bccb780f8d7fc689e0fdaed7712cc8eb8da72..1ed5dac181c65c219db0d7fc2c986d24f345e8c7
--- a/web_service/sql/maj.sql
+++ b/web_service/sql/maj.sql
@@ -71,4 +71,10 @@ INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable,
 -- Libellé du champ "type" de moteur FME.
 UPDATE s_vitis.vm_tab SET event = 'loadList(null, {"lang": ""})' WHERE name ='gtf_fme_engine';
 -- 
-UPDATE s_vitis.vm_table_field SET width = 200 WHERE label_id = 'gtf_128';
\ No newline at end of file
+UPDATE s_vitis.vm_table_field SET width = 200 WHERE label_id = 'gtf_128';
+
+-- Anthony le 18/09/2018 14:43
+ALTER TABLE s_gtf.fme_engine ADD COLUMN useexternaldbconnection boolean DEFAULT FALSE;
+CREATE OR REPLACE VIEW s_gtf.v_fme_engine AS SELECT fme_engine.fme_engine_id, fme_engine.name, fme_engine.server_id, fme_engine.local_path, server.hostname AS server_name, fme_engine.server_url, fme_engine.login, fme_engine.password, fme_engine.fme_engine_type_id, fme_engine.s3_access_key_id, fme_engine.s3_secret_access_key, fme_engine.fme_cloud_api_token, v_fme_engine_type.fme_engine_type_label, v_fme_engine_type.lang, fme_engine.s3_region, fme_engine.iam_access_key_id, fme_engine.iam_secret_access_key, fme_engine.fme_server_instance_name, fme_engine.fme_server_s3_bucket, useexternaldbconnection FROM s_gtf.fme_engine LEFT JOIN s_gtf.server ON fme_engine.server_id = server.server_id LEFT JOIN s_gtf.v_fme_engine_type ON fme_engine.fme_engine_type_id::text = v_fme_engine_type.fme_engine_type_id::text;
+CREATE OR REPLACE RULE insert_v_fme_engine AS ON INSERT TO s_gtf.v_fme_engine DO INSTEAD  INSERT INTO s_gtf.fme_engine (fme_engine_id, name, server_id, local_path, server_url, login, password, fme_engine_type_id, s3_access_key_id, s3_secret_access_key, fme_cloud_api_token, s3_region, iam_access_key_id, iam_secret_access_key, fme_server_instance_name, fme_server_s3_bucket, useexternaldbconnection) VALUES (new.fme_engine_id, new.name, new.server_id, new.local_path, new.server_url, new.login, new.password, new.fme_engine_type_id, new.s3_access_key_id, new.s3_secret_access_key, new.fme_cloud_api_token, new.s3_region, new.iam_access_key_id, new.iam_secret_access_key, new.fme_server_instance_name, new.fme_server_s3_bucket, new.useexternaldbconnection);
+CREATE OR REPLACE RULE update_v_fme_engine AS ON UPDATE TO s_gtf.v_fme_engine DO INSTEAD  UPDATE s_gtf.fme_engine SET fme_engine_id = new.fme_engine_id, name = new.name, server_id = new.server_id, local_path = new.local_path, server_url = new.server_url, login = new.login, password = new.password, fme_engine_type_id = new.fme_engine_type_id, s3_access_key_id = new.s3_access_key_id, s3_secret_access_key = new.s3_secret_access_key, fme_cloud_api_token = new.fme_cloud_api_token, s3_region = new.s3_region, iam_access_key_id = new.iam_access_key_id, iam_secret_access_key = new.iam_secret_access_key, fme_server_instance_name = new.fme_server_instance_name, fme_server_s3_bucket = new.fme_server_s3_bucket, useexternaldbconnection = new.useexternaldbconnection WHERE fme_engine.fme_engine_id = new.fme_engine_id;
diff --git a/web_service/sql/sqlQueries.xml b/web_service/sql/sqlQueries.xml
old mode 100755
new mode 100644
index e23e953272985114cccca60b01910f850fbeb0f4..86530ce429f2bb5289e5003497afc67a0838e81a
--- a/web_service/sql/sqlQueries.xml
+++ b/web_service/sql/sqlQueries.xml
@@ -1626,13 +1626,13 @@
                             UPDATE s_vitis.vm_tab SET event='loadList("showSupervisionRecap()");' WHERE label_id='gtf_60' AND "name"='gtf_order';
                             UPDATE s_vitis.vm_table_field SET template = '<div data-app-duration-calculator="row.entity[col.field]" style="height: 100%; padding: 5px;"></div>' WHERE name = 'length_sec' AND ressource_id = 'gtf/orders';
                             CREATE OR REPLACE VIEW s_gtf.v_order_fast AS SELECT "order".order_id, "order".priority_id, "order".workspace_id, workspace.key AS workspace_key, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, "order".length_sec, gtf_engine.name FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_gtf.gtf_engine ON "order".gtf_engine_id = gtf_engine.gtf_engine_id WHERE "order".period_id IS NULL;
-							ALTER TABLE s_gtf.v_order_fast OWNER TO u_vitis;
-							GRANT SELECT ON TABLE s_gtf.v_order_fast TO gtf_user;
-							GRANT ALL ON TABLE s_gtf.v_order_fast TO u_vitis;
-							GRANT SELECT ON TABLE s_gtf.v_order_fast TO gtf_author;
-							GRANT ALL ON TABLE s_gtf.v_order_fast TO gtf_admin;
-							CREATE OR REPLACE VIEW s_gtf.v_supervision_status AS SELECT count(v_order_fast.order_id) AS nb_order_id, v_order_fast.order_status_id AS filter, 'order'::text AS table_name FROM s_gtf.v_order_fast GROUP BY v_order_fast.order_status_id UNION SELECT count(v_subscription.order_id) AS nb_order_id, CASE WHEN v_subscription.enabled IS TRUE THEN 1 ELSE 0 END AS filter, 'subscription'::text AS table_name FROM s_gtf.v_subscription WHERE v_subscription.lang::text = 'fr'::text GROUP BY v_subscription.enabled UNION SELECT count(v_survey.order_id) AS nb_order_id, CASE WHEN v_survey.enabled IS TRUE THEN 1 ELSE 0 END AS filter, 'survey'::text AS table_name FROM s_gtf.v_survey WHERE v_survey.lang::text = 'fr'::text GROUP BY v_survey.enabled;
-							CREATE OR REPLACE VIEW s_gtf.v_workspace AS SELECT workspace.workspace_id, workspace.name, workspace.owner, workspace.creation_date, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.success_action_id, workspace.failed_action_id, workspace.survey, workspace.form_type, workspace.legal_terms_conditions, workspace.last_save_date, workspace.last_save_build, workspace.file_encoding, workspace.title, workspace.requirements, workspace.history, workspace.usage, workspace.key, workspace.email_template_id, workspace.locked, workspace.tag, "user".login, category.name AS category_name, CASE WHEN t.nb_demandes IS NULL THEN 0::bigint ELSE t.nb_demandes END AS nb_demande, email_template.name AS email_template FROM s_gtf.workspace LEFT JOIN s_vitis."user" ON workspace.owner = "user".user_id LEFT JOIN s_gtf.category ON workspace.category_id = category.category_id LEFT JOIN s_gtf.email_template ON workspace.email_template_id = email_template.email_template_id LEFT JOIN (SELECT count(*) AS nb_demandes, v_order_fast.workspace_id FROM s_gtf.v_order_fast GROUP BY v_order_fast.workspace_id) t ON workspace.workspace_id = t.workspace_id;
+                            ALTER TABLE s_gtf.v_order_fast OWNER TO u_vitis;
+                            GRANT SELECT ON TABLE s_gtf.v_order_fast TO gtf_user;
+                            GRANT ALL ON TABLE s_gtf.v_order_fast TO u_vitis;
+                            GRANT SELECT ON TABLE s_gtf.v_order_fast TO gtf_author;
+                            GRANT ALL ON TABLE s_gtf.v_order_fast TO gtf_admin;
+                            CREATE OR REPLACE VIEW s_gtf.v_supervision_status AS SELECT count(v_order_fast.order_id) AS nb_order_id, v_order_fast.order_status_id AS filter, 'order'::text AS table_name FROM s_gtf.v_order_fast GROUP BY v_order_fast.order_status_id UNION SELECT count(v_subscription.order_id) AS nb_order_id, CASE WHEN v_subscription.enabled IS TRUE THEN 1 ELSE 0 END AS filter, 'subscription'::text AS table_name FROM s_gtf.v_subscription WHERE v_subscription.lang::text = 'fr'::text GROUP BY v_subscription.enabled UNION SELECT count(v_survey.order_id) AS nb_order_id, CASE WHEN v_survey.enabled IS TRUE THEN 1 ELSE 0 END AS filter, 'survey'::text AS table_name FROM s_gtf.v_survey WHERE v_survey.lang::text = 'fr'::text GROUP BY v_survey.enabled;
+                            CREATE OR REPLACE VIEW s_gtf.v_workspace AS SELECT workspace.workspace_id, workspace.name, workspace.owner, workspace.creation_date, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.success_action_id, workspace.failed_action_id, workspace.survey, workspace.form_type, workspace.legal_terms_conditions, workspace.last_save_date, workspace.last_save_build, workspace.file_encoding, workspace.title, workspace.requirements, workspace.history, workspace.usage, workspace.key, workspace.email_template_id, workspace.locked, workspace.tag, "user".login, category.name AS category_name, CASE WHEN t.nb_demandes IS NULL THEN 0::bigint ELSE t.nb_demandes END AS nb_demande, email_template.name AS email_template FROM s_gtf.workspace LEFT JOIN s_vitis."user" ON workspace.owner = "user".user_id LEFT JOIN s_gtf.category ON workspace.category_id = category.category_id LEFT JOIN s_gtf.email_template ON workspace.email_template_id = email_template.email_template_id LEFT JOIN (SELECT count(*) AS nb_demandes, v_order_fast.workspace_id FROM s_gtf.v_order_fast GROUP BY v_order_fast.workspace_id) t ON workspace.workspace_id = t.workspace_id;
                             -- Frédéric le 19/04/2018 16:27
                             UPDATE s_vitis.vm_tab SET event='loadList(''showSupervisionRecap()'',{"lang": ""});' WHERE label_id='gtf_60' AND "name"='gtf_order';
                             UPDATE s_vitis.vm_tab SET event='loadList("showSupervisionRecap();refreshWorkspaceListByPeriod();")' WHERE label_id='gtf_262' AND "name"='gtf_message';
@@ -1644,7 +1644,6 @@
                             GRANT SELECT ON TABLE s_gtf.v_supervision_status TO gtf_user;
                             GRANT SELECT ON TABLE s_gtf.v_supervision_status TO gtf_author;
                             UPDATE s_vitis.vm_table_field SET template = '<div data-app-message-status-icon-column="{{row.entity[col.field]}}"></div>' WHERE label_id = 'gtf_277';
-
                             -- Frédéric le 20/04/2018 14:47
                             GRANT ALL ON TABLE s_gtf."message" TO gtf_scheduler;
                             
@@ -1768,10 +1767,233 @@
                             CREATE OR REPLACE RULE insert_v_user_order AS ON INSERT TO s_gtf.v_user_order DO INSTEAD  INSERT INTO s_gtf."order" (order_id, priority_id, workspace_id, user_id, wk_params, result_url, log_url, execution_date, attempt, email_notifications, email_option_id, deleted, gtf_engine_id, order_date) VALUES (new.order_id, new.priority_id, new.workspace_id, new.user_id, new.wk_params, new.result_url, new.log_url, new.execution_date, new.attempt, new.email_notifications, new.email_option_id, false, new.gtf_engine_id, new.order_date);
                             CREATE OR REPLACE RULE insert_v_user_subscription AS ON INSERT TO s_gtf.v_user_subscription DO INSTEAD  INSERT INTO s_gtf."order" (order_id, workspace_id, user_id, period_id, execution_date, wk_params, result_url, email_option_id, email_notifications, gtf_engine_id, enabled, order_date) VALUES (new.order_id, new.workspace_id, new.user_id, new.period_id, new.execution_date, new.wk_params, new.result_url, new.email_option_id, new.email_notifications, new.gtf_engine_id, new.enabled, new.order_date);
                             CREATE OR REPLACE RULE insert_v_user_survey AS ON INSERT TO s_gtf.v_user_survey DO INSTEAD  INSERT INTO s_gtf."order" (order_id, workspace_id, user_id, enabled, period_id, execution_date, wk_params, result_url, email_option_id, email_notifications, gtf_engine_id, survey_id, condition, inbox_id, order_date) VALUES (new.order_id, new.workspace_id, new.user_id, new.enabled, new.period_id, new.execution_date, new.wk_params, new.result_url, new.email_option_id, new.email_notifications, new.gtf_engine_id, new.survey_id, CASE WHEN new.condition IS NULL THEN ''::character varying ELSE new.condition END, new.inbox_id, new.order_date);
+                            
                             -- Frédéric le 15/05/2018 16:15
                             UPDATE s_vitis.vm_tab SET event='loadList("showSupervisionRecap()");' WHERE label_id='gtf_60' AND "name"='gtf_order';
+                            
+                            -- Frédéric le 15/06/2018 09:15
+                            ALTER TABLE s_gtf.workspace ADD COLUMN dataencrypt boolean DEFAULT FALSE;
+                            CREATE OR REPLACE VIEW s_gtf.v_workspace AS SELECT workspace.workspace_id, workspace.name, workspace.owner, workspace.creation_date, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.success_action_id, workspace.failed_action_id, workspace.survey, workspace.form_type, workspace.legal_terms_conditions, workspace.last_save_date, workspace.last_save_build, workspace.file_encoding, workspace.title, workspace.requirements, workspace.history, workspace.usage, workspace.key, workspace.email_template_id, workspace.locked, workspace.tag, "user".login, category.name AS category_name, CASE WHEN t.nb_demandes IS NULL THEN 0::bigint ELSE t.nb_demandes END AS nb_demande, email_template.name AS email_template, workspace.dataencrypt FROM s_gtf.workspace LEFT JOIN s_vitis."user" ON workspace.owner = "user".user_id LEFT JOIN s_gtf.category ON workspace.category_id = category.category_id LEFT JOIN s_gtf.email_template ON workspace.email_template_id = email_template.email_template_id LEFT JOIN (SELECT count(*) AS nb_demandes, v_order_fast.workspace_id FROM s_gtf.v_order_fast GROUP BY v_order_fast.workspace_id) t ON workspace.workspace_id = t.workspace_id;                                
+                            
+                            -- Frédéric le 20/06/2018 14:36
+                            INSERT INTO s_gtf.email_template (email_template_id, name, subject, "body", "to", cc, cci, code, use_advanced, rt_emailcontext_id, attachment) VALUES (-1, 'default_secretkey', 'Notification de clé secrète pour le traitement [order_id]', '<p>order.user.email = [order.user.email]</p> <p> </p> <p> </p> <p>Bonjour [owner_name],</p> <p>Le traitement est terminé.</p> <p>Vous pouvez télécharger le résultat sur :</p> <p>user_email] = [user_email]</p> <p>user] = [user]</p> <p>log = [log_url]</p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p>', 'tot@veremes.com', NULL, NULL, E'$logo = $this->aProperties[''ws_data_dir'']."/gtf/gtf.png";\n$base64 = base64_encode(file_get_contents($logo));\n$image = ''<img src="data:image/png;base64,''.$base64.''">'';\n$this->to = '''' . $this->aObjects["oOrder"]->getUser()->aFields[''email''] . '''';\n$this->cc = '''' . $this->aObjects["oOrder"]->aFields[''email_notifications''] . '''';\n$this->cci = '''';\n$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '''';\n$this->body = $image.''<p>Bonjour,</p>'';\n$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '' - Votre clé secrète'';\n$this->body .= ''<p>Votre clé secrète pour la demande n°'' . $this->aObjects["oOrder"]->aFields[''order_id''] . '' du traitement <strong>'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . ''</strong> :<br/>'' . $this->aObjects["oOrder"]->sSecretKey . ''<br/>'';\n$this->body .= ''<p><span style="color: #808080;font-size: smaller;"> Ce message a été envoyé par un automate. Merci de ne pas y répondre.</span></p>'';\n', true, 'gtf', NULL);
+
+                            -- Frédéric le 21/06/2018 10:08
+                            UPDATE s_gtf.email_template SET code = E'$logo = $this->aProperties[''ws_data_dir'']."/gtf/gtf.png";\n$base64 = base64_encode(file_get_contents($logo));\n$image = ''<img src="data:image/png;base64,''.$base64.''">'';\n$this->to = '''' . $this->aObjects["oOrder"]->getUser()->aFields[''email''] . '''';\n$this->cc = '''' . $this->aObjects["oOrder"]->aFields[''email_notifications''] . '''';\n$this->cci = '''';\n$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '''';\n$this->body = $image.''<p>Bonjour,</p>'';\nif ($this->aObjects["oOrder"]->aFields[''order_status_id''] == 3) {\n	$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '' - Traitement réussi'';\n    $this->body .= ''<p>Votre demande n°'' . $this->aObjects["oOrder"]->aFields[''order_id''] . '' pour le traitement <strong>'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . ''</strong> a bien été exécutée.<br/>'';\n	// Si le résultat est crypté : pas de pièce jointe ou de lien de téléchargement.\n	if ($aObjects[''oOrder'']->aFields[''bDataEncrypt'']) {\n        $this->body .= ''Le résultat est disponible en vous connectant à l\\''application :<p><a href="'' . $aObjects[''oOrder'']->aFields[''sApplicationUrl''] . ''">'' . $aObjects[''oOrder'']->aFields[''sApplicationUrl''] . ''</a></p>'';\n	}\n    else if($this->aObjects["oOrder"]->aFields[''result_file''] != ''''){\n		// les résultats de moins de 5 Mo sont envoyés en pièce jointe\n        if (filesize($this->aObjects["oOrder"]->aFields[''result_file''])> (5*1024*1024)){\n            $this->body .= ''Le résultat est disponible par téléchargement :<p><a href="'' . $this->aObjects["oOrder"]->aFields[''result_url''] . ''">Télécharger le résultat</a></p>'';\n        } else {\n            $this->body .= ''<p>Le résultat est disponible en pièce jointe</p>'';\n            $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''result_file''];\n        }\n    }\n} else {\n	$this->subject = ''[GTF]-'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . '' - Echec du traitement'';\n    $this->body .= ''<p>Votre demande n°'' . $this->aObjects["oOrder"]->aFields[''order_id''] . '' pour le traitement <strong>'' . $this->aObjects["oOrder"]->getWorkspace()->aFields[''name''] . ''</strong> n\\''a pu être exécutée correctement suite à une erreur.<br/> Veuillez contactez votre administrateur.<br/>'';\n    $this->aAttachments[0] = $this->aObjects["oOrder"]->aFields[''log_file''];\n}\n$this->body .= ''<p><span style="color: #808080;font-size: smaller;"> Ce message a été envoyé par un automate. Merci de ne pas y répondre.</span></p>'';\n' WHERE email_template_id = 1;
+
+                            -- Frédéric le 21/06/2018 12:15
+                            ALTER TABLE s_gtf.workspace ADD COLUMN usepersonaldata boolean DEFAULT FALSE;
+                            
+                            -- Frédéric le 21/06/2018 14:00
+                            CREATE OR REPLACE VIEW s_gtf.v_workspace AS SELECT workspace.workspace_id, workspace.name, workspace.owner, workspace.creation_date, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.success_action_id, workspace.failed_action_id, workspace.survey, workspace.form_type, workspace.legal_terms_conditions, workspace.last_save_date, workspace.last_save_build, workspace.file_encoding, workspace.title, workspace.requirements, workspace.history, workspace.usage, workspace.key, workspace.email_template_id, workspace.locked, workspace.tag, "user".login, category.name AS category_name, CASE WHEN t.nb_demandes IS NULL THEN 0::bigint ELSE t.nb_demandes END AS nb_demande, email_template.name AS email_template, workspace.dataencrypt, workspace.usepersonaldata FROM s_gtf.workspace LEFT JOIN s_vitis."user" ON workspace.owner = "user".user_id LEFT JOIN s_gtf.category ON workspace.category_id = category.category_id LEFT JOIN s_gtf.email_template ON workspace.email_template_id = email_template.email_template_id LEFT JOIN (SELECT count(*) AS nb_demandes, v_order_fast.workspace_id FROM s_gtf.v_order_fast GROUP BY v_order_fast.workspace_id) t ON workspace.workspace_id = t.workspace_id;                                
+                           
+                            -- Frédéric le 25/06/2018 10:54
+                            ALTER TABLE s_gtf.workspace ADD COLUMN unitcost float;
+                            ALTER TABLE s_gtf.workspace ADD COLUMN costpersecond float;
+                            CREATE OR REPLACE VIEW s_gtf.v_workspace AS SELECT workspace.workspace_id, workspace.name, workspace.owner, workspace.creation_date, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.success_action_id, workspace.failed_action_id, workspace.survey, workspace.form_type, workspace.legal_terms_conditions, workspace.last_save_date, workspace.last_save_build, workspace.file_encoding, workspace.title, workspace.requirements, workspace.history, workspace.usage, workspace.key, workspace.email_template_id, workspace.locked, workspace.tag, "user".login, category.name AS category_name, CASE WHEN t.nb_demandes IS NULL THEN 0::bigint ELSE t.nb_demandes END AS nb_demande, email_template.name AS email_template, workspace.dataencrypt, workspace.usepersonaldata, workspace.unitcost, workspace.costpersecond FROM s_gtf.workspace LEFT JOIN s_vitis."user" ON workspace.owner = "user".user_id LEFT JOIN s_gtf.category ON workspace.category_id = category.category_id LEFT JOIN s_gtf.email_template ON workspace.email_template_id = email_template.email_template_id LEFT JOIN (SELECT count(*) AS nb_demandes, v_order_fast.workspace_id FROM s_gtf.v_order_fast GROUP BY v_order_fast.workspace_id) t ON workspace.workspace_id = t.workspace_id;        
+
+                            -- Anthony le 10/07/2018 17:00
+                            INSERT INTO s_gtf.actionclass (actionclass, label) VALUES ('SMSAction', '<p>Notification d''envoi de SMS</p>');
+                            
+                            -- Frédéric le 18/07/2018 14:45
+                            ALTER TABLE s_gtf.order ADD COLUMN minexecdate timestamp with time zone;
+                            
+                            INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Champ minexecdate de l''onglet gtf_user_order', 'gtf_327');
+                            INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Champ minexecdate de l''onglet gtf_order', 'gtf_328');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_327', 'fr', 'Date de planification');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_327', 'en', 'Planning date');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_328', 'fr', 'Date de planification');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_328', 'en', 'Planning date');
+                            INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, module, ressource_id, template, tab_id) VALUES ((select nextval('s_vitis.seq_vm'::regclass)), 'minexecdate', true, true, 9, 120, 'left', 'gtf_327', NULL, 'gtf/userorders', '<div data-app-format-date-column="{{row.entity[col.field]}}"></div>', (select tab_id from s_vitis.vm_tab where name = 'gtf_user_order'));
+                            INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, module, ressource_id, template, tab_id) VALUES ((select nextval('s_vitis.seq_vm'::regclass)), 'minexecdate', true, true, 9, 120, 'left', 'gtf_328', NULL, 'gtf/orders', '<div data-app-format-date-column="{{row.entity[col.field]}}"></div>', (select tab_id from s_vitis.vm_tab where name = 'gtf_order'));
+                            
+                            ALTER TABLE s_gtf.message ADD COLUMN minexecdate timestamp with time zone;
+                            INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Champ minexecdate de l''onglet gtf_message', 'gtf_329');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_329', 'fr', 'Date de planification');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_329', 'en', 'Planning date');
+                            INSERT INTO s_vitis.vm_table_field (table_field_id, name, sortable, resizeable, index, width, align, label_id, module, ressource_id, template, tab_id) VALUES ((select nextval('s_vitis.seq_vm'::regclass)), 'minexecdate', true, true, 6, 120, 'left', 'gtf_329', NULL, 'gtf/messages', '<div data-app-format-date-column="{{row.entity[col.field]}}"></div>', (select tab_id from s_vitis.vm_tab where name = 'gtf_message'));
+                            
+                            -- Frédéric le 19/07/2018 10:53
+                            CREATE OR REPLACE VIEW s_gtf.v_message AS SELECT message.message_id, message.messageclass, message.creation_date, message.body, message.sender, messageclass.messageclass_type, message.status, message.minexecdate FROM s_gtf.message LEFT JOIN s_gtf.messageclass ON message.messageclass::text = messageclass.messageclass::text;
+
+                            -- Frédéric le 20/07/2018 12:23
+                            CREATE OR REPLACE VIEW s_gtf.v_order AS SELECT "order".order_id, "order".priority_id, "order".workspace_id, workspace.key AS workspace_key, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, s_gtf.s2hms("order".length_sec) AS length_sec, priority_translation.translation AS priority_label, email_option_translation.translation AS email_option_label, priority_translation.lang, gtf_engine.name, order_status_translation.translation AS order_status_label, timezone("user".timezone_id::text, "order".minexecdate) AS minexecdate FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_vitis.vm_translation priority_translation ON rt_priority.label_id::text = priority_translation.translation_id::text LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_vitis.vm_translation order_status_translation ON rt_order_status.label_id::text = order_status_translation.translation_id::text AND priority_translation.lang::text = order_status_translation.lang::text LEFT JOIN s_gtf.gtf_engine ON "order".gtf_engine_id = gtf_engine.gtf_engine_id WHERE "order".period_id IS NULL AND priority_translation.lang::text = email_option_translation.lang::text;
+                            CREATE OR REPLACE VIEW s_gtf.v_order_fast AS SELECT "order".order_id, "order".priority_id, "order".workspace_id, workspace.key AS workspace_key, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, "order".length_sec, gtf_engine.name, timezone("user".timezone_id::text, "order".minexecdate) AS minexecdate FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_gtf.gtf_engine ON "order".gtf_engine_id = gtf_engine.gtf_engine_id WHERE "order".period_id IS NULL;
+                            CREATE OR REPLACE VIEW s_gtf.v_user_order AS SELECT "order".order_id, "order".priority_id, workspace.key AS workspace_key, "order".workspace_id, workspace.name, "order".order_status_id, "order".user_id, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, s_gtf.s2hms("order".length_sec) AS length_sec, workspace.name AS workspace_name, priority_translation.translation AS priority_label, email_option_translation.translation AS email_option_label, priority_translation.lang, order_status_translation.lang AS order_status_lang, order_status_translation.translation AS order_status_label, timezone("user".timezone_id::text, "order".minexecdate) AS minexecdate FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_vitis.vm_translation priority_translation ON rt_priority.label_id::text = priority_translation.translation_id::text LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_vitis.vm_translation order_status_translation ON rt_order_status.label_id::text = order_status_translation.translation_id::text LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id WHERE "order".user_id::text ~ similar_escape((( SELECT "user".user_id FROM s_vitis."user" WHERE "user".login::name = "current_user"()))::text, NULL::text) AND "order".period_id IS NULL AND "order".deleted IS NOT TRUE AND priority_translation.lang::text = email_option_translation.lang::text AND priority_translation.lang::text = order_status_translation.lang::text;
+                            CREATE OR REPLACE RULE insert_v_user_order AS ON INSERT TO s_gtf.v_user_order DO INSTEAD  INSERT INTO s_gtf."order" (order_id, priority_id, workspace_id, user_id, wk_params, result_url, log_url, execution_date, attempt, email_notifications, email_option_id, deleted, gtf_engine_id, order_date, minexecdate) VALUES (new.order_id, new.priority_id, new.workspace_id, new.user_id, new.wk_params, new.result_url, new.log_url, new.execution_date, new.attempt, new.email_notifications, new.email_option_id, false, new.gtf_engine_id, new.order_date, new.minexecdate);
+
+                            -- Frédéric le 20/07/2018 15:30
+                            ALTER TABLE s_gtf.job ALTER COLUMN execution_date TYPE timestamp with time zone;
+                            DROP VIEW s_gtf.v_supervision_status;
+                            DROP VIEW s_gtf.v_subscription;
+                            DROP VIEW s_gtf.v_survey;
+                            DROP VIEW s_gtf.v_user_subscription;
+                            DROP VIEW s_gtf.v_user_survey;
+                            DROP VIEW s_gtf.v_order;
+                            DROP VIEW s_gtf.v_author_workspace;
+                            DROP VIEW s_gtf.v_workspace;
+                            DROP VIEW s_gtf.v_user_order;
+                            DROP VIEW s_gtf.v_order_fast;
+
+                            ALTER TABLE s_gtf.order ALTER COLUMN order_date TYPE timestamp with time zone;
+                            ALTER TABLE s_gtf.order ALTER COLUMN execution_date TYPE timestamp with time zone;
+                            ALTER TABLE s_gtf.workspace ALTER COLUMN last_save_date TYPE timestamp with time zone;
+                            ALTER TABLE s_gtf.workspace ALTER COLUMN creation_date TYPE timestamp with time zone;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_user_order AS SELECT "order".order_id, "order".priority_id, workspace.key AS workspace_key, "order".workspace_id, workspace.name, "order".order_status_id, "order".user_id, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, s_gtf.s2hms("order".length_sec) AS length_sec, workspace.name AS workspace_name, priority_translation.translation AS priority_label, email_option_translation.translation AS email_option_label, priority_translation.lang, order_status_translation.lang AS order_status_lang, order_status_translation.translation AS order_status_label, "order".minexecdate FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_vitis.vm_translation priority_translation ON rt_priority.label_id::text = priority_translation.translation_id::text LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_vitis.vm_translation order_status_translation ON rt_order_status.label_id::text = order_status_translation.translation_id::text LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id WHERE "order".user_id::text ~ similar_escape((( SELECT user_1.user_id FROM s_vitis."user" user_1 WHERE user_1.login::name = "current_user"()))::text, NULL::text) AND "order".period_id IS NULL AND "order".deleted IS NOT TRUE AND priority_translation.lang::text = email_option_translation.lang::text AND priority_translation.lang::text = order_status_translation.lang::text;
+                            ALTER TABLE s_gtf.v_user_order OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_user_order TO gtf_admin;
+                            GRANT ALL ON TABLE s_gtf.v_user_order TO gtf_user;
+                            GRANT SELECT ON TABLE s_gtf.v_user_order TO gtf_author;
+                            CREATE OR REPLACE RULE delete_v_user_order AS ON DELETE TO s_gtf.v_user_order DO INSTEAD  UPDATE s_gtf."order" SET deleted = true WHERE "order".order_id = old.order_id;
+                            CREATE OR REPLACE RULE insert_v_user_order AS ON INSERT TO s_gtf.v_user_order DO INSTEAD  INSERT INTO s_gtf."order" (order_id, priority_id, workspace_id, user_id, wk_params, result_url, log_url, execution_date, attempt, email_notifications, email_option_id, deleted, gtf_engine_id, order_date, minexecdate) VALUES (new.order_id, new.priority_id, new.workspace_id, new.user_id, new.wk_params, new.result_url, new.log_url, new.execution_date, new.attempt, new.email_notifications, new.email_option_id, false, new.gtf_engine_id, new.order_date, new.minexecdate);
+
+                            CREATE OR REPLACE VIEW s_gtf.v_order_fast AS SELECT "order".order_id, "order".priority_id, "order".workspace_id, workspace.key AS workspace_key, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, "order".length_sec, gtf_engine.name, "order".minexecdate FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_gtf.gtf_engine ON "order".gtf_engine_id = gtf_engine.gtf_engine_id WHERE "order".period_id IS NULL;
+                            ALTER TABLE s_gtf.v_order_fast OWNER TO u_vitis;
+                            GRANT SELECT ON TABLE s_gtf.v_order_fast TO gtf_user;
+                            GRANT SELECT ON TABLE s_gtf.v_order_fast TO gtf_author;
+                            GRANT ALL ON TABLE s_gtf.v_order_fast TO gtf_admin;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_workspace AS SELECT workspace.workspace_id, workspace.name, workspace.owner, workspace.creation_date, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.success_action_id, workspace.failed_action_id, workspace.survey, workspace.form_type, workspace.legal_terms_conditions, workspace.last_save_date, workspace.last_save_build, workspace.file_encoding, workspace.title, workspace.requirements, workspace.history, workspace.usage, workspace.key, workspace.email_template_id, workspace.locked, workspace.tag, "user".login, category.name AS category_name, CASE WHEN t.nb_demandes IS NULL THEN 0::bigint ELSE t.nb_demandes END AS nb_demande, email_template.name AS email_template, workspace.dataencrypt, workspace.usepersonaldata, workspace.unitcost, workspace.costpersecond FROM s_gtf.workspace LEFT JOIN s_vitis."user" ON workspace.owner = "user".user_id LEFT JOIN s_gtf.category ON workspace.category_id = category.category_id LEFT JOIN s_gtf.email_template ON workspace.email_template_id = email_template.email_template_id LEFT JOIN ( SELECT count(*) AS nb_demandes, v_order_fast.workspace_id FROM s_gtf.v_order_fast GROUP BY v_order_fast.workspace_id) t ON workspace.workspace_id = t.workspace_id;
+                            ALTER TABLE s_gtf.v_workspace OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_workspace TO gtf_admin;
+                            GRANT SELECT ON TABLE s_gtf.v_workspace TO gtf_user;
+                            GRANT SELECT ON TABLE s_gtf.v_workspace TO gtf_author;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_author_workspace AS SELECT v_workspace.workspace_id, v_workspace.name, v_workspace.owner, v_workspace.creation_date, v_workspace.description, v_workspace.subscription, v_workspace.fmw_file, v_workspace.category_id, v_workspace.success_action_id, v_workspace.failed_action_id, v_workspace.survey, v_workspace.form_type, v_workspace.legal_terms_conditions, v_workspace.last_save_date, v_workspace.last_save_build, v_workspace.file_encoding, v_workspace.title, v_workspace.requirements, v_workspace.history, v_workspace.usage, v_workspace.key, v_workspace.email_template_id, v_workspace.locked, v_workspace.tag, v_workspace.login, v_workspace.category_name, v_workspace.nb_demande, v_workspace.email_template, v_workspace.dataencrypt FROM s_gtf.v_workspace WHERE v_workspace.login::name::text = "current_user"()::text;
+                            ALTER TABLE s_gtf.v_author_workspace OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_author_workspace TO gtf_user;
+                            GRANT ALL ON TABLE s_gtf.v_author_workspace TO gtf_admin;
+                            GRANT ALL ON TABLE s_gtf.v_author_workspace TO gtf_author;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_order AS SELECT "order".order_id, "order".priority_id, "order".workspace_id, workspace.key AS workspace_key, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, s_gtf.s2hms("order".length_sec) AS length_sec, priority_translation.translation AS priority_label, email_option_translation.translation AS email_option_label, priority_translation.lang, gtf_engine.name, order_status_translation.translation AS order_status_label, "order".minexecdate FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.rt_priority ON "order".priority_id = rt_priority.priority_id LEFT JOIN s_vitis.vm_translation priority_translation ON rt_priority.label_id::text = priority_translation.translation_id::text LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_gtf.rt_order_status ON "order".order_status_id = rt_order_status.order_status_id LEFT JOIN s_vitis.vm_translation order_status_translation ON rt_order_status.label_id::text = order_status_translation.translation_id::text AND priority_translation.lang::text = order_status_translation.lang::text LEFT JOIN s_gtf.gtf_engine ON "order".gtf_engine_id = gtf_engine.gtf_engine_id WHERE "order".period_id IS NULL AND priority_translation.lang::text = email_option_translation.lang::text;
+                            ALTER TABLE s_gtf.v_order OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_order TO gtf_admin;
+                            GRANT SELECT ON TABLE s_gtf.v_order TO gtf_user;
+                            GRANT SELECT ON TABLE s_gtf.v_order TO gtf_author;
+                            CREATE OR REPLACE RULE delete_v_order AS ON DELETE TO s_gtf.v_order DO INSTEAD  DELETE FROM s_gtf."order" WHERE "order".order_id = old.order_id;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_subscription AS SELECT "order".order_id, "order".priority_id, "order".workspace_id, workspace.key AS workspace_key, "order".enabled, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, email_option_translation.translation AS notification, email_option_translation.lang FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text WHERE "order".period_id IS NOT NULL AND "order".survey_id IS NULL;
+                            ALTER TABLE s_gtf.v_subscription OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_subscription TO gtf_user;
+                            GRANT ALL ON TABLE s_gtf.v_subscription TO gtf_admin;
+                            GRANT ALL ON TABLE s_gtf.v_subscription TO gtf_author;
+                            CREATE OR REPLACE RULE delete_v_subscription AS ON DELETE TO s_gtf.v_subscription DO INSTEAD  DELETE FROM s_gtf."order" WHERE "order".order_id = old.order_id;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_survey AS SELECT "order".order_id, workspace.key AS workspace_key, "order".priority_id, "order".workspace_id, "order".enabled, workspace.name AS label_name, "order".order_status_id, "order".user_id, "user".login, "order".period_id, period.name AS order_period_libelle, "order".wk_params, "order".result_url, "order".order_date, "order".log_url, "order".execution_date, "order".attempt, "order".email_notifications, "order".email_option_id, "order".deleted, "order".gtf_engine_id, "order".survey_id, "order".condition, inbox.alias AS warehouse_name, email_option_translation.translation AS notification, email_option_translation.lang, survey_type_translation.translation AS survey_name FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_vitis."user" ON "user".user_id = "order".user_id LEFT JOIN s_gtf.inbox ON "order".inbox_id = inbox.inbox_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_gtf.rt_survey_type ON "order".survey_id = rt_survey_type.survey_id LEFT JOIN s_vitis.vm_translation survey_type_translation ON rt_survey_type.label_id::text = survey_type_translation.translation_id::text WHERE "order".period_id IS NOT NULL AND "order".survey_id = 1 AND email_option_translation.lang::text = survey_type_translation.lang::text;
+                            ALTER TABLE s_gtf.v_survey OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_survey TO gtf_user;
+                            GRANT ALL ON TABLE s_gtf.v_survey TO gtf_admin;
+                            GRANT ALL ON TABLE s_gtf.v_survey TO gtf_author;
+                            CREATE OR REPLACE RULE delete_v_survey AS ON DELETE TO s_gtf.v_survey DO INSTEAD  DELETE FROM s_gtf."order" WHERE "order".order_id = old.order_id;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_supervision_status AS SELECT count(v_order.order_id) AS nb_order_id, v_order.order_status_id AS filter, 'order'::text AS table_name FROM s_gtf.v_order WHERE v_order.lang::text = 'fr'::text GROUP BY v_order.order_status_id UNION SELECT count(v_subscription.order_id) AS nb_order_id, CASE WHEN v_subscription.enabled IS TRUE THEN 1 ELSE 0 END AS filter, 'subscription'::text AS table_name FROM s_gtf.v_subscription WHERE v_subscription.lang::text = 'fr'::text GROUP BY v_subscription.enabled UNION SELECT count(v_survey.order_id) AS nb_order_id, CASE WHEN v_survey.enabled IS TRUE THEN 1 ELSE 0 END AS filter, 'survey'::text AS table_name FROM s_gtf.v_survey WHERE v_survey.lang::text = 'fr'::text GROUP BY v_survey.enabled UNION SELECT count(message.message_id) AS nb_order_id, message.status AS filter, 'message'::text AS table_name FROM s_gtf.message GROUP BY message.status;
+                            ALTER TABLE s_gtf.v_supervision_status OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_supervision_status TO gtf_admin;
+                            GRANT SELECT ON TABLE s_gtf.v_supervision_status TO gtf_user;
+                            GRANT SELECT ON TABLE s_gtf.v_supervision_status TO gtf_author;
+
+                            CREATE OR REPLACE VIEW s_gtf.v_user_survey AS SELECT "order".order_id, workspace.key AS workspace_key, "order".workspace_id, workspace.name AS label_name, "order".enabled, "order".order_status_id, "order".user_id, "order".period_id, "order".order_date, "order".execution_date, "order".wk_params, "order".result_url, "order".email_option_id, "order".email_notifications, "order".gtf_engine_id, "order".survey_id, "order".condition, "order".inbox_id, inbox.alias AS name, workspace.name AS workspace_name, "order".survey_id AS monitoring_type, email_option_translation.translation AS notification, email_option_translation.lang, period.name AS order_period_libelle, survey_type_translation.translation AS survey_name FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_gtf.period ON "order".period_id = period.period_id LEFT JOIN s_gtf.inbox ON "order".inbox_id = inbox.inbox_id LEFT JOIN s_gtf.rt_survey_type ON "order".survey_id = rt_survey_type.survey_id LEFT JOIN s_vitis.vm_translation survey_type_translation ON rt_survey_type.label_id::text = survey_type_translation.translation_id::text WHERE "order".user_id::text ~ similar_escape((( SELECT "user".user_id FROM s_vitis."user" WHERE "user".login::name = "current_user"()))::text, NULL::text) AND "order".period_id IS NOT NULL AND "order".survey_id = 1 AND email_option_translation.lang::text = survey_type_translation.lang::text;
+                            ALTER TABLE s_gtf.v_user_survey OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_user_survey TO gtf_user;
+                            GRANT ALL ON TABLE s_gtf.v_user_survey TO gtf_admin;
+                            GRANT ALL ON TABLE s_gtf.v_user_survey TO gtf_author;
+                            COMMENT ON COLUMN s_gtf.v_user_survey.label_name IS 'Deprecated';
+                            COMMENT ON COLUMN s_gtf.v_user_survey.survey_id IS 'Deprecated';
+
+                            CREATE OR REPLACE RULE delete_v_user_survey AS ON DELETE TO s_gtf.v_user_survey DO INSTEAD  DELETE FROM s_gtf."order" WHERE "order".order_id = old.order_id;
+                            CREATE OR REPLACE RULE insert_v_user_survey AS ON INSERT TO s_gtf.v_user_survey DO INSTEAD  INSERT INTO s_gtf."order" (order_id, workspace_id, user_id, enabled, period_id, execution_date, wk_params, result_url, email_option_id, email_notifications, gtf_engine_id, survey_id, condition, inbox_id, order_date) VALUES (new.order_id, new.workspace_id, new.user_id, new.enabled, new.period_id, new.execution_date, new.wk_params, new.result_url, new.email_option_id, new.email_notifications, new.gtf_engine_id, new.survey_id, CASE WHEN new.condition IS NULL THEN ''::character varying ELSE new.condition END, new.inbox_id, new.order_date);
+                            CREATE OR REPLACE RULE update_v_user_survey AS ON UPDATE TO s_gtf.v_user_survey DO INSTEAD  UPDATE s_gtf."order" SET order_id = new.order_id, workspace_id = new.workspace_id, enabled = new.enabled, order_status_id = new.order_status_id, user_id = new.user_id, period_id = new.period_id, order_date = new.order_date, execution_date = new.execution_date, wk_params = new.wk_params, result_url = new.result_url, email_option_id = new.email_option_id, email_notifications = new.email_notifications, gtf_engine_id = new.gtf_engine_id, survey_id = new.survey_id, condition = CASE WHEN new.condition IS NULL THEN ''::character varying ELSE new.condition END, inbox_id = new.inbox_id WHERE "order".order_id = new.order_id;
+                            CREATE OR REPLACE VIEW s_gtf.v_user_subscription AS SELECT "order".order_id, "order".workspace_id, workspace.key AS workspace_key, "order".enabled, workspace.name AS label_name, "order".order_status_id, "order".user_id, "order".period_id, "order".order_date, "order".execution_date, "order".wk_params, "order".result_url, "order".email_option_id, "order".email_notifications, "order".gtf_engine_id, workspace.name AS workspace_name, email_option_translation.translation AS notification, period.name AS order_period_libelle, email_option_translation.lang FROM s_gtf."order" LEFT JOIN s_gtf.workspace ON "order".workspace_id = workspace.workspace_id LEFT JOIN s_gtf.rt_email_option ON "order".email_option_id = rt_email_option.email_option_id LEFT JOIN s_vitis.vm_translation email_option_translation ON rt_email_option.label_id::text = email_option_translation.translation_id::text LEFT JOIN s_gtf.period ON "order".period_id = period.period_id WHERE "order".user_id::text ~ similar_escape((( SELECT "user".user_id FROM s_vitis."user" WHERE "user".login::name = "current_user"()))::text, NULL::text) AND "order".period_id IS NOT NULL AND "order".survey_id IS NULL;
+
+                            ALTER TABLE s_gtf.v_user_subscription OWNER TO u_vitis;
+                            GRANT ALL ON TABLE s_gtf.v_user_subscription TO gtf_user;
+                            GRANT ALL ON TABLE s_gtf.v_user_subscription TO gtf_admin;
+                            GRANT ALL ON TABLE s_gtf.v_user_subscription TO gtf_author;
+                            COMMENT ON COLUMN s_gtf.v_user_subscription.label_name IS 'Deprecated';
+
+                            CREATE OR REPLACE RULE delete_v_user_subscription AS ON DELETE TO s_gtf.v_user_subscription DO INSTEAD  DELETE FROM s_gtf."order" WHERE "order".order_id = old.order_id;
+                            CREATE OR REPLACE RULE insert_v_user_subscription AS ON INSERT TO s_gtf.v_user_subscription DO INSTEAD  INSERT INTO s_gtf."order" (order_id, workspace_id, user_id, period_id, execution_date, wk_params, result_url, email_option_id, email_notifications, gtf_engine_id, enabled, order_date) VALUES (new.order_id, new.workspace_id, new.user_id, new.period_id, new.execution_date, new.wk_params, new.result_url, new.email_option_id, new.email_notifications, new.gtf_engine_id, new.enabled, new.order_date);
+                            CREATE OR REPLACE RULE update_v_user_subscription AS ON UPDATE TO s_gtf.v_user_subscription DO INSTEAD  UPDATE s_gtf."order" SET workspace_id = new.workspace_id, enabled = new.enabled, order_status_id = new.order_status_id, period_id = new.period_id, execution_date = new.execution_date, wk_params = new.wk_params, email_option_id = new.email_option_id, email_notifications = new.email_notifications WHERE "order".order_id = new.order_id;
+
+                            -- Frédéric le 23/07/2018 16:54
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_user_order') AND name = 'order_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_user_survey') AND name = 'execution_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_user_subscription') AND name = 'order_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_subscription') AND name = 'order_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_survey') AND name = 'order_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_message') AND name = 'creation_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_order') AND name = 'order_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_user_survey') AND name = 'order_date';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_user_order') AND name = 'minexecdate';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_order') AND name = 'minexecdate';
+                            UPDATE s_vitis.vm_table_field SET template = NULL WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_message') AND name = 'minexecdate';
+
+                            -- Frédéric le 26/07/2018 14:23
+                            DELETE FROM s_vitis.vm_table_field WHERE tab_id = (select tab_id from s_vitis.vm_tab where name = 'gtf_user_order') AND name = 'priority_label';
+
+                            -- Anthony le 08/08/2018
+                            -- Ajout de workspace.key dans la vue v_user_workspace
+                            CREATE OR REPLACE VIEW s_gtf.v_user_workspace AS SELECT DISTINCT workspace.workspace_id, workspace.name, workspace.description, workspace.subscription, workspace.fmw_file, workspace.category_id, workspace.survey, workspace_group.group_id, workspace.key FROM s_gtf.workspace, s_gtf.workspace_group WHERE workspace.workspace_id = workspace_group.workspace_id ORDER BY workspace.workspace_id, workspace.name, workspace.description, workspace.subscription, workspace.fmw_file;
+                            -- Correction suite à discussion avec Yoann un gtf_user ne doit pas pouvoir lister tous les projets
+							REVOKE ALL ON s_gtf.v_workspace FROM gtf_user;
                           ]]>
                     </code>
                 </query>
+                <query>
+					<type>update</type>
+					<version>2018.02.01</version>
+                    <code>
+                        <![CDATA[ 
+                            -- Frédéric le 10/09/2018 12:00
+                            ALTER TABLE s_gtf.fme_engine ADD COLUMN fme_server_instance_name character varying(50);
+                            CREATE OR REPLACE VIEW s_gtf.v_fme_engine AS SELECT fme_engine.fme_engine_id, fme_engine.name, fme_engine.server_id, fme_engine.local_path, server.hostname AS server_name, fme_engine.server_url, fme_engine.login, fme_engine.password, fme_engine.fme_engine_type_id, fme_engine.s3_access_key_id, fme_engine.s3_secret_access_key, fme_engine.fme_cloud_api_token, v_fme_engine_type.fme_engine_type_label, v_fme_engine_type.lang, fme_engine.s3_region, fme_engine.iam_access_key_id, fme_engine.iam_secret_access_key, fme_engine.fme_server_instance_name FROM s_gtf.fme_engine LEFT JOIN s_gtf.server ON fme_engine.server_id = server.server_id LEFT JOIN s_gtf.v_fme_engine_type ON fme_engine.fme_engine_type_id::text = v_fme_engine_type.fme_engine_type_id::text;
+                            CREATE OR REPLACE RULE insert_v_fme_engine AS ON INSERT TO s_gtf.v_fme_engine DO INSTEAD  INSERT INTO s_gtf.fme_engine (fme_engine_id, name, server_id, local_path, server_url, login, password, fme_engine_type_id, s3_access_key_id, s3_secret_access_key, fme_cloud_api_token, s3_region, iam_access_key_id, iam_secret_access_key, fme_server_instance_name) VALUES (new.fme_engine_id, new.name, new.server_id, new.local_path, new.server_url, new.login, new.password, new.fme_engine_type_id, new.s3_access_key_id, new.s3_secret_access_key, new.fme_cloud_api_token, new.s3_region, new.iam_access_key_id, new.iam_secret_access_key, new.fme_server_instance_name);
+                            CREATE OR REPLACE RULE update_v_fme_engine AS ON UPDATE TO s_gtf.v_fme_engine DO INSTEAD  UPDATE s_gtf.fme_engine SET fme_engine_id = new.fme_engine_id, name = new.name, server_id = new.server_id, local_path = new.local_path, server_url = new.server_url, login = new.login, password = new.password, fme_engine_type_id = new.fme_engine_type_id, s3_access_key_id = new.s3_access_key_id, s3_secret_access_key = new.s3_secret_access_key, fme_cloud_api_token = new.fme_cloud_api_token, s3_region = new.s3_region, iam_access_key_id = new.iam_access_key_id, iam_secret_access_key = new.iam_secret_access_key, fme_server_instance_name = new.fme_server_instance_name WHERE fme_engine.fme_engine_id = new.fme_engine_id;
+
+                            -- Frédéric le 12/09/2018 15:15
+                            ALTER TABLE s_gtf.workspace ADD COLUMN version integer DEFAULT 0;
+                            CREATE FUNCTION s_gtf.update_workspace_version() RETURNS trigger    LANGUAGE plpgsql    AS $$  BEGIN  SELECT INTO new.version version + 1 FROM s_gtf.workspace WHERE workspace.workspace_id = new.workspace_id; return New;  END; $$;
+                            ALTER FUNCTION s_gtf.update_workspace_version() OWNER TO u_vitis;
+                            CREATE TRIGGER before_update_workspace BEFORE UPDATE ON s_gtf.workspace FOR EACH ROW EXECUTE PROCEDURE s_gtf.update_workspace_version();
+
+                            -- Frédéric le 13/09/2018 11:30
+                            ALTER TABLE s_gtf.fme_engine ADD COLUMN fme_server_s3_bucket character varying(50);
+                            CREATE OR REPLACE VIEW s_gtf.v_fme_engine AS SELECT fme_engine.fme_engine_id, fme_engine.name, fme_engine.server_id, fme_engine.local_path, server.hostname AS server_name, fme_engine.server_url, fme_engine.login, fme_engine.password, fme_engine.fme_engine_type_id, fme_engine.s3_access_key_id, fme_engine.s3_secret_access_key, fme_engine.fme_cloud_api_token, v_fme_engine_type.fme_engine_type_label, v_fme_engine_type.lang, fme_engine.s3_region, fme_engine.iam_access_key_id, fme_engine.iam_secret_access_key, fme_engine.fme_server_instance_name, fme_engine.fme_server_s3_bucket FROM s_gtf.fme_engine LEFT JOIN s_gtf.server ON fme_engine.server_id = server.server_id LEFT JOIN s_gtf.v_fme_engine_type ON fme_engine.fme_engine_type_id::text = v_fme_engine_type.fme_engine_type_id::text;
+                            CREATE OR REPLACE RULE insert_v_fme_engine AS ON INSERT TO s_gtf.v_fme_engine DO INSTEAD  INSERT INTO s_gtf.fme_engine (fme_engine_id, name, server_id, local_path, server_url, login, password, fme_engine_type_id, s3_access_key_id, s3_secret_access_key, fme_cloud_api_token, s3_region, iam_access_key_id, iam_secret_access_key, fme_server_instance_name, fme_server_s3_bucket) VALUES (new.fme_engine_id, new.name, new.server_id, new.local_path, new.server_url, new.login, new.password, new.fme_engine_type_id, new.s3_access_key_id, new.s3_secret_access_key, new.fme_cloud_api_token, new.s3_region, new.iam_access_key_id, new.iam_secret_access_key, new.fme_server_instance_name, new.fme_server_s3_bucket);
+                            CREATE OR REPLACE RULE update_v_fme_engine AS ON UPDATE TO s_gtf.v_fme_engine DO INSTEAD  UPDATE s_gtf.fme_engine SET fme_engine_id = new.fme_engine_id, name = new.name, server_id = new.server_id, local_path = new.local_path, server_url = new.server_url, login = new.login, password = new.password, fme_engine_type_id = new.fme_engine_type_id, s3_access_key_id = new.s3_access_key_id, s3_secret_access_key = new.s3_secret_access_key, fme_cloud_api_token = new.fme_cloud_api_token, s3_region = new.s3_region, iam_access_key_id = new.iam_access_key_id, iam_secret_access_key = new.iam_secret_access_key, fme_server_instance_name = new.fme_server_instance_name, fme_server_s3_bucket = new.fme_server_s3_bucket WHERE fme_engine.fme_engine_id = new.fme_engine_id;
+
+                            -- Anthony le 18/09/2018 14:43
+                            ALTER TABLE s_gtf.fme_engine ADD COLUMN useexternaldbconnection boolean DEFAULT FALSE;
+                            DROP VIEW s_gtf.v_fme_engine;
+                            CREATE OR REPLACE VIEW s_gtf.v_fme_engine AS SELECT fme_engine.fme_engine_id, fme_engine.name, fme_engine.server_id, fme_engine.local_path, server.hostname AS server_name, fme_engine.server_url, fme_engine.login, fme_engine.password, fme_engine.fme_engine_type_id, fme_engine.s3_access_key_id, fme_engine.s3_secret_access_key, fme_engine.fme_cloud_api_token, v_fme_engine_type.fme_engine_type_label, v_fme_engine_type.lang, fme_engine.s3_region, fme_engine.iam_access_key_id, fme_engine.iam_secret_access_key, fme_engine.fme_server_instance_name, fme_engine.fme_server_s3_bucket, useexternaldbconnection FROM s_gtf.fme_engine LEFT JOIN s_gtf.server ON fme_engine.server_id = server.server_id LEFT JOIN s_gtf.v_fme_engine_type ON fme_engine.fme_engine_type_id::text = v_fme_engine_type.fme_engine_type_id::text;
+                            ALTER TABLE s_gtf.v_fme_engine OWNER TO u_vitis;
+							GRANT SELECT ON TABLE s_gtf.v_fme_engine TO gtf_user;
+							GRANT ALL ON TABLE s_gtf.v_fme_engine TO u_vitis;
+							GRANT SELECT ON TABLE s_gtf.v_fme_engine TO gtf_author;
+							GRANT ALL ON TABLE s_gtf.v_fme_engine TO gtf_admin;
+                            CREATE OR REPLACE RULE insert_v_fme_engine AS ON INSERT TO s_gtf.v_fme_engine DO INSTEAD  INSERT INTO s_gtf.fme_engine (fme_engine_id, name, server_id, local_path, server_url, login, password, fme_engine_type_id, s3_access_key_id, s3_secret_access_key, fme_cloud_api_token, s3_region, iam_access_key_id, iam_secret_access_key, fme_server_instance_name, fme_server_s3_bucket, useexternaldbconnection) VALUES (new.fme_engine_id, new.name, new.server_id, new.local_path, new.server_url, new.login, new.password, new.fme_engine_type_id, new.s3_access_key_id, new.s3_secret_access_key, new.fme_cloud_api_token, new.s3_region, new.iam_access_key_id, new.iam_secret_access_key, new.fme_server_instance_name, new.fme_server_s3_bucket, new.useexternaldbconnection);
+                            CREATE OR REPLACE RULE update_v_fme_engine AS ON UPDATE TO s_gtf.v_fme_engine DO INSTEAD  UPDATE s_gtf.fme_engine SET fme_engine_id = new.fme_engine_id, name = new.name, server_id = new.server_id, local_path = new.local_path, server_url = new.server_url, login = new.login, password = new.password, fme_engine_type_id = new.fme_engine_type_id, s3_access_key_id = new.s3_access_key_id, s3_secret_access_key = new.s3_secret_access_key, fme_cloud_api_token = new.fme_cloud_api_token, s3_region = new.s3_region, iam_access_key_id = new.iam_access_key_id, iam_secret_access_key = new.iam_secret_access_key, fme_server_instance_name = new.fme_server_instance_name, fme_server_s3_bucket = new.fme_server_s3_bucket, useexternaldbconnection = new.useexternaldbconnection WHERE fme_engine.fme_engine_id = new.fme_engine_id;
+                            CREATE OR REPLACE RULE delete_v_fme_engine AS ON DELETE TO s_gtf.v_fme_engine DO INSTEAD DELETE FROM s_gtf.fme_engine WHERE fme_engine.fme_engine_id = old.fme_engine_id;
+
+                            -- Frédéric le 01/10/2018 16:30
+                            ALTER TABLE s_gtf."order" ADD COLUMN pid integer DEFAULT NULL;
+
+                            -- Frédéric le 04/10/2018 11:30
+                            UPDATE s_vitis.vm_table_button SET event = 'deleteGtfOrders' WHERE tab_id=(select tab_id from s_vitis.vm_tab where name = 'gtf_order') AND label_id='gtf_136';
+                            
+                            
+                            -- Frédéric le 11/10/2018 15:00
+                            INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('Bouton d''arrêt d''une demande en cours table_button_id = 43', 'gtf_330');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_330', 'fr', 'Stopper le processus');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_330', 'en', 'Stop the process');
+                            INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('stopOrderProcessFlexigrid', (select nextval('s_vitis.seq_vm'::regclass)), 'stopOrderProcess', 'gtf_330', 'gtf/orders', (select tab_id from s_vitis.vm_tab where name = 'gtf_order'));
+                            INSERT INTO s_vitis.vm_string (string, string_id) VALUES ('"Order_status_id 7 de la table tr_order_staus (Stoppé)', 'gtf_331');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_331', 'fr', 'Stoppé');
+                            INSERT INTO s_vitis.vm_translation (translation_id, lang, translation) VALUES ('gtf_331', 'en', 'Stopped');
+                            INSERT INTO s_gtf.rt_order_status (order_status_id, label_id) VALUES (7, 'gtf_331');
+						]]>
+                    </code>
+                </query>
             </queriesCollection>
 </sqlQueries>
\ No newline at end of file
diff --git a/web_service/ws/FmeEngine.class.inc b/web_service/ws/FmeEngine.class.inc
old mode 100755
new mode 100644
index f51d5b2e2eef44b92fd9678e82516ddb6d8d8bda..4e93af18d9114fd8aba1c99daec86657bc724414
--- a/web_service/ws/FmeEngine.class.inc
+++ b/web_service/ws/FmeEngine.class.inc
@@ -28,7 +28,7 @@ class FmeEngine extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array("fme_engine_id", "name", "server_id", "local_path", "server_name", "fme_engine_type_id", "server_url", "login", "password", "s3_access_key_id", "s3_secret_access_key", "fme_cloud_api_token", "fme_engine_type_label", "s3_region", "iam_access_key_id", "iam_secret_access_key");
+        $this->aSelectedFields = Array("fme_engine_id", "name", "server_id", "local_path", "server_name", "fme_engine_type_id", "server_url", "login", "password", "s3_access_key_id", "s3_secret_access_key", "fme_cloud_api_token", "fme_engine_type_label", "s3_region", "iam_access_key_id", "iam_secret_access_key", 'fme_server_instance_name', 'fme_server_s3_bucket', "useexternaldbconnection");
     }
 
     /**
@@ -68,6 +68,80 @@ class FmeEngine extends GTF {
      *  )
      */
 
+    /**
+     * @SWG\Get(path="/fmeengines/{fme_engine_id}/instances/{instance_name}", 
+     *   tags={"FmeEngines"},
+     *   summary="Get Fme Server instance",
+     *   description="Request to get an instance of Fme Server on Fme Cloud",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="fme_engine_id",
+     *     in="path",
+     *     description="user id",
+     *     required=true,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="instance_name",
+     *     in="path",
+     *     description="name of the fme server instance",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/fmeengines")
+     *     )
+     *  )
+     */
+
+    /**
+     * @SWG\Get(path="/fmeengines/{fme_engine_id}/instances/{instance_name}/info", 
+     *   tags={"FmeEngines"},
+     *   summary="Get Fme Server instance information",
+     *   description="Request to get the FME Server build number and version on Fme Cloud",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="fme_engine_id",
+     *     in="path",
+     *     description="user id",
+     *     required=true,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="instance_name",
+     *     in="path",
+     *     description="name of the fme server instance",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/fmeengines")
+     *     )
+     *  )
+     */
+    
     /**
      * get informations about mode
      */
diff --git a/web_service/ws/FmeEngines.class.inc b/web_service/ws/FmeEngines.class.inc
old mode 100755
new mode 100644
index b62eff432a411099fa41897d0d54358659d14ddc..1ef27ae6f6862c5804ed83cae73d94e1a4e5e4df
--- a/web_service/ws/FmeEngines.class.inc
+++ b/web_service/ws/FmeEngines.class.inc
@@ -15,6 +15,8 @@ require_once 'Gtf.class.inc';
 require_once __DIR__ . '/../../class/vitis_lib/Connection.class.inc';
 require_once 'FmeEngine.class.inc';
 require_once __DIR__ . '/../../class/vmlib/BdDataAccess.inc';
+require_once 'gtf_lib/FmeCloud.class.inc';
+require_once 'gtf_lib/FmeServer.class.inc';
 
 class FmeEngines extends GTF {
     /**
@@ -40,7 +42,7 @@ class FmeEngines extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array("fme_engine_id", "name", "server_id", "local_path", "server_name", "fme_engine_type_id", "server_url", "login", "password", "s3_access_key_id", "s3_secret_access_key", "fme_cloud_api_token", "fme_engine_type_label", "s3_region", "iam_access_key_id", "iam_secret_access_key");
+        $this->aSelectedFields = Array("fme_engine_id", "name", "server_id", "local_path", "server_name", "fme_engine_type_id", "server_url", "login", "password", "s3_access_key_id", "s3_secret_access_key", "fme_cloud_api_token", "fme_engine_type_label", "s3_region", "iam_access_key_id", "iam_secret_access_key", 'fme_server_instance_name', 'fme_server_s3_bucket', "useexternaldbconnection");
     }
 
     /**
@@ -120,7 +122,7 @@ class FmeEngines extends GTF {
      *   summary="Get FmeEngine test",
      *   description="Request to get FmeEnginetest by id",
      *   operationId="GET",
-     *   produces={"application/xml", "application/json"},
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
      *   @SWG\Parameter(
      *     name="token",
      *     in="query",
@@ -156,17 +158,31 @@ class FmeEngines extends GTF {
      * @return  FmeEngines
      */
     function GET() {
-        $aReturn = $this->genericGet($this->aProperties['schema_gtf'], "v_fme_engine", "fme_engine_id");
-        if (!empty($this->aPath[3]) && $this->aPath[3] == 'Test') {
-            if ($aReturn['sStatus'] == 1) {
-                // Test de validité de la licence FME.
-                $this->testFmeLicence();
-                $aXmlRacineAttribute['status'] = 1;
-                $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        // Instance FME Server sur Fme Cloud.
+        if (!empty($this->aPath[3]) && $this->aPath[3] == 'instances') {
+            if (empty($this->aPath[5])) {
+                $sMessage = $this->getFmeServerInstance($this->aPath[2], $this->aPath[4], $oFmeCloud);
+                return $sMessage;
+            }
+            else {
+                if ($this->aPath[5] == 'info')
+                    $sMessage = $this->getFmeServerInstanceInfo($this->aPath[2], $this->aPath[4]);
                 return $sMessage;
             }
-        } else
-            return $aReturn['sMessage'];
+        }
+        else {
+            $aReturn = $this->genericGet($this->aProperties['schema_gtf'], "v_fme_engine", "fme_engine_id");
+            if (!empty($this->aPath[3]) && $this->aPath[3] == 'Test') {
+                if ($aReturn['sStatus'] == 1) {
+                    // Test de validité de la licence FME.
+                    $this->testFmeLicence();
+                    $aXmlRacineAttribute['status'] = 1;
+                    $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                    return $sMessage;
+                }
+            } else
+                return $aReturn['sMessage'];
+        }
     }
 
     /**
@@ -175,7 +191,7 @@ class FmeEngines extends GTF {
      *   summary="Add FmeEngine",
      *   description="Request to add fmeengine",
      *   operationId="POST",
-     *   produces={"application/xml", "application/json"},
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
      *   @SWG\Parameter(
      *     name="token",
      *     in="formData",
@@ -236,7 +252,7 @@ class FmeEngines extends GTF {
      *   summary="Update FmeEngine",
      *   description="Request to update FmeEngine",
      *   operationId="PUT",
-     *   produces={"application/xml", "application/json"},
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
      *   @SWG\Parameter(
      *     name="token",
      *     in="query",
@@ -281,20 +297,108 @@ class FmeEngines extends GTF {
      *     )
      *  )
      */
+    
+    /**
+     * @SWG\Put(path="/fmeengines/{fme_engine_id}/instances/{instance_name}/start",
+     *   tags={"FmeEngines"},
+     *   summary="Start Fme Server instance",
+     *   description="Request to start an instance of Fme Server on Fme Cloud",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="fme_engine_id",
+     *     in="path",
+     *     description="id of the fme engine",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="instance_name",
+     *     in="path",
+     *     description="name of the fme server instance",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/fmeengines")
+     *     )
+     *  )
+     */
 
+    /**
+     * @SWG\Put(path="/fmeengines/{fme_engine_id}/instances/{instance_name}/pause",
+     *   tags={"FmeEngines"},
+     *   summary="Pause Fme Server instance",
+     *   description="Request to pause an instance of Fme Server on Fme Cloud",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="fme_engine_id",
+     *     in="path",
+     *     description="id of the fme engine",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     * * @SWG\Parameter(
+     *     name="instance_name",
+     *     in="path",
+     *     description="name of the fme server instance",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/fmeengines")
+     *     )
+     *  )
+     */
+    
     /**
      * update fmeengine
      * @return id of the fmeengine if ok error object if ko
      */
     function PUT() {
-        $aReturn = $this->genericPut($this->aProperties['schema_gtf'], 'v_fme_engine', 'fme_engine_id');
-        if ($aReturn['sStatus'] == 1) {
-            $aXmlRacineAttribute['status'] = 1;
-            $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
-            $oFmeEngine = new FmeEngine($this->aPath, $this->aValues, $this->aProperties, $this->oConnection);
-            $oFmeEngine->GET();
-        } else {
-            $sMessage = $aReturn['sMessage'];
+        if (!empty($this->aPath[3])) {
+            if ($this->aPath[3] == 'instances') {
+                switch($this->aPath[5]) {
+                    case 'start':
+                        $sMessage = $this->startFmeServerInstance($this->aPath[2], $this->aPath[4]);
+                        break;
+                    case 'pause':
+                        $sMessage = $this->pauseFmeServerInstance($this->aPath[2], $this->aPath[4]);
+                        break;
+                }
+            }
+        }
+        else {
+            $aReturn = $this->genericPut($this->aProperties['schema_gtf'], 'v_fme_engine', 'fme_engine_id');
+            if ($aReturn['sStatus'] == 1) {
+                $aXmlRacineAttribute['status'] = 1;
+                $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+                $oFmeEngine = new FmeEngine($this->aPath, $this->aValues, $this->aProperties, $this->oConnection);
+                $oFmeEngine->GET();
+            } else {
+                $sMessage = $aReturn['sMessage'];
+            }
         }
         return $sMessage;
     }
@@ -305,7 +409,7 @@ class FmeEngines extends GTF {
      *   summary="delete FmeEngine",
      *   description="Request to delete FmeEngine",
      *   operationId="DELETE",
-     *   produces={"application/xml", "application/json"},
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
      *   @SWG\Parameter(
      *     name="token",
      *     in="query",
@@ -333,7 +437,7 @@ class FmeEngines extends GTF {
      *   summary="delete FmeEngine",
      *   description="Request to delete FmeEngine",
      *   operationId="DELETE",
-     *   produces={"application/xml", "application/json"},
+     *   produces={"application/xml", "application/json", "application/x-vm-json"},
      *   @SWG\Parameter(
      *     name="token",
      *     in="query",
@@ -430,33 +534,203 @@ class FmeEngines extends GTF {
                 $this->getFmeLicence($this->aObjects[0]->aFields["local_path"]);
             break;
             case 'fme_server':
-                require 'gtf_lib/FmeServer.class.inc';
                 $oFmeServer = new FmeServer($this->aObjects[0]->aFields['server_url'], $this->aObjects[0]->aFields['login'], $this->aObjects[0]->aFields['password'], 'day', 1);
                 $oFmeServerLicenceStatus = $oFmeServer->getLicenceStatus();
-                $this->aObjects[0]->aFields['exists'] = true;
-                if ($oFmeServerLicenceStatus->isLicenseExpired === true)
-                    $this->aObjects[0]->aFields['expired'] = true;
-                else if ($oFmeServerLicenceStatus->isLicensed === false)
-                    $this->aObjects[0]->aFields['valid'] = false;
+                if ($oFmeServerLicenceStatus === false) {
+                    $this->aObjects[0]->aFields['exists'] = true;
+                    $this->aObjects[0]->aFields['request_error'] = true;
+                }
+                else if (empty($oFmeServerLicenceStatus))
+                    $this->aObjects[0]->aFields['exists'] = false;
                 else {
-                    // Info sur la licence de FME Server.
-                    //$this->aObjects[0]->aFields['exists'] = true;
-                    $this->aObjects[0]->aFields['valid'] = true;
-                    $sExpiryDate = $oFmeServerLicenceStatus->expiryDate;
-                    if (!empty($sExpiryDate))
-                        $sExpiryDate = substr($sExpiryDate, 6, 2) . '/' . substr($sExpiryDate, 4, 2) . '/' . substr($sExpiryDate, 0, 4);
-                    $this->aObjects[0]->aFields['validity'] = $sExpiryDate;
-                    // Info sur FME Server.
-                    $oFmeServerInfo = $oFmeServer->getInfo();
-                    $this->aObjects[0]->aFields['version'] = $oFmeServerInfo->build;
-                    $this->aObjects[0]->aFields['type'] = $oFmeServerInfo->version;
-                    $this->aObjects[0]->aFields['host'] = parse_url($this->aObjects[0]->aFields['server_url'], PHP_URL_HOST);
+                    $this->aObjects[0]->aFields['exists'] = true;
+                    if ($oFmeServerLicenceStatus->isLicenseExpired === true)
+                        $this->aObjects[0]->aFields['expired'] = true;
+                    else if ($oFmeServerLicenceStatus->isLicensed === false)
+                        $this->aObjects[0]->aFields['valid'] = false;
+                    else {
+                        // Info sur la licence de FME Server.
+                        //$this->aObjects[0]->aFields['exists'] = true;
+                        $this->aObjects[0]->aFields['valid'] = true;
+                        $sExpiryDate = $oFmeServerLicenceStatus->expiryDate;
+                        if (!empty($sExpiryDate))
+                            $sExpiryDate = substr($sExpiryDate, 6, 2) . '/' . substr($sExpiryDate, 4, 2) . '/' . substr($sExpiryDate, 0, 4);
+                        $this->aObjects[0]->aFields['validity'] = $sExpiryDate;
+                        // Info sur FME Server.
+                        $oFmeServerInfo = $oFmeServer->getInfo();
+                        $this->aObjects[0]->aFields['version'] = $oFmeServerInfo->build;
+                        $this->aObjects[0]->aFields['type'] = $oFmeServerInfo->version;
+                        $this->aObjects[0]->aFields['host'] = parse_url($this->aObjects[0]->aFields['server_url'], PHP_URL_HOST);
+                    }
                 }
             break;
-            case 'fme_cloud':
-                error_log(print_r($this->aObjects[0]->aFields, true));
-            break;
         }
     }
+
+    /**
+     * Get a Fme Server instance on Fme Cloud.
+     * @param {number} $iFmeEngineId Id of a Fme Engine.
+     * @param {string} $sFmeServerInstanceName Name of a Fme Server instance on Fme Cloud.
+     */
+    function getFmeServerInstance($iFmeEngineId, $sFmeServerInstanceName, &$oFmeCloud = null, &$aFmeEngine = array()) {
+        require $this->sRessourcesFile;
+        $iErrorId = 17;
+        $sErrorMessage = '';
+        // Paramètres du moteur Fme.
+        $aParams = array();
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $aParams['fme_engine_id'] = array('value' => $iFmeEngineId, 'type' => 'number');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getFmeEngine'], $aParams);
+        if ($this->oConnection->oBd->enErreur()) {
+            $iErrorId = 1;
+            $sErrorMessage = $this->oConnection->oBd->getBDMessage();
+        }
+        else if ($this->oConnection->oBd->nombreLigne($oPDOresult) > 0) {
+            $aFmeEngine = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+            $oFmeCloud = new FmeCloud($aFmeEngine['server_url'], $aFmeEngine['fme_cloud_api_token']);
+            // Liste des occurrences de FME Server.
+            $aFmeServerInstances = $oFmeCloud->serviceRequest('instances');
+            if (!empty($aFmeServerInstances)) {
+                foreach($aFmeServerInstances as $oInstance) {
+                    if ($oInstance->name == $sFmeServerInstanceName)
+                        $oFmeServerInstance = $oInstance;
+                }
+                if (empty($oFmeServerInstance))
+                    $sErrorMessage = 'L\'instance FME Server "' . $sFmeServerInstanceName . '" n\'existe pas.';
+                else {
+                    $this->aFields['instance'] = $oFmeServerInstance;
+                }
+            }
+            else
+                $sErrorMessage ='Aucune instance FME Server n\'est disponible.';
+        }
+        else
+            $sErrorMessage = 'Le moteur FME spécifiée n\'existe pas.';
+        // Message de retour pour l'API Rest.
+        if (empty($sErrorMessage)) {
+            $aXmlRacineAttribute['status'] = 1;
+            $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        }
+        else {
+            $oError = new VitisError($iErrorId, $sErrorMessage);
+            $aXmlRacineAttribute['status'] = 0;
+            $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        }
+        return $sMessage;
+    }
+
+    
+    /**
+     * Start a Fme Server instance on Fme Cloud.
+     * @param {number} $iFmeEngineId Id of a Fme Engine.
+     * @param {string} $sFmeServerInstanceName Name of a Fme Server instance on Fme Cloud.
+     */
+    function startFmeServerInstance($iFmeEngineId, $sFmeServerInstanceName) {
+        $sMessage = $this->getFmeServerInstance($iFmeEngineId, $sFmeServerInstanceName, $oFmeCloud);
+        $oReturn = json_decode($sMessage);
+        if ($oReturn->status == 1) {
+            // Démarrage de l'occurence si elle est en pause.
+            if ($oReturn->instance->state == 'PAUSED') {
+                if ($oFmeCloud->startInstance($oReturn->instance->id) === false)
+                    $sErrorMessage = 'L\'instance Fme Server n\'a pu être démarrée.' ;
+                else {
+                    $oFmeServerInstance = $oFmeCloud->serviceRequest('instances/' . $oReturn->instance->id);
+                    if ($oFmeServerInstance === false)
+                        $sErrorMessage = 'Erreur pendant le démarrage de l\'instance Fme Server.';
+                    else
+                        $this->aFields = array('instance' => $oFmeServerInstance);
+                }
+            }
+            else if ($oReturn->instance->state == 'RUNNING')
+                $sErrorMessage = 'L\'instance Fme Server est déja en cours d\'exécution.';
+            else if ($oReturn->instance->state == 'executing_action')
+                $sErrorMessage = 'Une action est en cours d\'exéution sur L\'instance Fme Server.';
+            else
+                $sErrorMessage = $oReturn->instance->state;
+            // Message de retour pour l'API Rest.
+            if (empty($sErrorMessage)) {
+                $aXmlRacineAttribute['status'] = 1;
+                $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+            else {
+                $oError = new VitisError(17, $sErrorMessage);
+                $aXmlRacineAttribute['status'] = 0;
+                $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+        }
+        return $sMessage;
+    }
+    
+    /**
+     * Pause a Fme Server instance on Fme Cloud.
+     * @param {number} $iFmeEngineId Id of a Fme Engine.
+     * @param {string} $sFmeServerInstanceName Name of a Fme Server instance on Fme Cloud.
+     */
+    function pauseFmeServerInstance($iFmeEngineId, $sFmeServerInstanceName) {
+        $sMessage = $this->getFmeServerInstance($iFmeEngineId, $sFmeServerInstanceName, $oFmeCloud);
+        $oReturn = json_decode($sMessage);
+        if ($oReturn->status == 1) {
+            // Mise en pause de l'occurence si elle est en cours d'éxecution.
+            if ($oReturn->instance->state == 'RUNNING') {
+                if ($oFmeCloud->pauseInstance($oReturn->instance->id) === false)
+                    $sErrorMessage = 'L\'instance Fme Server n\'a pu être arrêtée.' ;
+                else {
+                    $oFmeServerInstance = $oFmeCloud->serviceRequest('instances/' . $oReturn->instance->id);
+                    if ($oFmeServerInstance === false) 
+                        $sErrorMessage = 'Erreur pendant l\'arrêt de l\'instance Fme Server.';
+                    else
+                        $this->aFields = array('instance' => $oFmeServerInstance);
+                }
+            }
+            else if ($oReturn->instance->state == 'PAUSED')
+                $sErrorMessage = 'L\'instance Fme Server est déja à l\'arrêt';
+            else if ($oReturn->instance->state == 'executing_action')
+                $sErrorMessage = 'Une action est en cours d\'exécution sur L\'instance Fme Server.';
+            else
+                $sErrorMessage = $oReturn->instance->state;
+            // Message de retour pour l'API Rest.
+            if (empty($sErrorMessage)) {
+                $aXmlRacineAttribute['status'] = 1;
+                $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+            else {
+                $oError = new VitisError(17, $sErrorMessage);
+                $aXmlRacineAttribute['status'] = 0;
+                $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+        }
+        return $sMessage;
+    }
+    
+    /**
+     * Get Fme Server instance information on Fme Cloud.
+     * @param {number} $iFmeEngineId Id of a Fme Engine.
+     * @param {string} $sFmeServerInstanceName Name of a Fme Server instance on Fme Cloud.
+     */
+    function getFmeServerInstanceInfo($iFmeEngineId, $sFmeServerInstanceName) {
+        $sMessage = $this->getFmeServerInstance($iFmeEngineId, $sFmeServerInstanceName, $oFmeCloud, $aFmeEngine);
+        $oReturn = json_decode($sMessage);
+        if ($oReturn->status == 1) {
+            $oFmeServer = new FmeServer('https://' . $oReturn->instance->public_ip, $aFmeEngine['login'], $aFmeEngine['password'], 'day', 1);
+            $oInstanceInfo = $oFmeServer->getInfo();
+            if ($oInstanceInfo === false)
+                $sErrorMessage = 'Erreur pendant la requête de demande d\'information sur l\'instance Fme Server';
+            else {
+                $oInstanceInfo->host = $oReturn->instance->instance_url;
+                $this->aFields = array('info' => $oInstanceInfo);
+            }
+            // Message de retour pour l'API Rest.
+            if (empty($sErrorMessage)) {
+                $aXmlRacineAttribute['status'] = 1;
+                $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+            else {
+                $oError = new VitisError(17, $sErrorMessage);
+                $aXmlRacineAttribute['status'] = 0;
+                $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+        }
+        return $sMessage;
+    }
 }
 ?>
\ No newline at end of file
diff --git a/web_service/ws/Gtf.class.sql.inc b/web_service/ws/Gtf.class.sql.inc
old mode 100755
new mode 100644
index 0b57c593bea9bf4370e88ffd0b157dd289a77874..e2e4aa5b1263209ac63c3a4a5934ee7c449711b0
--- a/web_service/ws/Gtf.class.sql.inc
+++ b/web_service/ws/Gtf.class.sql.inc
@@ -23,6 +23,16 @@ $aSql['desactivateOrder'] = 'UPDATE [sSchemaGtf].order SET enabled = FALSE WHERE
 $aSql['getOrderPathFiles'] = 'SELECT log_url,result_url FROM [sSchemaGtf].v_order WHERE order_id = [order_id]';
 $aSql['getOrderWorkspace'] = 'SELECT workspace_id FROM [sSchemaGtf].v_order WHERE order_id = [order_id] LIMIT 1';
 $aSql['getOrderEngineStatus'] = 'SELECT gtf_engine.enabled FROM [sSchemaGtf]."order" LEFT JOIN [sSchemaGtf].gtf_engine ON "order".gtf_engine_id = gtf_engine.gtf_engine_id WHERE order_id = [order_id]';
+$aSql['getRunningOrders'] = 'SELECT order_id, gtf_engine_id FROM [sSchemaGtf]."order" WHERE order_status_id IN (1, 5)';
+$aSql['updateOrderStatus'] = 'UPDATE [sSchemaGtf].order SET order_status_id = [order_status_id] WHERE order_id = [order_id]';
+//$aSql['getOrderFmeEngine'] = 'SELECT fme_engine.fme_engine_type_id, fme_engine.server_url, fme_engine.login, fme_engine.password, fme_engine.fme_cloud_api_token, fme_engine.fme_server_instance_name, server.engines_home, v_order.gtf_engine_id FROM [sSchemaGtf].v_order, [sSchemaGtf].gtf_engine, [sSchemaGtf].fme_engine, [sSchemaGtf].server WHERE gtf_engine.gtf_engine_id = v_order.gtf_engine_id AND fme_engine.fme_engine_id = gtf_engine.fme_engine_id AND server.server_id = fme_engine.server_id AND order_id = [iOrderId] LIMIT 1';
+//$aSql['getOrderPid'] = 'SELECT fme_engine.fme_engine_type_id, "order".gtf_engine_id, "order".pid FROM [sSchemaGtf]."order", [sSchemaGtf].gtf_engine, [sSchemaGtf].fme_engine, [sSchemaGtf].server WHERE gtf_engine.gtf_engine_id = "order".gtf_engine_id AND fme_engine.fme_engine_id = gtf_engine.fme_engine_id AND server.server_id = fme_engine.server_id AND order_id = [iOrderId] AND fme_engine_type_id = \'desktop\' AND pid IS NOT NULL LIMIT 1';
+//$aSql['getGtfEngineHome'] = 'SELECT engines_home, gtf_engine_id FROM [sSchemaGtf]."server", [sSchemaGtf].gtf_engine WHERE gtf_engine.server_id = "server".server_id AND gtf_engine_id IN([gtf_engine_id])';
+//$aSql['getGtfEngineHome'] = 'SELECT engines_home, gtf_engine_id FROM [sSchemaGtf]."server", [sSchemaGtf].gtf_engine WHERE gtf_engine.server_id = "server".server_id AND gtf_engine_id = [gtf_engine_id]';
+$aSql['getGtfEngineHome'] = 'SELECT engines_home, "order".gtf_engine_id, "order".order_id FROM [sSchemaGtf]."server", [sSchemaGtf].gtf_engine, [sSchemaGtf]."order" WHERE gtf_engine.server_id = "server".server_id AND gtf_engine.gtf_engine_id = "order".gtf_engine_id AND order_id = [order_id]';
+//$aSql['getOrderPid'] = 'SELECT fme_engine.fme_engine_type_id, "order".gtf_engine_id, "order".pid FROM [sSchemaGtf]."order", [sSchemaGtf].gtf_engine, [sSchemaGtf].fme_engine, [sSchemaGtf].server WHERE gtf_engine.gtf_engine_id = "order".gtf_engine_id AND fme_engine.fme_engine_id = gtf_engine.fme_engine_id AND server.server_id = fme_engine.server_id AND order_id = [iOrderId] AND fme_engine_type_id = \'desktop\' AND pid IS NOT NULL LIMIT 1';
+$aSql['getOrderPid'] = 'SELECT fme_engine.fme_engine_type_id, "order".gtf_engine_id, "order".pid FROM [sSchemaGtf]."order", [sSchemaGtf].gtf_engine, [sSchemaGtf].fme_engine, [sSchemaGtf].server WHERE gtf_engine.gtf_engine_id = "order".gtf_engine_id AND fme_engine.fme_engine_id = gtf_engine.fme_engine_id AND server.server_id = fme_engine.server_id AND order_id = [order_id] LIMIT 1';
+$aSql['getOrderFmeEngineType'] = 'SELECT fme_engine.fme_engine_type_id FROM [sSchemaGtf]."order", [sSchemaGtf].gtf_engine, [sSchemaGtf].fme_engine WHERE gtf_engine.gtf_engine_id = "order".gtf_engine_id AND fme_engine.fme_engine_id = gtf_engine.fme_engine_id AND order_id = [order_id] LIMIT 1';
 // UserSubscriptions
 $aSql['setSubscriptionEngineId'] = 'UPDATE [sSchemaGtf].subscription SET gtf_engine_id=[gtf_engine_id] WHERE subscription_id=[subscription_id]';
 $aSql['getUserSubscriptions'] = "SELECT order_id, label_name, CASE when v_user_subscription.enabled IS TRUE THEN '<img src=''./images/true.png'' />' ELSE '<img src=''./images/false.png'' />' END as enabled, order_date, '<img src=''./images/wk_params.png''  onmouseover=''loadTooltip(event,0,0,\"White\",\"#' || order_id || '\", \"' || replace(replace(replace(replace(wk_params,'\r\n', '<br/>'),'\\','\\\\'), '\"', '\\\"'),'''', '&#39;') || '\" )'' onmouseout=''unshow()''/>'  as wk_params, period.name as order_period_libelle, v_user_subscription.email_option_id, label_id, CASE WHEN email_notifications IS NOT NULL then '<img src=''./images/enveloppe.png'' onmouseover=''showTooltip(event,500,0,\"White\",\"#' || order_id || '\", \"' || replace(email_notifications, ';', '<br>') || '\" )'' onmouseout=''unshow()''/>' END as email_notifications, translation_email_notification.translation as notification FROM [sSchemaGtf].v_user_subscription LEFT JOIN [sSchemaGtf].period ON period.period_id = v_user_subscription.period_id LEFT JOIN [sSchemaGtf].rt_email_option on rt_email_option.email_option_id = v_user_subscription.email_option_id LEFT JOIN [sSchemaFramework].vm_translation translation_email_notification ON rt_email_option.label_id = translation_email_notification.translation_id WHERE translation_email_notification.lang = '[sLang]'";
@@ -56,4 +66,6 @@ $aSql['checkUserWorkspace'] = 'SELECT * FROM [sSchemaGtf].v_user_workspace WHERE
 // Workspaces
 $aSql['getWorkspaceLastSaveData'] = 'SELECT last_save_date, last_save_build FROM [sSchemaGtf].workspace WHERE workspace_id=[workspace_id]';
 $aSql['checkWorkspaceName'] = 'SELECT workspace_id FROM [sSchemaGtf].workspace WHERE name=[name]';
+// FmeEngines
+$aSql['getFmeEngine'] = 'SELECT * FROM [sSchemaGtf].fme_engine WHERE fme_engine_id = [fme_engine_id]';
 ?>
diff --git a/web_service/ws/Instance.class.inc b/web_service/ws/Instance.class.inc
index 6d6909feee74cdb7c2364f9f7894988944b15f84..996c28c50d03d50abe6e20fb93c531ac74d83b25 100755
--- a/web_service/ws/Instance.class.inc
+++ b/web_service/ws/Instance.class.inc
@@ -13,6 +13,7 @@
 require_once 'Gtf.class.inc';
 require_once __DIR__ . '/../../class/vitis_lib/Connection.class.inc';
 require_once __DIR__ . '/../../class/vmlib/BdDataAccess.inc';
+require_once ("gtf_lib/phpUtility.inc");
 
 class Instance extends GTF {
     /**
@@ -38,19 +39,20 @@ class Instance extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('priority_id', 'priority_label');
+        $this->aSelectedFields = Array('instance_id');
     }
 
     /**
-     * @SWG\Get(path="/instance/calculate",
+     * @SWG\Post(path="/instance/generate",
      *   tags={"Instance"},
-     *   summary="Get instance id",
-     *   description="Request to get instance id",
-     *   operationId="GET",
+     *   summary="Generate a GTF instance id",
+     *   description="Request to generate a new instance id for GTF",
+     *   operationId="POST",
      *   produces={"application/xml", "application/json", "application/x-vm-json"},
+     *   consumes= { "multipart/form-data"},
      *   @SWG\Parameter(
      *     name="token",
-     *     in="query",
+     *     in="formData",
      *     description="user token",
      *     required=true,
      *     type="string"
@@ -64,45 +66,16 @@ class Instance extends GTF {
      */
 
     /**
-     * get Instance
-     * @return  Instance
+     * Generate a GTF instance
+     * @return id of the workspace created
      */
-    function GET() {
-        if (!empty($this->aPath[2])) {
-            if ($this->aPath[2] == 'calculate') {
-            }
+    function POST() {
+        if ($this->aPath[2] == 'generate') {
+            $this->aFields['instance_id'] = generateGtfInstanceId();
+            $aXmlRacineAttribute['status'] = 1;
+            $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            return $sMessage;
         }
-        $this->calculateGtfInstanceId();
-        $aXmlRacineAttribute['status'] = 1;
-        $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
-        return $sMessage;
     }
-    
-    /**
-     * Calculating a GTF instance id.
-     */
-    function calculateGtfInstanceId() {
-        $aOutput = array();
-        $iReturnStatus = 1;
-        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
-            // Paramètres à concaténer pour un identifiant unique par machine.
-            $aCommands = array(
-                'NICCONFIG',    // cartes réseaux (adresses MAC)
-                'CPU',  // modèle, vitesse, id...
-                'DISKDRIVE',    // N° de série...
-                'MEMORYCHIP',
-                'CDROM',    // Lecteur DVD...
-                'path win32_VideoController',   // Carte vidéo
-                'IDECONTROLLER',
-                'SCSICONTROLLER',
-                'DESKTOPMONITOR',
-                'LOGON',
-                'NETLOGIN'
-            );
-            $sCommandLine = 'wmic '. implode(' & wmic ', $aCommands);
-        }
-        exec($sCommandLine, $aOutput, $iReturnStatus);
-        $this->aFields['instance_id'] = hash_hmac('sha256', implode(chr(20), $aOutput), uniqid('', true));
-    }    
 }
 ?>
\ No newline at end of file
diff --git a/web_service/ws/Message.class.inc b/web_service/ws/Message.class.inc
index 115aebd4fedf3726fadff14a8e2da800573c090a..062dd6342736e07e827df18642a780dd60af7fdf 100755
--- a/web_service/ws/Message.class.inc
+++ b/web_service/ws/Message.class.inc
@@ -28,7 +28,7 @@ class Message extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('message_id', 'messageclass', 'creation_date', 'body', 'sender', 'messageclass_type', 'status');
+        $this->aSelectedFields = Array('message_id', 'messageclass', $this->getDateSelectedFields('creation_date', 'yeartosecond'), 'body', 'sender', 'messageclass_type', 'status', $this->getDateSelectedFields('minexecdate', 'yeartosecond'));
     }
 
     /**
diff --git a/web_service/ws/Messages.class.inc b/web_service/ws/Messages.class.inc
index 92a71bdf4d3e3d086963ba1f53ed83400980da8a..b53ab2fc8822f9427ac03f411b0d2b56ab88701a 100755
--- a/web_service/ws/Messages.class.inc
+++ b/web_service/ws/Messages.class.inc
@@ -34,13 +34,13 @@ class Messages extends GTF {
      * construct
      * @param type $aPath url of the request
      * @param type $aValues parameters of the request
-     * @param type $properties properties
-     * @param type $bShortcut false to reinit variables
+     * @param type $properties properties
+     * @param type $bShortcut false to reinit variables
      * @param type $oConnection connection object
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('message_id', 'messageclass', 'creation_date', 'body', 'sender', 'messageclass_type', 'status');
+        $this->aSelectedFields = Array('message_id', 'messageclass', $this->getDateSelectedFields('creation_date', 'yeartosecond'), 'body', 'sender', 'messageclass_type', 'status', $this->getDateSelectedFields('minexecdate', 'yeartosecond'));
     }
 
     /**
diff --git a/web_service/ws/Order.class.inc b/web_service/ws/Order.class.inc
index 8bc3193b21dc8cbb2291368d538c1109aa19fadc..784b59f65fb02cf037474d2073116fdd800555ff 100755
--- a/web_service/ws/Order.class.inc
+++ b/web_service/ws/Order.class.inc
@@ -28,7 +28,7 @@ class Order extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_id", "workspace_key", "label_name", "order_status_id", "user_id", "login", "period_id", "order_period_libelle", "wk_params", "result_url", "order_date", "log_url", "execution_date", "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "priority_label", "email_option_label");
+        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_id", "workspace_key", "label_name", "order_status_id", "user_id", "login", "period_id", "order_period_libelle", "wk_params", "result_url", $this->getDateSelectedFields('order_date', 'yeartosecond'), "log_url", $this->getDateSelectedFields('execution_date', 'yeartosecond'), "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "email_option_label", $this->getDateSelectedFields('minexecdate', 'yeartosecond'));
     }
 
     /**
diff --git a/web_service/ws/Orders.class.inc b/web_service/ws/Orders.class.inc
index 53ce8af5d9d248f72806d1bec478fc1b9b1a9890..90240b7f6469bb20ff97e6f6b8419c7a07cf2973 100644
--- a/web_service/ws/Orders.class.inc
+++ b/web_service/ws/Orders.class.inc
@@ -15,6 +15,8 @@ require_once 'Gtf.class.inc';
 require_once __DIR__ . '/../../class/vitis_lib/Connection.class.inc';
 require_once 'Order.class.inc';
 require_once __DIR__ . '/../../class/vmlib/BdDataAccess.inc';
+require_once 'gtf_lib/FmeServer.class.inc';
+
 
 class Orders extends GTF {
     /**
@@ -40,7 +42,7 @@ class Orders extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_id", "workspace_key", "label_name", "order_status_id", "user_id", "login", "period_id", "order_period_libelle", "wk_params", "result_url", "to_char(order_date, 'YYYY-MM-DD HH24:MI:SS') as order_date", "log_url", "to_char(execution_date, 'YYYY-MM-DD HH24:MI:SS') as execution_date", "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "priority_label", "email_option_label", "order_status_label", "concat(gtf_engine_id, ' - ', name) as name");
+        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_id", "workspace_key", "label_name", "order_status_id", "user_id", "login", "period_id", "order_period_libelle", "wk_params", "result_url", $this->getDateSelectedFields('order_date', 'yeartosecond'), "log_url", $this->getDateSelectedFields('execution_date', 'yeartosecond'), "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "email_option_label", "order_status_label", "concat(gtf_engine_id, ' - ', name) as name", $this->getDateSelectedFields('minexecdate', 'yeartosecond'));
     }
 
     /**
@@ -116,19 +118,47 @@ class Orders extends GTF {
      *  )
      */
 
+    /**
+     * @SWG\Get(path="/orders/running",
+     *   tags={"Orders"},
+     *   summary="Get running orders",
+     *   description="Request to get all the running orders",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Properties Response",
+     *         @SWG\Schema(ref="#/definitions/orders")
+     *     )
+     *  )
+     */
+    
     /**
      * get Orders
      * @return  Orders
      */
     function GET() {
-        if (in_array('gtf_admin', $this->oConnection->aPrivileges) || in_array('gtf_author', $this->oConnection->aPrivileges))
-            $aReturn = $this->genericGet($this->aProperties['schema_gtf'], "v_order_fast", "order_id");
+        if (!empty($this->aPath[2]) && $this->aPath[2] == "running")
+            $sMessage = $this->getRunningOrders();
         else {
-            $oError = new VitisError(12, "You don't have the rights to get orders");
-            $aXmlRacineAttribute['status'] = 0;
-            $aReturn['sMessage'] = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            if (in_array('gtf_admin', $this->oConnection->aPrivileges))
+                $aReturn = $this->genericGet($this->aProperties['schema_gtf'], "v_order_fast", "order_id");
+            else {
+                $oError = new VitisError(12, "You don't have the rights to get orders");
+                $aXmlRacineAttribute['status'] = 0;
+                $aReturn = array();
+                $aReturn['sMessage'] = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+            }
+            $sMessage = $aReturn['sMessage'];
         }
-        return $aReturn['sMessage'];
+        return $sMessage;
     }
 
     /**
@@ -252,19 +282,61 @@ class Orders extends GTF {
      *  )
      */
 
+    /**
+     * @SWG\Put(path="/orders/{order_id}/stop",
+     *   tags={"Orders"},
+     *   summary="Stop order",
+     *   description="Request to stop an order",
+     *   operationId="PUT",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *   @SWG\Parameter(
+     *     name="order_id",
+     *     in="path",
+     *     description="Order id",
+     *     required=true,
+     *     type="integer",
+     *     format = "int32"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/orders")
+     *     )
+     *  )
+     */
+    
     /**
      * update order
      */
     function PUT() {
         if (!empty($this->aPath[2])) {
-            if ($this->aPath[2] == "gtfengine")
-                $aReturn = $this->setOrderGtfEngine();
-            else if ($this->aPath[2] == "reset")
-                $aReturn = $this->resetOrder();
-            else if ($this->aPath[2] == "activate")
-                $aReturn = $this->activateOrder();
-            else if ($this->aPath[2] == "desactivate")
-                $aReturn = $this->desactivateOrder();
+            if (!empty($this->aPath[3])) {
+                if ($this->aPath[3] == 'stop')
+                    $aReturn = $this->stopFmeOrder($this->aValues["my_vitis_id"]);
+            }
+            else {
+                switch ($this->aPath[2]) {
+                    case 'gtfengine':
+                        $aReturn = $this->setOrderGtfEngine();
+                        break;
+                    case 'reset':
+                        $aReturn = $this->resetOrder();
+                        break;
+                    case 'activate':
+                        $aReturn = $this->activateOrder();
+                        break;
+                    case 'desactivate':
+                        $aReturn = $this->desactivateOrder();
+                        break;
+                }
+            }
             $aXmlRacineAttribute['status'] = $aReturn['status'];
             if ($aReturn['status'] == 1)
                 $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
@@ -411,6 +483,9 @@ class Orders extends GTF {
                 $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
             }
         } else {
+            // Stoppe le processus des demandes (uniquement pour Fme Desktop).
+            $this->stopFmeDesktopOrdersProcess();
+            //
             $aReturn = $this->genericDelete($this->aProperties['schema_gtf'], 'order', 'order_id');
             $sMessage = $aReturn['sMessage'];
         }
@@ -465,6 +540,20 @@ class Orders extends GTF {
      */
     function resetOrder() {
         require $this->sRessourcesFile;
+        // Supprime l'ancien résultat.
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $aParams['idList'] = array('value' => $this->aValues['idList'], 'type' => 'group');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getOrders'], $aParams);
+        if ($this->oConnection->oBd->enErreur())
+            $aReturn = array('status' => 0, 'message' => $this->oConnection->oBd->getBDMessage(), 'error_code' => 1);
+        else {
+            while ($aDemande = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+                $aFolder = explode("/", $aDemande['log_url']);
+                $sFolder = $this->aProperties['dir_export'] . "/gtf/" . $aFolder[0];
+                clearDir($sFolder);
+            }
+        }
+        // Réinitialise la demande.
         $aOrderId = explode('|', $this->aValues['idList']);
         foreach ($aOrderId as $iOrderId) {
             // Vérifie si le moteur déja assigné est actif.
@@ -588,5 +677,210 @@ class Orders extends GTF {
         }
         return $iEngine;
     }
+    
+    /**
+     * function getRunningOrders
+     */
+    function getRunningOrders() {
+        require $this->sRessourcesFile;
+        // Liste des demandes.
+        $aParams = array();
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getRunningOrders'], $aParams);
+        if ($this->oConnection->oBd->enErreur()) {
+            $oError = new VitisError(1, $this->oConnection->oBd->getBDMessage());
+            $aXmlRacineAttribute['status'] = 0;
+            $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        }
+        else {
+            $aOrders = array();
+            while ($aOrder = $this->oConnection->oBd->ligneSuivante($oPDOresult))
+                $aOrders['orders'][] = $aOrder['order_id'];
+            $this->aFields = $aOrders;
+            $aXmlRacineAttribute['status'] = 1;
+            $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
+        }
+        return $sMessage;
+    }
+    
+    /**
+     * function stopFmeDesktopOrdersProcess
+     */
+    function stopFmeDesktopOrdersProcess() {
+        require $this->sRessourcesFile;
+        // Id des moteurs GTF dont au moins une demande est en cours.
+        $aParams = array();
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getRunningOrders'], $aParams);
+        if (!$this->oConnection->oBd->enErreur()) {
+            $aGtfEngineId = array();
+            while ($aGtfEngine = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+                // Arrête le processus de la demande.
+                $this->stopFmeDesktopOrderProcess($aGtfEngine['order_id']);
+            }
+        }
+    }
+    
+    /**
+     * function stopFmeDesktopOrderProcess
+     * \param $iOrderId Id of the Gtf order.
+     */
+    function stopFmeDesktopOrderProcess($iOrderId) {
+        require $this->sRessourcesFile;
+        $aParams = array();
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $aParams['order_id'] = array('value' => $iOrderId, 'type' => 'number');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getGtfEngineHome'], $aParams);
+        if (!$this->oConnection->oBd->enErreur()) {
+            $aGtfEngineHome = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+            $sPidFilePath = $aGtfEngineHome['engines_home'] . '/' . 'pid_' . $aGtfEngineHome['gtf_engine_id'] . '.txt';
+            if (file_exists($sPidFilePath)) {
+                $iPid = file_get_contents($sPidFilePath);
+                if (is_numeric($iPid)) {
+                    // Supprime le processus "engine.exe".
+                    $this->killProcess($iPid);
+                    // Tue tous les processus liés à une demande et un traitement sur Fme Desktop.
+                    $aProcessName = array('cmd.exe', 'php.exe', 'cmd.exe', 'fme.exe');
+                    foreach ($aProcessName as $sProcessName) {
+                        $iPid = $this->getChildProcess($iPid, $sProcessName);
+                        if ($iPid !== false)
+                            $this->killProcess($iPid);
+                    }
+                }
+                // Suppression du fichier contenant le pid du processus "engine.exe".
+                unlink($sPidFilePath);
+            }
+        }
+    }    
+    
+    /**
+     * function killProcess
+     * \param $iPid Id of the process.
+     */
+    function killProcess($iPid) {
+        $aResult = array();
+        if (strtolower(substr(PHP_OS, 0, 3)) == 'win')
+            $sResultCommande = exec('taskkill /PID ' . $iPid . ' /F', $aResult, $iResult);
+        else
+            $sResultCommande = exec('kill ' . $iPid, $aResult, $iResult);
+        // Log si erreur.
+        if ($iResult !== 0)
+            writeToErrorLog(ERROR_0035 . ' (pid = ' . $iPid . ').');
+    }
+    
+    /**
+     * function getChildProcess
+     * \param $iParentPid Id of the parent process.
+     * \param $sProcessName Name of the process.
+     */
+    function getChildProcess($iParentPid, $sProcessName) {
+        $aResult = array();
+        if (strtolower(substr(PHP_OS, 0, 3)) == 'win')
+            $sResultCommande = exec('wmic process where "ParentProcessId=' . $iParentPid . ' AND Name=\'' . $sProcessName . '\'" get ProcessId', $aResult, $iResult);
+        //else
+            //$sResultCommande = exec('' . $iParentPid, $aResult, $iResult);
+            //ps -o ppid=
+        // Log si erreur.
+        if ($iResult !== 0)
+            writeToErrorLog(ERROR_0036 . ' (pid = ' . $iPid . ').');
+        else if ($iResult == 0 && !empty($aResult) && is_numeric($aResult[1]))
+            return $aResult[1];
+        else
+            return false;
+    }
+    
+    /**
+     * function stopFmeOrder
+     * \param $iOrderId Id of the Gtf order.
+     */
+    function stopFmeOrder($iOrderId) {
+        require $this->sRessourcesFile;
+        // Informations de la demande à stopper.
+        $aParams = array();
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $aParams['order_id'] = array('value' => $iOrderId, 'type' => 'number');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getOrderFmeEngineType'], $aParams);
+        if (!$this->oConnection->oBd->enErreur()) {
+            $aOrder = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+            if ($aOrder['fme_engine_type_id'] == 'desktop') {
+                if ($this->stopFmeDesktopOrderProcess($iOrderId) === false)
+                    $sErrorMessage = ERROR_0037;
+            }
+            else {
+                if ($this->stopFmeServerOrder($iOrderId) === false)
+                    $sErrorMessage = ERROR_0038;
+            }
+            // Message de retour pour l'API Rest.
+            if (empty($sErrorMessage)) {
+                $aReturn = array('status' => 1, 'message' => '');
+                // Mise à jour du statut de la demande (stoppé).
+                $aParams = array();
+                $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+                $aParams['order_id'] = array('value' => $iOrderId, 'type' => 'number');
+                $aParams['order_status_id'] = array('value' => 7, 'type' => 'number');
+                $this->oConnection->oBd->executeWithParams($aSql['updateOrderStatus'], $aParams);
+            }
+            else
+                $aReturn = array('status' => 0, 'message' => $sErrorMessage, 'error_code' => 17);
+            return $aReturn;
+        }
+    }
+    
+    /**
+     * function stopFmeServerOrder
+     * \param $iOrderId Id of the Gtf order.
+     */
+    function stopFmeServerOrder($iOrderId) {
+        require $this->sRessourcesFile;
+        // Récupère le répertoire des moteurs de GTF.
+        $aParams = array();
+        $aParams['sSchemaGtf'] = array('value' => $this->aProperties['schema_gtf'], 'type' => 'schema_name');
+        $aParams['order_id'] = array('value' => $iOrderId, 'type' => 'number');
+        $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getGtfEngineHome'], $aParams);
+        if (!$this->oConnection->oBd->enErreur()) {
+            $aGtfEngineHome = $this->oConnection->oBd->ligneSuivante($oPDOresult);
+            // Stoppe le traitement sur Fme Server.
+            $sAsyncOrdersFilePath = $aGtfEngineHome['engines_home'] . '/' . 'gtf_engine' . $aGtfEngineHome['gtf_engine_id'] . '_jobid.txt';
+            if (file_exists($sAsyncOrdersFilePath)) {
+                $aRunningJobs = unserialize(file_get_contents($sAsyncOrdersFilePath));
+                $aRunningJob = $this->getFmeServerRunningJob($iOrderId, $aRunningJobs);
+                if ($aRunningJob !== false && !empty($aRunningJob['job_id'])) {
+                    $oFmeServer = new FmeServer($aRunningJob['fme_server_url'], $aRunningJob['login'], $aRunningJob['password'], 'day', 1);
+                    $oFmeServer->stopJob($aRunningJob['job_id']);
+                    // Supprime le traitement dans la liste des demandes asynchrones.
+                    $iJobIndex = null;
+                    foreach ($aRunningJobs as $iIndex => $aRunningJob) {
+                        if ($aRunningJob['order_id'] == $iOrderId) {
+                            $iJobIndex = $iIndex;
+                            break;
+                        }
+                    }
+                    if ($iJobIndex !== null) {
+                        // Sauve la liste des demandes asynchrones en cours.
+                        $aRunningJob = array_splice($aRunningJobs, $iJobIndex, 1)[0];
+                        if (empty($aRunningJobs))
+                            unlink($sAsyncOrdersFilePath);
+                        else
+                            file_put_contents($sAsyncOrdersFilePath, serialize($aRunningJobs));
+                    }
+                }
+            }
+        }
+    }
+    
+    
+    /**
+     * Retourne les infos d'un traitement asynchrones en cours d'exécution.
+     * @param {number} $iOrderId I de la demande en cours.
+     * @param {array} $aRunningJobs Tableau contenant la liste des traitements asynchrones en cours d'exécution.
+     * return array
+     */
+    function getFmeServerRunningJob($iOrderId, $aRunningJobs) {
+        foreach ($aRunningJobs as $aRunningJob) {
+            if ($aRunningJob['order_id'] == $iOrderId)
+                return $aRunningJob;
+        }
+        return false;
+    }
 }
 ?>
\ No newline at end of file
diff --git a/web_service/ws/SchemaGroup.class.inc b/web_service/ws/SchemaGroup.class.inc
new file mode 100755
index 0000000000000000000000000000000000000000..426397298a6c98046d323b298578cde4c89f9af6
--- /dev/null
+++ b/web_service/ws/SchemaGroup.class.inc
@@ -0,0 +1,73 @@
+<?php
+
+require_once 'Gtf.class.inc';
+require_once __DIR__ . '/../../class/vitis_lib/Connection.class.inc';
+
+/**
+ * \file SchemaGroup.class.inc
+ * \class SchemaGroup
+ *
+ * \author Sofian Pujo <Sofian.pujo@veremes.com>.
+ *
+ * 	\brief This file contains the SchemaGroup php class
+ *
+ * This class defines operation for one SchemaGroup
+ * 
+ */
+class SchemaGroup extends GTF {
+
+    public $oError;
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $bShortcut false to reinit variables
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
+        parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
+        $this->aSelectedFields = Array('group_id', 'schema_group_id', 'schema', 'id_schema');
+    }
+
+    /**
+     * get SchemaGroup
+     * @return  SchemaGroup
+     */
+    function GET() {
+        $this->aFields = $this->getFields($this->aProperties['schema_contraintes'], "schema", "id_schema");
+        $this->getSchemas();
+    }
+    
+    /**
+     *  get schemas of group
+     */
+    function getSchemas() {
+        $this->sRessourcesFile = "ws/gtf/SchemaGroups.class.sql.inc";
+        require $this->sRessourcesFile;
+        if (in_array("id_schema", $this->aSelectedFields)) {             
+            $aParams['sSchemaContraintes'] = array('value' => $this->aProperties['schema_contraintes'], 'type' => 'schema_name');
+            $aParams['group_id'] = array('value' => $this->aValues['my_vitis_id'], 'type' => 'number');
+            //Requête pour récupérer les schémas
+            $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getSchemas'], $aParams);
+            $sListSchemaId = "";
+            $aListSchemaName = array();
+            //Formation du tableau pour les schémas
+            while ($aLigne = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
+                if ($sListSchemaId == "") {
+                    $sListSchemaId = $aLigne["id_schema"];
+                } else {
+                    $sListSchemaId .= "|" . $aLigne["id_schema"];
+                }
+                $aListSchemaName[] = $aLigne["name"];
+            }
+            $oPDOresult = $this->oConnection->oBd->fermeResultat();
+            $this->aFields['group_schema'] = $sListSchemaId;
+            $this->aFields['group_schema_label'] = implode(',', $aListSchemaName);
+        }
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/web_service/ws/SchemaGroups.class.inc b/web_service/ws/SchemaGroups.class.inc
new file mode 100755
index 0000000000000000000000000000000000000000..d28940704e0a09b7ea3feaf911723376a3202200
--- /dev/null
+++ b/web_service/ws/SchemaGroups.class.inc
@@ -0,0 +1,184 @@
+<?php
+
+/**
+ * \file SchemaGroups.class.inc
+ * \class SchemaGroups
+ *
+ * \author Sofian Pujo <sofian.pujo@veremes.com>.
+ *
+ * 	\brief This file contains the SchemaGroups php class
+ *
+ * This class defines Rest Api to Gtf schemagroups
+ * 
+ */
+require_once 'Gtf.class.inc';
+require_once __DIR__ . '/../../class/vitis_lib/Connection.class.inc';
+require_once 'SchemaGroup.class.inc';
+require_once __DIR__ . '/../../class/vmlib/BdDataAccess.inc';
+
+class SchemaGroups extends GTF {
+    /**
+     * @SWG\Definition(
+     *   definition="/schemagroups",
+     *   allOf={
+     *     @SWG\Schema(ref="#/definitions/schemagroups")
+     *   }
+     * )
+     * * @SWG\Tag(
+     *   name="SchemaGroups",
+     *   description="Operations about SchemaGroups"
+     * )
+     */
+
+    /**
+     * construct
+     * @param type $aPath url of the request
+     * @param type $aValues parameters of the request
+     * @param type $properties properties
+     * @param type $bShortcut false to reinit variables
+     * @param type $oConnection connection object
+     */
+    function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
+        parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
+        $this->aSelectedFields = Array('group_id', 'id_schema', 'schema_group_id', 'schema');
+    }
+
+    /**
+     * @SWG\Get(path="/schemagroups",
+     *   tags={"SchemaGroups"},
+     *   summary="Get SchemaGroups",
+     *   description="Request to get SchemaGroups",
+     *   operationId="GET",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     *  @SWG\Parameter(
+     *     name="order_by",
+     *     in="query",
+     *     description="list of ordering fields",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="sort_order",
+     *     in="query",
+     *     description="sort order",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="limit",
+     *     in="query",
+     *     description="number of element",
+     *     required=false,
+     *     type="integer",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="offset",
+     *     in="query",
+     *     description="index of first element",
+     *     required=false,
+     *     type="string",
+     *     format="int32"
+     *   ),
+     * @SWG\Parameter(
+     *     name="attributs",
+     *     in="query",
+     *     description="list of attributs",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="filter",
+     *     in="query",
+     *     description="filter results",
+     *     required=false,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/schemagroups")
+     *     )
+     *  )
+     */
+
+    /**
+     * get SchemaGroups
+     * @return  SchemaGroups
+     */
+    function GET() {
+        $aReturn = $this->genericGet($this->aProperties['schema_contraintes'], "v_schema_group", "id_schema");
+        return $aReturn['sMessage'];
+    }
+    
+    /**
+     * @SWG\Put(path="/schemagroups",
+     *   tags={"SchemaGroups"},
+     *   summary="Put SchemaGroups",
+     *   description="Request to Put SchemaGroups",
+     *   operationId="Put",
+     *   produces={"application/xml", "application/json"},
+     *   @SWG\Parameter(
+     *     name="token",
+     *     in="query",
+     *     description="user token",
+     *     required=true,
+     *     type="string"
+     *   ),
+     * @SWG\Parameter(
+     *     name="distinct",
+     *     in="query",
+     *     description="delete duplicates",
+     *     required=false,
+     *     type="boolean"
+     *   ),
+     *   @SWG\Response(
+     *         response=200,
+     *         description="Poprerties Response",
+     *         @SWG\Schema(ref="#/definitions/schemagroups")
+     *     )
+     *  )
+     */
+
+    /**
+     * Put SchemaGroups
+     * @return  SchemaGroups
+     */
+    function PUT() {
+        
+        $this->sRessourcesFile = "ws/gtf/SchemaGroups.class.sql.inc";
+        require $this->sRessourcesFile;
+        $aReturn = $this->genericPut($this->aProperties['schema_contraintes'], 'v_schema_group', 'id_schema');
+        //Suppression de tous les schémas dans la table
+        $this->oConnection->oBd->delete($this->aProperties['schema_contraintes'], 'v_schema_group', 'group_id', $this->aValues["my_vitis_id"]);
+        
+        if (!empty($this->aValues['group_schema'])) {
+                $aSchemas = explode('|', $this->aValues['group_schema']);
+                foreach ($aSchemas as $iSchemaId) {
+                    $aParams['sSchemaContraintes'] = array('value' => $this->aProperties['schema_contraintes'], 'type' => 'schema_name');
+                    $aParams['group_id'] = array('value' => $this->aValues['my_vitis_id'], 'type' => 'number');
+                    $aParams['id_schema'] = array('value' => $iSchemaId, 'type' => 'string');
+                    //Enregistrement des schémas dans la table
+                    $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['insertGroupSchema'], $aParams);
+                }
+            }
+        return $aReturn['sMessage'];
+    }
+
+}
+
+?>
\ No newline at end of file
diff --git a/web_service/ws/SchemaGroups.class.sql.inc b/web_service/ws/SchemaGroups.class.sql.inc
new file mode 100755
index 0000000000000000000000000000000000000000..48ed4cd432408df3237526955155923d604a7a61
--- /dev/null
+++ b/web_service/ws/SchemaGroups.class.sql.inc
@@ -0,0 +1,7 @@
+<?php
+
+//Définition des requêtes de l'api Vitis
+$aSql['insertGroupSchema'] = "INSERT INTO [sSchemaContraintes].v_schema_group(id_schema, group_id, schema_group_id) VALUES([id_schema], [group_id], nextval('[sSchemaContraintes].seq_qualigeo'))";
+$aSql['getSchemas'] = "SELECT id_schema FROM [sSchemaContraintes].v_schema_group WHERE group_id = [group_id]";
+$aSql['getAllSchemas'] = "SELECT DISTINCT id_schema FROM [sSchemaContraintes].schema";
+?>
diff --git a/web_service/ws/Subscription.class.inc b/web_service/ws/Subscription.class.inc
index b13310675c68394fe3e9e512509b495150d0e435..ad609a4b449b3772ef3d84f5492ebca5c29ef359 100755
--- a/web_service/ws/Subscription.class.inc
+++ b/web_service/ws/Subscription.class.inc
@@ -28,7 +28,7 @@ class Subscription extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'priority_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', 'order_date', 'log_url', 'execution_date', 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'notification');
+        $this->aSelectedFields = Array('order_id', 'priority_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', $this->getDateSelectedFields('order_date', 'yeartosecond'), 'log_url', $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'notification');
     }
 
     /**
diff --git a/web_service/ws/Subscriptions.class.inc b/web_service/ws/Subscriptions.class.inc
index b1dd3e1219c4a1337225f0e98391d1c1e3d5adb3..e7a060f0b634f820dca0a583d3e1b9d55c8e0f4c 100755
--- a/web_service/ws/Subscriptions.class.inc
+++ b/web_service/ws/Subscriptions.class.inc
@@ -34,13 +34,13 @@ class Subscriptions extends GTF {
      * construct
      * @param type $aPath url of the request
      * @param type $aValues parameters of the request
-     * @param type $properties properties
-     * @param type $bShortcut false to reinit variables
+     * @param type $properties properties
+     * @param type $bShortcut false to reinit variables
      * @param type $oConnection connection object
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'priority_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', 'order_date', 'log_url', 'execution_date', 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'notification');
+        $this->aSelectedFields = Array('order_id', 'priority_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', $this->getDateSelectedFields('order_date', 'yeartosecond'), 'log_url', $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'notification');
     }
 
     /**
diff --git a/web_service/ws/Survey.class.inc b/web_service/ws/Survey.class.inc
index ca6356aadd0404c1ab9536abcc1019ab6659275a..33b1dd887224e86eed055b0e468526a622951456 100755
--- a/web_service/ws/Survey.class.inc
+++ b/web_service/ws/Survey.class.inc
@@ -28,7 +28,7 @@ class Survey extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'workspace_key', 'priority_id', 'workspace_id', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', 'order_date', 'log_url', 'execution_date', 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'survey_id', 'condition', 'warehouse_name', 'notification', 'survey_name');
+        $this->aSelectedFields = Array('order_id', 'workspace_key', 'priority_id', 'workspace_id', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', $this->getDateSelectedFields('order_date', 'yeartosecond'), 'log_url', $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'survey_id', 'condition', 'warehouse_name', 'notification', 'survey_name');
     }
 
     /**
diff --git a/web_service/ws/Surveys.class.inc b/web_service/ws/Surveys.class.inc
index 48c01bea9d2fea1df324dc0ff8f3e4d9eccadcdd..e9996e485f83b0ab2f98cca7cc2f45a76c4204df 100755
--- a/web_service/ws/Surveys.class.inc
+++ b/web_service/ws/Surveys.class.inc
@@ -34,13 +34,13 @@ class Surveys extends GTF {
      * construct
      * @param type $aPath url of the request
      * @param type $aValues parameters of the request
-     * @param type $properties properties
-     * @param type $bShortcut false to reinit variables
+     * @param type $properties properties
+     * @param type $bShortcut false to reinit variables
      * @param type $oConnection connection object
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'workspace_key', 'priority_id', 'workspace_id', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', 'order_date', 'log_url', 'execution_date', 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'survey_id', 'condition', 'warehouse_name', 'notification', 'survey_name', "name || '/' || condition as full_condition");
+        $this->aSelectedFields = Array('order_id', 'workspace_key', 'priority_id', 'workspace_id', 'enabled', 'label_name', 'order_status_id', 'user_id', 'login', 'period_id', 'order_period_libelle', 'wk_params', 'result_url', $this->getDateSelectedFields('order_date', 'yeartosecond'), 'log_url', $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'attempt', 'email_notifications', 'email_option_id', 'deleted', 'gtf_engine_id', 'survey_id', 'condition', 'warehouse_name', 'notification', 'survey_name', "name || '/' || condition as full_condition");
     }
 
     /**
diff --git a/web_service/ws/UserOrder.class.inc b/web_service/ws/UserOrder.class.inc
index 23299a5f42e88bbeceb9267ab39cca1a87d4754f..41e89d68766cf2be61d7c248d787ff2a7b77546d 100755
--- a/web_service/ws/UserOrder.class.inc
+++ b/web_service/ws/UserOrder.class.inc
@@ -28,7 +28,7 @@ class UserOrder extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_key", "workspace_id", "name", "order_status_id", "user_id", "wk_params", "result_url", "order_date", "log_url", "execution_date", "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "workspace_name", "priority_label");
+        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_key", "workspace_id", "name", "order_status_id", "user_id", "wk_params", "result_url", $this->getDateSelectedFields('order_date', 'yeartosecond'), "log_url", $this->getDateSelectedFields('execution_date', 'yeartosecond'), "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "workspace_name", $this->getDateSelectedFields('minexecdate', 'yeartosecond'));
     }
 
     /**
diff --git a/web_service/ws/UserOrders.class.inc b/web_service/ws/UserOrders.class.inc
index 584b9bba2d38514c8709b626b749ea95e44cfca4..a078bc219c62b3329bb7f014aca48475f922fc9d 100755
--- a/web_service/ws/UserOrders.class.inc
+++ b/web_service/ws/UserOrders.class.inc
@@ -41,7 +41,7 @@ class UserOrders extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_key", "workspace_id", "name", "order_status_id", "user_id", "wk_params", "result_url", "to_char(order_date, 'YYYY-MM-DD HH24:MI:SS') as order_date", "log_url", "to_char(execution_date, 'YYYY-MM-DD HH24:MI:SS') as execution_date", "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "workspace_name", "priority_label", "email_option_label", "order_status_label");
+        $this->aSelectedFields = Array("order_id", "priority_id", "workspace_key", "workspace_id", "name", "order_status_id", "user_id", "wk_params", "result_url", $this->getDateSelectedFields('order_date', 'yeartosecond'), "log_url", $this->getDateSelectedFields('execution_date', 'yeartosecond'), "attempt", "email_notifications", "email_option_id", "deleted", "gtf_engine_id", "length_sec", "workspace_name", "email_option_label", "order_status_label", $this->getDateSelectedFields('minexecdate', 'yeartosecond'));
     }
 
     /**
@@ -185,7 +185,12 @@ class UserOrders extends GTF {
      * @return id of the user's userorder created
      */
     function POST() {
-        $this->aValues['order_date'] = date('Y-m-d H:i:s');
+        $this->aValues['order_date'] = gmdate('Y-m-d H:i:s');
+        $this->aValues['priority_id'] = 1;
+        if (!empty($this->aValues['minexecdate']))
+            $this->aValues['minexecdate'] = gmdate('Y-m-d H:i:00', date_timestamp_get(date_create_from_format('d/m/Y H:i', $this->aValues['minexecdate'])));
+        else
+            $this->aValues['minexecdate'] = null;
         if (!empty($_SESSION['ses_user_id']))
             $this->aValues['user_id'] = $_SESSION['ses_user_id'];
         if (!empty($this->aValues['email_notifications']))
diff --git a/web_service/ws/UserSubscription.class.inc b/web_service/ws/UserSubscription.class.inc
index 9897c96141a67c4419a6ef60e94276ff374ec605..acc45dbc869a70c3d84a2eb6c87c19069f1aad43 100755
--- a/web_service/ws/UserSubscription.class.inc
+++ b/web_service/ws/UserSubscription.class.inc
@@ -28,7 +28,7 @@ class UserSubscription extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'period_id', 'order_date', 'execution_date', 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'workspace_name', 'notification', 'order_period_libelle');
+        $this->aSelectedFields = Array('order_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'period_id', $this->getDateSelectedFields('order_date', 'yeartosecond'), $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'workspace_name', 'notification', 'order_period_libelle');
     }
 
     /**
diff --git a/web_service/ws/UserSubscriptions.class.inc b/web_service/ws/UserSubscriptions.class.inc
index bb44deea03c02c6d607f5e194196ceee95bd5b5d..0e161b76adcaf30131cfff0e8924f1cea11f57d3 100755
--- a/web_service/ws/UserSubscriptions.class.inc
+++ b/web_service/ws/UserSubscriptions.class.inc
@@ -40,7 +40,7 @@ class UserSubscriptions extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'period_id', 'order_date', 'execution_date', 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'workspace_name', 'notification', 'order_period_libelle');
+        $this->aSelectedFields = Array('order_id', 'workspace_id', 'workspace_key', 'enabled', 'label_name', 'order_status_id', 'user_id', 'period_id', $this->getDateSelectedFields('order_date', 'yeartosecond'), $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'workspace_name', 'notification', 'order_period_libelle');
     }
 
     /**
@@ -214,7 +214,7 @@ class UserSubscriptions extends GTF {
      * @return id of the user's usersubscription created
      */
     function POST() {
-        $this->aValues['order_date'] = date('Y-m-d H:i:s');
+        $this->aValues['order_date'] = gmdate('Y-m-d H:i:s');
         $this->aValues['user_id'] = $_SESSION['ses_user_id'];
         // Si token public -> id du compte public.
         if ($this->aValues['token'] == $this->aProperties['public_token']) {
diff --git a/web_service/ws/UserSurvey.class.inc b/web_service/ws/UserSurvey.class.inc
index 8abb3057c79d93adc3c7e1990be16aa2a10a701e..3aa38652da66c8ba7de49d0bd9997ad9762b0dd6 100755
--- a/web_service/ws/UserSurvey.class.inc
+++ b/web_service/ws/UserSurvey.class.inc
@@ -28,7 +28,7 @@ class UserSurvey extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('order_id', 'workspace_key', 'workspace_id', 'label_name', 'enabled', 'order_status_id', 'user_id', 'period_id', 'order_date', 'execution_date', 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'survey_id', 'condition', 'inbox_id', 'name', 'workspace_name', 'monitoring_type', 'notification', 'order_period_libelle', 'survey_name');
+        $this->aSelectedFields = Array('order_id', 'workspace_key', 'workspace_id', 'label_name', 'enabled', 'order_status_id', 'user_id', 'period_id', $this->getDateSelectedFields('order_date', 'yeartosecond'), $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'survey_id', 'condition', 'inbox_id', 'name', 'workspace_name', 'monitoring_type', 'notification', 'order_period_libelle', 'survey_name');
     }
 
     /**
diff --git a/web_service/ws/UserSurveys.class.inc b/web_service/ws/UserSurveys.class.inc
index f17e377d6b2e8039a623ee00325164861ceb395e..939d601f8d9b4bb11c6d5ace04b5324b4d9082e6 100755
--- a/web_service/ws/UserSurveys.class.inc
+++ b/web_service/ws/UserSurveys.class.inc
@@ -41,7 +41,7 @@ class UserSurveys extends GTF {
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
         $login = $_SESSION['ses_Login'];
-        $this->aSelectedFields = Array('order_id', 'workspace_key', 'workspace_id', 'label_name', 'enabled', 'order_status_id', 'user_id', 'period_id', 'order_date', 'execution_date', 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'survey_id', 'condition', 'inbox_id', 'name', 'workspace_name', 'monitoring_type', 'notification', 'order_period_libelle', 'survey_name', "replace(name, '\$user', '$login') || '/' || condition as full_condition");
+        $this->aSelectedFields = Array('order_id', 'workspace_key', 'workspace_id', 'label_name', 'enabled', 'order_status_id', 'user_id', 'period_id', $this->getDateSelectedFields('order_date', 'yeartosecond'), $this->getDateSelectedFields('execution_date', 'yeartosecond'), 'wk_params', 'result_url', 'email_option_id', 'email_notifications', 'gtf_engine_id', 'survey_id', 'condition', 'inbox_id', 'name', 'workspace_name', 'monitoring_type', 'notification', 'order_period_libelle', 'survey_name', "replace(name, '\$user', '$login') || '/' || condition as full_condition");
     }
 
     /**
@@ -238,7 +238,7 @@ class UserSurveys extends GTF {
      * @return id of the user's usersurvey created
      */
     function POST() {
-        $this->aValues['order_date'] = date('Y-m-d H:i:s');
+        $this->aValues['order_date'] = gmdate('Y-m-d H:i:s');
         $this->aValues['user_id'] = $_SESSION['ses_user_id'];
         // Si token public -> id du compte public.
         if ($this->aValues['token'] == $this->aProperties['public_token']) {
diff --git a/web_service/ws/Workspace.class.inc b/web_service/ws/Workspace.class.inc
old mode 100644
new mode 100755
index 6f1dda6a3b8d2bd00df5391ca704c77633b11be7..d0950ec9ff97e2f7881ea3742511d4896079b5c4
--- a/web_service/ws/Workspace.class.inc
+++ b/web_service/ws/Workspace.class.inc
@@ -28,7 +28,7 @@ class Workspace extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('workspace_id', 'name', 'owner', 'creation_date', 'description', 'subscription', 'category_id', 'success_action_id', 'failed_action_id', 'survey', 'form_type', 'legal_terms_conditions', 'last_save_date', 'last_save_build', 'file_encoding', 'title', 'requirements', 'history', 'usage', 'key', 'email_template_id', 'locked', 'tag', 'groups', 'login', 'category_name', 'email_template', 'fmw_file');
+        $this->aSelectedFields = Array('workspace_id', 'name', 'owner', $this->getDateSelectedFields('creation_date', 'yeartosecond'), 'description', 'subscription', 'category_id', 'success_action_id', 'failed_action_id', 'survey', 'form_type', 'legal_terms_conditions', $this->getDateSelectedFields('last_save_date', 'yeartosecond'), 'last_save_build', 'file_encoding', 'title', 'requirements', 'history', 'usage', 'key', 'email_template_id', 'locked', 'tag', 'groups', 'login', 'category_name', 'email_template', 'fmw_file', 'dataencrypt', 'usepersonaldata', 'unitcost', 'costpersecond');
     }
 
     /**
@@ -196,23 +196,23 @@ class Workspace extends GTF {
                 $sJs = "";
                 $sCss = "";
                 if (is_dir($sDirName . "/form")) {
-                    if ($dh = opendir($sDirName . "/form")) {
+                    if ($dh = opendir($sDirName . "/form/ressources")) {
                         while (($file = readdir($dh)) !== false) {
                             $sName = explode(".", $file);
                             if ($sName[1] == "js") {
-                                // $pFileJS = fopen($sDirName . "/form/Subform.js", "r");
-                                // $iSize = filesize($sDirName . "/form/Subform.js");
+                                // $pFileJS = fopen($sDirName . "/form/ressources/Subform.js", "r");
+                                // $iSize = filesize($sDirName . "/form/ressources/Subform.js");
                                 // $sJs = fread($pFileJS, $iSize);
                                 // fclose($pFileJS);
 
-                                $sJs = $this->aProperties['web_server_name'] . '/' . $this->aProperties['ws_data_alias'] . "/gtf/workspace/" . (string) $this->aValues["my_vitis_id"] . "/form/Subform.js";
+                                $sJs = $this->aProperties['web_server_name'] . '/' . $this->aProperties['ws_data_alias'] . "/gtf/workspace/" . (string) $this->aValues["my_vitis_id"] . "/form/ressources/Subform.js";
                             }
                             if ($sName[1] == "css") {
-                                /* $pFileCSS = fopen($sDirName . "/form/Subform.css", "r");
-                                  $iSize = filesize($sDirName . "/form/Subform.css");
+                                /* $pFileCSS = fopen($sDirName . "/form/ressources/Subform.css", "r");
+                                  $iSize = filesize($sDirName . "/form/ressources/Subform.css");
                                   $sCss = fread($pFileCSS, $iSize);
                                   fclose($pFileCSS); */
-                                $sCss = $this->aProperties['web_server_name'] . '/' . $this->aProperties['ws_data_alias'] . "/gtf/workspace/" . (string) $this->aValues["my_vitis_id"] . "/form/Subform.css";
+                                $sCss = $this->aProperties['web_server_name'] . '/' . $this->aProperties['ws_data_alias'] . "/gtf/workspace/" . (string) $this->aValues["my_vitis_id"] . "/form/ressources/Subform.css";
                             }
                         }
                         closedir($dh);
diff --git a/web_service/ws/Workspaces.class.inc b/web_service/ws/Workspaces.class.inc
old mode 100644
new mode 100755
index d69eebd7616486a4c31adc981a20228b0a5122b5..879b9378236c81426da8b9702e43253e443c4ab6
--- a/web_service/ws/Workspaces.class.inc
+++ b/web_service/ws/Workspaces.class.inc
@@ -42,7 +42,7 @@ class Workspaces extends GTF {
      */
     function __construct($aPath, $aValues, $properties, $bShortcut = false, $oConnection = false) {
         parent::__construct($aPath, $aValues, $properties, $bShortcut, $oConnection);
-        $this->aSelectedFields = Array('workspace_id', 'name', 'fmw_file', 'owner', 'creation_date', 'description', 'subscription', 'category_id', 'success_action_id', 'failed_action_id', 'survey', 'form_type', 'legal_terms_conditions', 'last_save_date', 'last_save_build', 'file_encoding', 'title', 'requirements', 'history', 'usage', 'key', 'email_template_id', 'locked', 'tag', 'login', 'category_name', 'nb_demande', 'email_template');
+        $this->aSelectedFields = Array('workspace_id', 'name', 'fmw_file', 'owner', $this->getDateSelectedFields('creation_date', 'yeartosecond'), 'description', 'subscription', 'category_id', 'success_action_id', 'failed_action_id', 'survey', 'form_type', 'legal_terms_conditions', $this->getDateSelectedFields('last_save_date', 'yeartosecond'), 'last_save_build', 'file_encoding', 'title', 'requirements', 'history', 'usage', 'key', 'email_template_id', 'locked', 'tag', 'login', 'category_name', 'nb_demande', 'email_template', 'dataencrypt', 'usepersonaldata');
     }
 
     /**
@@ -345,7 +345,7 @@ class Workspaces extends GTF {
                 $aParams['sFileName'] = array('value' => str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'][$i])), 'type' => 'string');
                 $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getWorkspaceId'], $aParams);
                 if ($aWorkspace = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
-                    $this->aValues['name'] = str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'][$i])) . date("Ymd-His") . rand(0, 100);
+                    $this->aValues['name'] = str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'][$i])) . gmdate("Ymd-His") . rand(0, 100);
                 } else {
                     $this->aValues['name'] = str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'][$i]));
                 }
@@ -357,7 +357,7 @@ class Workspaces extends GTF {
                 $this->aValues['tag'] = 'default';
                 $this->aValues['survey'] = 'FALSE';
                 $this->aValues['form_type'] = 'default';
-                $this->aValues['creation_date'] = date("Y-m-d");
+                $this->aValues['creation_date'] = gmdate("Y-m-d H:i:s");
                 // Id de l'utilisateur connecté.
                 $aParams = array();
                 $aParams['sSchemaFramework'] = array('value' => $this->aProperties["schema_framework"], 'type' => 'schema_name');
@@ -439,7 +439,7 @@ class Workspaces extends GTF {
                 $aParams['sFileName'] = array('value' => str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'])), 'type' => 'string');
                 $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getWorkspaceId'], $aParams);
                 if ($aWorkspace = $this->oConnection->oBd->ligneSuivante($oPDOresult)) {
-                    $this->aValues['name'] = str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'])) . date("Ymd-His") . rand(0, 100);
+                    $this->aValues['name'] = str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name'])) . gmdate("Ymd-His") . rand(0, 100);
                 } else {
                     $this->aValues['name'] = str_replace(".fmw", "", str_replace(".fme", "", $_FILES['fmw_file']['name']));
                 }
@@ -456,7 +456,7 @@ class Workspaces extends GTF {
                     $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
                 }          
                 else {
-                    $this->aValues['creation_date'] = date('Y-m-d');
+                    $this->aValues['creation_date'] = gmdate('Y-m-d H:i:s');
                     // Création de la clé du projet.
                     $bExistKey = false;
                     while ($bExistKey == false) {
@@ -483,7 +483,7 @@ class Workspaces extends GTF {
                                 $this->aValues["comp_file"] = $_FILES["comp_file"]["name"]; //si pas de zip la chaine est vide
                             $aExt = explode(".", $this->aValues["fmw_file"]);
                             if ($aExt[count($aExt) - 1] == "fmw") {
-                                $this->aValues['creation_date'] = date('Y-m-d');
+                                $this->aValues['creation_date'] = gmdate('Y-m-d H:i:s');
                                 $this->aValues['owner'] = $_SESSION["ses_user_id"];
                                 $this->aValues['form_type'] = 'custom';
                                 if ($this->aValues["name"] == "") {
@@ -495,7 +495,7 @@ class Workspaces extends GTF {
                                         $sFilename = $sFilename . $aExt[$i];
                                     }
                                     if (!$this->oConnection->oBd->enErreur() && $this->oConnection->oBd->nombreLigne($oPDOresult) > 0) {
-                                        $this->aValues['name'] = $sFilename . date("Ymd-His") . rand(0, 100);
+                                        $this->aValues['name'] = $sFilename . gmdate("Ymd-His") . rand(0, 100);
                                     } else {
                                         $this->aValues['name'] = $sFilename;
                                     }
@@ -792,32 +792,32 @@ class Workspaces extends GTF {
                         $pFile = fopen($sDirName . "/form/WSubform.json", "w");
                         if (fwrite($pFile, $this->aValues["Json"]) == FALSE) {
                             if ($fJson == FALSE) {
-                                writeToErrorLog("Subform.json can't be opened : " . $sDirName . "/form/Subform.json" . "(Workspaces.class.inc : verify the property workspace_dir)");
+                                writeToErrorLog("Subform.json can't be opened : " . $sDirName . "/form/ressources/Subform.json" . "(Workspaces.class.inc : verify the property workspace_dir)");
                             } else {
-                                writeToErrorLog("Subform.json can't be writed : " . $sDirName . "/form/Subform.json" . "(Workspaces.class.inc : verify the folder's rights)");
+                                writeToErrorLog("Subform.json can't be writed : " . $sDirName . "/form/ressources/Subform.json" . "(Workspaces.class.inc : verify the folder's rights)");
                             }
                         }
                         fclose($pFile);
 
                         if ($this->aValues["Js"] != "") {
-                            $pFileJS = fopen($sDirName . "/form/Subform.js", "w+");
+                            $pFileJS = fopen($sDirName . "/form/ressources/Subform.js", "w+");
                             if (fwrite($pFileJS, $this->aValues["Js"]) == FALSE) {
                                 if ($pFileJS == FALSE) {
-                                    writeToErrorLog("Subform.js can't be opened : " . $sDirName . "/form/Subform.js" . "(Workspaces.class.inc : verify the property workspace_dir)");
+                                    writeToErrorLog("Subform.js can't be opened : " . $sDirName . "/form/ressources/Subform.js" . "(Workspaces.class.inc : verify the property workspace_dir)");
                                 } else {
-                                    writeToErrorLog("Subform.js can't be writed : " . $sDirName . "/form/Subform.js" . "(Workspaces.class.inc : verify the folder's rights)");
+                                    writeToErrorLog("Subform.js can't be writed : " . $sDirName . "/form/ressources/Subform.js" . "(Workspaces.class.inc : verify the folder's rights)");
                                 }
                             }
                             fclose($pFileJS);
                         }
 
                         if ($this->aValues["Css"] != "") {
-                            $pFileCSS = fopen($sDirName . "/form/Subform.css", "w+");
+                            $pFileCSS = fopen($sDirName . "/form/ressources/Subform.css", "w+");
                             if (fwrite($pFileCSS, $this->aValues["Css"]) == FALSE) {
                                 if ($pFileCSS == FALSE) {
-                                    writeToErrorLog("Subform.css can't be opened : " . $sDirName . "/form/Subform.css" . "(Workspaces.class.inc : verify the property workspace_dir)");
+                                    writeToErrorLog("Subform.css can't be opened : " . $sDirName . "/form/ressources/Subform.css" . "(Workspaces.class.inc : verify the property workspace_dir)");
                                 } else {
-                                    writeToErrorLog("Subform.css can't be writed : " . $sDirName . "/form/Subform.css" . "(Workspaces.class.inc : verify the folder's rights)");
+                                    writeToErrorLog("Subform.css can't be writed : " . $sDirName . "/form/ressources/Subform.css" . "(Workspaces.class.inc : verify the folder's rights)");
                                 }
                             }
                             fclose($pFileCSS);
@@ -879,9 +879,9 @@ class Workspaces extends GTF {
                             $fJson = fopen($sDirName . "/form/DSubform.json", "w");
                             if (fwrite($fJson, json_encode($aJson)) == FALSE) {
                                 if ($fJson == FALSE) {
-                                    writeToErrorLog("Subform.json can't be opened : " . $sDirName . "/form/Subform.json" . "(Workspaces.class.inc : verify the property workspace_dir)");
+                                    writeToErrorLog("Subform.json can't be opened : " . $sDirName . "/form/ressources/Subform.json" . "(Workspaces.class.inc : verify the property workspace_dir)");
                                 } else {
-                                    writeToErrorLog("Subform.json can't be writed : " . $sDirName . "/form/Subform.json" . "(Workspaces.class.inc : verify the folder's rights)");
+                                    writeToErrorLog("Subform.json can't be writed : " . $sDirName . "/form/ressources/Subform.json" . "(Workspaces.class.inc : verify the folder's rights)");
                                 }
                             }
                             fclose($fJson);
@@ -892,7 +892,7 @@ class Workspaces extends GTF {
                             // Récupère les anciens paramètres.
                             $oFmwParser->getBdMetadata($this->oConnection->oBd, $this->aValues["my_vitis_id"]);
                             // Mise à jour des paramètres du nouveau fichier dans la base.
-                            $oFmwParser->sSaveDate = date('Y-m-d G:i:s');
+                            $oFmwParser->sSaveDate = gmdate('Y-m-d G:i:s');
                             $oFmwParser->updateMetadata($this->oConnection->oBd, $this->aValues["my_vitis_id"]);
                         }
                     } else {
@@ -1047,7 +1047,7 @@ class Workspaces extends GTF {
                 if ($aReturn['status'] == 1) {
                     $sMessage = $this->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
                 } else {
-                    $oError = new VitisError($aReturn['error_code'], $aReturn['message']);
+                    $oError = new VitisError(1, 'LICENSE_FILE_INSTALL_ERROR_CONFIGURATION_CONFIGURATION_GTF_LICENSE');
                     $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
                 }
             } elseif ($this->aPath[3] == "DeleteWidgetFile") {
@@ -1218,7 +1218,7 @@ class Workspaces extends GTF {
         $oPDOresult = $this->oConnection->oBd->executeWithParams($aSql['getWorkspaceLastSaveData'], $aParams);
         if (!$this->oConnection->oBd->enErreur()) {
             $aRow = $this->oConnection->oBd->ligneSuivante($oPDOresult);
-            $oObject->sSaveDate = date('Y-m-d G:i:s');
+            $oObject->sSaveDate = gmdate('Y-m-d G:i:s');
             $oObject->sSaveBuild = $aRow['last_save_build'];
         }
         // Mise à jour du projet en base.
diff --git a/web_service/ws_data/gtf/workspace/S3Downloader.fmw b/web_service/ws_data/gtf/workspace/S3Downloader.fmw
new file mode 100755
index 0000000000000000000000000000000000000000..66a5a4763fcaf5f3ccedbfc479ecbdab61dfee9a
--- /dev/null
+++ b/web_service/ws_data/gtf/workspace/S3Downloader.fmw
@@ -0,0 +1,265 @@
+#! <?xml version="1.0" encoding="UTF-8" ?>
+#! <WORKSPACE
+#    
+#    
+#    Command-line to run this workspace:
+#    
+#    
+#    "C:\Program Files\FME_2016\fme.exe" "E:\_Docs\GTF moteur serveur\S3Downloader.fmw"
+#          --access_key_id ""
+#          --secret_access_key ""
+#          --bucket_name ""
+#          --object_key ""
+#          --target_file ""
+#    
+#    
+#!   WARN_INVALID_XFORM_PARAM="Yes"
+#!   FME_STROKE_MAX_DEVIATION="0"
+#!   PYTHON_COMPATIBILITY="27"
+#!   DESTINATION_ROUTING_FILE=""
+#!   DOC_TOP_LEFT="326.779 -965.635"
+#!   USAGE=""
+#!   DOC_EXTENTS="613.376 1e-05"
+#!   LOG_FILE=""
+#!   DESTINATION="NONE"
+#!   LOG_MAX_RECORDED_FEATURES="200"
+#!   ZOOM_SCALE="100"
+#!   REQUIREMENTS=""
+#!   SOURCE="NONE"
+#!   LAST_SAVE_DATE="2018-01-12T15:26:20"
+#!   FME_SERVER_SERVICES=""
+#!   FME_GEOMETRY_HANDLING="Enhanced"
+#!   FME_DOCUMENT_PRIORGUID=""
+#!   FME_DOCUMENT_GUID="644dd7ca-a79d-48e7-ad7d-33a0a3cac007"
+#!   FME_REPROJECTION_ENGINE="FME"
+#!   END_TCL=""
+#!   MULTI_WRITER_DATASET_ORDER="BY_ID"
+#!   VIEW_POSITION="-100.001 0"
+#!   TITLE=""
+#!   REQUIREMENTS_KEYWORD=""
+#!   MAX_LOG_FEATURES="200"
+#!   LEGAL_TERMS_CONDITIONS=""
+#!   EXPLICIT_BOOKMARK_ORDER="false"
+#!   DESCRIPTION=""
+#!   WORKSPACE_VERSION="1"
+#!   END_PYTHON=""
+#!   FME_IMPLICIT_CSMAP_REPROJECTION_MODE="Auto"
+#!   SOURCE_ROUTING_FILE=""
+#!   ATTR_TYPE_ENCODING="SDF"
+#!   REDIRECT_TERMINATORS="NONE"
+#!   BEGIN_PYTHON=""
+#!   FME_BUILD_NUM="16485"
+#!   IGNORE_READER_FAILURE="No"
+#!   HISTORY=""
+#!   PASSWORD=""
+#!   SHOW_ANNOTATIONS="true"
+#!   BEGIN_TCL=""
+#!   CATEGORY=""
+#!   SHOW_INFO_NODES="true"
+#!   LAST_SAVE_BUILD="FME(R) 2016.1.0.0 (20160404 - Build 16485 - WIN64)"
+#! >
+#! <DATASETS>
+#! </DATASETS>
+#! <DATA_TYPES>
+#! </DATA_TYPES>
+#! <GEOM_TYPES>
+#! </GEOM_TYPES>
+#! <FEATURE_TYPES>
+#! </FEATURE_TYPES>
+#! <FMESERVER>
+#! </FMESERVER>
+#! <GLOBAL_PARAMETERS>
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR access_key_id Access key ID:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR secret_access_key Secret access key:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR bucket_name Bucket name:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR object_key Object key:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR target_file Target file:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! </GLOBAL_PARAMETERS>
+#! <COMMENTS>
+#! </COMMENTS>
+#! <CONSTANTS>
+#! </CONSTANTS>
+#! <BOOKMARKS>
+#! </BOOKMARKS>
+#! <TRANSFORMERS>
+#! <TRANSFORMER
+#!   IDENTIFIER="1"
+#!   TYPE="S3Downloader"
+#!   VERSION="1"
+#!   POSITION="940.155 -965.635"
+#!   BOUNDING_RECT="940.155 -965.635 -1 -1"
+#!   ORDER="5e+14"
+#!   PARMS_EDITED="true"
+#!   ENABLED="true"
+#!   LAST_PARM_EDIT="16485"
+#! >
+#!     <OUTPUT_FEAT NAME="OUTPUT"/>
+#!     <FEAT_COLLAPSED COLLAPSED="0"/>
+#!     <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
+#!     <OUTPUT_FEAT NAME="&lt;REJECTED&gt;"/>
+#!     <FEAT_COLLAPSED COLLAPSED="1"/>
+#!     <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="1" />
+#!     <XFORM_ATTR ATTR_NAME="download_s3_error" IS_USER_CREATED="false" FEAT_INDEX="1" />
+#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="S3Downloader"/>
+#!     <XFORM_PARM PARM_NAME="S3_ERROR_ATTRIBUTE" PARM_VALUE="download_s3_error"/>
+#!     <XFORM_PARM PARM_NAME="S3_BUCKET_NAME" PARM_VALUE="$(bucket_name)"/>
+#!     <XFORM_PARM PARM_NAME="S3_FILE_OR_ATTRIBUTE" PARM_VALUE="File"/>
+#!     <XFORM_PARM PARM_NAME="S3_OBJECT_KEY" PARM_VALUE="$(object_key)"/>
+#!     <XFORM_PARM PARM_NAME="S3_TARGET_FILE" PARM_VALUE="$(target_file)"/>
+#!     <XFORM_PARM PARM_NAME="S3_AWS_CREDENTIALS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="OUTPUT_OPTIONS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_DOWNLOAD_OPTIONS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_SECRET_ACCESS_KEY" PARM_VALUE="$(secret_access_key)"/>
+#!     <XFORM_PARM PARM_NAME="S3_ACCESS_KEY_ID" PARM_VALUE="$(access_key_id)"/>
+#!     <XFORM_PARM PARM_NAME="S3_TARGET_ATTRIBUTE" PARM_VALUE="&lt;Unused&gt;"/>
+#! </TRANSFORMER>
+#! <TRANSFORMER
+#!   IDENTIFIER="2"
+#!   TYPE="Creator"
+#!   VERSION="5"
+#!   POSITION="326.779 -965.635"
+#!   BOUNDING_RECT="326.779 -965.635 -1 -1"
+#!   ORDER="5e+14"
+#!   PARMS_EDITED="false"
+#!   ENABLED="true"
+#!   LAST_PARM_EDIT="16485"
+#! >
+#!     <OUTPUT_FEAT NAME="CREATED"/>
+#!     <FEAT_COLLAPSED COLLAPSED="0"/>
+#!     <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
+#!     <XFORM_PARM PARM_NAME="GEOM" PARM_VALUE="&lt;lt&gt;?xml&lt;space&gt;version=&lt;quote&gt;1.0&lt;quote&gt;&lt;space&gt;encoding=&lt;quote&gt;US_ASCII&lt;quote&gt;&lt;space&gt;standalone=&lt;quote&gt;no&lt;quote&gt;&lt;space&gt;?&lt;gt&gt;&lt;lt&gt;geometry&lt;space&gt;dimension=&lt;quote&gt;2&lt;quote&gt;&lt;gt&gt;&lt;lt&gt;null&lt;solidus&gt;&lt;gt&gt;&lt;lt&gt;&lt;solidus&gt;geometry&lt;gt&gt;"/>
+#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="Creator"/>
+#!     <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="&lt;Unused&gt;"/>
+#!     <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no"/>
+#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance"/>
+#!     <XFORM_PARM PARM_NAME="GEOMTYPE" PARM_VALUE="Geometry Object"/>
+#!     <XFORM_PARM PARM_NAME="COORDSYS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1"/>
+#! </TRANSFORMER>
+#! </TRANSFORMERS>
+#! <FEAT_LINKS>
+#! <FEAT_LINK
+#!   IDENTIFIER="3"
+#!   SOURCE_NODE="2"
+#!   TARGET_NODE="1"
+#!   SOURCE_PORT_DESC="fo 0 CREATED"
+#!   TARGET_PORT_DESC="fi 0 "
+#!   ENABLED="true"
+#!   EXECUTION_IDX="0"
+#!   HIDDEN="false"
+#!   EXTRA_POINTS=""
+#! />
+#! </FEAT_LINKS>
+#! <BREAKPOINTS>
+#! </BREAKPOINTS>
+#! <ATTR_LINKS>
+#! </ATTR_LINKS>
+#! <SUBDOCUMENTS>
+#! </SUBDOCUMENTS>
+#! <LOOKUP_TABLES>
+#! </LOOKUP_TABLES>
+#! </WORKSPACE>
+FME_PYTHON_VERSION 27
+DEFAULT_MACRO access_key_id 
+GUI TEXT access_key_id Access key ID:
+DEFAULT_MACRO secret_access_key 
+GUI TEXT secret_access_key Secret access key:
+DEFAULT_MACRO bucket_name 
+GUI TEXT bucket_name Bucket name:
+DEFAULT_MACRO object_key 
+GUI TEXT object_key Object key:
+DEFAULT_MACRO target_file 
+GUI TEXT target_file Target file:
+INCLUDE [ if {{$(access_key_id)} == {}} { puts_real {Parameter 'access_key_id' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(secret_access_key)} == {}} { puts_real {Parameter 'secret_access_key' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(bucket_name)} == {}} { puts_real {Parameter 'bucket_name' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(object_key)} == {}} { puts_real {Parameter 'object_key' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(target_file)} == {}} { puts_real {Parameter 'target_file' must be given a value.}; exit 1; }; ]
+#! START_HEADER
+#! START_WB_HEADER
+READER_TYPE NULL
+READER_KEYWORD NULL_SOURCE
+NULL_SOURCE_DATASET null
+
+WRITER_TYPE NULL
+WRITER_KEYWORD NULL_DEST
+NULL_DEST_DATASET null
+#! END_WB_HEADER
+
+#! START_WB_HEADER
+#! END_WB_HEADER
+
+#! END_HEADER
+
+LOG_FILENAME "$(FME_MF_DIR)S3Downloader.log"
+LOG_APPEND NO
+LOG_MAX_FEATURES 200
+LOG_MAX_RECORDED_FEATURES 200
+FME_REPROJECTION_ENGINE FME
+FME_IMPLICIT_CSMAP_REPROJECTION_MODE Auto
+FME_GEOMETRY_HANDLING Enhanced
+FME_STROKE_MAX_DEVIATION 0
+LOG_FILTER_MASK -1
+# -------------------------------------------------------------------------
+
+MULTI_READER_CONTINUE_ON_READER_FAILURE No
+
+# -------------------------------------------------------------------------
+
+MACRO WORKSPACE_NAME S3Downloader
+MACRO FME_VIEWER_APP fmedatainspector
+DEFAULT_MACRO WB_CURRENT_CONTEXT
+# -------------------------------------------------------------------------
+
+Tcl2 proc Creator_CoordSysRemover {} {   global FME_CoordSys;   set FME_CoordSys {}; }
+MACRO Creator_XML     NOT_ACTIVATED
+MACRO Creator_CLASSIC NOT_ACTIVATED
+MACRO Creator_2D3D    2D_GEOMETRY
+MACRO Creator_COORDS  <Unused>
+INCLUDE [ if { {Geometry Object} == {Geometry Object} } {            puts {MACRO Creator_XML *} } ]
+INCLUDE [ if { {Geometry Object} == {2D Coordinate List} } {            puts {MACRO Creator_2D3D 2D_GEOMETRY};            puts {MACRO Creator_CLASSIC *} } ]
+INCLUDE [ if { {Geometry Object} == {3D Coordinate List} } {            puts {MACRO Creator_2D3D 3D_GEOMETRY};            puts {MACRO Creator_CLASSIC *} } ]
+INCLUDE [ if { {Geometry Object} == {2D Min/Max Box} } {            set comment {                We need to turn the COORDS which are                    minX minY maxX maxY                into a full polygon list of coordinates            };            set splitCoords [split [string trim {<Unused>}]];            if { [llength $splitCoords] > 4} {               set trimmedCoords {};               foreach item $splitCoords { if { $item != {} } {lappend trimmedCoords $item} };               set splitCoords $trimmedCoords;            };            if { [llength $splitCoords] != 4 } {                error {Creator: Coordinate list is expected to be a space delimited list of four numbers as 'minx miny maxx maxy' - `<Unused>' is invalid};            };            set minX [lindex $splitCoords 0];            set minY [lindex $splitCoords 1];            set maxX [lindex $splitCoords 2];            set maxY [lindex $splitCoords 3];            puts "MACRO Creator_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY";            puts {MACRO Creator_2D3D 2D_GEOMETRY};            puts {MACRO Creator_CLASSIC *} } ]
+FACTORY_DEF $(Creator_XML) CreationFactory    FACTORY_NAME Creator_XML_Creator    CREATE_AT_END no    OUTPUT FEATURE_TYPE _____CREATED______        @Geometry(FROM_ENCODED_STRING,<lt>?xml<space>version=<quote>1.0<quote><space>encoding=<quote>US_ASCII<quote><space>standalone=<quote>no<quote><space>?<gt><lt>geometry<space>dimension=<quote>2<quote><gt><lt>null<solidus><gt><lt><solidus>geometry<gt>)
+FACTORY_DEF $(Creator_CLASSIC) CreationFactory    FACTORY_NAME Creator_CLASSIC_Creator    $(Creator_2D3D) $(Creator_COORDS)    CREATE_AT_END no    OUTPUT FEATURE_TYPE _____CREATED______
+FACTORY_DEF * TeeFactory    FACTORY_NAME Creator_Cloner    INPUT FEATURE_TYPE _____CREATED______    NUMBER_OF_COPIES 1    COPY_NUMBER_ATTRIBUTE "_creation_instance"    OUTPUT FEATURE_TYPE Creator_CREATED        @Tcl2(Creator_CoordSysRemover)        @CoordSys()        fme_feature_type Creator
+
+FACTORY_DEF * BranchingFactory   FACTORY_NAME "Creator_CREATED Brancher -1 3"   INPUT FEATURE_TYPE Creator_CREATED   TARGET_FACTORY "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET"   OUTPUT PASSED FEATURE_TYPE *     @RemoveAttributes("Creator_CREATED Brancher -1 3".BranchingFactory.Count)
+# -------------------------------------------------------------------------
+FACTORY_DEF * TeeFactory   FACTORY_NAME "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET"   INPUT FEATURE_TYPE *  OUTPUT FEATURE_TYPE *
+# -------------------------------------------------------------------------
+
+FACTORY_DEF * COM.safe.fme.factory.S3Factory    FACTORY_NAME S3Downloader       INPUT  FEATURE_TYPE Creator_CREATED    S3_MODE S3_GET    S3_ACCESS_KEY_ID "@EvaluateExpression(FDIV,STRING,$(access_key_id$encode),S3Downloader)"    S3_SECRET_ACCESS_KEY "@EvaluateExpression(FDIV,STRING,$(secret_access_key$encode),S3Downloader)"    S3_BUCKET_NAME "@EvaluateExpression(FDIV,STRING,$(bucket_name$encode),S3Downloader)"    S3_OBJECT_KEY "@EvaluateExpression(FDIV,STRING,$(object_key$encode),S3Downloader)"    S3_TARGET_FILE "@EvaluateExpression(FDIV,STRING,$(target_file$encode),S3Downloader)"    S3_ERROR_ATTRIBUTE "download_s3_error"    OUTPUT OUTPUT FEATURE_TYPE S3Downloader_OUTPUT    OUTPUT REJECTED FEATURE_TYPE S3Downloader_<REJECTED>
+
+FACTORY_DEF * TeeFactory   FACTORY_NAME "S3Downloader OUTPUT Output Nuker"   INPUT FEATURE_TYPE S3Downloader_OUTPUT
+FACTORY_DEF * TeeFactory   FACTORY_NAME "S3Downloader <REJECTED> Output Nuker"   INPUT FEATURE_TYPE S3Downloader_<REJECTED>
+# -------------------------------------------------------------------------
+
+FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator"   COMMAND_PARM_EVALUATION SINGLE_PASS   INPUT FEATURE_TYPE *   FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__   OUTPUT ROUTED FEATURE_TYPE *    OUTPUT NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type] 818060 818061 fme_warn")
+# -------------------------------------------------------------------------
+
+FACTORY_DEF * TeeFactory   FACTORY_NAME "Final Output Nuker"   INPUT FEATURE_TYPE __nuke_me__
+
diff --git a/web_service/ws_data/gtf/workspace/S3Uploader.fmw b/web_service/ws_data/gtf/workspace/S3Uploader.fmw
new file mode 100755
index 0000000000000000000000000000000000000000..b548676cbb5d8c229f7a822b3ea096a7e2449af8
--- /dev/null
+++ b/web_service/ws_data/gtf/workspace/S3Uploader.fmw
@@ -0,0 +1,274 @@
+#! <?xml version="1.0" encoding="UTF-8" ?>
+#! <WORKSPACE
+#    
+#    
+#    Command-line to run this workspace:
+#    
+#    
+#    "C:\Program Files\FME_2016\fme.exe" "E:\_Docs\GTF moteur serveur\S3Uploader.fmw"
+#          --access_key_id ""
+#          --secret_access_key ""
+#          --source_file ""
+#          --bucket_name ""
+#          --object_key ""
+#    
+#    
+#!   MAX_LOG_FEATURES="200"
+#!   DOC_EXTENTS="682.126 1e-05"
+#!   IGNORE_READER_FAILURE="No"
+#!   LOG_FILE=""
+#!   DOC_TOP_LEFT="689.283 -1018.76"
+#!   HISTORY=""
+#!   WARN_INVALID_XFORM_PARAM="Yes"
+#!   END_TCL=""
+#!   FME_STROKE_MAX_DEVIATION="0"
+#!   LAST_SAVE_DATE="2018-01-12T16:55:32"
+#!   FME_DOCUMENT_GUID="4cc242b9-d06a-47c4-b931-eebc2cdb107d"
+#!   BEGIN_TCL=""
+#!   CATEGORY=""
+#!   USAGE=""
+#!   FME_SERVER_SERVICES=""
+#!   SOURCE="NONE"
+#!   SHOW_ANNOTATIONS="true"
+#!   DESCRIPTION=""
+#!   REQUIREMENTS=""
+#!   FME_GEOMETRY_HANDLING="Enhanced"
+#!   REDIRECT_TERMINATORS="NONE"
+#!   WORKSPACE_VERSION="1"
+#!   BEGIN_PYTHON=""
+#!   FME_REPROJECTION_ENGINE="FME"
+#!   SOURCE_ROUTING_FILE=""
+#!   FME_IMPLICIT_CSMAP_REPROJECTION_MODE="Auto"
+#!   LEGAL_TERMS_CONDITIONS=""
+#!   MULTI_WRITER_DATASET_ORDER="BY_ID"
+#!   ZOOM_SCALE="100"
+#!   VIEW_POSITION="-59.3756 0"
+#!   END_PYTHON=""
+#!   FME_BUILD_NUM="16485"
+#!   PASSWORD=""
+#!   ATTR_TYPE_ENCODING="SDF"
+#!   TITLE=""
+#!   SHOW_INFO_NODES="true"
+#!   DESTINATION="NONE"
+#!   REQUIREMENTS_KEYWORD=""
+#!   EXPLICIT_BOOKMARK_ORDER="false"
+#!   LAST_SAVE_BUILD="FME(R) 2016.1.0.0 (20160404 - Build 16485 - WIN64)"
+#!   DESTINATION_ROUTING_FILE=""
+#!   PYTHON_COMPATIBILITY="27"
+#!   FME_DOCUMENT_PRIORGUID=""
+#!   LOG_MAX_RECORDED_FEATURES="200"
+#! >
+#! <DATASETS>
+#! </DATASETS>
+#! <DATA_TYPES>
+#! </DATA_TYPES>
+#! <GEOM_TYPES>
+#! </GEOM_TYPES>
+#! <FEATURE_TYPES>
+#! </FEATURE_TYPES>
+#! <FMESERVER>
+#! </FMESERVER>
+#! <GLOBAL_PARAMETERS>
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR access_key_id Access key ID:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR secret_access_key Secret access key:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI MULTIFILE_OR_ATTR source_file All_Files(*)|* Source filename:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR bucket_name Bucket name:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! <GLOBAL_PARAMETER
+#!   GUI_LINE="GUI TEXT_OR_ATTR object_key Object key:"
+#!   DEFAULT_VALUE=""
+#!   IS_STAND_ALONE="true"
+#! />
+#! </GLOBAL_PARAMETERS>
+#! <COMMENTS>
+#! </COMMENTS>
+#! <CONSTANTS>
+#! </CONSTANTS>
+#! <BOOKMARKS>
+#! </BOOKMARKS>
+#! <TRANSFORMERS>
+#! <TRANSFORMER
+#!   IDENTIFIER="1"
+#!   TYPE="S3Uploader"
+#!   VERSION="3"
+#!   POSITION="1371.41 -1018.76"
+#!   BOUNDING_RECT="1371.41 -1018.76 -1 -1"
+#!   ORDER="5e+14"
+#!   PARMS_EDITED="true"
+#!   ENABLED="true"
+#!   LAST_PARM_EDIT="16485"
+#! >
+#!     <OUTPUT_FEAT NAME="OUTPUT"/>
+#!     <FEAT_COLLAPSED COLLAPSED="0"/>
+#!     <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
+#!     <XFORM_ATTR ATTR_NAME="_s3_object_uri" IS_USER_CREATED="false" FEAT_INDEX="0" />
+#!     <OUTPUT_FEAT NAME="&lt;REJECTED&gt;"/>
+#!     <FEAT_COLLAPSED COLLAPSED="1"/>
+#!     <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="1" />
+#!     <XFORM_ATTR ATTR_NAME="_s3_error" IS_USER_CREATED="false" FEAT_INDEX="1" />
+#!     <XFORM_PARM PARM_NAME="S3_OUTPUT_OPTIONS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_URI_ATTRIBUTE" PARM_VALUE="_s3_object_uri"/>
+#!     <XFORM_PARM PARM_NAME="S3_FILE_DATA_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_CANNED_ACL" PARM_VALUE="Private"/>
+#!     <XFORM_PARM PARM_NAME="S3_FOLDER_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_FILE_OR_DATA" PARM_VALUE="File"/>
+#!     <XFORM_PARM PARM_NAME="S3_ERROR_ATTRIBUTE" PARM_VALUE="_s3_error"/>
+#!     <XFORM_PARM PARM_NAME="S3_DATA_FILE" PARM_VALUE="$(source_file)"/>
+#!     <XFORM_PARM PARM_NAME="S3_BUCKET_NAME" PARM_VALUE="$(bucket_name)"/>
+#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_ACCESS_KEY_ID" PARM_VALUE="$(access_key_id)"/>
+#!     <XFORM_PARM PARM_NAME="S3_OBJECT_KEY" PARM_VALUE="$(object_key)"/>
+#!     <XFORM_PARM PARM_NAME="S3_UPLOAD_OPTIONS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_DATA_SOURCE" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_SECRET_ACCESS_KEY" PARM_VALUE="$(secret_access_key)"/>
+#!     <XFORM_PARM PARM_NAME="S3_AWS_CREDENTIALS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_DATA" PARM_VALUE="&lt;Unused&gt;"/>
+#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="S3Uploader"/>
+#!     <XFORM_PARM PARM_NAME="S3_UPLOAD_CONTENT_TYPE" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="S3_INCLUDE_SUBFOLDERS" PARM_VALUE="&lt;Unused&gt;"/>
+#!     <XFORM_PARM PARM_NAME="S3_DATA_FOLDER" PARM_VALUE="&lt;Unused&gt;"/>
+#! </TRANSFORMER>
+#! <TRANSFORMER
+#!   IDENTIFIER="2"
+#!   TYPE="Creator"
+#!   VERSION="5"
+#!   POSITION="689.283 -1018.76"
+#!   BOUNDING_RECT="689.283 -1018.76 -1 -1"
+#!   ORDER="5e+14"
+#!   PARMS_EDITED="false"
+#!   ENABLED="true"
+#!   LAST_PARM_EDIT="16485"
+#! >
+#!     <OUTPUT_FEAT NAME="CREATED"/>
+#!     <FEAT_COLLAPSED COLLAPSED="0"/>
+#!     <XFORM_ATTR ATTR_NAME="_creation_instance" IS_USER_CREATED="false" FEAT_INDEX="0" />
+#!     <XFORM_PARM PARM_NAME="GEOMTYPE" PARM_VALUE="Geometry Object"/>
+#!     <XFORM_PARM PARM_NAME="COORDS" PARM_VALUE="&lt;Unused&gt;"/>
+#!     <XFORM_PARM PARM_NAME="CRE_ATTR" PARM_VALUE="_creation_instance"/>
+#!     <XFORM_PARM PARM_NAME="PARAMETERS_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="NUM" PARM_VALUE="1"/>
+#!     <XFORM_PARM PARM_NAME="GEOM" PARM_VALUE="&lt;lt&gt;?xml&lt;space&gt;version=&lt;quote&gt;1.0&lt;quote&gt;&lt;space&gt;encoding=&lt;quote&gt;US_ASCII&lt;quote&gt;&lt;space&gt;standalone=&lt;quote&gt;no&lt;quote&gt;&lt;space&gt;?&lt;gt&gt;&lt;lt&gt;geometry&lt;space&gt;dimension=&lt;quote&gt;2&lt;quote&gt;&lt;gt&gt;&lt;lt&gt;null&lt;solidus&gt;&lt;gt&gt;&lt;lt&gt;&lt;solidus&gt;geometry&lt;gt&gt;"/>
+#!     <XFORM_PARM PARM_NAME="XFORMER_NAME" PARM_VALUE="Creator"/>
+#!     <XFORM_PARM PARM_NAME="TRANSFORMER_GROUP" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="COORDSYS" PARM_VALUE=""/>
+#!     <XFORM_PARM PARM_NAME="ATEND" PARM_VALUE="no"/>
+#! </TRANSFORMER>
+#! </TRANSFORMERS>
+#! <FEAT_LINKS>
+#! <FEAT_LINK
+#!   IDENTIFIER="3"
+#!   SOURCE_NODE="2"
+#!   TARGET_NODE="1"
+#!   SOURCE_PORT_DESC="fo 0 CREATED"
+#!   TARGET_PORT_DESC="fi 0 "
+#!   ENABLED="true"
+#!   EXECUTION_IDX="0"
+#!   HIDDEN="false"
+#!   EXTRA_POINTS=""
+#! />
+#! </FEAT_LINKS>
+#! <BREAKPOINTS>
+#! </BREAKPOINTS>
+#! <ATTR_LINKS>
+#! </ATTR_LINKS>
+#! <SUBDOCUMENTS>
+#! </SUBDOCUMENTS>
+#! <LOOKUP_TABLES>
+#! </LOOKUP_TABLES>
+#! </WORKSPACE>
+FME_PYTHON_VERSION 27
+DEFAULT_MACRO access_key_id 
+GUI TEXT access_key_id Access key ID:
+DEFAULT_MACRO secret_access_key 
+GUI TEXT secret_access_key Secret access key:
+DEFAULT_MACRO source_file 
+GUI MULTIFILE source_file All_Files(*)|* Source filename:
+DEFAULT_MACRO bucket_name 
+GUI TEXT bucket_name Bucket name:
+DEFAULT_MACRO object_key 
+GUI TEXT object_key Object key:
+INCLUDE [ if {{$(access_key_id)} == {}} { puts_real {Parameter 'access_key_id' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(secret_access_key)} == {}} { puts_real {Parameter 'secret_access_key' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(source_file)} == {}} { puts_real {Parameter 'source_file' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(bucket_name)} == {}} { puts_real {Parameter 'bucket_name' must be given a value.}; exit 1; }; ]
+INCLUDE [ if {{$(object_key)} == {}} { puts_real {Parameter 'object_key' must be given a value.}; exit 1; }; ]
+#! START_HEADER
+#! START_WB_HEADER
+READER_TYPE NULL
+READER_KEYWORD NULL_SOURCE
+NULL_SOURCE_DATASET null
+
+WRITER_TYPE NULL
+WRITER_KEYWORD NULL_DEST
+NULL_DEST_DATASET null
+#! END_WB_HEADER
+
+#! START_WB_HEADER
+#! END_WB_HEADER
+
+#! END_HEADER
+
+LOG_FILENAME "$(FME_MF_DIR)S3Uploader.log"
+LOG_APPEND NO
+LOG_MAX_FEATURES 200
+LOG_MAX_RECORDED_FEATURES 200
+FME_REPROJECTION_ENGINE FME
+FME_IMPLICIT_CSMAP_REPROJECTION_MODE Auto
+FME_GEOMETRY_HANDLING Enhanced
+FME_STROKE_MAX_DEVIATION 0
+LOG_FILTER_MASK -1
+# -------------------------------------------------------------------------
+
+MULTI_READER_CONTINUE_ON_READER_FAILURE No
+
+# -------------------------------------------------------------------------
+
+MACRO WORKSPACE_NAME S3Uploader
+MACRO FME_VIEWER_APP fmedatainspector
+DEFAULT_MACRO WB_CURRENT_CONTEXT
+# -------------------------------------------------------------------------
+
+Tcl2 proc Creator_CoordSysRemover {} {   global FME_CoordSys;   set FME_CoordSys {}; }
+MACRO Creator_XML     NOT_ACTIVATED
+MACRO Creator_CLASSIC NOT_ACTIVATED
+MACRO Creator_2D3D    2D_GEOMETRY
+MACRO Creator_COORDS  <Unused>
+INCLUDE [ if { {Geometry Object} == {Geometry Object} } {            puts {MACRO Creator_XML *} } ]
+INCLUDE [ if { {Geometry Object} == {2D Coordinate List} } {            puts {MACRO Creator_2D3D 2D_GEOMETRY};            puts {MACRO Creator_CLASSIC *} } ]
+INCLUDE [ if { {Geometry Object} == {3D Coordinate List} } {            puts {MACRO Creator_2D3D 3D_GEOMETRY};            puts {MACRO Creator_CLASSIC *} } ]
+INCLUDE [ if { {Geometry Object} == {2D Min/Max Box} } {            set comment {                We need to turn the COORDS which are                    minX minY maxX maxY                into a full polygon list of coordinates            };            set splitCoords [split [string trim {<Unused>}]];            if { [llength $splitCoords] > 4} {               set trimmedCoords {};               foreach item $splitCoords { if { $item != {} } {lappend trimmedCoords $item} };               set splitCoords $trimmedCoords;            };            if { [llength $splitCoords] != 4 } {                error {Creator: Coordinate list is expected to be a space delimited list of four numbers as 'minx miny maxx maxy' - `<Unused>' is invalid};            };            set minX [lindex $splitCoords 0];            set minY [lindex $splitCoords 1];            set maxX [lindex $splitCoords 2];            set maxY [lindex $splitCoords 3];            puts "MACRO Creator_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY";            puts {MACRO Creator_2D3D 2D_GEOMETRY};            puts {MACRO Creator_CLASSIC *} } ]
+FACTORY_DEF $(Creator_XML) CreationFactory    FACTORY_NAME Creator_XML_Creator    CREATE_AT_END no    OUTPUT FEATURE_TYPE _____CREATED______        @Geometry(FROM_ENCODED_STRING,<lt>?xml<space>version=<quote>1.0<quote><space>encoding=<quote>US_ASCII<quote><space>standalone=<quote>no<quote><space>?<gt><lt>geometry<space>dimension=<quote>2<quote><gt><lt>null<solidus><gt><lt><solidus>geometry<gt>)
+FACTORY_DEF $(Creator_CLASSIC) CreationFactory    FACTORY_NAME Creator_CLASSIC_Creator    $(Creator_2D3D) $(Creator_COORDS)    CREATE_AT_END no    OUTPUT FEATURE_TYPE _____CREATED______
+FACTORY_DEF * TeeFactory    FACTORY_NAME Creator_Cloner    INPUT FEATURE_TYPE _____CREATED______    NUMBER_OF_COPIES 1    COPY_NUMBER_ATTRIBUTE "_creation_instance"    OUTPUT FEATURE_TYPE Creator_CREATED        @Tcl2(Creator_CoordSysRemover)        @CoordSys()        fme_feature_type Creator
+
+FACTORY_DEF * BranchingFactory   FACTORY_NAME "Creator_CREATED Brancher -1 3"   INPUT FEATURE_TYPE Creator_CREATED   TARGET_FACTORY "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET"   OUTPUT PASSED FEATURE_TYPE *     @RemoveAttributes("Creator_CREATED Brancher -1 3".BranchingFactory.Count)
+# -------------------------------------------------------------------------
+FACTORY_DEF * TeeFactory   FACTORY_NAME "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET"   INPUT FEATURE_TYPE *  OUTPUT FEATURE_TYPE *
+# -------------------------------------------------------------------------
+
+FACTORY_DEF * COM.safe.fme.factory.S3Factory    FACTORY_NAME S3Uploader       INPUT  FEATURE_TYPE Creator_CREATED    S3_MODE S3_PUT    S3_ACCESS_KEY_ID "@EvaluateExpression(FDIV,STRING,$(access_key_id$encode),S3Uploader)"    S3_SECRET_ACCESS_KEY "@EvaluateExpression(FDIV,STRING,$(secret_access_key$encode),S3Uploader)"    S3_BUCKET_NAME "@EvaluateExpression(FDIV,STRING,$(bucket_name$encode),S3Uploader)"    S3_OBJECT_KEY "@EvaluateExpression(FDIV,STRING,$(object_key$encode),S3Uploader)"    S3_DATA_FILE "@EvaluateExpression(FDIV,STRING,$(source_file$encode),S3Uploader)"    S3_CANNED_ACL "Private"    S3_URI_ATTRIBUTE "_s3_object_uri"    S3_ERROR_ATTRIBUTE "_s3_error"    OUTPUT OUTPUT FEATURE_TYPE S3Uploader_OUTPUT    OUTPUT REJECTED FEATURE_TYPE S3Uploader_<REJECTED>
+
+FACTORY_DEF * TeeFactory   FACTORY_NAME "S3Uploader OUTPUT Output Nuker"   INPUT FEATURE_TYPE S3Uploader_OUTPUT
+FACTORY_DEF * TeeFactory   FACTORY_NAME "S3Uploader <REJECTED> Output Nuker"   INPUT FEATURE_TYPE S3Uploader_<REJECTED>
+# -------------------------------------------------------------------------
+
+FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator"   COMMAND_PARM_EVALUATION SINGLE_PASS   INPUT FEATURE_TYPE *   FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__   OUTPUT ROUTED FEATURE_TYPE *    OUTPUT NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type] 818060 818061 fme_warn")
+# -------------------------------------------------------------------------
+
+FACTORY_DEF * TeeFactory   FACTORY_NAME "Final Output Nuker"   INPUT FEATURE_TYPE __nuke_me__
+