diff --git a/.gitignore b/.gitignore
index cd5905fdc1a97a47a32df9c2fc9b6237401811b9..f355734436c886675083f9db848b915653bbc43a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@ server/local_builds/
 remote/modules/systemd/dltmp.systemd-204.tar.xz
 scripts/home/
 stage4/
+useful/backup-por-facilidade/
 useful/ainda-nao-sei-usar-o-git.tar.gz
 useful/ainda-nao-sei-usar-o-git/
 useful/stg312-dummy/
diff --git a/useful/stg312/.size.out b/useful/stg312/.size.out
index ef0af295869aa9ee14d01942ebaeef96a40d8901..d20b3065e778664849d7942bc3ce00fc40a7a53e 100644
--- a/useful/stg312/.size.out
+++ b/useful/stg312/.size.out
@@ -1 +1 @@
-1726520	trying.r1.tar.gz
+6906932	trying-stuff.r1.tar.gz
diff --git a/useful/stg312/.upid.out b/useful/stg312/.upid.out
index 980a992b05b4881f409f75c259cb463c0c589887..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/useful/stg312/.upid.out
+++ b/useful/stg312/.upid.out
@@ -1 +0,0 @@
-{"uploadid":"XoqQjZRveULpcdtxUzzB431MnUxQZ1UwheD","status":"ok","code":"003","msg":"New upload succesful"}
\ No newline at end of file
diff --git a/useful/stg312/makefile b/useful/stg312/makefile
index 386966be89c25608f5bcddee039b0357197b6905..be912afe7c64006e5209e25a8b61ac56302ffe82 100644
--- a/useful/stg312/makefile
+++ b/useful/stg312/makefile
@@ -1,7 +1,7 @@
 NAME=openslx_gui
 CFLAGS=-g -Wall -fdiagnostics-show-option 
 GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-3.0 jansson` -lX11 -lcurl
-SRCS=openslx_gui.c stg4.c utils.c
+SRCS=openslx_gui.c stg4.c utils.c upload-utils.c
 CC=gcc
  
 # top-level rule to create the program.
diff --git a/useful/stg312/openslx_gui b/useful/stg312/openslx_gui
index b4c8155408350dbd645a69fce1f8be39ed370e6a..4b3a28a9778424b8988c0491d134cd3d04757dde 100755
Binary files a/useful/stg312/openslx_gui and b/useful/stg312/openslx_gui differ
diff --git a/useful/stg312/openslx_gui.c b/useful/stg312/openslx_gui.c
index d495fe2f639281fda2b9b6887b19b9128a2e6d8f..a9dfc385f89da08bad5b858461ad6f1362333a54 100644
--- a/useful/stg312/openslx_gui.c
+++ b/useful/stg312/openslx_gui.c
@@ -14,6 +14,7 @@
 #include <gdk/gdk.h>
 #include <glib.h>
 #include <jansson.h>
+#include "upload-utils.h"
 
 void tela_upload_antigo(GtkWidget *w,gpointer p){
     GtkWidget *window_upload_antigo, *janela_ant, *button_continua_upload, *button_nao_continua, *label_nome_imagem, *label_parte_upload;
diff --git a/useful/stg312/stg4.c b/useful/stg312/stg4.c
index 8362023155115074a1459af3b07f85907dee2ef3..f7fcee3783c100df18c8389cfac4c783fd050afe 100644
--- a/useful/stg312/stg4.c
+++ b/useful/stg312/stg4.c
@@ -7,6 +7,7 @@
 #include <errno.h>
 #include <sys/wait.h>
 #include "utils.h"
+#include "upload-utils.h"
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdk.h>
 #include <glib.h>
@@ -132,8 +133,8 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 		//gboolean g_spawn_async_with_pipes (const gchar *working_directory, gchar **argv, gchar **envp, GSpawnFlags flags,
 		// GSpawnChildSetupFunc child_setup, gpointer user_data, GPid *child_pid, GError **error);
 
-		strcpy(argv[0], CLONE_STG4_SCRIPT_DUMMY);
-		//strcpy(argv[0], CLONE_STG4_SCRIPT);
+		//strcpy(argv[0], CLONE_STG4_SCRIPT_DUMMY);
+		strcpy(argv[0], CLONE_STG4_SCRIPT);
 
 		strcpy(argv[1], tmscripts);
 
@@ -217,8 +218,8 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){
 			g_signal_connect (G_OBJECT (window_stg4_final), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla
 			g_signal_connect(button_help_4at, "clicked", G_CALLBACK(help_screen), NULL);
             printf("Linha %d\n", __LINE__);
-			//g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload), data);
-			g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_teste), data);
+			g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload), data);
+			//g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_teste), data);
 			//g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_dummy), data);
             printf("Linha %d\n", __LINE__);
 			g_signal_connect(button_stg4_final_sair, "clicked", G_CALLBACK(mata_janela_e_chama_tela_principal), data);
diff --git a/useful/stg312/upload-utils.c b/useful/stg312/upload-utils.c
new file mode 100644
index 0000000000000000000000000000000000000000..d80fb82438def4bdce876e0ff2fecd8ac1366e59
--- /dev/null
+++ b/useful/stg312/upload-utils.c
@@ -0,0 +1,453 @@
+
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/wait.h>
+#include <gdk/gdkkeysyms.h>
+#include <gdk/gdk.h>
+#include <glib.h>
+#include "utils.h"
+#include <curl/curl.h>
+#include <curl/easy.h>
+#include <jansson.h>
+#include <time.h>
+#include <gcrypt.h>
+#include <sys/types.h>
+#include <signal.h>
+
+int checa_upload_antigo(){
+
+    FILE *upload_in_progress;
+    char *old_upload;
+    old_upload = malloc(255*sizeof(char));
+
+    upload_in_progress = fopen(".progress.out", "a+");
+    printf("Linha %d\n", __LINE__);
+    rewind(upload_in_progress);
+    fscanf(upload_in_progress, "%s", old_upload);
+    printf("Linha %d\n", __LINE__);
+
+    puts(old_upload);
+    if(!(strcmp(old_upload, "Upload"))){
+        return 1;
+    }
+    return 0;
+}
+
+int calcula_tempo_upload(){
+
+    FILE *velocidade_upload;
+    velocidade_upload = fopen(".speed.out", "r");
+
+    char *velocidade;
+    velocidade =  malloc(255*sizeof(char));
+    int velocidade_f;
+
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    fscanf(velocidade_upload, "%s", velocidade);
+    puts(velocidade);
+    puts("vai calcular");
+    velocidade_f = atoi(velocidade);
+    puts("calculou");
+    puts("chegou aqui");
+    return((1953)/velocidade_f*3); // *3 para levar em conta problemas de rede.
+}
+
+//Função que gera o arquivo de dados do usuario, tanto os que foram recebidos do banco quanto informaçõs de sistema. Esse arquivo
+// sera submetido junto à imagem quando o upload for feito.
+void gera_arquivo_dados_usuario(){
+
+    user_info dados_do_user;
+    pega_dados_do_usuario(&dados_do_user);
+    FILE *user_data_file;
+    user_data_file = fopen("user_data.info", "wr");
+
+    fputs("Nome do criador da imagem: ", user_data_file);
+    fputs(dados_do_user.name, user_data_file);
+    fputs("\nLogin do criador da imagem: ", user_data_file);
+    fputs(dados_do_user.login, user_data_file);
+    fputs("\nEmail do criador da imagem: ", user_data_file);
+    fputs(dados_do_user.email, user_data_file);
+    fputs("\nCidade do criador da imagem: ", user_data_file);
+    fputs(dados_do_user.city, user_data_file);
+
+    time_t timer;
+    time(&timer);
+    fputs("\nData da criação da imagem: ", user_data_file);
+    fputs(ctime(&timer), user_data_file);
+
+    fclose(user_data_file);
+    system("uname -a >> user_data.info");
+    system("lsb_release -a >> user_data.info");
+
+
+
+
+}
+
+//Função que checa o arquivo .login.out para verificar o suceso do login.
+int checa_sucesso_do_login(){
+
+    FILE *login;
+    char *user_data_str;
+    login = fopen(".login.out", "r");;
+    user_data_str = malloc(2550*sizeof(char));
+    fgets(user_data_str,2550*sizeof(char), login );
+
+    printf("%zu tamanho da string\n", strlen(user_data_str));
+    puts(user_data_str);
+
+    json_t *root;
+    json_error_t error;
+    root = json_loads(user_data_str,0, &error);
+    printf("Linha %d\n", __LINE__);
+
+    if(!root){
+        puts("erro ao carregar dados!");
+        //exit(0);
+    }
+    printf("Linha %d\n", __LINE__);
+
+    if(!json_is_object(root))
+    {
+        fprintf(stderr, "error: root is not an array\n");
+        json_decref(root);
+    }
+    printf("Linha %d\n", __LINE__);
+
+    json_t  *sha;
+    printf("Linha %d\n", __LINE__);
+
+    const char *message_text;
+    printf("Linha %d\n", __LINE__);
+
+    sha = json_object_get(root, "status");
+    printf("Linha %d\n", __LINE__);
+
+    if(json_is_string(sha))
+    {
+        printf("Linha %d\n", __LINE__);
+        message_text = json_string_value(sha);
+        printf("Linha %d\n", __LINE__);
+        puts(message_text);
+        printf("Linha %d\n", __LINE__);
+    }else{
+        printf("Linha %d\n", __LINE__);
+        puts("error, not string");
+        return 0;
+        printf("Linha %d\n", __LINE__);
+    }
+
+    if(!(strcmp("ok", message_text))){
+        printf("Linha %d\n", __LINE__);
+        puts(message_text);
+        return 1;
+    }
+
+    printf("Linha %d\n", __LINE__);
+    return 0;
+
+
+}
+
+//Função que utiliza o arquivo gerado pela chamada Curl com os dados do usuario e coloca eles na estrutura user_info *dados
+void pega_dados_do_usuario(user_info *dados){
+
+    FILE *user_data;
+    char *user_data_str;
+    user_data_str = malloc(2550*sizeof(char));
+    user_data = fopen(".data.out", "r");
+    fgets(user_data_str,2550*sizeof(char), user_data );
+    puts("User data: ");
+    puts(user_data_str);
+    puts("User data end ");
+
+    json_t *root;
+    json_error_t error;
+    root = json_loads(user_data_str,0, &error);
+    if(!root){
+        puts("erro ao carregar dados!");
+        //exit(0);
+    }
+
+    if(!json_is_object(root))
+    {
+        fprintf(stderr, "error: root is not an array\n");
+        json_decref(root);
+    }
+
+    json_t  *sha;
+    const char *message_text;
+    sha = json_object_get(root, "name");
+    if(json_is_string(sha))
+    {
+        message_text = json_string_value(sha);
+        puts(message_text);
+        strcpy(dados->name, message_text);
+    }else{
+        dados->name[0] = '\0';
+        puts("error, not string");
+    }
+
+    sha = json_object_get(root, "login");
+    if(json_is_string(sha))
+    {
+        message_text = json_string_value(sha);
+        puts(message_text);
+        strcpy(dados->login, message_text);
+
+    }else{
+        dados->login[0] = '\0';
+        puts("error, not string");
+    }
+
+    sha = json_object_get(root, "email");
+    if(json_is_string(sha))
+    {
+        message_text = json_string_value(sha);
+        puts(message_text);
+        strcpy(dados->email, message_text);
+
+    }else{
+        dados->email[0] = '\0';
+        puts("error, not string");
+    }
+
+    sha = json_object_get(root, "city");
+    if(json_is_string(sha))
+    {
+        message_text = json_string_value(sha);
+        puts(message_text);
+        strcpy(dados->city, message_text);
+
+    }else{
+        dados->city[0] = '\0';
+        puts("error, not string");
+    }
+}
+
+int checa_sucesso_get_info(){
+
+    FILE *user_data;
+    char *user_data_str;
+    user_data_str = malloc(2550*sizeof(char));
+    user_data = fopen(".data.out", "r");
+    fgets(user_data_str,2550*sizeof(char), user_data );
+    puts("User data: ");
+    puts(user_data_str);
+    puts("User data end ");
+
+    json_t *root;
+    json_error_t error;
+    root = json_loads(user_data_str,0, &error);
+    if(!root){
+        puts("erro ao carregar dados!");
+        //exit(0);
+    }
+
+    if(!json_is_object(root))
+    {
+        fprintf(stderr, "error: root is not an array\n");
+        json_decref(root);
+    }
+
+    json_t  *sha;
+    const char *message_text;
+    sha = json_object_get(root, "status");
+    if(json_is_string(sha))
+    {
+        message_text = json_string_value(sha);
+        puts(message_text);
+        if(!(strcmp(message_text, "ok"))){
+            return 1;
+        }
+        return 0;
+    }else{
+        puts("Erro Crítico. Não encontrou a mensagem de erro. Se esse erro persistir, informe o suporte técnico.");
+        return 0;
+    }
+
+
+}
+//Função que faz o Login do usuario no sistema. Utiliza a biblioteca Libcurlc para realizar as requisições http.
+// Guarda as saidas em arquivos para uso posterios. Guarda o cookie para uso posterios tbm
+int faz_login_dummy(GtkWidget *w, gpointer p){
+    dados *data_ant = p;
+    tela_principal(NULL, data_ant);
+    return 1;
+}
+
+int faz_login(GtkWidget *w, gpointer p){
+
+    dados *data_ant = p;
+    CURL *curl;
+    char *data = malloc(255*sizeof(char));
+    strcpy(data, "login=");
+    char * resp;
+    FILE *dados_do_user, *login_out;
+    resp = malloc(255*sizeof(char));
+    puts("teste");
+    puts(gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
+    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
+    strcat(data, "&passwd=");
+    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4)));
+    strcat(data, "&request=login");
+    puts(data);
+
+    dados_do_user = fopen(".data.out", "wr");
+    login_out = fopen(".login.out", "wr");
+
+
+    curl = curl_easy_init();
+    if(curl) {
+
+        curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0");
+        curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1 );
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, login_out);
+        curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie");
+        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie");
+
+        curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
+        curl_easy_setopt(curl, CURLOPT_HEADER, 0);
+
+        //curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.6/slx-admin/api.php?do=webservice");
+        curl_easy_setopt(curl, CURLOPT_URL, API_URL);
+        curl_easy_setopt(curl, CURLOPT_POST, 1);
+        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+        puts("Fazendo login.");
+        curl_easy_perform(curl);
+
+        puts("teste 2");
+        fclose(login_out);
+        printf("Linha antes checagem %d\n", __LINE__);
+        if(checa_sucesso_do_login()){
+
+            printf("Linha %d\n", __LINE__);
+            char *data2="request=getinfo";
+            curl_easy_setopt(curl, CURLOPT_WRITEDATA, dados_do_user);
+            curl_easy_setopt(curl, CURLOPT_POST, 1);
+            curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
+            curl_easy_setopt(curl, CURLOPT_HEADER, 0);
+            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data2);
+            printf("Linha %d\n", __LINE__);
+            puts("pegando informação.");
+            curl_easy_perform(curl);
+            fclose(dados_do_user);
+            if(!(checa_sucesso_get_info())){ //nao conseguiu pegar informações
+
+                puts("Erro ao carregar informações do usuário. Por favor tente novamente. Se o erro persistir avisse o suporte técnico.");
+
+            }
+            //curl_easy_setopt(curl, CURLOPT_URL, "192.168.0.5/apply/upload");
+            //res = curl_easy_perform(curl);
+
+            if(curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &resp) == CURLE_OK)
+                puts(resp);
+            else
+                puts("Nao pegou dados");
+            curl_easy_cleanup(curl);
+            puts("teste");
+            if(checa_upload_antigo()){
+                tela_upload_antigo(NULL, data_ant);
+            }else{
+                if(data_ant->control == 0){
+                    tela_principal(NULL, data_ant);
+                }
+            }
+            return 1;
+        }
+        printf("Linha %d\n", __LINE__);
+    }
+    printf("Linha %d\n", __LINE__);
+    gtk_label_set_text(GTK_LABEL(data_ant->dado5), "Login nao encontrado!");
+    printf("Linha %d\n", __LINE__);
+    return 0;
+}
+
+//Função que faz o upload da imagem + dados para a api do site. Atualmente faz upload só de UM arquivo
+void faz_upload_dummy(GtkWidget *w, gpointer p){
+    stg4_tela_confirmacao_upload(NULL, p);
+}//Função de teste dummy
+
+//função de teste que faz upload da imagem teste.r1
+void faz_upload_teste(GtkWidget *w, gpointer p){
+
+    GtkWidget *loading;
+	GtkBuilder *builder;
+    int i;
+    struct dados *data = malloc(sizeof(*data));
+    GPid pid;
+	GChildWatchFunc handler;
+	char **argv;
+	argv = malloc(10*sizeof(char*));
+	for (i=0; i < 10; i++){
+		argv[i] = malloc(255*sizeof(char));
+	}
+
+    builder = gtk_builder_new();
+	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL);
+    loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
+
+    gtk_widget_show_all(loading);
+    strcpy(argv[0], "./upload");
+    strcpy(argv[1], "/home/ent13/Desktop/pasta-teste");
+    strcpy(argv[2], "teste");
+    strcpy(argv[3], ".r1");
+    argv[4] = NULL;
+    g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);
+    handler = sai_do_script;
+    data->dado6 = loading;
+    data->pid = pid;
+    g_child_watch_add(pid, handler, data);
+    stg4_tela_confirmacao_upload(NULL, p);
+
+}
+
+void faz_upload(GtkWidget *w, gpointer p){
+
+    GtkWidget *loading;
+	dados *data_ant = p;
+	GtkBuilder *builder;
+    struct dados *data = malloc(sizeof(*data));
+    int i;
+    GPid pid;
+	GChildWatchFunc handler;
+    char **argv;
+	argv = malloc(10*sizeof(char*));
+	for (i=0; i < 10; i++){
+		argv[i] = malloc(255*sizeof(char));
+	}
+
+    builder = gtk_builder_new();
+	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL);
+    loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
+
+    gtk_widget_show_all(loading);
+    strcpy(argv[0], "./upload");
+    strcpy(argv[1], gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado4)));
+    strcpy(argv[2], gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
+    strcpy(argv[3], ".r1");
+    argv[4] = NULL;
+    g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);
+    handler = sai_do_script;
+    data->dado6 = loading;
+    data->pid = pid;
+    g_child_watch_add(pid, handler, data);
+    stg4_tela_confirmacao_upload(NULL, p);
+
+}
diff --git a/useful/stg312/upload-utils.h b/useful/stg312/upload-utils.h
new file mode 100644
index 0000000000000000000000000000000000000000..f021d4813501fa1d1649fe0b206505d858504635
--- /dev/null
+++ b/useful/stg312/upload-utils.h
@@ -0,0 +1,20 @@
+
+#include <gtk/gtk.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/wait.h>
+
+
+int checa_upload_antigo();
+int calcula_tempo_upload();
+void gera_arquivo_dados_usuario();
+int checa_sucesso_do_login();
+void pega_dados_do_usuario(user_info *dados);
+int checa_sucesso_get_info();
+int faz_login_dummy(GtkWidget *w, gpointer p);
+int faz_login(GtkWidget *w, gpointer p);
+void faz_upload_dummy(GtkWidget *w, gpointer p);
+void faz_upload_teste(GtkWidget *w, gpointer p);
+void faz_upload(GtkWidget *w, gpointer p);
diff --git a/useful/stg312/upload.c b/useful/stg312/upload.c
index de58e0c818d403d9487856e988d10cb37fd35626..3860c8ef1618245e691583ff0ed0c092128e7a8f 100644
--- a/useful/stg312/upload.c
+++ b/useful/stg312/upload.c
@@ -15,6 +15,7 @@
 #include <gcrypt.h>
 #include <sys/types.h>
 #include <signal.h>
+#include "upload-utils.h"
 
 int checa_sucesso_upload(){
 
diff --git a/useful/stg312/utils.c b/useful/stg312/utils.c
index 5bd26252b873b9adc8a4f09c284ed5c1dbf9c502..5a536f30f23b73e200414ee487078091f6468371 100644
--- a/useful/stg312/utils.c
+++ b/useful/stg312/utils.c
@@ -18,6 +18,7 @@
 #include <sys/types.h>
 #include <signal.h>
 
+/*
 int checa_upload_antigo(){
 
     FILE *upload_in_progress;
@@ -491,7 +492,7 @@ void faz_upload(GtkWidget *w, gpointer p){
     stg4_tela_confirmacao_upload(NULL, p);
 
 }
-
+*/
 //FUnção que acha o caminho para o tm-scripts, utilizada no arquivo clone_stage4.sh
 void acha_tm_scripts(char *path){
 
diff --git a/useful/stg312/utils.h b/useful/stg312/utils.h
index 9a5ab8945ed3e3d51f08cc74ff96b6cb6d4106e3..0d2cb2a978352e0623e1ea9a0947fae39d13a002 100644
--- a/useful/stg312/utils.h
+++ b/useful/stg312/utils.h
@@ -8,6 +8,7 @@
 #include <sys/wait.h>
 #include "openslx_gui.h"
 #include "stg4.h"
+#include "upload-utils.h"
 
 static const char UPLOAD_REQUEST[] = "request=newupload&nparts=10&name="; //nparts HAS to be the same as NUMBER_OF_PARTS
 static const char API_URL[] = "http://192.168.0.6/slx-admin/api.php?do=webservice";
@@ -15,11 +16,9 @@ static const int NUMBER_OF_PARTS = 10; //
 static const char CLONE_STG4_SCRIPT[] = "./clone_stage4.sh";
 static const char CLONE_STG4_SCRIPT_DUMMY[] = "./clone_stage4-dummy.sh";
 static const char ARQUIVO_TESTE[] = "/home/ent13/Desktop/pasta-teste/teste.r1";
-
+/*
 int calcula_tempo_upload();
 
-void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p);
-
 void pega_dados_do_usuario(user_info *dados);
 
 void gera_arquivo_dados_usuario();
@@ -33,6 +32,9 @@ void faz_upload_dummy(GtkWidget *w, gpointer p);
 void faz_upload_teste(GtkWidget *w, gpointer p);
 
 void faz_upload(GtkWidget *w, gpointer p);
+*/
+
+void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p);
 
 gboolean on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data);
 
diff --git a/useful/stg4cloner/clone_stage4.sh b/useful/stg4cloner/clone_stage4.sh
deleted file mode 100755
index 7c993d689fdb1d267959ab70806a2b759a248c66..0000000000000000000000000000000000000000
--- a/useful/stg4cloner/clone_stage4.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-#echo O caminho é
-#pwd
-mkdir -p $2
-caminho=$(pwd)
-echo $1
-cd $1
-#echo $4 caminho que será executado
-if  ./clone_stage4 $3 "$4" ; then
-	cd  $caminho
-	#echo Caminho novo
-	#pwd
-	echo s > .result.out
-	#echo Escreveu
-	#cat .result.out
-	echo "Sucesso ao clonar."
-else
-	clear
-	#echo $caminho
-	cd  $caminho
-	#echo Caminho novo
-	#pwd
-	echo n > .result.out
-	#echo Escreveu
-	#cat .result.out
-	echo "Nao clonou."
-fi
diff --git a/useful/stg4cloner/makefile b/useful/stg4cloner/makefile
deleted file mode 100644
index 19f42e4decf2997ffea6f32c3dbe43e09e3bd24d..0000000000000000000000000000000000000000
--- a/useful/stg4cloner/makefile
+++ /dev/null
@@ -1,16 +0,0 @@
-NAME=stage4_cloner
-CFLAGS=-g -Wall -fdiagnostics-show-option -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -o $(NAME)
-GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-3.0`
-SRCS=stage4_cloner.c
-CC=gcc
- 
-# top-level rule to create the program.
-all: main
- 
-# compiling the source file.
-main: $(SRCS)
-	$(CC) $(CFLAGS) $(SRCS) $(GTKFLAGS)
- 
-# cleaning everything that can be automatically recreated with "make".
-clean:
-	/bin/rm -f $(NAME)
diff --git a/useful/stg4cloner/pic.png b/useful/stg4cloner/pic.png
deleted file mode 100644
index af75554abdf672f5f84115e1e36aed57cbe4df96..0000000000000000000000000000000000000000
Binary files a/useful/stg4cloner/pic.png and /dev/null differ
diff --git a/useful/stg4cloner/squash.sh b/useful/stg4cloner/squash.sh
deleted file mode 100755
index 72965df345165137cd9e8a4eeddf6175b6641d7d..0000000000000000000000000000000000000000
--- a/useful/stg4cloner/squash.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-caminho=$(pwd)
-if [ $1 == "1" ]; then
-	PKG_OK=$(dpkg-query -W --showformat='${Status}\n' squashfs-tools|grep "install ok installed")
-	echo Checking for squashfs-tools: $PKG_OK
-	if [ "" == "$PKG_OK" ]; then
-	  echo "No squashfs-tools. Setting up squashfs-tools. Install it?(y/n)"
-	  sudo apt-get --force-yes --yes install squashfs-tools
-	fi
-else
-	#echo cd $5
-	if mksquashfs "$2" "$3" -b 1M ; then
-		mv "$3" "$5"
-		if [ $4 == "1" ]; then
-			echo Confirme se você quer realmente excluir a pasta $2 . Essa ação é irreversível! Digite s para sim, ou n para não.
-			read conf
-			if [ $conf == "s" ]; then
-				rm -rf  "$2"
-			fi
-		fi
-		cd  "$caminho"
-		#echo Caminho novo
-		#pwd
-		echo s > .result.out
-		#echo Escreveu
-		#cat .result.out
-		echo "Sucesso ao compactar"
-	 else
-		cd  "$caminho"
-		#echo Caminho novo
-		#pwd
-		echo n > .result.out
-		#echo Escreveu
-		#cat .result.out
-		echo "Falha ao compactar."
-	 fi
-fi
diff --git a/useful/stg4cloner/stage4_cloner b/useful/stg4cloner/stage4_cloner
deleted file mode 100755
index aff548ae809799cce98c035f544ae2647725eeb6..0000000000000000000000000000000000000000
Binary files a/useful/stg4cloner/stage4_cloner and /dev/null differ
diff --git a/useful/stg4cloner/stage4_cloner.c b/useful/stg4cloner/stage4_cloner.c
deleted file mode 100644
index bdc92c896300ec0f94393683fea91deccd68fc3b..0000000000000000000000000000000000000000
--- a/useful/stg4cloner/stage4_cloner.c
+++ /dev/null
@@ -1,508 +0,0 @@
-
-
-#include <gtk/gtk.h>  
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-
-// Estrutura para passar os dados de uma tela para outra. 
-typedef struct dados{
-	struct GtkWidget *dado1;
-	struct GtkWidget *dado2;
-	struct GtkWidget *dado3;
-	struct GtkWidget *dado4;
-	struct GtkWidget *dado5;
-	struct GtkWidget *dado6;
-	}dados;
-
-// Função para sair do programa.
-void sair(GtkWidget *w, gpointer p){
-	
-	gtk_main_quit();
-	
-}
-
-// Insere o padding na grid, left e right é a célula que o padding será colocado. width é a largura do padding e height é a altura do padding
-GtkWidget *insert_padding(GtkWidget *grid, int left, int right, int width, int height){
-	
-	GtkWidget *padding;
-	
-	padding = gtk_label_new(NULL);
-	gtk_widget_set_size_request(GTK_WIDGET(padding), width, height);
-	gtk_grid_attach(GTK_GRID(grid), padding, left, right,1,1);
-	gtk_widget_show(padding);
-	return padding;
-}
-
-// Função que checa se os scripts foram rodados com sucesso. Ela é utilizada tanto na tela 2 quanto na tela 3.
-void checa_sucesso(){
-	
-	
-	FILE *resultado; // Arquivo utilizado para ler o resultado do script.
-	char controle;
-	
-	GtkWidget *dialogo;
-	GtkDialogFlags flags = GTK_DIALOG_MODAL;
-	GtkMessageType type = GTK_MESSAGE_ERROR;
-	GtkButtonsType button = GTK_BUTTONS_OK;
-	
-	//controle = (char*) malloc(5*sizeof(char));
-
-	
-	resultado = fopen(".result.out", "r"); // .result.out é o arquivo que armazena se o script foi executado corretamente ou não
-	
-	if(resultado != NULL){
-		fread(&controle, sizeof(char), 1, resultado);
-		//printf("Controle = %c\n", controle);
-		if(controle == 'n'){ //Caso o script não tenha sido executado com sucesso o programa informa o usuário por meio de uma janela de dialogo do GTK
-				dialogo = gtk_message_dialog_new(NULL, flags, type, button, "Algum dos passos do processo não foi completado com sucesso.\nCheque o terminal para descobrir onde aconteceu o erro.\nO programa irá sair agora.");
-				gtk_dialog_run(GTK_DIALOG(dialogo));
-				gtk_widget_destroy(dialogo);
-				system("rm .result.out"); // Remove o arquivo após a verificação para não dar conflito com o segundo script e execuções futuras do programa
-				gtk_main_quit();
-				exit(1);
-		}else{
-			system("rm .result.out"); // Remove o arquivo para não dar conflito com o segundo script e execuções futuras do programa, mesmo se o script foi rodado com sucesso.
-		}
-	}else{ //Se o arquivo não existir algo de errado aconteceu na execução do programa, como por exemplo o usuário não informou nenhum campo na segunda tela.
-		puts("Arquivo não encontrado, erro crítico. Saíndo do programa.");
-		gtk_main_quit();
-		exit(1);
-	}
-}
-
-// Acha o caminho para o tm-scripts
-char *acha_tm_scripts(){
-
-        char *cam_tm_scripts;
-        char *first_p;
-        char path[1024];
-
-        getcwd(path, sizeof(path));
-
-        cam_tm_scripts = strstr(path, "tm-scripts");
-        first_p = strchr(cam_tm_scripts, 'p');
-        first_p += 3;
-        *first_p = '\0';
-
-        return path;
-}
-
-
-
-// Tela de ajuda ao usuário
-void help_screen(GtkWidget *w, gpointer p){
-	GtkWidget *dialogo, *janela_ant;
-	GtkDialogFlags flags = GTK_DIALOG_MODAL;
-	GtkMessageType type = GTK_MESSAGE_INFO;
-	GtkButtonsType button = GTK_BUTTONS_OK;
-	
-	dados *data_ant = p;
-	janela_ant = (GtkWidget*) data_ant->dado1;
-	
-	dialogo = gtk_message_dialog_new(GTK_WINDOW(janela_ant), flags, type, button, "O que fazer:\n1ª tela: O programa vai checar se o pacote necessário está instalado. Clique em continuar\n2ª tela: Informe os dados pedidos. O programa vai utilizar eles para clonar o stage 4.\n3ª tela: O programa irá compactar o clone gerado. Marque a opção para remover somente se tiver certeza que quer remover (O sistema pedirá uma confirmação além dessa), se quiser recuperar terá que gerar outra imagem igual.\n4ª tela: Tela final! Clique em finalizar para terminar o programa.");
-	gtk_dialog_run(GTK_DIALOG(dialogo));
-	gtk_widget_destroy(dialogo);
-	
-	
-}
-
-// A função que exibe a quarta tela do programa, a tela final
-void clique_3a_tela(GtkWidget *w,gpointer p){
-	
-	pid_t pid;
-	GtkWidget *janela, *label_info, *janela_ant, *finalizar, *tabela_de_componentes, *quadro;
-	
-	dados *data_ant = p;
-	janela_ant = (GtkWidget*) data_ant->dado1;
-	int status;
-	
-	janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL);
-	
-	pid = fork();
-	
-	
-	if(pid == 0){ // Executa o script de compactação do stage4. Ver squash.sh para mais detalhes
-		
-		char *version, *local, *pasta_do_stg4;
-		version = malloc(255*sizeof(char));
-		local = malloc(255*sizeof(char));
-		pasta_do_stg4 = malloc(255*sizeof(char));
-		
-		strcpy(pasta_do_stg4, "/root/tm-scripts/stage4");
-		
-		strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
-		strcat(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4)));
-		
-		//strcpy(local, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado2)));
-		strcpy(local, pasta_do_stg4);
-		strcat(local, "/pasta-");
-		strcat(local, version);
-		
-		if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data_ant->dado5))){
-			execlp("./squash.sh", "./squash.sh", "0", local, version, "1",pasta_do_stg4, NULL);// se o usuário decidiu remover os arquivos não compactados
-		}else{
-			execlp("./squash.sh", "./squash.sh", "0", local, version, "0",pasta_do_stg4, NULL);// Se o usuário decidiu não remover os arquivos compactados
-		}
-		perror("O comando não foi executado corretamente. Erro: Saindo do programa. "); // Caso ocorra algum erro com o execlp.
-		
-		gtk_main_quit();
-		exit(1);
-	}else{
-		waitpid(pid, &status, 0); // Espera o script terminar de rodar
-		
-		checa_sucesso(); //Checa se o script foi executado corretamente
-		
-		gtk_window_set_title(GTK_WINDOW(janela), "Passo 4 de 4");
-		gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER);
-		gtk_window_set_resizable(GTK_WINDOW(janela), FALSE);
-		gtk_widget_set_size_request(GTK_WIDGET(janela), 540, 120);
-		
-		struct dados *data = malloc(sizeof(*data));
-		data->dado1 = janela;
-		
-		finalizar = gtk_button_new_with_label("Finalizar");
-		gtk_widget_set_size_request(GTK_WIDGET(finalizar), 90, 50);
-		g_signal_connect(finalizar, "clicked", G_CALLBACK(sair), data);
-		
-		
-		
-		label_info = gtk_label_new("Não se esqueça de colocar a imagem no servidor dnbd3,\ngerar o crc com ./dnbd3-server --crc /path/imagem\ne resetar o servidor com killall -USR1 dndb3-server");
-		gtk_label_set_line_wrap(GTK_LABEL(label_info), TRUE);
-		
-		quadro = gtk_frame_new("Pronto!"); 
-		gtk_container_add(GTK_CONTAINER(quadro), label_info);
-		
-		/* Inicio código antigo
-		tabela_de_componentes =  gtk_table_new(100,100,FALSE);
-		gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-		
-		//gtk_table_attach (GtkTable *table,GtkWidget *child,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), quadro, 0,1,0,2, GTK_FILL,GTK_FILL, 5, 10);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), finalizar, 1,2,1,2,  0,0, 40, 0);
-		fim codigo antigo */
-		
-		tabela_de_componentes =  gtk_grid_new();
-		gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-		gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-		gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-		gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-		gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-		
-		insert_padding(tabela_de_componentes, 0,0,10,10);
-		gtk_grid_attach(GTK_GRID(tabela_de_componentes),quadro, 1,1,3,1);
-		//gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), check_button, insert_padding(tabela_de_componentes, 4, 1, 70, 1), GTK_POS_RIGHT,1,1);
-		gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), finalizar, insert_padding(tabela_de_componentes, 1, 2, 1, 10), GTK_POS_BOTTOM,10,1);
-		
-		gtk_widget_hide(janela_ant);
-		gtk_widget_show(tabela_de_componentes);
-		gtk_widget_show(finalizar);
-		gtk_widget_show(label_info);
-		gtk_widget_show(quadro);
-		gtk_widget_show(janela);
-	}
-}
-
-// Função que exibe a terceira tela, pedindo para o usuário compactar o stage4 e perguntando se ele quer remover a imagem não compactada
-void clique_2a_tela(GtkWidget *w,gpointer p){
-	
-	pid_t pid;
-	GtkWidget *janela, *label_info, *janela_ant, *compactar,*tabela_de_componentes,*check_button, *quadro;
-	
-	dados *data_ant = p;
-	janela_ant = (GtkWidget*) data_ant->dado1;
-	int status;
-	
-	janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL);
-	
-	pid = fork();
-	
-	if(pid == 0){ // Executa a clonagem do stage4. Ver script clone_stage4.sh para mais detalhes
-		char *version, *home, *tmscripts, *pasta_do_stg4;
-		version = malloc(255*sizeof(char));
-		pasta_do_stg4 = malloc(255*sizeof(char));
-		home = malloc(255*sizeof(char));
-		tmscripts = malloc(255*sizeof(char));
-		
-		strcpy(pasta_do_stg4, "/root/tm-scripts/stage4");
-
-		tmscripts = acha_tm_scripts();
-		strcat(tmscripts, "/scripts");
-		puts(tmscripts);
-	//	scanf("%s", version);
-		
-		strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4)));
-		strcat(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado5)));
-		
-		//strcpy(home, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado3)));
-		strcpy(home, pasta_do_stg4);
-		strcat(home, "/pasta-");
-		strcat(home, version);
-		
-		
-		execlp("./clone_stage4.sh", "./clone_stage4.sh",tmscripts,pasta_do_stg4,"local",home, NULL);//, environ);
-		
-		perror("O comando não foi executado corretamente. Erro: Saindo do programa. "); // Caso ocorra algum erro com o execlp.
-
-		gtk_main_quit();
-		exit(1);
-	}else{
-		waitpid(pid, &status, 0); // Espera o script completar a execução
-		
-		checa_sucesso(); // Checa se o script foi executado corretamente
-		
-		gtk_window_set_title(GTK_WINDOW(janela), "Passo 3 de 4");
-		gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER);
-		gtk_window_set_resizable(GTK_WINDOW(janela), FALSE);
-		gtk_widget_set_size_request(GTK_WIDGET(janela), 470, 200);
-		
-
-		check_button =  gtk_check_button_new_with_label("Remover imagem\n descompactada?");
-		gtk_widget_set_halign(GTK_WIDGET(check_button), GTK_ALIGN_START);
-		gtk_widget_set_valign(GTK_WIDGET(check_button), GTK_ALIGN_START);
-		
-		struct dados *data = malloc(sizeof(*data));
-		data->dado1 = janela;
-		data->dado2 = data_ant->dado3;
-		data->dado3 = data_ant->dado4;
-		data->dado4 = data_ant->dado5;
-		data->dado5 = check_button;
-		
-		
-		compactar = gtk_button_new_with_label("Compactar!");
-		gtk_widget_set_size_request(GTK_WIDGET(compactar), 300, 50);
-		g_signal_connect(compactar, "clicked", G_CALLBACK(clique_3a_tela), data);
-		gtk_widget_set_halign(GTK_WIDGET(compactar), GTK_ALIGN_START);
-		gtk_widget_set_valign(GTK_WIDGET(compactar), GTK_ALIGN_START);
-		
-		label_info = gtk_label_new("Clonagem bem sucedida!\nAgora falta compactar a imagem clonada!\nPara isso clique no botão abaixo.\nCaso queira  remover a imagem não compactada\n marque a caixa ao lado do botão.");
-		gtk_label_set_line_wrap(GTK_LABEL(label_info), TRUE);
-		
-		quadro = gtk_frame_new("Sucesso!"); 
-		gtk_container_add(GTK_CONTAINER(quadro), label_info);
-		gtk_widget_set_halign(GTK_WIDGET(quadro), GTK_ALIGN_START);
-		gtk_widget_set_valign(GTK_WIDGET(quadro), GTK_ALIGN_START);
-		
-		/*Inicio da versao outdated
-		tabela_de_componentes =  gtk_table_new(100,100,FALSE);
-		gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-		
-		//gtk_table_attach (GtkTable *table,GtkWidget *child,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), quadro, 0,1,0,3, 0,0, 20, 20);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), check_button, 1,2,4,5, 0,0, 0, 50);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), compactar, 0,1,4,5, 0,0, 0, 50);
-		fim da versao outdated */
-		
-		tabela_de_componentes =  gtk_grid_new();
-		gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-		gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-		gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-		gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-		gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-		
-		insert_padding(tabela_de_componentes, 0,0,10,20);
-		gtk_grid_attach(GTK_GRID(tabela_de_componentes),quadro, 1,1,3,1);
-		gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), compactar, insert_padding(tabela_de_componentes, 1, 2, 1, 30), GTK_POS_BOTTOM,1,1);
-		gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), check_button, compactar, GTK_POS_RIGHT,1,1);
-		
-		gtk_widget_hide(janela_ant);
-		gtk_widget_show(tabela_de_componentes);
-		gtk_widget_show(compactar);
-		gtk_widget_show(check_button);
-		gtk_widget_show(label_info);
-		gtk_widget_show(quadro);
-		gtk_widget_show(janela);
-	}
-}
-
-// Função que exibe a segunda tela, pedindo os dados necessários ao usuário
-void clique_1a_tela(GtkWidget *w,gpointer p){
-	pid_t pid;
-	GtkWidget *janela, *janela_ant, *frame_pasta_compac;
-	GtkWidget *entry_imagem, *frame_imagem, *entry_versao, *frame_versao, *tabela_de_componentes, *clone;
-	
-	dados *data_ant = p;
-	janela_ant = (GtkWidget*) data_ant->dado1;
-	int status;
-	
-	janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL);
-	
-	pid = fork();
-	
-	if(pid == 0){ // Checa se a biblioteca squashfs-tools está instalada, senão instala
-		
-		execlp("./squash.sh", "./squash.sh", "1", NULL); // Executa o script
-		
-		perror("O comando não foi executado corretamente. Erro: Saindo do programa. "); // Caso ocorra algum erro com o execlp.
-		
-		gtk_main_quit();
-		exit(1);
-	}else{
-		waitpid(pid, &status, 0); // Espera a execução do script, esse não tem como gerar uma falha catastrófica, então a verificação não é necessária
-		
-		gtk_window_set_title(GTK_WINDOW(janela), "Passo 2 de 4");
-		gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER);
-		gtk_window_set_resizable(GTK_WINDOW(janela), FALSE);
-		gtk_widget_set_size_request(GTK_WIDGET(janela), 500, 150);
-		
-		entry_imagem = gtk_entry_new();
-		entry_versao = gtk_entry_new();
-		gtk_entry_set_text(GTK_ENTRY(entry_versao),".r1");
-		
-		
-		//frame_pasta_compac = gtk_frame_new("Pasta aonde os arquivos serão colocados:"); 
-		//gtk_container_add(GTK_CONTAINER(frame_pasta_compac), fileChooser_Compac);
-		frame_imagem = gtk_frame_new("Imagem a ser clonada:"); 
-		gtk_container_add(GTK_CONTAINER(frame_imagem), entry_imagem);
-		gtk_widget_set_halign(GTK_WIDGET(frame_imagem), GTK_ALIGN_START);
-		gtk_widget_set_valign(GTK_WIDGET(frame_imagem), GTK_ALIGN_START);
-		frame_versao = gtk_frame_new("Versão:"); 
-		gtk_container_add(GTK_CONTAINER(frame_versao), entry_versao);
-	//	gtk_widget_set_size_request(GTK_WIDGET(frame_versao), 100, 20);
-		gtk_widget_set_halign(GTK_WIDGET(frame_versao), GTK_ALIGN_START);
-		gtk_widget_set_valign(GTK_WIDGET(frame_versao), GTK_ALIGN_START);
-		
-		struct dados *data = malloc(sizeof(*data));
-		data->dado1 = janela;
-		data->dado4 = entry_imagem;
-		data->dado5 = entry_versao;
-		
-		clone = gtk_button_new_with_label("Clonar!");
-		gtk_widget_set_size_request(GTK_WIDGET(clone), 500, 50);
-		g_signal_connect(clone, "clicked", G_CALLBACK(clique_2a_tela), data);
-		gtk_widget_set_halign(GTK_WIDGET(clone), GTK_ALIGN_START);
-		gtk_widget_set_valign(GTK_WIDGET(clone), GTK_ALIGN_CENTER);		
-		
-		//g_signal_connect(help, "clicked", G_CALLBACK(help_screen), data);
-		
-		/* Inicio da versao outdated
-		tabela_de_componentes =  gtk_table_new(100,100,FALSE);
-		gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-		
-		//gtk_table_attach (GtkTable *table,GtkWidget *child,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding);
-		//gtk_table_attach(GTK_TABLE(tabela_de_componentes), frame_pasta_compac, 0,4,3,4, GTK_FILL,GTK_FILL, 5, 10);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), frame_imagem, 0,3,5,6, GTK_FILL,GTK_FILL, 5, 10);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), frame_versao, 3,4,5,6, 0,GTK_FILL, 0, 10);
-		gtk_table_attach(GTK_TABLE(tabela_de_componentes), clone, 0,4,7,8, 0,0, 50, 50);
-		//gtk_table_attach(GTK_TABLE(tabela_de_componentes), help, 5,6,1,2, GTK_SHRINK,GTK_SHRINK, 40, 10);
-		fim da versão outdated*/ 
-		
-		tabela_de_componentes =  gtk_grid_new();
-		gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-		gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-		gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-		gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-		gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-		
-		insert_padding(tabela_de_componentes, 0,0,10,20);
-		gtk_grid_attach(GTK_GRID(tabela_de_componentes),frame_imagem, 1,1,3,1);
-		gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), frame_versao, insert_padding(tabela_de_componentes, 4, 1, 70, 1), GTK_POS_RIGHT,1,1);
-		gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), clone, insert_padding(tabela_de_componentes, 1, 2, 1, 20), GTK_POS_BOTTOM,10,1);
-		
-		gtk_widget_hide(janela_ant);
-		gtk_widget_show(tabela_de_componentes);
-		gtk_widget_show(entry_imagem);
-		gtk_widget_show(entry_versao);
-		//gtk_widget_show(fileChooser_Compac);
-		gtk_widget_show(clone);
-		//gtk_widget_show(frame_pasta_compac);
-		gtk_widget_show(frame_imagem);
-		gtk_widget_show(frame_versao);
-		gtk_widget_show(janela);
-	}
-}
-
-// Main e função que exibe a primeira tela, informando o usuário que ele iniciou o programa
-int main(int argc, char *argv[]){  
-	
-	GtkWidget *janela, *texto_principal, *tabela_de_componentes, *quadro, *help, *iconH,  *continuar;
-	
-	gtk_init(&argc, &argv); //Inicia o GTK
-	
-	janela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-	gtk_window_set_title(GTK_WINDOW(janela), "Stage 4 - Clonador automático");
-	gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER);
-	gtk_window_set_resizable(GTK_WINDOW(janela), FALSE);
-	gtk_widget_set_size_request(GTK_WIDGET(janela), 500, 200);
-	//gtk_signal_connect(GTK_OBJECT(janela), "destroy", GTK_SIGNAL_FUNC(sair),(gpointer) &janela);
-	g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL);
-
-	
-	texto_principal = gtk_label_new("Bem vindo ao clonador automático do stage 4! \nPara continuar clique no botão abaixo\nou se tem dúvidas sobre essa aplicação\nclique no botão de ajuda ao lado!");
-	gtk_label_set_line_wrap(GTK_LABEL(texto_principal), TRUE);
-	
-	iconH =  gtk_image_new_from_file("pic.png");
-	
-	help = gtk_button_new();
-	gtk_button_set_image(GTK_BUTTON(help),iconH);
-	gtk_widget_set_halign(GTK_WIDGET(help), GTK_ALIGN_START);
-	gtk_widget_set_valign(GTK_WIDGET(help), GTK_ALIGN_CENTER);
-	
-	continuar = gtk_button_new_with_label("Continuar");
-	gtk_widget_set_size_request(GTK_WIDGET(continuar), 400, 50);
-	gtk_widget_set_halign(GTK_WIDGET(continuar), GTK_ALIGN_START);
-	gtk_widget_set_valign(GTK_WIDGET(continuar), GTK_ALIGN_CENTER);
-
-	quadro = gtk_frame_new("Welcome!");
-	gtk_container_add(GTK_CONTAINER(quadro), texto_principal);
-	gtk_widget_set_halign(GTK_WIDGET(quadro), GTK_ALIGN_START);
-	gtk_widget_set_valign(GTK_WIDGET(quadro), GTK_ALIGN_START);
-
-	//VERSAO ANTIGA COM TABLE
-	//tabela_de_componentes =  gtk_table_new(100,100,FALSE);
-	//gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-	
-	//gtk_table_attach(GTK_TABLE(tabela_de_componentes), help, 4,5,0,1, 0,0, 25, 5);
-	//gtk_table_attach(GTK_TABLE(tabela_de_componentes), continuar, 0,1,2,3, 0,0, 20,50);
-	//gtk_table_attach(GTK_TABLE(tabela_de_componentes), quadro, 0,1,0,1, GTK_FILL,GTK_FILL, 40, 20);
-	//FIM VERSAO ANTIGA
-	
-	tabela_de_componentes =  gtk_grid_new();
-	gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-	gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE);
-	//gtk_grid_set_column_spacing (GTK_GRID(tabela_de_componentes), 10);
-	//gtk_grid_set_row_spacing (GTK_GRID(tabela_de_componentes), 10);
-	gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes);
-	gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-	gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE);
-	
-	
-	//void gtk_grid_attach_next_to (GtkGrid *self,GtkWidget* child,GtkWidget* sibling,GtkPositionType side,gint width,gint height);
-	//void gtk_grid_attach (GtkGrid *grid, GtkWidget *child, gint left, gint top, gint width, gint height);
-	insert_padding(tabela_de_componentes, 0,0,10,20);
-	insert_padding(tabela_de_componentes, 1,0,10,20);
-	insert_padding(tabela_de_componentes, 0,1,10,20);
-	gtk_grid_attach(GTK_GRID(tabela_de_componentes), quadro, 1,1,1,1);
-	gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), help, insert_padding(tabela_de_componentes, 2, 1, 30, 1), GTK_POS_RIGHT,1,1);
-	//insert_padding(tabela_de_componentes, 1, 3, 30, 30);
-	gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), continuar, insert_padding(tabela_de_componentes, 1, 2, 1, 30), GTK_POS_BOTTOM,1,1);
-	//gtk_grid_attach(GTK_GRID(tabela_de_componentes), continuar, 0,10,1,1);
-	//insert_padding(tabela_de_componentes, 0, 6, 5, 5);
-	//insert_padding(tabela_de_componentes, 0, 5, 70, 70);
-	
-	
-	
-	
-	struct dados *data = malloc(sizeof(*data));
-	data->dado1 = janela;
-	
-	g_signal_connect(help, "clicked", G_CALLBACK(help_screen), data);
-	
-	g_signal_connect(continuar, "clicked", G_CALLBACK(clique_1a_tela), data);
-
-	
-
-	gtk_widget_show(texto_principal);
-	gtk_widget_show(help);
-	gtk_widget_show(continuar);
-	gtk_widget_show(quadro);
-	gtk_widget_show(tabela_de_componentes);
-	gtk_widget_show(janela);
-	
-	gtk_main();
-	return 0;  
-}