ソースを参照

Data update from JSON files. Partially implemented.

Iñigo Valentin 4 年 前
コミット
f6f8401591

+ 2 - 2
src/Makefile

@@ -2,10 +2,10 @@ CC=gcc
 CFLAGS=
 OPTS_DEBUG=-Wall -g -fsanitize=address
 OPTS=
-LIBS=-lsqlite3 -lm
+LIBS=-lsqlite3 -lm -ljson-c
 OUT=../RuneOptimizer
 compile :
-	@$(CC) RuneOptimizer/RuneOptimizer.c $(LIBS) $(OPTS) -o $(OUT)
+	$(CC) RuneOptimizer/RuneOptimizer.c $(LIBS) $(OPTS) -o $(OUT)
 	@echo Compiled executable $(OUT)
 #RuneOptimizer: RuneOptimizer.c
 #	$(CC) -o makeRO RuneOptimizer.c

+ 13 - 3
src/RuneOptimizer/RuneOptimizer.c

@@ -20,6 +20,8 @@
 #include <string.h>
 #include <sqlite3.h>
 #include <math.h>
+#include <unistd.h>
+#include <json-c/json.h>
 #include "RuneOptimizer.h"
 #include "error/error.h"
 #include "help/help.h"
@@ -66,8 +68,7 @@ int main(int argc, char *argv[]){
 
     // Update command, TODO
     if (strcmp(argv[1], "update") == 0){
-        fprintf(stderr, "Updating is still unimplemented\n");
-        return UNIMPLEMENTED;
+        return update(argc - 2, argv + 2);
     }
 
     // Optimize command, call the function with all the arguments to be
@@ -83,7 +84,7 @@ int main(int argc, char *argv[]){
         return SUCCESS;
     }
 
-    // Help command. Call and return
+    // Help command.
     else if (strcmp(argv[1], "team") == 0){
         if (argc < 3){
             fprintf(stderr, "Command team needs an action\n");
@@ -93,12 +94,21 @@ int main(int argc, char *argv[]){
             int result = list_teams(argc, argv);
             return result;
         }
+        else if (strcmp(argv[2], "create") == 0){
+            int result = create_team(argc, argv);
+            return result;
+        }
         else{
             fprintf(stderr, "Invalid action for team command: %s\n", argv[1]);
             return ERROR_INPUT_TEAM_INVALID_ACTION;
         }
     }
 
+    // Update command
+    else if (strcmp(argv[1], "update") == 0){
+        update(argc - 2, argv + 2);
+    }
+
     // Any other command is an error
     else{
         fprintf(stderr, "Invalid command specified: %s\n", argv[1]);

+ 21 - 0
src/RuneOptimizer/error/error.h

@@ -39,9 +39,30 @@
 #define ERROR_INPUT_INCOMPLETE_SETS 119
 #define ERROR_INPUT_TEAM_NO_ACTION 120
 #define ERROR_INPUT_TEAM_INVALID_ACTION 121
+#define ERROR_INPUT_TEAM_CREATE_ARGUMENT_COUNT 122
+#define ERROR_INPUT_TEAM_CREATE_PRIORITY 123
+#define ERROR_INPUT_UPDATE_NO_ARGUMENTS 124
+#define ERROR_INPUT_UPDATE_UNKNOWN_SOURCE 125
 #define ERROR_DB_CANT_OPEN 200
 #define ERROR_DB_UNIT 201
 #define ERROR_DB_UNIT_NOF_FOUND 202
 #define ERROR_DB_RUNES_SLOT 203
 #define ERROR_DB_RUNES_RESULT 204
 #define ERROR_DB_STATS_RESULT 205
+#define ERROR_DB_TEAM_ID 206
+#define ERROR_DB_NEW_TEAM_ID 207
+#define ERROR_DB_DROP_RUNE_STATS 208
+#define ERROR_DB_DROP_RUNES 209
+#define ERROR_DB_DROP_UNITS 210
+#define ERROR_DB_DROP_TEAMS 211
+#define ERROR_DB_DROP_UNITS_TEAMS 211
+#define ERROR_DB_CREATE_RUNE_STATS 212
+#define ERROR_DB_CREATE_RUNES 213
+#define ERROR_DB_CREATE_UNITS 214
+#define ERROR_DB_CREATE_TEAMS 215
+#define ERROR_DB_CREATE_UNITS_TEAMS 216
+#define ERROR_DB_INSERT_RUNE_STATS 217
+#define ERROR_DB_INSERT_RUNES 218
+#define ERROR_DB_INSERT_UNITS 219
+#define ERROR_DB_INSERT_TEAMS 220
+#define ERROR_DB_INSERT_UNITS_TEAMS 221

+ 15 - 6
src/RuneOptimizer/help/help.c

@@ -25,20 +25,29 @@ void show_help(){
     printf("\n\n  Command: helps\n");
     printf("\n    Display this help text and exists. It has no options.\n");
     printf("\n\n  Command: update\n");
-    printf("\n    Updates the information and builds a database. Currently unimplemented.\n");
+    printf("\n    Updates the information and builds a database. Usage.\n");
+    printf("    RuneOptimizer update [source]\n");
+    printf("\n      [source] can be either: \n");
+    printf("        A JSON file exported from the game: \n");
+    printf("        A SQLite file from a SWDB instance (unimplemented)\n");
+    printf("        A SWDB profile URL (unimplemented)\n");
+    printf("        A Swarfarm profile URL (unimplemented)\n");
     printf("\n\n  Command: team\n");
     printf("\n    Manages teams.\n");
     printf("\n    Usage\n");
     printf("    RuneOptimizer team [action] [options]\n");
     printf("\n      Actions: \n\n");
-    printf("        list [team] [options]        List list of all or the selected team.\n");
-    printf("\n        [team] is optional and can can be a team ID or a team name (case sensitive)\n");
-    printf("\n        Options: \n\n");
-    printf("          -u | --units        Include the units in the details.\n");
+    printf("        list [team] <options>        List list of all or the selected team.\n");
+    printf("          [team] is optional and can can be a team ID or a team name (case sensitive).\n");
+    printf("          Options: \n");
+    printf("            -u | --units        Include the units in the details.\n");
+    printf("\n        create [name] [priority]   Creates a new team.\n");
+    printf("          [name] The new team name, mandatory.\n");
+    printf("          [priority] Team priority (0-50). Optional, defaults to 0.\n");
     printf("\n\n  Command: optimize\n");
     printf("\n    Calculates an optimization for a unit.\n");
     printf("\n    Usage\n");
-    printf("    RuneOptimizer optimize [unit] [options]\n");
+    printf("    RuneOptimizer optimize [unit] <options>\n");
     printf("\n      [unit] can be a unit ID or a unit name (case sensitive)\n");
     printf("\n      Options: \n\n");
     printf("        -h | --min_hp <NUM>          Minumum HP to consider in the optimization.\n");

+ 1 - 1
src/RuneOptimizer/optimize/optimize.c

@@ -1388,7 +1388,7 @@ int gui_output(Result results[5000], int result_count){
  *
  * @param[in] argc Argument count.
  * @param[in] argv Argument list.
- * @return 0 on success, other on error.
+ * @return SUCCESS or an error code.
  */
 int optimize(int argc, char *argv[]){
 

+ 1 - 1
src/RuneOptimizer/optimize/optimize.h

@@ -290,7 +290,7 @@ int gui_output(Result results[5000], int result_count);
  *
  * @param[in] argc Argument count.
  * @param[in] argv Argument list.
- * @return 0 on success, other on error.
+ * @return SUCCESS or an error code.
  */
 int optimize(int argc, char *argv[]);
 

+ 97 - 1
src/RuneOptimizer/team/team.c

@@ -20,7 +20,7 @@
  *
  * @param argc[in] Argument count.
  * @param argv[in] Argument list.
- * @return 0 on success, other on error.
+ * @return SUCCESS or an error code.
  */
 int list_teams(int argc, char *argv[]){
     char id[8] = "\0";
@@ -68,3 +68,99 @@ int list_teams(int argc, char *argv[]){
     sqlite3_close(db);
     return SUCCESS;
 }
+
+
+/**
+ * Creates a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int create_team(int argc, char *argv[]){
+    if (argc < 4 || argc > 5){
+        fprintf(
+          stderr,
+          "Team creation takes 1 or 2 arguments, %d supplied\n", argc - 3
+        );
+        return ERROR_INPUT_TEAM_CREATE_ARGUMENT_COUNT;
+    }
+    int priority = 0;
+
+    // If priority has been supplied as argument, validate it
+    if (argc == 5){
+        priority = atoi(argv[4]);
+        if(
+          strspn(argv[4], "0123456789") != strlen(argv[4]) ||
+          priority < 0 ||
+          priority > 50
+        ){
+            fprintf(stderr, "Priority must be an integer between 0 and 50\n");
+            return ERROR_INPUT_TEAM_CREATE_PRIORITY;
+        }
+    }
+
+    // Read name
+    char name[128];
+    strcpy(name, argv[3]);
+
+    int new_id = -1;
+
+    // Connect to the db.
+    sqlite3 *db;
+    if (SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+
+    // Get the new id for the team
+    char sql[512];
+    strcpy(sql, "SELECT max(CAST(id AS INTEGER)) + 1 AS id FROM teams;");
+    sqlite3_stmt *res;
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to execute statement to select new team ID: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_TEAM_ID;
+    }
+    if (SQLITE_ROW != sqlite3_step(res)){
+        fprintf(stderr, "Unable to read teams: %s\n", sqlite3_errmsg(db));
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_NEW_TEAM_ID;
+    }
+    new_id = sqlite3_column_int(res, 0);
+
+    // Insert the row.
+    strcpy(sql, "INSERT INTO teams (id, name, priority) VALUES (?, ?, ?)");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to execute statement to create team: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_TEAM_ID;
+    }
+    sqlite3_bind_int(res, 1, new_id);
+    sqlite3_bind_text(res, 2, name, strlen(name), NULL);
+    sqlite3_bind_int(res, 3, priority);
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(stderr, "Unable to create team: %s\n", sqlite3_errmsg(db));
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_NEW_TEAM_ID;
+    }
+
+    // Inform about the newly created team
+    printf("Team ID %d '%s' created with priority %d\n", new_id, name, priority);
+    sqlite3_finalize(res);
+    sqlite3_close(db);
+    return SUCCESS;
+}

+ 10 - 1
src/RuneOptimizer/team/team.h

@@ -20,6 +20,15 @@
  *
  * @param argc[in] Argument count.
  * @param argv[in] Argument list.
- * @return 0 on success, other on error.
+ * @return SUCCESS or an error code.
  */
 int list_teams(int argc, char *argv[]);
+
+/**
+ * Creates a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int create_team(int argc, char *argv[]);

+ 7060 - 0
src/RuneOptimizer/update/update.c

@@ -14,3 +14,7063 @@
  * You should have received a copy of the GNU General Public License along with
  * RuneOptimizer. If not, see <https://www.gnu.org/licenses/>.
  */
+
+/**
+ * Parses the command parameters and calls one of the update functions.
+ *
+ * @param[in] argc Argument count.
+ * @param[in] argv Argument list.
+ * @return SUCCESS or an error code.
+ */
+int update(int argc, char *argv[]){
+
+    // One argument mandatory
+    if (argc == 0){
+        fprintf(
+          stderr,
+          "Team creation takes 1 or 2 arguments, %d supplied\n", argc - 3
+        );
+        return ERROR_INPUT_UPDATE_NO_ARGUMENTS;
+    }
+
+
+
+    // First, test json
+    if (strlen(argv[0]) > 5){
+        char extension[6];
+        strncpy(extension, argv[0] + strlen(argv[0]) - 5, 5);
+        if (strcmp(extension, ".json") == 0){
+            return update_json(argv[0]);
+        }
+    }
+    // TODO: More ifs...
+    fprintf(stderr, "Unknwon source supplied: %d\n", argv[0]);
+    return ERROR_INPUT_UPDATE_UNKNOWN_SOURCE;
+}
+
+/**
+ * Updates the database from a json file.
+ *
+ * @param[in] file Path to the file.
+ * @return SUCCESS or an error code..
+ */
+int update_json(char file[]){
+    printf("Updating from json file: %s\n", file);
+
+    // TODO: All file opening can be skkiped with
+    json_object *root = json_object_from_file(file);
+    if (!root){
+        fprintf(stderr, "Cant access file: %s\n", file);
+        return ERROR_INPUT_UPDATE_UNKNOWN_SOURCE;
+    }
+
+    json_object *wizard_id = json_object_object_get(root, "wizard_id");
+    printf("\tPlayer ID: %s\n", json_object_get_string(wizard_id));
+
+    json_object *wizard_info = json_object_object_get(root, "wizard_info");
+    json_object *wizard_name = json_object_object_get(wizard_info, "wizard_name");
+    printf("\tPlayer name: %s\n", json_object_get_string(wizard_name));
+
+    // Recreate the database tables
+    int status = recreate_tables();
+    if (SUCCESS != status){
+        return status;
+    }
+
+    // Open the database connection
+    sqlite3 *db;
+    if (SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+
+    // Parse runes
+    unsigned int total_runes = 0;
+    unsigned int total_stats = 0;
+    json_object *runes = json_object_object_get(root, "runes");
+    int rune_count = json_object_array_length(runes);
+    json_object *idx;
+    // TODO: DEBug impossible condition
+    for (int i = 0; i < rune_count; i++){
+        total_runes ++;
+        struct DB_Rune rune;
+        strcpy(rune.unit, ""); // Here all runes are unassigned.
+        idx = json_object_array_get_idx(runes, i);
+        json_object *rune_id = json_object_object_get(idx, "rune_id");
+        strcpy(rune.id, json_object_get_string(rune_id));
+        json_object *slot_no = json_object_object_get(idx, "slot_no");
+        rune.slot = json_object_get_int(slot_no);
+        // rank -> Quality
+        json_object *rank = json_object_object_get(idx, "rank");
+        rune.quality = json_object_get_int(rank);
+        // class -> Stars
+        json_object *class = json_object_object_get(idx, "class");
+        rune.stars = json_object_get_int(class);
+        json_object *set_id = json_object_object_get(idx, "set_id");
+        rune.set = json_object_get_int(set_id);
+        // upgrade_curre -> Power up level
+        json_object *upgrade_curr = json_object_object_get(idx, "upgrade_curr");
+        rune.level = json_object_get_int(upgrade_curr);
+        json_object *base_value = json_object_object_get(idx, "base_value");
+        rune.buy_value = json_object_get_int(base_value);
+        json_object *sell_value = json_object_object_get(idx, "sell_value");
+        rune.sell_value = json_object_get_int(sell_value);
+        //printf("\tRune %d: Slot %d:\n", json_object_get_int(rune_id), json_object_get_int(slot_no));
+        // Main stat
+        json_object *pri_eff = json_object_object_get(idx, "pri_eff");
+        json_object *pri_stat = json_object_array_get_idx(pri_eff, 0);
+        rune.main.stat = json_object_get_int(pri_stat);
+        json_object *pri_value = json_object_array_get_idx(pri_eff, 1);
+        rune.main.value = json_object_get_int(pri_value);
+        //printf("\t\tMain %d: %d\n", json_object_get_int(pri_stat), json_object_get_int(pri_value));
+
+        json_object *prefix_eff = json_object_object_get(idx, "prefix_eff");
+        // No need to check, if no innate, its 0
+        /*if (json_object_get_type(prefix_eff) == json_type_null){
+            printf("\t\tNo innate\n");
+        }
+        else{
+            json_object *prefix_stat = json_object_array_get_idx(prefix_eff, 0);
+            json_object *prefix_value = json_object_array_get_idx(prefix_eff, 0);
+            printf("\t\tInnate %d: %d\n", json_object_get_int(prefix_stat), json_object_get_int(prefix_value));
+        }*/
+        json_object *prefix_stat = json_object_array_get_idx(prefix_eff, 0);
+        rune.innate.stat = json_object_get_int(prefix_stat);
+        json_object *prefix_value = json_object_array_get_idx(prefix_eff, 1);
+        rune.innate.value = json_object_get_int(prefix_value);
+        //printf("\t\tInnate %d: %d\n", json_object_get_int(prefix_stat), json_object_get_int(prefix_value));
+
+        json_object *sec_eff = json_object_object_get(idx, "sec_eff");
+        int stat_count = json_object_array_length(sec_eff);
+        json_object *stat_idx;
+        rune.stat_count = 0;
+        for (int i = 0; i < stat_count && i < 4; i++){
+            rune.stat_count ++;
+            stat_idx = json_object_array_get_idx(sec_eff, i);
+            json_object *stat = json_object_array_get_idx(stat_idx, 0);
+            rune.stats[i].stat = json_object_get_int(stat);
+            json_object *value = json_object_array_get_idx(stat_idx, 1);
+            rune.stats[i].value = json_object_get_int(value);
+            json_object *grind = json_object_array_get_idx(stat_idx, 2);
+            rune.stats[i].grind = json_object_get_int(grind);
+            json_object *enchant = json_object_array_get_idx(stat_idx, 3);
+            rune.stats[i].grind = json_object_get_int(grind);
+            //printf("\t\t\tStat %d: %d: (+%d, %d)\n", json_object_get_int(stat), json_object_get_int(value), json_object_get_int(grind), json_object_get_int(enchant));
+        }
+
+        // All the rune info has been loaded. Now, calculate the rest of stats
+        //printf("\n\n\nATK FLAT PRE : %d\n", rune.atk_flat);
+        calculate_rune_totals(&rune);
+        //printf("ATK FLAT POST: %d\n", rune.atk_flat);
+
+        // Insert the rune into the database
+        sqlite3_stmt *res;
+        char sql[2000];
+        strcpy(
+          sql,
+          "INSERT INTO runes ("
+          "  id,"
+          "  unit,"
+          "  type,"
+          "  slot,"
+          "  stars,"
+          "  level,"
+          "  quality,"
+          "  efficiency,"
+          "  max_efficiency,"
+          "  main_stat,"
+          "  current_hp_percent,"
+          "  current_atk_percent,"
+          "  current_def_percent,"
+          "  current_hp_flat,"
+          "  current_atk_flat,"
+          "  current_def_flat,"
+          "  current_spd,"
+          "  current_crr,"
+          "  current_crd,"
+          "  current_acc,"
+          "  current_res,"
+          "  lv12_hp_percent,"
+          "  lv12_atk_percent,"
+          "  lv12_def_percent,"
+          "  lv12_hp_flat,"
+          "  lv12_atk_flat,"
+          "  lv12_def_flat,"
+          "  lv12_spd,"
+          "  lv12_crr,"
+          "  lv12_crd,"
+          "  lv12_acc,"
+          "  lv12_res,"
+          "  lv15_hp_percent,"
+          "  lv15_atk_percent,"
+          "  lv15_def_percent,"
+          "  lv15_hp_flat,"
+          "  lv15_atk_flat,"
+          "  lv15_def_flat,"
+          "  lv15_spd,"
+          "  lv15_crr,"
+          "  lv15_crd,"
+          "  lv15_acc,"
+          "  lv15_res"
+          ") VALUES ("
+          "  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,"
+          "  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"
+          ")"
+        );
+        if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+            fprintf(
+            stderr,
+            "Failed to prepare statement to insert into runes: %s\n",
+            sqlite3_errmsg(db)
+            );
+            sqlite3_finalize(res);
+            sqlite3_close(db);
+            return ERROR_DB_INSERT_RUNES;
+        }
+        sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+        sqlite3_bind_text(res, 2, "", 0, NULL);
+        sqlite3_bind_int(res, 3, rune.set);
+        sqlite3_bind_int(res, 4, rune.slot);
+        sqlite3_bind_int(res, 5, rune.stars);
+        sqlite3_bind_int(res, 6, rune.level);
+        sqlite3_bind_int(res, 7, rune.quality);
+        sqlite3_bind_double(res, 8, rune.efficiency);
+        sqlite3_bind_double(res, 9, rune.max_efficiency);
+        sqlite3_bind_int(res, 10, rune.main.stat);
+        sqlite3_bind_int(res, 11, rune.current_hp_percent);
+        sqlite3_bind_int(res, 12, rune.current_atk_percent);
+        sqlite3_bind_int(res, 13, rune.current_def_percent);
+        sqlite3_bind_int(res, 14, rune.current_hp_flat);
+        sqlite3_bind_int(res, 15, rune.current_atk_flat);
+        sqlite3_bind_int(res, 16, rune.current_def_flat);
+        sqlite3_bind_int(res, 17, rune.current_spd);
+        sqlite3_bind_int(res, 18, rune.current_crr);
+        sqlite3_bind_int(res, 19, rune.current_crd);
+        sqlite3_bind_int(res, 20, rune.current_acc);
+        sqlite3_bind_int(res, 21, rune.current_res);
+        sqlite3_bind_int(res, 22, rune.lv12_hp_percent);
+        sqlite3_bind_int(res, 23, rune.lv12_atk_percent);
+        sqlite3_bind_int(res, 24, rune.lv12_def_percent);
+        sqlite3_bind_int(res, 25, rune.lv12_hp_flat);
+        sqlite3_bind_int(res, 26, rune.lv12_atk_flat);
+        sqlite3_bind_int(res, 27, rune.lv12_def_flat);
+        sqlite3_bind_int(res, 29, rune.lv12_spd);
+        sqlite3_bind_int(res, 30, rune.lv12_crr);
+        sqlite3_bind_int(res, 31, rune.lv12_crd);
+        sqlite3_bind_int(res, 32, rune.lv12_acc);
+        sqlite3_bind_int(res, 33, rune.lv12_res);
+        sqlite3_bind_int(res, 34, rune.lv15_hp_percent);
+        sqlite3_bind_int(res, 35, rune.lv15_atk_percent);
+        sqlite3_bind_int(res, 36, rune.lv15_def_percent);
+        sqlite3_bind_int(res, 37, rune.lv15_hp_flat);
+        sqlite3_bind_int(res, 38, rune.lv15_atk_flat);
+        sqlite3_bind_int(res, 39, rune.lv15_def_flat);
+        sqlite3_bind_int(res, 40, rune.lv15_spd);
+        sqlite3_bind_int(res, 41, rune.lv15_crr);
+        sqlite3_bind_int(res, 42, rune.lv15_crd);
+        sqlite3_bind_int(res, 43, rune.lv15_acc);
+        sqlite3_bind_int(res, 44, rune.lv15_res);
+        if (SQLITE_DONE != sqlite3_step(res)){
+            fprintf(
+            stderr,
+            "Failed to execute statement to insert into runes: %s\n",
+            sqlite3_errmsg(db)
+            );
+            sqlite3_finalize(res);
+            sqlite3_close(db);
+            return ERROR_DB_INSERT_RUNES;
+        }
+
+        // Insert main stat
+        total_stats ++;
+        strcpy(
+          sql,
+          "INSERT INTO rune_stats(rune, slot, stat, value, grind, enchant) "
+          "VALUES (?, ?, ?, ?, ?, ?)"
+        );
+        if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+            fprintf(
+            stderr,
+            "Failed to prepare statement to insert into rune_stats: %s\n",
+            sqlite3_errmsg(db)
+            );
+            sqlite3_finalize(res);
+            sqlite3_close(db);
+            return ERROR_DB_INSERT_RUNE_STATS;
+        }
+        sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+        sqlite3_bind_int(res, 2, -1); // Main stat is slot -1
+        sqlite3_bind_int(res, 3, rune.main.stat);
+        sqlite3_bind_int(res, 4, rune.main.value);
+        sqlite3_bind_int(res, 5, 0); // Mains are never grinded.
+        sqlite3_bind_int(res, 6, 0); // Mains are never enchanted.
+        if (SQLITE_DONE != sqlite3_step(res)){
+            fprintf(
+            stderr,
+            "Failed to execute statement to insert into rune_stats: %s\n",
+            sqlite3_errmsg(db)
+            );
+            sqlite3_finalize(res);
+            sqlite3_close(db);
+            return ERROR_DB_INSERT_RUNE_STATS;
+        }
+
+        // Insert innate stat
+        total_stats ++;
+        if (rune.innate.stat != 0){
+            strcpy(
+              sql,
+                "INSERT INTO rune_stats "
+                "(rune, slot, stat, value, grind, enchant) "
+                "VALUES (?, ?, ?, ?, ?, ?)"
+            );
+            if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+                fprintf(
+                  stderr,
+                  "Failed to prepare statement to insert into rune_stats: %s\n",
+                  sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNE_STATS;
+            }
+            sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+            sqlite3_bind_int(res, 2, 0); // Innate stat is slot 0
+            sqlite3_bind_int(res, 3, rune.innate.stat);
+            sqlite3_bind_int(res, 4, rune.innate.value);
+            sqlite3_bind_int(res, 5, 0); // Innates are never grinded.
+            sqlite3_bind_int(res, 6, 0); // Innates are never enchanted.
+            if (SQLITE_DONE != sqlite3_step(res)){
+                fprintf(
+                  stderr,
+                  "Failed to execute statement to insert into rune_stats: %s\n",
+                  sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNE_STATS;
+            }
+        }
+
+        for (int s = 0; s < rune.stat_count; s ++){
+            total_stats ++;
+            strcpy(
+              sql,
+                "INSERT INTO rune_stats "
+                "(rune, slot, stat, value, grind, enchant) "
+                "VALUES (?, ?, ?, ?, ?, ?)"
+            );
+            if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+                fprintf(
+                  stderr,
+                  "Failed to prepare statement to insert into rune_stats: %s\n",
+                  sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNE_STATS;
+            }
+            sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+            sqlite3_bind_int(res, 2, s + 1); // Normal stats are slots 1-4
+            sqlite3_bind_int(res, 3, rune.stats[s].stat);
+            sqlite3_bind_int(res, 4, rune.stats[s].value);
+            sqlite3_bind_int(res, 5, rune.stats[s].grind);
+            sqlite3_bind_int(res, 6, rune.stats[s].enchant);
+            if (SQLITE_DONE != sqlite3_step(res)){
+                fprintf(
+                  stderr,
+                  "Failed to execute statement to insert into rune_stats: %s\n",
+                  sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNE_STATS;
+            }
+        }
+        sqlite3_finalize(res);
+    }
+
+    // Parse units
+    unsigned int total_units = 0;
+    json_object *unit_list = json_object_object_get(root, "unit_list");
+    int unit_count = json_object_array_length(unit_list);
+    // TODO: Debug remove limir
+    for (int i = 0; i < unit_count; i++){
+        total_units ++;
+        struct DB_Unit unit;
+        idx = json_object_array_get_idx(unit_list, i);
+        json_object *unit_id = json_object_object_get(idx, "unit_id");
+        strcpy(unit.id, json_object_get_string(unit_id));
+        json_object *unit_master_id = json_object_object_get(idx, "unit_master_id");
+        unit.monster= json_object_get_int(unit_master_id);
+        get_monster_name(unit.monster, unit.name);
+        json_object *unit_level = json_object_object_get(idx, "unit_level");
+        unit.level = json_object_get_int(unit_level);
+        // class -> Stars
+        json_object *class = json_object_object_get(idx, "class");
+        unit.stars = json_object_get_int(class);
+        // con * 15 -> HP
+        json_object *con = json_object_object_get(idx, "con");
+        unit.base_hp = json_object_get_int(con) * 15;
+        json_object *atk = json_object_object_get(idx, "atk");
+        unit.base_atk = json_object_get_int(atk);
+        json_object *def = json_object_object_get(idx, "def");
+        unit.base_def = json_object_get_int(def);
+        json_object *spd = json_object_object_get(idx, "spd");
+        unit.base_spd = json_object_get_int(spd);
+        json_object *resist = json_object_object_get(idx, "resist");
+        unit.base_res = json_object_get_int(resist);
+        json_object *accuracy = json_object_object_get(idx, "accuracy");
+        unit.base_acc = json_object_get_int(accuracy);
+        json_object *critical_rate = json_object_object_get(idx, "critical_rate");
+        unit.base_crr = json_object_get_int(critical_rate);
+        json_object *critical_damage = json_object_object_get(idx, "critical_damage");
+        unit.base_crd = json_object_get_int(critical_damage);
+        json_object *homunculus_name = json_object_object_get(idx, "homunculus_name");
+        if (strlen(json_object_get_string(homunculus_name)) > 0){
+            strcpy(unit.name, json_object_get_string(homunculus_name));
+        }
+        //printf("UNIT %s: %s\n", unit.id, unit.name);
+
+        // TODO: Insert unit
+        sqlite3_stmt *res;
+        char sql[2000];
+        strcpy(
+        sql,
+        "INSERT INTO units ("
+        "  id,"
+        "  monster,"
+        "  name,"
+        "  stars,"
+        "  level,"
+        "  base_hp,"
+        "  base_akt,"
+        "  base_def,"
+        "  base_spd,"
+        "  base_crr,"
+        "  base_crd,"
+        "  base_res,"
+        "  base_acc,"
+        "  current_hp,"
+        "  current_akt,"
+        "  current_def,"
+        "  current_spd,"
+        "  current_crr,"
+        "  current_crd,"
+        "  current_res,"
+        "  current_acc"
+        ") VALUES ("
+        "  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"
+        ")"
+        );
+        if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+            fprintf(
+            stderr,
+            "Failed to prepare statement to insert into runes: %s\n",
+            sqlite3_errmsg(db)
+            );
+            sqlite3_finalize(res);
+            sqlite3_close(db);
+            return ERROR_DB_INSERT_RUNES;
+        }
+        sqlite3_bind_text(res, 1, unit.id, strlen(unit.id), NULL);
+        sqlite3_bind_int(res, 2, unit.monster);
+        sqlite3_bind_text(res, 3, unit.name, strlen(unit.name), NULL);
+        sqlite3_bind_int(res, 4, unit.stars);
+        sqlite3_bind_int(res, 5, unit.level);
+        sqlite3_bind_int(res, 6, unit.base_hp);
+        sqlite3_bind_int(res, 7, unit.base_atk);
+        sqlite3_bind_int(res, 8, unit.base_def);
+        sqlite3_bind_int(res, 9, unit.base_spd);
+        sqlite3_bind_int(res, 10, unit.base_crr);
+        sqlite3_bind_int(res, 11, unit.base_crd);
+        sqlite3_bind_int(res, 12, unit.base_res);
+        sqlite3_bind_int(res, 13, unit.base_acc);
+        // Current stats, instert as base, will be calculated later.
+        sqlite3_bind_int(res, 14, unit.base_atk);
+        sqlite3_bind_int(res, 15, unit.base_atk);
+        sqlite3_bind_int(res, 16, unit.base_def);
+        sqlite3_bind_int(res, 17, unit.base_spd);
+        sqlite3_bind_int(res, 18, unit.base_crr);
+        sqlite3_bind_int(res, 19, unit.base_crd);
+        sqlite3_bind_int(res, 20, unit.base_res);
+        sqlite3_bind_int(res, 21, unit.base_acc);
+        if (SQLITE_DONE != sqlite3_step(res)){
+            fprintf(
+            stderr,
+            "Failed to execute statement to insert into units: %s\n",
+            sqlite3_errmsg(db)
+            );
+            sqlite3_finalize(res);
+            sqlite3_close(db);
+            return ERROR_DB_INSERT_RUNES;
+        }
+        sqlite3_finalize(res);
+
+        // Parse unit runes
+        json_object *unit_runes = json_object_object_get(idx, "runes");
+        rune_count = json_object_array_length(unit_runes);
+
+        for (int i = 0; i < rune_count; i++){
+            total_runes ++;
+            struct DB_Rune rune;
+            strcpy(rune.unit, unit.id);
+            idx = json_object_array_get_idx(unit_runes, i);
+            json_object *rune_id = json_object_object_get(idx, "rune_id");
+            strcpy(rune.id, json_object_get_string(rune_id));
+            json_object *slot_no = json_object_object_get(idx, "slot_no");
+            rune.slot = json_object_get_int(slot_no);
+            // rank -> Quality
+            json_object *rank = json_object_object_get(idx, "rank");
+            rune.quality = json_object_get_int(rank);
+            // class -> Stars
+            json_object *class = json_object_object_get(idx, "class");
+            rune.stars = json_object_get_int(class);
+            json_object *set_id = json_object_object_get(idx, "set_id");
+            rune.set = json_object_get_int(set_id);
+            // upgrade_curre -> Power up level
+            json_object *upgrade_curr = json_object_object_get(idx, "upgrade_curr");
+            rune.level = json_object_get_int(upgrade_curr);
+            json_object *base_value = json_object_object_get(idx, "base_value");
+            rune.buy_value = json_object_get_int(base_value);
+            json_object *sell_value = json_object_object_get(idx, "sell_value");
+            rune.sell_value = json_object_get_int(sell_value);
+            //printf("\tRune %d: Slot %d:\n", json_object_get_int(rune_id), json_object_get_int(slot_no));
+
+            // Main stat
+            json_object *pri_eff = json_object_object_get(idx, "pri_eff");
+            json_object *pri_stat = json_object_array_get_idx(pri_eff, 0);
+            rune.main.stat = json_object_get_int(pri_stat);
+            json_object *pri_value = json_object_array_get_idx(pri_eff, 1);
+            rune.main.value = json_object_get_int(pri_value);
+            //printf("\t\tMain %d: %d\n", json_object_get_int(pri_stat), json_object_get_int(pri_value));
+
+            json_object *prefix_eff = json_object_object_get(idx, "prefix_eff");
+            // No need to check, if no innate, its 0
+            /*if (json_object_get_type(prefix_eff) == json_type_null){
+                printf("\t\tNo innate\n");
+            }
+            else{
+                json_object *prefix_stat = json_object_array_get_idx(prefix_eff, 0);
+                json_object *prefix_value = json_object_array_get_idx(prefix_eff, 0);
+                printf("\t\tInnate %d: %d\n", json_object_get_int(prefix_stat), json_object_get_int(prefix_value));
+            }*/
+            json_object *prefix_stat = json_object_array_get_idx(prefix_eff, 0);
+            rune.innate.stat = json_object_get_int(prefix_stat);
+            json_object *prefix_value = json_object_array_get_idx(prefix_eff, 1);
+            rune.innate.value = json_object_get_int(prefix_value);
+            //printf("\t\tInnate %d: %d\n", json_object_get_int(prefix_stat), json_object_get_int(prefix_value));
+
+            json_object *sec_eff = json_object_object_get(idx, "sec_eff");
+            int stat_count = json_object_array_length(sec_eff);
+            json_object *stat_idx;
+            rune.stat_count = 0;
+            for (int i = 0; i < stat_count && i < 4; i++){
+                rune.stat_count ++;
+                stat_idx = json_object_array_get_idx(sec_eff, i);
+                json_object *stat = json_object_array_get_idx(stat_idx, 0);
+                rune.stats[i].stat = json_object_get_int(stat);
+                json_object *value = json_object_array_get_idx(stat_idx, 1);
+                rune.stats[i].value = json_object_get_int(value);
+                json_object *grind = json_object_array_get_idx(stat_idx, 2);
+                rune.stats[i].grind = json_object_get_int(grind);
+                json_object *enchant = json_object_array_get_idx(stat_idx, 3);
+                rune.stats[i].grind = json_object_get_int(grind);
+                //printf("\t\t\tStat %d: %d: (+%d, %d)\n", json_object_get_int(stat), json_object_get_int(value), json_object_get_int(grind), json_object_get_int(enchant));
+            }
+
+            // All the rune info has been loaded. Now, calculate the rest of stats
+            //printf("\n\n\nATK FLAT PRE : %d\n", rune.atk_flat);
+            calculate_rune_totals(&rune);
+            //printf("ATK FLAT POST: %d\n", rune.atk_flat);
+
+            // Insert the rune into the database
+            sqlite3_stmt *res;
+            char sql[2000];
+            strcpy(
+            sql,
+            "INSERT INTO runes ("
+            "  id,"
+            "  unit,"
+            "  type,"
+            "  slot,"
+            "  stars,"
+            "  level,"
+            "  quality,"
+            "  efficiency,"
+            "  max_efficiency,"
+            "  main_stat,"
+            "  current_hp_percent,"
+            "  current_atk_percent,"
+            "  current_def_percent,"
+            "  current_hp_flat,"
+            "  current_atk_flat,"
+            "  current_def_flat,"
+            "  current_spd,"
+            "  current_crr,"
+            "  current_crd,"
+            "  current_acc,"
+            "  current_res,"
+            "  lv12_hp_percent,"
+            "  lv12_atk_percent,"
+            "  lv12_def_percent,"
+            "  lv12_hp_flat,"
+            "  lv12_atk_flat,"
+            "  lv12_def_flat,"
+            "  lv12_spd,"
+            "  lv12_crr,"
+            "  lv12_crd,"
+            "  lv12_acc,"
+            "  lv12_res,"
+            "  lv15_hp_percent,"
+            "  lv15_atk_percent,"
+            "  lv15_def_percent,"
+            "  lv15_hp_flat,"
+            "  lv15_atk_flat,"
+            "  lv15_def_flat,"
+            "  lv15_spd,"
+            "  lv15_crr,"
+            "  lv15_crd,"
+            "  lv15_acc,"
+            "  lv15_res"
+            ") VALUES ("
+            "  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,"
+            "  ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?"
+            ")"
+            );
+            if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+                fprintf(
+                stderr,
+                "Failed to prepare statement to insert into runes: %s\n",
+                sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNES;
+            }
+            sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+            sqlite3_bind_text(res, 2, unit.id, strlen(unit.id), NULL);
+            sqlite3_bind_int(res, 3, rune.set);
+            sqlite3_bind_int(res, 4, rune.slot);
+            sqlite3_bind_int(res, 5, rune.stars);
+            sqlite3_bind_int(res, 6, rune.level);
+            sqlite3_bind_int(res, 7, rune.quality);
+            sqlite3_bind_double(res, 8, rune.efficiency);
+            sqlite3_bind_double(res, 9, rune.max_efficiency);
+            sqlite3_bind_int(res, 10, rune.main.stat);
+            sqlite3_bind_int(res, 11, rune.current_hp_percent);
+            sqlite3_bind_int(res, 12, rune.current_atk_percent);
+            sqlite3_bind_int(res, 13, rune.current_def_percent);
+            sqlite3_bind_int(res, 14, rune.current_hp_flat);
+            sqlite3_bind_int(res, 15, rune.current_atk_flat);
+            sqlite3_bind_int(res, 16, rune.current_def_flat);
+            sqlite3_bind_int(res, 17, rune.current_spd);
+            sqlite3_bind_int(res, 18, rune.current_crr);
+            sqlite3_bind_int(res, 19, rune.current_crd);
+            sqlite3_bind_int(res, 20, rune.current_acc);
+            sqlite3_bind_int(res, 21, rune.current_res);
+            sqlite3_bind_int(res, 22, rune.lv12_hp_percent);
+            sqlite3_bind_int(res, 23, rune.lv12_atk_percent);
+            sqlite3_bind_int(res, 24, rune.lv12_def_percent);
+            sqlite3_bind_int(res, 25, rune.lv12_hp_flat);
+            sqlite3_bind_int(res, 26, rune.lv12_atk_flat);
+            sqlite3_bind_int(res, 27, rune.lv12_def_flat);
+            sqlite3_bind_int(res, 29, rune.lv12_spd);
+            sqlite3_bind_int(res, 30, rune.lv12_crr);
+            sqlite3_bind_int(res, 31, rune.lv12_crd);
+            sqlite3_bind_int(res, 32, rune.lv12_acc);
+            sqlite3_bind_int(res, 33, rune.lv12_res);
+            sqlite3_bind_int(res, 34, rune.lv15_hp_percent);
+            sqlite3_bind_int(res, 35, rune.lv15_atk_percent);
+            sqlite3_bind_int(res, 36, rune.lv15_def_percent);
+            sqlite3_bind_int(res, 37, rune.lv15_hp_flat);
+            sqlite3_bind_int(res, 38, rune.lv15_atk_flat);
+            sqlite3_bind_int(res, 39, rune.lv15_def_flat);
+            sqlite3_bind_int(res, 40, rune.lv15_spd);
+            sqlite3_bind_int(res, 41, rune.lv15_crr);
+            sqlite3_bind_int(res, 42, rune.lv15_crd);
+            sqlite3_bind_int(res, 43, rune.lv15_acc);
+            sqlite3_bind_int(res, 44, rune.lv15_res);
+            if (SQLITE_DONE != sqlite3_step(res)){
+                fprintf(
+                stderr,
+                "Failed to execute statement to insert into runes: %s\n",
+                sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNES;
+            }
+
+            // Insert main stat
+            total_stats ++;
+            strcpy(
+            sql,
+            "INSERT INTO rune_stats(rune, slot, stat, value, grind, enchant) "
+            "VALUES (?, ?, ?, ?, ?, ?)"
+            );
+            if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+                fprintf(
+                stderr,
+                "Failed to prepare statement to insert into rune_stats: %s\n",
+                sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNE_STATS;
+            }
+            sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+            sqlite3_bind_int(res, 2, -1); // Main stat is slot -1
+            sqlite3_bind_int(res, 3, rune.main.stat);
+            sqlite3_bind_int(res, 4, rune.main.value);
+            sqlite3_bind_int(res, 5, 0); // Mains are never grinded.
+            sqlite3_bind_int(res, 6, 0); // Mains are never enchanted.
+            if (SQLITE_DONE != sqlite3_step(res)){
+                fprintf(
+                stderr,
+                "Failed to execute statement to insert into rune_stats: %s\n",
+                sqlite3_errmsg(db)
+                );
+                sqlite3_finalize(res);
+                sqlite3_close(db);
+                return ERROR_DB_INSERT_RUNE_STATS;
+            }
+
+            // Insert innate stat
+            total_stats ++;
+            if (rune.innate.stat != 0){
+                strcpy(
+                sql,
+                    "INSERT INTO rune_stats "
+                    "(rune, slot, stat, value, grind, enchant) "
+                    "VALUES (?, ?, ?, ?, ?, ?)"
+                );
+                if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+                    fprintf(
+                    stderr,
+                    "Failed to prepare statement to insert into rune_stats: %s\n",
+                    sqlite3_errmsg(db)
+                    );
+                    sqlite3_finalize(res);
+                    sqlite3_close(db);
+                    return ERROR_DB_INSERT_RUNE_STATS;
+                }
+                sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+                sqlite3_bind_int(res, 2, 0); // Innate stat is slot 0
+                sqlite3_bind_int(res, 3, rune.innate.stat);
+                sqlite3_bind_int(res, 4, rune.innate.value);
+                sqlite3_bind_int(res, 5, 0); // Innates are never grinded.
+                sqlite3_bind_int(res, 6, 0); // Innates are never enchanted.
+                if (SQLITE_DONE != sqlite3_step(res)){
+                    fprintf(
+                    stderr,
+                    "Failed to execute statement to insert into rune_stats: %s\n",
+                    sqlite3_errmsg(db)
+                    );
+                    sqlite3_finalize(res);
+                    sqlite3_close(db);
+                    return ERROR_DB_INSERT_RUNE_STATS;
+                }
+            }
+
+            for (int s = 0; s < rune.stat_count; s ++){
+                total_stats ++;
+                strcpy(
+                sql,
+                    "INSERT INTO rune_stats "
+                    "(rune, slot, stat, value, grind, enchant) "
+                    "VALUES (?, ?, ?, ?, ?, ?)"
+                );
+                if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+                    fprintf(
+                    stderr,
+                    "Failed to prepare statement to insert into rune_stats: %s\n",
+                    sqlite3_errmsg(db)
+                    );
+                    sqlite3_finalize(res);
+                    sqlite3_close(db);
+                    return ERROR_DB_INSERT_RUNE_STATS;
+                }
+                sqlite3_bind_text(res, 1, rune.id, strlen(rune.id), NULL);
+                sqlite3_bind_int(res, 2, s + 1); // Normal stats are slots 1-4
+                sqlite3_bind_int(res, 3, rune.stats[s].stat);
+                sqlite3_bind_int(res, 4, rune.stats[s].value);
+                sqlite3_bind_int(res, 5, rune.stats[s].grind);
+                sqlite3_bind_int(res, 6, rune.stats[s].enchant);
+                if (SQLITE_DONE != sqlite3_step(res)){
+                    fprintf(
+                    stderr,
+                    "Failed to execute statement to insert into rune_stats: %s\n",
+                    sqlite3_errmsg(db)
+                    );
+                    sqlite3_finalize(res);
+                    sqlite3_close(db);
+                    return ERROR_DB_INSERT_RUNE_STATS;
+                }
+            }
+            sqlite3_finalize(res);
+        }
+
+    }
+
+    // All parsed
+    printf("%d units saved.\n", total_units);
+    printf("%d runes saved.\n", total_runes);
+    printf("%d rune stats saved.\n", total_stats);
+    sqlite3_close(db);
+
+    return calculate_current_stats();
+}
+
+/**
+ * Calculates the current stats for units with runes in the database.
+ *
+ * @return SUCCESS or an error code.
+ */
+int calculate_current_stats(){
+    char query[300];
+    strcpy(
+      query,
+      "SELECT"
+      "  id,"
+      "  base_hp,"
+      "  base_akt,"
+      "  base_def,"
+      "  base_spd,"
+      "  base_crr,"
+      "  base_crd,"
+      "  base_res,"
+      "  base_acc,"
+      "  current_hp,"
+      "  current_akt,"
+      "  current_def,"
+      "  current_spd,"
+      "  current_crr,"
+      "  current_crd,"
+      "  current_res,"
+      "  current_acc"
+      " FROM units WHERE id IN (SELECT DISTINCT unit FROM runes)"
+    );
+
+    sqlite3 *db;
+    if (SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+    sqlite3_stmt *stmt_select;
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_select, 0)) {
+        fprintf(stderr, "Error getting units: %s\n", sqlite3_errmsg(db));
+        return ERROR_DB_UNIT;
+    }
+
+    unsigned char id[12];
+    unsigned int base_hp = 0;
+    unsigned char base_atk = 0;
+    unsigned char base_def = 0;
+    unsigned char base_spd = 0;
+    unsigned char base_crr = 0;
+    unsigned char base_crd = 0;
+    unsigned char base_res = 0;
+    unsigned char base_acc = 0;
+    unsigned int current_hp = 0;
+    unsigned char current_atk = 0;
+    unsigned char current_def = 0;
+    unsigned char current_spd = 0;
+    unsigned char current_crr = 0;
+    unsigned char current_crd = 0;
+    unsigned char current_res = 0;
+    unsigned char current_acc = 0;
+    while (SQLITE_ROW == sqlite3_step(stmt_select)){
+        strcpy(id, sqlite3_column_text(stmt_select, 0));
+        base_hp = sqlite3_column_int(stmt_select, 1);
+        base_atk = sqlite3_column_int(stmt_select, 2);
+        base_def = sqlite3_column_int(stmt_select, 3);
+        base_spd = sqlite3_column_int(stmt_select, 4);
+        base_crr = sqlite3_column_int(stmt_select, 5);
+        base_crd = sqlite3_column_int(stmt_select, 6);
+        base_res = sqlite3_column_int(stmt_select, 7);
+        base_acc = sqlite3_column_int(stmt_select, 8);
+        current_hp = base_hp;
+        current_atk = base_atk;
+        current_def = base_def;
+        current_spd = base_spd;
+        current_crr = base_crr;
+        current_crd = base_crd;
+        current_res = base_res;
+        current_acc = base_acc;
+        // TODO: Loop runes and add flat and percent stats
+        // TODO: Also, count rune sets for bonus
+        // TODO: Cap cappable stats
+        // TODO: Update in database
+    }
+    sqlite3_finalize(stmt_select);
+    sqlite3_close(db);
+    return SUCCESS;
+}
+
+/**
+ * Recreates the tables in the database.
+ */
+int recreate_tables(){
+    sqlite3 *db;
+    if (SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+    char sql[1024];
+    sqlite3_stmt *res;
+
+    // Table rune_stats
+    strcpy(sql, "DROP TABLE IF EXISTS rune_stats;");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to drop table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_RUNE_STATS;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to drop table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_RUNE_STATS;
+    }
+    strcpy(
+      sql,
+      "CREATE TABLE rune_stats("
+      "  rune CHAR(12),"
+      "  slot INT,"
+      "  stat INT,"
+      "  value INT,"
+      "  grind INT,"
+      "  enchant INT"
+      ");"
+    );
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to create table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_RUNE_STATS;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to create table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_RUNE_STATS;
+    }
+
+    // Table runes
+    strcpy(sql, "DROP TABLE IF EXISTS runes;");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to drop table runes: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_RUNES;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to drop table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_RUNES;
+    }
+    strcpy(
+      sql,
+      "CREATE TABLE runes("
+      "  id CHAR(12),"
+      "  unit CHAR(12),"
+      "  type INT,"
+      "  slot INT,"
+      "  stars INT,"
+      "  level INT,"
+      "  quality INT,"
+      "  efficiency FLOAT,"
+      "  max_efficiency FLOAT,"
+      "  main_stat INT,"
+      "  current_hp_percent INT,"
+      "  current_atk_percent INT,"
+      "  current_def_percent INT,"
+      "  current_hp_flat INT,"
+      "  current_atk_flat INT,"
+      "  current_def_flat INT,"
+      "  current_spd INT,"
+      "  current_crr INT,"
+      "  current_crd INT,"
+      "  current_acc INT,"
+      "  current_res INT,"
+      "  lv12_hp_percent INT,"
+      "  lv12_atk_percent INT,"
+      "  lv12_def_percent INT,"
+      "  lv12_hp_flat INT,"
+      "  lv12_atk_flat INT,"
+      "  lv12_def_flat INT,"
+      "  lv12_spd INT,"
+      "  lv12_crr INT,"
+      "  lv12_crd INT,"
+      "  lv12_acc INT,"
+      "  lv12_res INT,"
+      "  lv15_hp_percent INT,"
+      "  lv15_atk_percent INT,"
+      "  lv15_def_percent INT,"
+      "  lv15_hp_flat INT,"
+      "  lv15_atk_flat INT,"
+      "  lv15_def_flat INT,"
+      "  lv15_spd INT,"
+      "  lv15_crr INT,"
+      "  lv15_crd INT,"
+      "  lv15_acc INT,"
+      "  lv15_res INT"
+      ");"
+    );
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to create table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_RUNES;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to create table rune_stats: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_RUNES;
+    }
+
+    // Table units
+    strcpy(sql, "DROP TABLE IF EXISTS units;");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to drop table units: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_UNITS;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to drop table units: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_DROP_UNITS;
+    }
+    strcpy(
+      sql,
+      "CREATE TABLE units("
+      "  id CHAR(12),"
+      "  monster INT,"
+      "  name CHAR(128),"
+      "  stars INT,"
+      "  level INT,"
+      "  base_hp INT,"
+      "  base_akt INT,"
+      "  base_def INT,"
+      "  base_spd INT,"
+      "  base_crr INT,"
+      "  base_crd INT,"
+      "  base_res INT,"
+      "  base_acc INT,"
+      "  current_hp INT,"
+      "  current_akt INT,"
+      "  current_def INT,"
+      "  current_spd INT,"
+      "  current_crr INT,"
+      "  current_crd INT,"
+      "  current_res INT,"
+      "  current_acc INT"
+      ");"
+    );
+    if (SQLITE_OK != sqlite3_prepare_v2(db, sql, -1, &res, 0)) {
+        fprintf(
+          stderr,
+          "Failed to create statement to create table units: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_UNITS;
+    }
+    if (SQLITE_DONE != sqlite3_step(res)){
+        fprintf(
+          stderr,
+          "Failed to execute statement to create table units: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(res);
+        sqlite3_close(db);
+        return ERROR_DB_CREATE_UNITS;
+    }
+    // TODO: Other tables
+    sqlite3_finalize(res);
+    sqlite3_close(db);
+    return SUCCESS;
+}
+
+/**
+ * Calculates the total stat values for a rune.
+ *
+ * @param[in|out] rune Rune to do the calculation on.
+ */
+void calculate_rune_totals(struct DB_Rune *rune){
+    rune->efficiency = 0.0f;
+    rune->max_efficiency = 0.0f;
+    rune->current_hp_flat = 0;
+    rune->current_hp_percent = 0;
+    rune->lv12_hp_flat = 0;
+    rune->lv12_hp_percent = 0;
+    rune->lv15_hp_flat = 0;
+    rune->lv15_hp_percent = 0;
+    rune->current_atk_flat = 0;
+    rune->current_atk_percent = 0;
+    rune->lv12_atk_flat = 0;
+    rune->lv12_atk_percent = 0;
+    rune->lv15_atk_flat = 0;
+    rune->lv15_atk_percent = 0;
+    rune->current_def_flat = 0;
+    rune->current_def_percent = 0;
+    rune->lv12_def_flat = 0;
+    rune->lv12_def_percent = 0;
+    rune->lv15_def_flat = 0;
+    rune->lv15_def_percent = 0;
+    rune->current_spd = 0;
+    rune->lv12_spd = 0;
+    rune->lv15_spd = 0;
+    rune->current_crr = 0;
+    rune->lv12_crr = 0;
+    rune->lv15_crr = 0;
+    rune->current_crd = 0;
+    rune->lv12_crd = 0;
+    rune->lv15_crd = 0;
+    rune->current_res = 0;
+    rune->lv12_res = 0;
+    rune->lv15_res = 0;
+    rune->current_acc = 0;
+    rune->lv12_acc = 0;
+    rune->lv15_acc = 0;
+    // TODO: Calculate efficiencies
+    switch (rune->main.stat){
+        case HP_FLAT:
+            rune->current_hp_flat += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_hp_flat += rune->main.value;
+            }
+            else{
+                rune->lv12_hp_flat +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_hp_flat +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case HP_PERCENT:
+            rune->current_hp_percent += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_hp_percent += rune->main.value;
+            }
+            else{
+                rune->lv12_hp_percent +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_hp_percent +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case ATK_FLAT:
+            rune->current_atk_flat += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_atk_flat += rune->main.value;
+            }
+            else{
+                rune->lv12_atk_flat +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_atk_flat +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case ATK_PERCENT:
+            rune->current_atk_percent += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_atk_percent += rune->main.value;
+            }
+            else{
+                rune->lv12_atk_percent +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_atk_percent +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case DEF_FLAT:
+            rune->current_def_flat += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_def_flat += rune->main.value;
+            }
+            else{
+                rune->lv12_def_flat +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_def_flat +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case DEF_PERCENT:
+            rune->current_def_percent += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_def_percent += rune->main.value;
+            }
+            else{
+                rune->lv12_def_percent +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_def_percent +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case SPD:
+            rune->current_spd += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_spd += rune->main.value;
+            }
+            else{
+                rune->lv12_spd +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_spd +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case CRR:
+            rune->current_crr += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_crr += rune->main.value;
+            }
+            else{
+                rune->lv12_crr +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_crr +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case CRD:
+            rune->current_crd += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_crd += rune->main.value;
+            }
+            else{
+                rune->lv12_crd +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_crd +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case RES:
+            rune->current_res += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_res += rune->main.value;
+            }
+            else{
+                rune->lv12_res +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_res +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+        case ACC:
+            rune->current_acc += rune->main.value;
+            if (rune->level > 12){
+                rune->lv12_acc += rune->main.value;
+            }
+            else{
+                rune->lv12_acc +=
+                  main_stats_values[rune->main.stat][rune->stars][0];
+            }
+            rune->lv15_acc +=
+              main_stats_values[rune->main.stat][rune->stars][1];
+            break;
+    }
+    switch (rune->innate.stat){
+        case HP_FLAT:
+            rune->current_hp_flat += rune->innate.value;
+            rune->lv12_hp_flat += rune->innate.value;
+            rune->lv15_hp_flat += rune->innate.value;
+            break;
+        case HP_PERCENT:
+            rune->current_hp_percent += rune->innate.value;
+            rune->lv12_hp_percent += rune->innate.value;
+            rune->lv15_hp_percent += rune->innate.value;
+            break;
+        case ATK_FLAT:
+            rune->current_atk_flat += rune->innate.value;
+            rune->lv12_atk_flat += rune->innate.value;
+            rune->lv15_atk_flat += rune->innate.value;
+            break;
+        case ATK_PERCENT:
+            rune->current_atk_percent += rune->innate.value;
+            rune->lv12_atk_percent += rune->innate.value;
+            rune->lv15_atk_percent += rune->innate.value;
+            break;
+        case DEF_FLAT:
+            rune->current_def_flat += rune->innate.value;
+            rune->lv12_def_flat += rune->innate.value;
+            rune->lv15_def_flat += rune->innate.value;
+            break;
+        case DEF_PERCENT:
+            rune->current_def_percent += rune->innate.value;
+            rune->lv12_def_percent += rune->innate.value;
+            rune->lv15_def_percent += rune->innate.value;
+            break;
+        case SPD:
+            rune->current_spd += rune->innate.value;
+            rune->lv12_spd += rune->innate.value;
+            rune->lv15_spd += rune->innate.value;
+            break;
+        case CRR:
+            rune->current_crr += rune->innate.value;
+            rune->lv12_crr += rune->innate.value;
+            rune->lv15_crr += rune->innate.value;
+            break;
+        case CRD:
+            rune->current_crd += rune->innate.value;
+            rune->lv12_crd += rune->innate.value;
+            rune->lv15_crd += rune->innate.value;
+            break;
+        case RES:
+            rune->current_res += rune->innate.value;
+            rune->lv12_res += rune->innate.value;
+            rune->lv15_res += rune->innate.value;
+            break;
+        case ACC:
+            rune->current_acc += rune->innate.value;
+            rune->lv12_acc += rune->innate.value;
+            rune->lv15_acc += rune->innate.value;
+            break;
+    }
+    for (int i = 0; i < rune->stat_count; i++){
+        switch (rune->stats[i].stat){
+            case HP_FLAT:
+                rune->current_hp_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_hp_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_hp_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case HP_PERCENT:
+                rune->current_hp_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_hp_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_hp_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case ATK_FLAT:
+                rune->current_atk_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_atk_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_atk_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case ATK_PERCENT:
+                rune->current_atk_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_atk_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_atk_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case DEF_FLAT:
+                rune->current_def_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_def_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_def_flat +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case DEF_PERCENT:
+                rune->current_def_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_def_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_def_percent +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case SPD:
+                rune->current_spd +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_spd +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_spd +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case CRR:
+                rune->current_crr +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_crr +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_crr +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case CRD:
+                rune->current_crd +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_crd +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_crd +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case RES:
+                rune->current_res +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_res +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_res +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+            case ACC:
+                rune->current_acc +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv12_acc +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                rune->lv15_acc +=
+                  (rune->stats[i].value + rune->stats[i].grind);
+                break;
+        }
+    }
+}
+
+/**
+ * Gets a monster name from it's ID.
+ *
+ * @param[in] id Monster ID.
+ * @param[out] name Monster name.
+ */
+void get_monster_name(int id, char name[64]){
+    switch(id){
+        case 10102:
+            strcpy(name, "Fairy");
+            break;
+        case 10103:
+            strcpy(name, "Fairy");
+            break;
+        case 10104:
+            strcpy(name, "Fairy");
+            break;
+        case 10105:
+            strcpy(name, "Fairy");
+            break;
+        case 10111:
+            strcpy(name, "Elucia");
+            break;
+        case 10112:
+            strcpy(name, "Iselia");
+            break;
+        case 10113:
+            strcpy(name, "Aeilene");
+            break;
+        case 10114:
+            strcpy(name, "Neal");
+            break;
+        case 10115:
+            strcpy(name, "Sorin");
+            break;
+        case 10131:
+            strcpy(name, "Elucia");
+            break;
+        case 10132:
+            strcpy(name, "Iselia");
+            break;
+        case 10133:
+            strcpy(name, "Aeilene");
+            break;
+        case 10134:
+            strcpy(name, "Neal");
+            break;
+        case 10135:
+            strcpy(name, "Sorin");
+            break;
+        case 10201:
+            strcpy(name, "Imp");
+            break;
+        case 10202:
+            strcpy(name, "Imp");
+            break;
+        case 10203:
+            strcpy(name, "Imp");
+            break;
+        case 10204:
+            strcpy(name, "Imp");
+            break;
+        case 10205:
+            strcpy(name, "Imp");
+            break;
+        case 10211:
+            strcpy(name, "Fynn");
+            break;
+        case 10212:
+            strcpy(name, "Cogma");
+            break;
+        case 10213:
+            strcpy(name, "Ralph");
+            break;
+        case 10214:
+            strcpy(name, "Taru");
+            break;
+        case 10215:
+            strcpy(name, "Garok");
+            break;
+        case 10301:
+            strcpy(name, "Pixie");
+            break;
+        case 10302:
+            strcpy(name, "Pixie");
+            break;
+        case 10303:
+            strcpy(name, "Pixie");
+            break;
+        case 10304:
+            strcpy(name, "Pixie");
+            break;
+        case 10305:
+            strcpy(name, "Pixie");
+            break;
+        case 10311:
+            strcpy(name, "Kacey");
+            break;
+        case 10312:
+            strcpy(name, "Tatu");
+            break;
+        case 10313:
+            strcpy(name, "Shannon");
+            break;
+        case 10314:
+            strcpy(name, "Cheryl");
+            break;
+        case 10315:
+            strcpy(name, "Camaryn");
+            break;
+        case 10331:
+            strcpy(name, "Kacey");
+            break;
+        case 10332:
+            strcpy(name, "Tatu");
+            break;
+        case 10333:
+            strcpy(name, "Shannon");
+            break;
+        case 10334:
+            strcpy(name, "Cheryl");
+            break;
+        case 10335:
+            strcpy(name, "Camaryn");
+            break;
+        case 10401:
+            strcpy(name, "Yeti");
+            break;
+        case 10402:
+            strcpy(name, "Yeti");
+            break;
+        case 10403:
+            strcpy(name, "Yeti");
+            break;
+        case 10404:
+            strcpy(name, "Yeti");
+            break;
+        case 10405:
+            strcpy(name, "Yeti");
+            break;
+        case 10411:
+            strcpy(name, "Kunda");
+            break;
+        case 10412:
+            strcpy(name, "Tantra");
+            break;
+        case 10413:
+            strcpy(name, "Rakaja");
+            break;
+        case 10414:
+            strcpy(name, "Arkajan");
+            break;
+        case 10415:
+            strcpy(name, "Kumae");
+            break;
+        case 10501:
+            strcpy(name, "Harpy");
+            break;
+        case 10502:
+            strcpy(name, "Harpy");
+            break;
+        case 10503:
+            strcpy(name, "Harpy");
+            break;
+        case 10504:
+            strcpy(name, "Harpy");
+            break;
+        case 10505:
+            strcpy(name, "Harpy");
+            break;
+        case 10511:
+            strcpy(name, "Ramira");
+            break;
+        case 10512:
+            strcpy(name, "Lucasha");
+            break;
+        case 10513:
+            strcpy(name, "Prilea");
+            break;
+        case 10514:
+            strcpy(name, "Kabilla");
+            break;
+        case 10515:
+            strcpy(name, "Hellea");
+            break;
+        case 10601:
+            strcpy(name, "Hellhound");
+            break;
+        case 10602:
+            strcpy(name, "Hellhound");
+            break;
+        case 10603:
+            strcpy(name, "Hellhound");
+            break;
+        case 10604:
+            strcpy(name, "Hellhound");
+            break;
+        case 10605:
+            strcpy(name, "Hellhound");
+            break;
+        case 10611:
+            strcpy(name, "Tarq");
+            break;
+        case 10612:
+            strcpy(name, "Sieq");
+            break;
+        case 10613:
+            strcpy(name, "Gamir");
+            break;
+        case 10614:
+            strcpy(name, "Shamar");
+            break;
+        case 10615:
+            strcpy(name, "Shumar");
+            break;
+        case 10701:
+            strcpy(name, "Warbear");
+            break;
+        case 10702:
+            strcpy(name, "Warbear");
+            break;
+        case 10703:
+            strcpy(name, "Warbear");
+            break;
+        case 10704:
+            strcpy(name, "Warbear");
+            break;
+        case 10705:
+            strcpy(name, "Warbear");
+            break;
+        case 10711:
+            strcpy(name, "Dagora");
+            break;
+        case 10712:
+            strcpy(name, "Ursha");
+            break;
+        case 10713:
+            strcpy(name, "Ramagos");
+            break;
+        case 10714:
+            strcpy(name, "Lusha");
+            break;
+        case 10715:
+            strcpy(name, "Gorgo");
+            break;
+        case 10731:
+            strcpy(name, "Dagora");
+            break;
+        case 10732:
+            strcpy(name, "Ursha");
+            break;
+        case 10733:
+            strcpy(name, "Ramagos");
+            break;
+        case 10734:
+            strcpy(name, "Lusha");
+            break;
+        case 10735:
+            strcpy(name, "Gorgo");
+            break;
+        case 10801:
+            strcpy(name, "Elemental");
+            break;
+        case 10802:
+            strcpy(name, "Elemental");
+            break;
+        case 10803:
+            strcpy(name, "Elemental");
+            break;
+        case 10804:
+            strcpy(name, "Elemental");
+            break;
+        case 10805:
+            strcpy(name, "Elemental");
+            break;
+        case 10811:
+            strcpy(name, "Daharenos");
+            break;
+        case 10812:
+            strcpy(name, "Bremis");
+            break;
+        case 10813:
+            strcpy(name, "Taharus");
+            break;
+        case 10814:
+            strcpy(name, "Priz");
+            break;
+        case 10815:
+            strcpy(name, "Camules");
+            break;
+        case 10901:
+            strcpy(name, "Garuda");
+            break;
+        case 10902:
+            strcpy(name, "Garuda");
+            break;
+        case 10903:
+            strcpy(name, "Garuda");
+            break;
+        case 10904:
+            strcpy(name, "Garuda");
+            break;
+        case 10905:
+            strcpy(name, "Garuda");
+            break;
+        case 10911:
+            strcpy(name, "Konamiya");
+            break;
+        case 10912:
+            strcpy(name, "Cahule");
+            break;
+        case 10913:
+            strcpy(name, "Lindermen");
+            break;
+        case 10914:
+            strcpy(name, "Teon");
+            break;
+        case 10915:
+            strcpy(name, "Rizak");
+            break;
+        case 11001:
+            strcpy(name, "Inugami");
+            break;
+        case 11002:
+            strcpy(name, "Inugami");
+            break;
+        case 11003:
+            strcpy(name, "Inugami");
+            break;
+        case 11004:
+            strcpy(name, "Inugami");
+            break;
+        case 11005:
+            strcpy(name, "Inugami");
+            break;
+        case 11011:
+            strcpy(name, "Icaru");
+            break;
+        case 11012:
+            strcpy(name, "Raoq");
+            break;
+        case 11013:
+            strcpy(name, "Ramahan");
+            break;
+        case 11014:
+            strcpy(name, "Belladeon");
+            break;
+        case 11015:
+            strcpy(name, "Kro");
+            break;
+        case 11031:
+            strcpy(name, "Icaru");
+            break;
+        case 11032:
+            strcpy(name, "Raoq");
+            break;
+        case 11033:
+            strcpy(name, "Ramahan");
+            break;
+        case 11034:
+            strcpy(name, "Belladeon");
+            break;
+        case 11035:
+            strcpy(name, "Kro");
+            break;
+        case 11101:
+            strcpy(name, "Salamander");
+            break;
+        case 11102:
+            strcpy(name, "Salamander");
+            break;
+        case 11103:
+            strcpy(name, "Salamander");
+            break;
+        case 11104:
+            strcpy(name, "Salamander");
+            break;
+        case 11105:
+            strcpy(name, "Salamander");
+            break;
+        case 11111:
+            strcpy(name, "Kaimann");
+            break;
+        case 11112:
+            strcpy(name, "Krakdon");
+            break;
+        case 11113:
+            strcpy(name, "Lukan");
+            break;
+        case 11114:
+            strcpy(name, "Sharman");
+            break;
+        case 11115:
+            strcpy(name, "Decamaron");
+            break;
+        case 11201:
+            strcpy(name, "Nine-tailed Fox");
+            break;
+        case 11202:
+            strcpy(name, "Nine-tailed Fox");
+            break;
+        case 11203:
+            strcpy(name, "Nine-tailed Fox");
+            break;
+        case 11204:
+            strcpy(name, "Nine-tailed Fox");
+            break;
+        case 11205:
+            strcpy(name, "Nine-tailed Fox");
+            break;
+        case 11211:
+            strcpy(name, "Soha");
+            break;
+        case 11212:
+            strcpy(name, "Shihwa");
+            break;
+        case 11213:
+            strcpy(name, "Arang");
+            break;
+        case 11214:
+            strcpy(name, "Chamie");
+            break;
+        case 11215:
+            strcpy(name, "Kamiya");
+            break;
+        case 11223:
+            strcpy(name, "Imperfect Nine-tailed Fox");
+            break;
+        case 11301:
+            strcpy(name, "Serpent");
+            break;
+        case 11302:
+            strcpy(name, "Serpent");
+            break;
+        case 11303:
+            strcpy(name, "Serpent");
+            break;
+        case 11304:
+            strcpy(name, "Serpent");
+            break;
+        case 11305:
+            strcpy(name, "Serpent");
+            break;
+        case 11311:
+            strcpy(name, "Shailoq");
+            break;
+        case 11312:
+            strcpy(name, "Fao");
+            break;
+        case 11313:
+            strcpy(name, "Ermeda");
+            break;
+        case 11314:
+            strcpy(name, "Elpuria");
+            break;
+        case 11315:
+            strcpy(name, "Mantura");
+            break;
+        case 11401:
+            strcpy(name, "Golem");
+            break;
+        case 11402:
+            strcpy(name, "Golem");
+            break;
+        case 11403:
+            strcpy(name, "Golem");
+            break;
+        case 11404:
+            strcpy(name, "Golem");
+            break;
+        case 11405:
+            strcpy(name, "Golem");
+            break;
+        case 11411:
+            strcpy(name, "Kuhn");
+            break;
+        case 11412:
+            strcpy(name, "Kugo");
+            break;
+        case 11413:
+            strcpy(name, "Ragion");
+            break;
+        case 11414:
+            strcpy(name, "Groggo");
+            break;
+        case 11415:
+            strcpy(name, "Maggi");
+            break;
+        case 11501:
+            strcpy(name, "Griffon");
+            break;
+        case 11502:
+            strcpy(name, "Griffon");
+            break;
+        case 11503:
+            strcpy(name, "Griffon");
+            break;
+        case 11504:
+            strcpy(name, "Griffon");
+            break;
+        case 11505:
+            strcpy(name, "Griffon");
+            break;
+        case 11511:
+            strcpy(name, "Kahn");
+            break;
+        case 11512:
+            strcpy(name, "Spectra");
+            break;
+        case 11513:
+            strcpy(name, "Bernard");
+            break;
+        case 11514:
+            strcpy(name, "Shamann");
+            break;
+        case 11515:
+            strcpy(name, "Varus");
+            break;
+        case 11531:
+            strcpy(name, "Kahn");
+            break;
+        case 11532:
+            strcpy(name, "Spectra");
+            break;
+        case 11533:
+            strcpy(name, "Bernard");
+            break;
+        case 11534:
+            strcpy(name, "Shamann");
+            break;
+        case 11535:
+            strcpy(name, "Varus");
+            break;
+        case 11601:
+            strcpy(name, "Undine");
+            break;
+        case 11602:
+            strcpy(name, "Undine");
+            break;
+        case 11603:
+            strcpy(name, "Undine");
+            break;
+        case 11604:
+            strcpy(name, "Undine");
+            break;
+        case 11605:
+            strcpy(name, "Undine");
+            break;
+        case 11611:
+            strcpy(name, "Mikene");
+            break;
+        case 11612:
+            strcpy(name, "Atenai");
+            break;
+        case 11613:
+            strcpy(name, "Delphoi");
+            break;
+        case 11614:
+            strcpy(name, "Icasha");
+            break;
+        case 11615:
+            strcpy(name, "Tilasha");
+            break;
+        case 11621:
+            strcpy(name, "Imperfect Undine");
+            break;
+        case 11701:
+            strcpy(name, "Inferno");
+            break;
+        case 11702:
+            strcpy(name, "Inferno");
+            break;
+        case 11703:
+            strcpy(name, "Inferno");
+            break;
+        case 11704:
+            strcpy(name, "Inferno");
+            break;
+        case 11705:
+            strcpy(name, "Inferno");
+            break;
+        case 11711:
+            strcpy(name, "Purian");
+            break;
+        case 11712:
+            strcpy(name, "Tagaros");
+            break;
+        case 11713:
+            strcpy(name, "Anduril");
+            break;
+        case 11714:
+            strcpy(name, "Eludain");
+            break;
+        case 11715:
+            strcpy(name, "Drogan");
+            break;
+        case 11801:
+            strcpy(name, "Sylph");
+            break;
+        case 11802:
+            strcpy(name, "Sylph");
+            break;
+        case 11803:
+            strcpy(name, "Sylph");
+            break;
+        case 11804:
+            strcpy(name, "Sylph");
+            break;
+        case 11805:
+            strcpy(name, "Sylph");
+            break;
+        case 11811:
+            strcpy(name, "Tyron");
+            break;
+        case 11812:
+            strcpy(name, "Baretta");
+            break;
+        case 11813:
+            strcpy(name, "Shimitae");
+            break;
+        case 11814:
+            strcpy(name, "Eredas");
+            break;
+        case 11815:
+            strcpy(name, "Aschubel");
+            break;
+        case 11822:
+            strcpy(name, "Imperfect Sylph");
+            break;
+        case 11901:
+            strcpy(name, "Sylphid");
+            break;
+        case 11902:
+            strcpy(name, "Sylphid");
+            break;
+        case 11903:
+            strcpy(name, "Sylphid");
+            break;
+        case 11904:
+            strcpy(name, "Sylphid");
+            break;
+        case 11905:
+            strcpy(name, "Sylphid");
+            break;
+        case 11911:
+            strcpy(name, "Lumirecia");
+            break;
+        case 11912:
+            strcpy(name, "Fria");
+            break;
+        case 11913:
+            strcpy(name, "Acasis");
+            break;
+        case 11914:
+            strcpy(name, "Mihael");
+            break;
+        case 11915:
+            strcpy(name, "Icares");
+            break;
+        case 12001:
+            strcpy(name, "High Elemental");
+            break;
+        case 12002:
+            strcpy(name, "High Elemental");
+            break;
+        case 12003:
+            strcpy(name, "High Elemental");
+            break;
+        case 12004:
+            strcpy(name, "High Elemental");
+            break;
+        case 12005:
+            strcpy(name, "High Elemental");
+            break;
+        case 12011:
+            strcpy(name, "Ellena");
+            break;
+        case 12012:
+            strcpy(name, "Kahli");
+            break;
+        case 12013:
+            strcpy(name, "Moria");
+            break;
+        case 12014:
+            strcpy(name, "Shren");
+            break;
+        case 12015:
+            strcpy(name, "Jumaline");
+            break;
+        case 12101:
+            strcpy(name, "Harpu");
+            break;
+        case 12102:
+            strcpy(name, "Harpu");
+            break;
+        case 12103:
+            strcpy(name, "Harpu");
+            break;
+        case 12104:
+            strcpy(name, "Harpu");
+            break;
+        case 12105:
+            strcpy(name, "Harpu");
+            break;
+        case 12111:
+            strcpy(name, "Sisroo");
+            break;
+        case 12112:
+            strcpy(name, "Colleen");
+            break;
+        case 12113:
+            strcpy(name, "Seal");
+            break;
+        case 12114:
+            strcpy(name, "Sia");
+            break;
+        case 12115:
+            strcpy(name, "Seren");
+            break;
+        case 12201:
+            strcpy(name, "Slime");
+            break;
+        case 12202:
+            strcpy(name, "Slime");
+            break;
+        case 12203:
+            strcpy(name, "Slime");
+            break;
+        case 12301:
+            strcpy(name, "Forest Keeper");
+            break;
+        case 12302:
+            strcpy(name, "Forest Keeper");
+            break;
+        case 12303:
+            strcpy(name, "Forest Keeper");
+            break;
+        case 12401:
+            strcpy(name, "Mushroom");
+            break;
+        case 12402:
+            strcpy(name, "Mushroom");
+            break;
+        case 12403:
+            strcpy(name, "Mushroom");
+            break;
+        case 12501:
+            strcpy(name, "Maned Boar");
+            break;
+        case 12502:
+            strcpy(name, "Maned Boar");
+            break;
+        case 12503:
+            strcpy(name, "Maned Boar");
+            break;
+        case 12601:
+            strcpy(name, "Monster Flower");
+            break;
+        case 12602:
+            strcpy(name, "Monster Flower");
+            break;
+        case 12603:
+            strcpy(name, "Monster Flower");
+            break;
+        case 12605:
+            strcpy(name, "Monster Flower");
+            break;
+        case 12701:
+            strcpy(name, "Ghost");
+            break;
+        case 12702:
+            strcpy(name, "Ghost");
+            break;
+        case 12703:
+            strcpy(name, "Ghost");
+            break;
+        case 12705:
+            strcpy(name, "Ghost");
+            break;
+        case 12801:
+            strcpy(name, "Low Elemental");
+            break;
+        case 12802:
+            strcpy(name, "Low Elemental");
+            break;
+        case 12803:
+            strcpy(name, "Low Elemental");
+            break;
+        case 12804:
+            strcpy(name, "Low Elemental");
+            break;
+        case 12805:
+            strcpy(name, "Low Elemental");
+            break;
+        case 12811:
+            strcpy(name, "Tigresse");
+            break;
+        case 12812:
+            strcpy(name, "Lamor");
+            break;
+        case 12813:
+            strcpy(name, "Samour");
+            break;
+        case 12814:
+            strcpy(name, "Varis");
+            break;
+        case 12815:
+            strcpy(name, "Havana");
+            break;
+        case 12901:
+            strcpy(name, "Mimick");
+            break;
+        case 12902:
+            strcpy(name, "Mimick");
+            break;
+        case 12903:
+            strcpy(name, "Mimick");
+            break;
+        case 12905:
+            strcpy(name, "Mimick");
+            break;
+        case 13001:
+            strcpy(name, "Horned Frog");
+            break;
+        case 13002:
+            strcpy(name, "Horned Frog");
+            break;
+        case 13003:
+            strcpy(name, "Horned Frog");
+            break;
+        case 13005:
+            strcpy(name, "Horned Frog");
+            break;
+        case 13101:
+            strcpy(name, "Sandman");
+            break;
+        case 13102:
+            strcpy(name, "Sandman");
+            break;
+        case 13103:
+            strcpy(name, "Sandman");
+            break;
+        case 13105:
+            strcpy(name, "Sandman");
+            break;
+        case 13201:
+            strcpy(name, "Howl");
+            break;
+        case 13202:
+            strcpy(name, "Howl");
+            break;
+        case 13203:
+            strcpy(name, "Howl");
+            break;
+        case 13204:
+            strcpy(name, "Howl");
+            break;
+        case 13205:
+            strcpy(name, "Howl");
+            break;
+        case 13211:
+            strcpy(name, "Lulu");
+            break;
+        case 13212:
+            strcpy(name, "Lala");
+            break;
+        case 13213:
+            strcpy(name, "Chichi");
+            break;
+        case 13214:
+            strcpy(name, "Shushu");
+            break;
+        case 13215:
+            strcpy(name, "Chacha");
+            break;
+        case 13301:
+            strcpy(name, "Succubus");
+            break;
+        case 13302:
+            strcpy(name, "Succubus");
+            break;
+        case 13303:
+            strcpy(name, "Succubus");
+            break;
+        case 13304:
+            strcpy(name, "Succubus");
+            break;
+        case 13305:
+            strcpy(name, "Succubus");
+            break;
+        case 13311:
+            strcpy(name, "Izaria");
+            break;
+        case 13312:
+            strcpy(name, "Akia");
+            break;
+        case 13313:
+            strcpy(name, "Selena");
+            break;
+        case 13314:
+            strcpy(name, "Aria");
+            break;
+        case 13315:
+            strcpy(name, "Isael");
+            break;
+        case 13322:
+            strcpy(name, "Imperfect Succubus");
+            break;
+        case 13401:
+            strcpy(name, "Joker");
+            break;
+        case 13402:
+            strcpy(name, "Joker");
+            break;
+        case 13403:
+            strcpy(name, "Joker");
+            break;
+        case 13404:
+            strcpy(name, "Joker");
+            break;
+        case 13405:
+            strcpy(name, "Joker");
+            break;
+        case 13411:
+            strcpy(name, "Sian");
+            break;
+        case 13412:
+            strcpy(name, "Jojo");
+            break;
+        case 13413:
+            strcpy(name, "Lushen");
+            break;
+        case 13414:
+            strcpy(name, "Figaro");
+            break;
+        case 13415:
+            strcpy(name, "Liebli");
+            break;
+        case 13422:
+            strcpy(name, "Imperfect Joker");
+            break;
+        case 13501:
+            strcpy(name, "Ninja");
+            break;
+        case 13502:
+            strcpy(name, "Ninja");
+            break;
+        case 13503:
+            strcpy(name, "Ninja");
+            break;
+        case 13504:
+            strcpy(name, "Ninja");
+            break;
+        case 13505:
+            strcpy(name, "Ninja");
+            break;
+        case 13511:
+            strcpy(name, "Susano");
+            break;
+        case 13512:
+            strcpy(name, "Garo");
+            break;
+        case 13513:
+            strcpy(name, "Orochi");
+            break;
+        case 13514:
+            strcpy(name, "Gin");
+            break;
+        case 13515:
+            strcpy(name, "Han");
+            break;
+        case 13521:
+            strcpy(name, "Imperfect Ninja");
+            break;
+        case 13601:
+            strcpy(name, "Surprise Box");
+            break;
+        case 13602:
+            strcpy(name, "Surprise Box");
+            break;
+        case 13603:
+            strcpy(name, "Surprise Box");
+            break;
+        case 13604:
+            strcpy(name, "Surprise Box");
+            break;
+        case 13605:
+            strcpy(name, "Surprise Box");
+            break;
+        case 13701:
+            strcpy(name, "Bearman");
+            break;
+        case 13702:
+            strcpy(name, "Bearman");
+            break;
+        case 13703:
+            strcpy(name, "Bearman");
+            break;
+        case 13704:
+            strcpy(name, "Bearman");
+            break;
+        case 13705:
+            strcpy(name, "Bearman");
+            break;
+        case 13711:
+            strcpy(name, "Gruda");
+            break;
+        case 13712:
+            strcpy(name, "Kungen");
+            break;
+        case 13713:
+            strcpy(name, "Dagorr");
+            break;
+        case 13714:
+            strcpy(name, "Ahman");
+            break;
+        case 13715:
+            strcpy(name, "Haken");
+            break;
+        case 13801:
+            strcpy(name, "Valkyrja");
+            break;
+        case 13802:
+            strcpy(name, "Valkyrja");
+            break;
+        case 13803:
+            strcpy(name, "Valkyrja");
+            break;
+        case 13804:
+            strcpy(name, "Valkyrja");
+            break;
+        case 13805:
+            strcpy(name, "Valkyrja");
+            break;
+        case 13811:
+            strcpy(name, "Camilla");
+            break;
+        case 13812:
+            strcpy(name, "Vanessa");
+            break;
+        case 13813:
+            strcpy(name, "Katarina");
+            break;
+        case 13814:
+            strcpy(name, "Akroma");
+            break;
+        case 13815:
+            strcpy(name, "Trinity");
+            break;
+        case 13901:
+            strcpy(name, "Pierret");
+            break;
+        case 13902:
+            strcpy(name, "Pierret");
+            break;
+        case 13903:
+            strcpy(name, "Pierret");
+            break;
+        case 13904:
+            strcpy(name, "Pierret");
+            break;
+        case 13905:
+            strcpy(name, "Pierret");
+            break;
+        case 13911:
+            strcpy(name, "Julie");
+            break;
+        case 13912:
+            strcpy(name, "Clara");
+            break;
+        case 13913:
+            strcpy(name, "Sophia");
+            break;
+        case 13914:
+            strcpy(name, "Eva");
+            break;
+        case 13915:
+            strcpy(name, "Luna");
+            break;
+        case 14001:
+            strcpy(name, "Werewolf");
+            break;
+        case 14002:
+            strcpy(name, "Werewolf");
+            break;
+        case 14003:
+            strcpy(name, "Werewolf");
+            break;
+        case 14004:
+            strcpy(name, "Werewolf");
+            break;
+        case 14005:
+            strcpy(name, "Werewolf");
+            break;
+        case 14011:
+            strcpy(name, "Vigor");
+            break;
+        case 14012:
+            strcpy(name, "Garoche");
+            break;
+        case 14013:
+            strcpy(name, "Shakan");
+            break;
+        case 14014:
+            strcpy(name, "Eshir");
+            break;
+        case 14015:
+            strcpy(name, "Jultan");
+            break;
+        case 14031:
+            strcpy(name, "Vigor");
+            break;
+        case 14032:
+            strcpy(name, "Garoche");
+            break;
+        case 14033:
+            strcpy(name, "Shakan");
+            break;
+        case 14034:
+            strcpy(name, "Eshir");
+            break;
+        case 14035:
+            strcpy(name, "Jultan");
+            break;
+        case 14101:
+            strcpy(name, "Phantom Thief");
+            break;
+        case 14102:
+            strcpy(name, "Phantom Thief");
+            break;
+        case 14103:
+            strcpy(name, "Phantom Thief");
+            break;
+        case 14104:
+            strcpy(name, "Phantom Thief");
+            break;
+        case 14105:
+            strcpy(name, "Phantom Thief");
+            break;
+        case 14111:
+            strcpy(name, "Luer");
+            break;
+        case 14112:
+            strcpy(name, "Jean");
+            break;
+        case 14113:
+            strcpy(name, "Julien");
+            break;
+        case 14114:
+            strcpy(name, "Louis");
+            break;
+        case 14115:
+            strcpy(name, "Guillaume");
+            break;
+        case 14201:
+            strcpy(name, "Angelmon");
+            break;
+        case 14202:
+            strcpy(name, "Angelmon");
+            break;
+        case 14203:
+            strcpy(name, "Angelmon");
+            break;
+        case 14204:
+            strcpy(name, "Angelmon");
+            break;
+        case 14205:
+            strcpy(name, "Angelmon");
+            break;
+        case 14211:
+            strcpy(name, "Blue Angelmon");
+            break;
+        case 14212:
+            strcpy(name, "Red Angelmon");
+            break;
+        case 14213:
+            strcpy(name, "Gold Angelmon");
+            break;
+        case 14214:
+            strcpy(name, "White Angelmon");
+            break;
+        case 14215:
+            strcpy(name, "Dark Angelmon");
+            break;
+        case 14314:
+            strcpy(name, "Rainbowmon");
+            break;
+        case 14401:
+            strcpy(name, "Dragon");
+            break;
+        case 14402:
+            strcpy(name, "Dragon");
+            break;
+        case 14403:
+            strcpy(name, "Dragon");
+            break;
+        case 14404:
+            strcpy(name, "Dragon");
+            break;
+        case 14405:
+            strcpy(name, "Dragon");
+            break;
+        case 14411:
+            strcpy(name, "Verad");
+            break;
+        case 14412:
+            strcpy(name, "Zaiross");
+            break;
+        case 14413:
+            strcpy(name, "Jamire");
+            break;
+        case 14414:
+            strcpy(name, "Zerath");
+            break;
+        case 14415:
+            strcpy(name, "Grogen");
+            break;
+        case 14501:
+            strcpy(name, "Phoenix");
+            break;
+        case 14502:
+            strcpy(name, "Phoenix");
+            break;
+        case 14503:
+            strcpy(name, "Phoenix");
+            break;
+        case 14504:
+            strcpy(name, "Phoenix");
+            break;
+        case 14505:
+            strcpy(name, "Phoenix");
+            break;
+        case 14511:
+            strcpy(name, "Sigmarus");
+            break;
+        case 14512:
+            strcpy(name, "Perna");
+            break;
+        case 14513:
+            strcpy(name, "Teshar");
+            break;
+        case 14514:
+            strcpy(name, "Eludia");
+            break;
+        case 14515:
+            strcpy(name, "Jaara");
+            break;
+        case 14601:
+            strcpy(name, "Chimera");
+            break;
+        case 14602:
+            strcpy(name, "Chimera");
+            break;
+        case 14603:
+            strcpy(name, "Chimera");
+            break;
+        case 14604:
+            strcpy(name, "Chimera");
+            break;
+        case 14605:
+            strcpy(name, "Chimera");
+            break;
+        case 14611:
+            strcpy(name, "Taor");
+            break;
+        case 14612:
+            strcpy(name, "Rakan");
+            break;
+        case 14613:
+            strcpy(name, "Lagmaron");
+            break;
+        case 14614:
+            strcpy(name, "Shan");
+            break;
+        case 14615:
+            strcpy(name, "Zeratu");
+            break;
+        case 14701:
+            strcpy(name, "Vampire");
+            break;
+        case 14702:
+            strcpy(name, "Vampire");
+            break;
+        case 14703:
+            strcpy(name, "Vampire");
+            break;
+        case 14704:
+            strcpy(name, "Vampire");
+            break;
+        case 14705:
+            strcpy(name, "Vampire");
+            break;
+        case 14711:
+            strcpy(name, "Liesel");
+            break;
+        case 14712:
+            strcpy(name, "Verdehile");
+            break;
+        case 14713:
+            strcpy(name, "Argen");
+            break;
+        case 14714:
+            strcpy(name, "Julianne");
+            break;
+        case 14715:
+            strcpy(name, "Cadiz");
+            break;
+        case 14722:
+            strcpy(name, "Imperfect Vampire");
+            break;
+        case 14723:
+            strcpy(name, "Imperfect Vampire");
+            break;
+        case 14801:
+            strcpy(name, "Viking");
+            break;
+        case 14802:
+            strcpy(name, "Viking");
+            break;
+        case 14803:
+            strcpy(name, "Viking");
+            break;
+        case 14804:
+            strcpy(name, "Viking");
+            break;
+        case 14805:
+            strcpy(name, "Viking");
+            break;
+        case 14811:
+            strcpy(name, "Huga");
+            break;
+        case 14812:
+            strcpy(name, "Geoffrey");
+            break;
+        case 14813:
+            strcpy(name, "Walter");
+            break;
+        case 14814:
+            strcpy(name, "Jansson");
+            break;
+        case 14815:
+            strcpy(name, "Janssen");
+            break;
+        case 14901:
+            strcpy(name, "Amazon");
+            break;
+        case 14902:
+            strcpy(name, "Amazon");
+            break;
+        case 14903:
+            strcpy(name, "Amazon");
+            break;
+        case 14904:
+            strcpy(name, "Amazon");
+            break;
+        case 14905:
+            strcpy(name, "Amazon");
+            break;
+        case 14911:
+            strcpy(name, "Ellin");
+            break;
+        case 14912:
+            strcpy(name, "Ceres");
+            break;
+        case 14913:
+            strcpy(name, "Hina");
+            break;
+        case 14914:
+            strcpy(name, "Lyn");
+            break;
+        case 14915:
+            strcpy(name, "Mara");
+            break;
+        case 15001:
+            strcpy(name, "Martial Cat");
+            break;
+        case 15002:
+            strcpy(name, "Martial Cat");
+            break;
+        case 15003:
+            strcpy(name, "Martial Cat");
+            break;
+        case 15004:
+            strcpy(name, "Martial Cat");
+            break;
+        case 15005:
+            strcpy(name, "Martial Cat");
+            break;
+        case 15011:
+            strcpy(name, "Mina");
+            break;
+        case 15012:
+            strcpy(name, "Mei");
+            break;
+        case 15013:
+            strcpy(name, "Naomi");
+            break;
+        case 15014:
+            strcpy(name, "Xiao Ling");
+            break;
+        case 15015:
+            strcpy(name, "Miho");
+            break;
+        case 15031:
+            strcpy(name, "Mina");
+            break;
+        case 15032:
+            strcpy(name, "Mei");
+            break;
+        case 15033:
+            strcpy(name, "Naomi");
+            break;
+        case 15034:
+            strcpy(name, "Xiao Ling");
+            break;
+        case 15035:
+            strcpy(name, "Miho");
+            break;
+        case 15105:
+            strcpy(name, "Devilmon");
+            break;
+        case 15201:
+            strcpy(name, "Vagabond");
+            break;
+        case 15202:
+            strcpy(name, "Vagabond");
+            break;
+        case 15203:
+            strcpy(name, "Vagabond");
+            break;
+        case 15204:
+            strcpy(name, "Vagabond");
+            break;
+        case 15205:
+            strcpy(name, "Vagabond");
+            break;
+        case 15211:
+            strcpy(name, "Allen");
+            break;
+        case 15212:
+            strcpy(name, "Kai'en");
+            break;
+        case 15213:
+            strcpy(name, "Roid");
+            break;
+        case 15214:
+            strcpy(name, "Darion");
+            break;
+        case 15215:
+            strcpy(name, "Jubelle");
+            break;
+        case 15301:
+            strcpy(name, "Epikion Priest");
+            break;
+        case 15302:
+            strcpy(name, "Epikion Priest");
+            break;
+        case 15303:
+            strcpy(name, "Epikion Priest");
+            break;
+        case 15304:
+            strcpy(name, "Epikion Priest");
+            break;
+        case 15305:
+            strcpy(name, "Epikion Priest");
+            break;
+        case 15311:
+            strcpy(name, "Rina");
+            break;
+        case 15312:
+            strcpy(name, "Chloe");
+            break;
+        case 15313:
+            strcpy(name, "Michelle");
+            break;
+        case 15314:
+            strcpy(name, "Iona");
+            break;
+        case 15315:
+            strcpy(name, "Rasheed");
+            break;
+        case 15401:
+            strcpy(name, "Magical Archer");
+            break;
+        case 15402:
+            strcpy(name, "Magical Archer");
+            break;
+        case 15403:
+            strcpy(name, "Magical Archer");
+            break;
+        case 15404:
+            strcpy(name, "Magical Archer");
+            break;
+        case 15405:
+            strcpy(name, "Magical Archer");
+            break;
+        case 15411:
+            strcpy(name, "Sharron");
+            break;
+        case 15412:
+            strcpy(name, "Cassandra");
+            break;
+        case 15413:
+            strcpy(name, "Ardella");
+            break;
+        case 15414:
+            strcpy(name, "Chris");
+            break;
+        case 15415:
+            strcpy(name, "Bethony");
+            break;
+        case 15501:
+            strcpy(name, "Rakshasa");
+            break;
+        case 15502:
+            strcpy(name, "Rakshasa");
+            break;
+        case 15503:
+            strcpy(name, "Rakshasa");
+            break;
+        case 15504:
+            strcpy(name, "Rakshasa");
+            break;
+        case 15505:
+            strcpy(name, "Rakshasa");
+            break;
+        case 15511:
+            strcpy(name, "Su");
+            break;
+        case 15512:
+            strcpy(name, "Hwa");
+            break;
+        case 15513:
+            strcpy(name, "Yen");
+            break;
+        case 15514:
+            strcpy(name, "Pang");
+            break;
+        case 15515:
+            strcpy(name, "Ran");
+            break;
+        case 15601:
+            strcpy(name, "Bounty Hunter");
+            break;
+        case 15602:
+            strcpy(name, "Bounty Hunter");
+            break;
+        case 15603:
+            strcpy(name, "Bounty Hunter");
+            break;
+        case 15604:
+            strcpy(name, "Bounty Hunter");
+            break;
+        case 15605:
+            strcpy(name, "Bounty Hunter");
+            break;
+        case 15611:
+            strcpy(name, "Wayne");
+            break;
+        case 15612:
+            strcpy(name, "Randy");
+            break;
+        case 15613:
+            strcpy(name, "Roger");
+            break;
+        case 15614:
+            strcpy(name, "Walkers");
+            break;
+        case 15615:
+            strcpy(name, "Jamie");
+            break;
+        case 15701:
+            strcpy(name, "Oracle");
+            break;
+        case 15702:
+            strcpy(name, "Oracle");
+            break;
+        case 15703:
+            strcpy(name, "Oracle");
+            break;
+        case 15704:
+            strcpy(name, "Oracle");
+            break;
+        case 15705:
+            strcpy(name, "Oracle");
+            break;
+        case 15711:
+            strcpy(name, "Praha");
+            break;
+        case 15712:
+            strcpy(name, "Juno");
+            break;
+        case 15713:
+            strcpy(name, "Seara");
+            break;
+        case 15714:
+            strcpy(name, "Laima");
+            break;
+        case 15715:
+            strcpy(name, "Giana");
+            break;
+        case 15801:
+            strcpy(name, "Imp Champion");
+            break;
+        case 15802:
+            strcpy(name, "Imp Champion");
+            break;
+        case 15803:
+            strcpy(name, "Imp Champion");
+            break;
+        case 15804:
+            strcpy(name, "Imp Champion");
+            break;
+        case 15805:
+            strcpy(name, "Imp Champion");
+            break;
+        case 15811:
+            strcpy(name, "Yaku");
+            break;
+        case 15812:
+            strcpy(name, "Fairo");
+            break;
+        case 15813:
+            strcpy(name, "Pigma");
+            break;
+        case 15814:
+            strcpy(name, "Shaffron");
+            break;
+        case 15815:
+            strcpy(name, "Loque");
+            break;
+        case 15901:
+            strcpy(name, "Mystic Witch");
+            break;
+        case 15902:
+            strcpy(name, "Mystic Witch");
+            break;
+        case 15903:
+            strcpy(name, "Mystic Witch");
+            break;
+        case 15904:
+            strcpy(name, "Mystic Witch");
+            break;
+        case 15905:
+            strcpy(name, "Mystic Witch");
+            break;
+        case 15911:
+            strcpy(name, "Megan");
+            break;
+        case 15912:
+            strcpy(name, "Rebecca");
+            break;
+        case 15913:
+            strcpy(name, "Silia");
+            break;
+        case 15914:
+            strcpy(name, "Linda");
+            break;
+        case 15915:
+            strcpy(name, "Gina");
+            break;
+        case 16001:
+            strcpy(name, "Grim Reaper");
+            break;
+        case 16002:
+            strcpy(name, "Grim Reaper");
+            break;
+        case 16003:
+            strcpy(name, "Grim Reaper");
+            break;
+        case 16004:
+            strcpy(name, "Grim Reaper");
+            break;
+        case 16005:
+            strcpy(name, "Grim Reaper");
+            break;
+        case 16011:
+            strcpy(name, "Hemos");
+            break;
+        case 16012:
+            strcpy(name, "Sath");
+            break;
+        case 16013:
+            strcpy(name, "Hiva");
+            break;
+        case 16014:
+            strcpy(name, "Prom");
+            break;
+        case 16015:
+            strcpy(name, "Thrain");
+            break;
+        case 16101:
+            strcpy(name, "Occult Girl");
+            break;
+        case 16102:
+            strcpy(name, "Occult Girl");
+            break;
+        case 16103:
+            strcpy(name, "Occult Girl");
+            break;
+        case 16104:
+            strcpy(name, "Occult Girl");
+            break;
+        case 16105:
+            strcpy(name, "Occult Girl");
+            break;
+        case 16111:
+            strcpy(name, "Anavel");
+            break;
+        case 16112:
+            strcpy(name, "Rica");
+            break;
+        case 16113:
+            strcpy(name, "Charlotte");
+            break;
+        case 16114:
+            strcpy(name, "Lora");
+            break;
+        case 16115:
+            strcpy(name, "Nicki");
+            break;
+        case 16201:
+            strcpy(name, "Death Knight");
+            break;
+        case 16202:
+            strcpy(name, "Death Knight");
+            break;
+        case 16203:
+            strcpy(name, "Death Knight");
+            break;
+        case 16204:
+            strcpy(name, "Death Knight");
+            break;
+        case 16205:
+            strcpy(name, "Death Knight");
+            break;
+        case 16211:
+            strcpy(name, "Fedora");
+            break;
+        case 16212:
+            strcpy(name, "Arnold");
+            break;
+        case 16213:
+            strcpy(name, "Briand");
+            break;
+        case 16214:
+            strcpy(name, "Conrad");
+            break;
+        case 16215:
+            strcpy(name, "Dias");
+            break;
+        case 16301:
+            strcpy(name, "Lich");
+            break;
+        case 16302:
+            strcpy(name, "Lich");
+            break;
+        case 16303:
+            strcpy(name, "Lich");
+            break;
+        case 16304:
+            strcpy(name, "Lich");
+            break;
+        case 16305:
+            strcpy(name, "Lich");
+            break;
+        case 16311:
+            strcpy(name, "Rigel");
+            break;
+        case 16312:
+            strcpy(name, "Antares");
+            break;
+        case 16313:
+            strcpy(name, "Fuco");
+            break;
+        case 16314:
+            strcpy(name, "Halphas");
+            break;
+        case 16315:
+            strcpy(name, "Grego");
+            break;
+        case 16401:
+            strcpy(name, "Skull Soldier");
+            break;
+        case 16402:
+            strcpy(name, "Skull Soldier");
+            break;
+        case 16403:
+            strcpy(name, "Skull Soldier");
+            break;
+        case 16501:
+            strcpy(name, "Living Armor");
+            break;
+        case 16502:
+            strcpy(name, "Living Armor");
+            break;
+        case 16503:
+            strcpy(name, "Living Armor");
+            break;
+        case 16504:
+            strcpy(name, "Living Armor");
+            break;
+        case 16505:
+            strcpy(name, "Living Armor");
+            break;
+        case 16511:
+            strcpy(name, "Nickel");
+            break;
+        case 16512:
+            strcpy(name, "Iron");
+            break;
+        case 16513:
+            strcpy(name, "Copper");
+            break;
+        case 16514:
+            strcpy(name, "Silver");
+            break;
+        case 16515:
+            strcpy(name, "Zinc");
+            break;
+        case 16601:
+            strcpy(name, "Dragon Knight");
+            break;
+        case 16602:
+            strcpy(name, "Dragon Knight");
+            break;
+        case 16603:
+            strcpy(name, "Dragon Knight");
+            break;
+        case 16604:
+            strcpy(name, "Dragon Knight");
+            break;
+        case 16605:
+            strcpy(name, "Dragon Knight");
+            break;
+        case 16611:
+            strcpy(name, "Chow");
+            break;
+        case 16612:
+            strcpy(name, "Laika");
+            break;
+        case 16613:
+            strcpy(name, "Leo");
+            break;
+        case 16614:
+            strcpy(name, "Jager");
+            break;
+        case 16615:
+            strcpy(name, "Ragdoll");
+            break;
+        case 16704:
+            strcpy(name, "Magical Archer");
+            break;
+        case 16714:
+            strcpy(name, "Fami");
+            break;
+        case 16801:
+            strcpy(name, "Monkey King");
+            break;
+        case 16802:
+            strcpy(name, "Monkey King");
+            break;
+        case 16803:
+            strcpy(name, "Monkey King");
+            break;
+        case 16804:
+            strcpy(name, "Monkey King");
+            break;
+        case 16805:
+            strcpy(name, "Monkey King");
+            break;
+        case 16811:
+            strcpy(name, "Shi Hou");
+            break;
+        case 16812:
+            strcpy(name, "Mei Hou Wang");
+            break;
+        case 16813:
+            strcpy(name, "Xing Zhe");
+            break;
+        case 16814:
+            strcpy(name, "Qitian Dasheng");
+            break;
+        case 16815:
+            strcpy(name, "Son Zhang Lao");
+            break;
+        case 16901:
+            strcpy(name, "Samurai");
+            break;
+        case 16902:
+            strcpy(name, "Samurai");
+            break;
+        case 16903:
+            strcpy(name, "Samurai");
+            break;
+        case 16904:
+            strcpy(name, "Samurai");
+            break;
+        case 16905:
+            strcpy(name, "Samurai");
+            break;
+        case 16911:
+            strcpy(name, "Kaz");
+            break;
+        case 16912:
+            strcpy(name, "Jun");
+            break;
+        case 16913:
+            strcpy(name, "Kaito");
+            break;
+        case 16914:
+            strcpy(name, "Tosi");
+            break;
+        case 16915:
+            strcpy(name, "Sige");
+            break;
+        case 16921:
+            strcpy(name, "Imperfect Samurai");
+            break;
+        case 17001:
+            strcpy(name, "Archangel");
+            break;
+        case 17002:
+            strcpy(name, "Archangel");
+            break;
+        case 17003:
+            strcpy(name, "Archangel");
+            break;
+        case 17004:
+            strcpy(name, "Archangel");
+            break;
+        case 17005:
+            strcpy(name, "Archangel");
+            break;
+        case 17011:
+            strcpy(name, "Ariel");
+            break;
+        case 17012:
+            strcpy(name, "Velajuel");
+            break;
+        case 17013:
+            strcpy(name, "Eladriel");
+            break;
+        case 17014:
+            strcpy(name, "Artamiel");
+            break;
+        case 17015:
+            strcpy(name, "Fermion");
+            break;
+        case 17101:
+            strcpy(name, "Ifrit");
+            break;
+        case 17102:
+            strcpy(name, "Ifrit");
+            break;
+        case 17103:
+            strcpy(name, "Ifrit");
+            break;
+        case 17104:
+            strcpy(name, "Ifrit");
+            break;
+        case 17105:
+            strcpy(name, "Ifrit");
+            break;
+        case 17111:
+            strcpy(name, "Theomars");
+            break;
+        case 17112:
+            strcpy(name, "Tesarion");
+            break;
+        case 17113:
+            strcpy(name, "Akhamamir");
+            break;
+        case 17114:
+            strcpy(name, "Elsharion");
+            break;
+        case 17115:
+            strcpy(name, "Veromos");
+            break;
+        case 17201:
+            strcpy(name, "Drunken Master");
+            break;
+        case 17202:
+            strcpy(name, "Drunken Master");
+            break;
+        case 17203:
+            strcpy(name, "Drunken Master");
+            break;
+        case 17204:
+            strcpy(name, "Drunken Master");
+            break;
+        case 17205:
+            strcpy(name, "Drunken Master");
+            break;
+        case 17211:
+            strcpy(name, "Mao");
+            break;
+        case 17212:
+            strcpy(name, "Xiao Chun");
+            break;
+        case 17213:
+            strcpy(name, "Huan");
+            break;
+        case 17214:
+            strcpy(name, "Tien Qin");
+            break;
+        case 17215:
+            strcpy(name, "Wei Shin");
+            break;
+        case 17301:
+            strcpy(name, "Kung Fu Girl");
+            break;
+        case 17302:
+            strcpy(name, "Kung Fu Girl");
+            break;
+        case 17303:
+            strcpy(name, "Kung Fu Girl");
+            break;
+        case 17304:
+            strcpy(name, "Kung Fu Girl");
+            break;
+        case 17305:
+            strcpy(name, "Kung Fu Girl");
+            break;
+        case 17311:
+            strcpy(name, "Xiao Lin");
+            break;
+        case 17312:
+            strcpy(name, "Hong Hua");
+            break;
+        case 17313:
+            strcpy(name, "Ling Ling");
+            break;
+        case 17314:
+            strcpy(name, "Liu Mei");
+            break;
+        case 17315:
+            strcpy(name, "Fei");
+            break;
+        case 17323:
+            strcpy(name, "Imperfect Kung Fu Girl");
+            break;
+        case 17401:
+            strcpy(name, "Beast Monk");
+            break;
+        case 17402:
+            strcpy(name, "Beast Monk");
+            break;
+        case 17403:
+            strcpy(name, "Beast Monk");
+            break;
+        case 17404:
+            strcpy(name, "Beast Monk");
+            break;
+        case 17405:
+            strcpy(name, "Beast Monk");
+            break;
+        case 17411:
+            strcpy(name, "Chandra");
+            break;
+        case 17412:
+            strcpy(name, "Kumar");
+            break;
+        case 17413:
+            strcpy(name, "Ritesh");
+            break;
+        case 17414:
+            strcpy(name, "Shazam");
+            break;
+        case 17415:
+            strcpy(name, "Rahul");
+            break;
+        case 17501:
+            strcpy(name, "Mischievous Bat");
+            break;
+        case 17502:
+            strcpy(name, "Mischievous Bat");
+            break;
+        case 17503:
+            strcpy(name, "Mischievous Bat");
+            break;
+        case 17601:
+            strcpy(name, "Battle Scorpion");
+            break;
+        case 17602:
+            strcpy(name, "Battle Scorpion");
+            break;
+        case 17603:
+            strcpy(name, "Battle Scorpion");
+            break;
+        case 17701:
+            strcpy(name, "Minotauros");
+            break;
+        case 17702:
+            strcpy(name, "Minotauros");
+            break;
+        case 17703:
+            strcpy(name, "Minotauros");
+            break;
+        case 17704:
+            strcpy(name, "Minotauros");
+            break;
+        case 17705:
+            strcpy(name, "Minotauros");
+            break;
+        case 17711:
+            strcpy(name, "Urtau");
+            break;
+        case 17712:
+            strcpy(name, "Burentau");
+            break;
+        case 17713:
+            strcpy(name, "Eintau");
+            break;
+        case 17714:
+            strcpy(name, "Grotau");
+            break;
+        case 17715:
+            strcpy(name, "Kamatau");
+            break;
+        case 17801:
+            strcpy(name, "Lizardman");
+            break;
+        case 17802:
+            strcpy(name, "Lizardman");
+            break;
+        case 17803:
+            strcpy(name, "Lizardman");
+            break;
+        case 17804:
+            strcpy(name, "Lizardman");
+            break;
+        case 17805:
+            strcpy(name, "Lizardman");
+            break;
+        case 17811:
+            strcpy(name, "Kernodon");
+            break;
+        case 17812:
+            strcpy(name, "Igmanodon");
+            break;
+        case 17813:
+            strcpy(name, "Velfinodon");
+            break;
+        case 17814:
+            strcpy(name, "Glinodon");
+            break;
+        case 17815:
+            strcpy(name, "Devinodon");
+            break;
+        case 17901:
+            strcpy(name, "Hell Lady");
+            break;
+        case 17902:
+            strcpy(name, "Hell Lady");
+            break;
+        case 17903:
+            strcpy(name, "Hell Lady");
+            break;
+        case 17904:
+            strcpy(name, "Hell Lady");
+            break;
+        case 17905:
+            strcpy(name, "Hell Lady");
+            break;
+        case 17911:
+            strcpy(name, "Beth");
+            break;
+        case 17912:
+            strcpy(name, "Raki");
+            break;
+        case 17913:
+            strcpy(name, "Ethna");
+            break;
+        case 17914:
+            strcpy(name, "Asima");
+            break;
+        case 17915:
+            strcpy(name, "Craka");
+            break;
+        case 18001:
+            strcpy(name, "Brownie Magician");
+            break;
+        case 18002:
+            strcpy(name, "Brownie Magician");
+            break;
+        case 18003:
+            strcpy(name, "Brownie Magician");
+            break;
+        case 18004:
+            strcpy(name, "Brownie Magician");
+            break;
+        case 18005:
+            strcpy(name, "Brownie Magician");
+            break;
+        case 18011:
+            strcpy(name, "Orion");
+            break;
+        case 18012:
+            strcpy(name, "Draco");
+            break;
+        case 18013:
+            strcpy(name, "Aquila");
+            break;
+        case 18014:
+            strcpy(name, "Gemini");
+            break;
+        case 18015:
+            strcpy(name, "Korona");
+            break;
+        case 18101:
+            strcpy(name, "Kobold Bomber");
+            break;
+        case 18102:
+            strcpy(name, "Kobold Bomber");
+            break;
+        case 18103:
+            strcpy(name, "Kobold Bomber");
+            break;
+        case 18104:
+            strcpy(name, "Kobold Bomber");
+            break;
+        case 18105:
+            strcpy(name, "Kobold Bomber");
+            break;
+        case 18111:
+            strcpy(name, "Malaka");
+            break;
+        case 18112:
+            strcpy(name, "Zibrolta");
+            break;
+        case 18113:
+            strcpy(name, "Taurus");
+            break;
+        case 18114:
+            strcpy(name, "Dover");
+            break;
+        case 18115:
+            strcpy(name, "Bering");
+            break;
+        case 18201:
+            strcpy(name, "King Angelmon");
+            break;
+        case 18202:
+            strcpy(name, "King Angelmon");
+            break;
+        case 18203:
+            strcpy(name, "King Angelmon");
+            break;
+        case 18204:
+            strcpy(name, "King Angelmon");
+            break;
+        case 18205:
+            strcpy(name, "King Angelmon");
+            break;
+        case 18211:
+            strcpy(name, "Blue King Angelmon");
+            break;
+        case 18212:
+            strcpy(name, "Red King Angelmon");
+            break;
+        case 18213:
+            strcpy(name, "Gold King Angelmon");
+            break;
+        case 18214:
+            strcpy(name, "White King Angelmon");
+            break;
+        case 18215:
+            strcpy(name, "Dark King Angelmon");
+            break;
+        case 18301:
+            strcpy(name, "Sky Dancer");
+            break;
+        case 18302:
+            strcpy(name, "Sky Dancer");
+            break;
+        case 18303:
+            strcpy(name, "Sky Dancer");
+            break;
+        case 18304:
+            strcpy(name, "Sky Dancer");
+            break;
+        case 18305:
+            strcpy(name, "Sky Dancer");
+            break;
+        case 18311:
+            strcpy(name, "Mihyang");
+            break;
+        case 18312:
+            strcpy(name, "Hwahee");
+            break;
+        case 18313:
+            strcpy(name, "Chasun");
+            break;
+        case 18314:
+            strcpy(name, "Yeonhong");
+            break;
+        case 18315:
+            strcpy(name, "Wolyung");
+            break;
+        case 18401:
+            strcpy(name, "Taoist");
+            break;
+        case 18402:
+            strcpy(name, "Taoist");
+            break;
+        case 18403:
+            strcpy(name, "Taoist");
+            break;
+        case 18404:
+            strcpy(name, "Taoist");
+            break;
+        case 18405:
+            strcpy(name, "Taoist");
+            break;
+        case 18411:
+            strcpy(name, "Gildong");
+            break;
+        case 18412:
+            strcpy(name, "Gunpyeong");
+            break;
+        case 18413:
+            strcpy(name, "Woochi");
+            break;
+        case 18414:
+            strcpy(name, "Hwadam");
+            break;
+        case 18415:
+            strcpy(name, "Woonhak");
+            break;
+        case 18501:
+            strcpy(name, "Beast Hunter");
+            break;
+        case 18502:
+            strcpy(name, "Beast Hunter");
+            break;
+        case 18503:
+            strcpy(name, "Beast Hunter");
+            break;
+        case 18504:
+            strcpy(name, "Beast Hunter");
+            break;
+        case 18505:
+            strcpy(name, "Beast Hunter");
+            break;
+        case 18511:
+            strcpy(name, "Gangchun");
+            break;
+        case 18512:
+            strcpy(name, "Nangrim");
+            break;
+        case 18513:
+            strcpy(name, "Suri");
+            break;
+        case 18514:
+            strcpy(name, "Baekdu");
+            break;
+        case 18515:
+            strcpy(name, "Hanra");
+            break;
+        case 18601:
+            strcpy(name, "Pioneer");
+            break;
+        case 18602:
+            strcpy(name, "Pioneer");
+            break;
+        case 18603:
+            strcpy(name, "Pioneer");
+            break;
+        case 18604:
+            strcpy(name, "Pioneer");
+            break;
+        case 18605:
+            strcpy(name, "Pioneer");
+            break;
+        case 18611:
+            strcpy(name, "Woosa");
+            break;
+        case 18612:
+            strcpy(name, "Chiwu");
+            break;
+        case 18613:
+            strcpy(name, "Pungbaek");
+            break;
+        case 18614:
+            strcpy(name, "Nigong");
+            break;
+        case 18615:
+            strcpy(name, "Woonsa");
+            break;
+        case 18701:
+            strcpy(name, "Penguin Knight");
+            break;
+        case 18702:
+            strcpy(name, "Penguin Knight");
+            break;
+        case 18703:
+            strcpy(name, "Penguin Knight");
+            break;
+        case 18704:
+            strcpy(name, "Penguin Knight");
+            break;
+        case 18705:
+            strcpy(name, "Penguin Knight");
+            break;
+        case 18711:
+            strcpy(name, "Toma");
+            break;
+        case 18712:
+            strcpy(name, "Naki");
+            break;
+        case 18713:
+            strcpy(name, "Mav");
+            break;
+        case 18714:
+            strcpy(name, "Dona");
+            break;
+        case 18715:
+            strcpy(name, "Kuna");
+            break;
+        case 18801:
+            strcpy(name, "Barbaric King");
+            break;
+        case 18802:
+            strcpy(name, "Barbaric King");
+            break;
+        case 18803:
+            strcpy(name, "Barbaric King");
+            break;
+        case 18804:
+            strcpy(name, "Barbaric King");
+            break;
+        case 18805:
+            strcpy(name, "Barbaric King");
+            break;
+        case 18811:
+            strcpy(name, "Aegir");
+            break;
+        case 18812:
+            strcpy(name, "Surtr");
+            break;
+        case 18813:
+            strcpy(name, "Hraesvelg");
+            break;
+        case 18814:
+            strcpy(name, "Mimirr");
+            break;
+        case 18815:
+            strcpy(name, "Hrungnir");
+            break;
+        case 18901:
+            strcpy(name, "Polar Queen");
+            break;
+        case 18902:
+            strcpy(name, "Polar Queen");
+            break;
+        case 18903:
+            strcpy(name, "Polar Queen");
+            break;
+        case 18904:
+            strcpy(name, "Polar Queen");
+            break;
+        case 18905:
+            strcpy(name, "Polar Queen");
+            break;
+        case 18911:
+            strcpy(name, "Alicia");
+            break;
+        case 18912:
+            strcpy(name, "Brandia");
+            break;
+        case 18913:
+            strcpy(name, "Tiana");
+            break;
+        case 18914:
+            strcpy(name, "Elenoa");
+            break;
+        case 18915:
+            strcpy(name, "Lydia");
+            break;
+        case 19001:
+            strcpy(name, "Battle Mammoth");
+            break;
+        case 19002:
+            strcpy(name, "Battle Mammoth");
+            break;
+        case 19003:
+            strcpy(name, "Battle Mammoth");
+            break;
+        case 19004:
+            strcpy(name, "Battle Mammoth");
+            break;
+        case 19005:
+            strcpy(name, "Battle Mammoth");
+            break;
+        case 19011:
+            strcpy(name, "Talc");
+            break;
+        case 19012:
+            strcpy(name, "Granite");
+            break;
+        case 19013:
+            strcpy(name, "Olivine");
+            break;
+        case 19014:
+            strcpy(name, "Marble");
+            break;
+        case 19015:
+            strcpy(name, "Basalt");
+            break;
+        case 19104:
+            strcpy(name, "Fairy Queen");
+            break;
+        case 19114:
+            strcpy(name, "Fran");
+            break;
+        case 19201:
+            strcpy(name, "Ifrit");
+            break;
+        case 19202:
+            strcpy(name, "Ifrit");
+            break;
+        case 19203:
+            strcpy(name, "Ifrit");
+            break;
+        case 19204:
+            strcpy(name, "Ifrit");
+            break;
+        case 19205:
+            strcpy(name, "Ifrit");
+            break;
+        case 19211:
+            strcpy(name, "Theomars");
+            break;
+        case 19212:
+            strcpy(name, "Tesarion");
+            break;
+        case 19213:
+            strcpy(name, "Akhamamir");
+            break;
+        case 19214:
+            strcpy(name, "Elsharion");
+            break;
+        case 19215:
+            strcpy(name, "Veromos");
+            break;
+        case 19301:
+            strcpy(name, "Cow Girl");
+            break;
+        case 19302:
+            strcpy(name, "Cow Girl");
+            break;
+        case 19303:
+            strcpy(name, "Cow Girl");
+            break;
+        case 19304:
+            strcpy(name, "Cow Girl");
+            break;
+        case 19305:
+            strcpy(name, "Cow Girl");
+            break;
+        case 19311:
+            strcpy(name, "Sera");
+            break;
+        case 19312:
+            strcpy(name, "Anne");
+            break;
+        case 19313:
+            strcpy(name, "Hannah");
+            break;
+        case 19314:
+            strcpy(name, "Loren");
+            break;
+        case 19315:
+            strcpy(name, "Cassie");
+            break;
+        case 19401:
+            strcpy(name, "Pirate Captain");
+            break;
+        case 19402:
+            strcpy(name, "Pirate Captain");
+            break;
+        case 19403:
+            strcpy(name, "Pirate Captain");
+            break;
+        case 19404:
+            strcpy(name, "Pirate Captain");
+            break;
+        case 19405:
+            strcpy(name, "Pirate Captain");
+            break;
+        case 19411:
+            strcpy(name, "Galleon");
+            break;
+        case 19412:
+            strcpy(name, "Carrack");
+            break;
+        case 19413:
+            strcpy(name, "Barque");
+            break;
+        case 19414:
+            strcpy(name, "Brig");
+            break;
+        case 19415:
+            strcpy(name, "Frigate");
+            break;
+        case 19501:
+            strcpy(name, "Charger Shark");
+            break;
+        case 19502:
+            strcpy(name, "Charger Shark");
+            break;
+        case 19503:
+            strcpy(name, "Charger Shark");
+            break;
+        case 19504:
+            strcpy(name, "Charger Shark");
+            break;
+        case 19505:
+            strcpy(name, "Charger Shark");
+            break;
+        case 19511:
+            strcpy(name, "Aqcus");
+            break;
+        case 19512:
+            strcpy(name, "Ignicus");
+            break;
+        case 19513:
+            strcpy(name, "Zephicus");
+            break;
+        case 19514:
+            strcpy(name, "Rumicus");
+            break;
+        case 19515:
+            strcpy(name, "Calicus");
+            break;
+        case 19601:
+            strcpy(name, "Mermaid");
+            break;
+        case 19602:
+            strcpy(name, "Mermaid");
+            break;
+        case 19603:
+            strcpy(name, "Mermaid");
+            break;
+        case 19604:
+            strcpy(name, "Mermaid");
+            break;
+        case 19605:
+            strcpy(name, "Mermaid");
+            break;
+        case 19611:
+            strcpy(name, "Tetra");
+            break;
+        case 19612:
+            strcpy(name, "Platy");
+            break;
+        case 19613:
+            strcpy(name, "Cichlid");
+            break;
+        case 19614:
+            strcpy(name, "Molly");
+            break;
+        case 19615:
+            strcpy(name, "Betta");
+            break;
+        case 19701:
+            strcpy(name, "Sea Emperor");
+            break;
+        case 19702:
+            strcpy(name, "Sea Emperor");
+            break;
+        case 19703:
+            strcpy(name, "Sea Emperor");
+            break;
+        case 19704:
+            strcpy(name, "Sea Emperor");
+            break;
+        case 19705:
+            strcpy(name, "Sea Emperor");
+            break;
+        case 19711:
+            strcpy(name, "Poseidon");
+            break;
+        case 19712:
+            strcpy(name, "Okeanos");
+            break;
+        case 19713:
+            strcpy(name, "Triton");
+            break;
+        case 19714:
+            strcpy(name, "Pontos");
+            break;
+        case 19715:
+            strcpy(name, "Manannan");
+            break;
+        case 19801:
+            strcpy(name, "Magic Knight");
+            break;
+        case 19802:
+            strcpy(name, "Magic Knight");
+            break;
+        case 19803:
+            strcpy(name, "Magic Knight");
+            break;
+        case 19804:
+            strcpy(name, "Magic Knight");
+            break;
+        case 19805:
+            strcpy(name, "Magic Knight");
+            break;
+        case 19811:
+            strcpy(name, "Lapis");
+            break;
+        case 19812:
+            strcpy(name, "Astar");
+            break;
+        case 19813:
+            strcpy(name, "Lupinus");
+            break;
+        case 19814:
+            strcpy(name, "Iris");
+            break;
+        case 19815:
+            strcpy(name, "Lanett");
+            break;
+        case 19823:
+            strcpy(name, "Imperfect Magic Knight");
+            break;
+        case 19901:
+            strcpy(name, "Assassin");
+            break;
+        case 19902:
+            strcpy(name, "Assassin");
+            break;
+        case 19903:
+            strcpy(name, "Assassin");
+            break;
+        case 19904:
+            strcpy(name, "Assassin");
+            break;
+        case 19905:
+            strcpy(name, "Assassin");
+            break;
+        case 19911:
+            strcpy(name, "Stella");
+            break;
+        case 19912:
+            strcpy(name, "Lexy");
+            break;
+        case 19913:
+            strcpy(name, "Tanya");
+            break;
+        case 19914:
+            strcpy(name, "Natalie");
+            break;
+        case 19915:
+            strcpy(name, "Isabelle");
+            break;
+        case 20001:
+            strcpy(name, "Neostone Fighter");
+            break;
+        case 20002:
+            strcpy(name, "Neostone Fighter");
+            break;
+        case 20003:
+            strcpy(name, "Neostone Fighter");
+            break;
+        case 20004:
+            strcpy(name, "Neostone Fighter");
+            break;
+        case 20005:
+            strcpy(name, "Neostone Fighter");
+            break;
+        case 20011:
+            strcpy(name, "Ryan");
+            break;
+        case 20012:
+            strcpy(name, "Trevor");
+            break;
+        case 20013:
+            strcpy(name, "Logan");
+            break;
+        case 20014:
+            strcpy(name, "Lucas");
+            break;
+        case 20015:
+            strcpy(name, "Karl");
+            break;
+        case 20101:
+            strcpy(name, "Neostone Agent");
+            break;
+        case 20102:
+            strcpy(name, "Neostone Agent");
+            break;
+        case 20103:
+            strcpy(name, "Neostone Agent");
+            break;
+        case 20104:
+            strcpy(name, "Neostone Agent");
+            break;
+        case 20105:
+            strcpy(name, "Neostone Agent");
+            break;
+        case 20111:
+            strcpy(name, "Emma");
+            break;
+        case 20112:
+            strcpy(name, "Lisa");
+            break;
+        case 20113:
+            strcpy(name, "Olivia");
+            break;
+        case 20114:
+            strcpy(name, "Illianna");
+            break;
+        case 20115:
+            strcpy(name, "Sylvia");
+            break;
+        case 20201:
+            strcpy(name, "Martial Artist");
+            break;
+        case 20202:
+            strcpy(name, "Martial Artist");
+            break;
+        case 20203:
+            strcpy(name, "Martial Artist");
+            break;
+        case 20204:
+            strcpy(name, "Martial Artist");
+            break;
+        case 20205:
+            strcpy(name, "Martial Artist");
+            break;
+        case 20211:
+            strcpy(name, "Luan");
+            break;
+        case 20212:
+            strcpy(name, "Sin");
+            break;
+        case 20213:
+            strcpy(name, "Lo");
+            break;
+        case 20214:
+            strcpy(name, "Hiro");
+            break;
+        case 20215:
+            strcpy(name, "Jackie");
+            break;
+        case 20301:
+            strcpy(name, "Mummy");
+            break;
+        case 20302:
+            strcpy(name, "Mummy");
+            break;
+        case 20303:
+            strcpy(name, "Mummy");
+            break;
+        case 20304:
+            strcpy(name, "Mummy");
+            break;
+        case 20305:
+            strcpy(name, "Mummy");
+            break;
+        case 20311:
+            strcpy(name, "Nubia");
+            break;
+        case 20312:
+            strcpy(name, "Sonora");
+            break;
+        case 20313:
+            strcpy(name, "Namib");
+            break;
+        case 20314:
+            strcpy(name, "Sahara");
+            break;
+        case 20315:
+            strcpy(name, "Karakum");
+            break;
+        case 20401:
+            strcpy(name, "Anubis");
+            break;
+        case 20402:
+            strcpy(name, "Anubis");
+            break;
+        case 20403:
+            strcpy(name, "Anubis");
+            break;
+        case 20404:
+            strcpy(name, "Anubis");
+            break;
+        case 20405:
+            strcpy(name, "Anubis");
+            break;
+        case 20411:
+            strcpy(name, "Avaris");
+            break;
+        case 20412:
+            strcpy(name, "Khmun");
+            break;
+        case 20413:
+            strcpy(name, "Iunu");
+            break;
+        case 20414:
+            strcpy(name, "Amarna");
+            break;
+        case 20415:
+            strcpy(name, "Thebae");
+            break;
+        case 20501:
+            strcpy(name, "Desert Queen");
+            break;
+        case 20502:
+            strcpy(name, "Desert Queen");
+            break;
+        case 20503:
+            strcpy(name, "Desert Queen");
+            break;
+        case 20504:
+            strcpy(name, "Desert Queen");
+            break;
+        case 20505:
+            strcpy(name, "Desert Queen");
+            break;
+        case 20511:
+            strcpy(name, "Bastet");
+            break;
+        case 20512:
+            strcpy(name, "Sekhmet");
+            break;
+        case 20513:
+            strcpy(name, "Hathor");
+            break;
+        case 20514:
+            strcpy(name, "Isis");
+            break;
+        case 20515:
+            strcpy(name, "Nephthys");
+            break;
+        case 20601:
+            strcpy(name, "Horus");
+            break;
+        case 20602:
+            strcpy(name, "Horus");
+            break;
+        case 20603:
+            strcpy(name, "Horus");
+            break;
+        case 20604:
+            strcpy(name, "Horus");
+            break;
+        case 20605:
+            strcpy(name, "Horus");
+            break;
+        case 20611:
+            strcpy(name, "Qebehsenuef");
+            break;
+        case 20612:
+            strcpy(name, "Duamutef");
+            break;
+        case 20613:
+            strcpy(name, "Imesety");
+            break;
+        case 20614:
+            strcpy(name, "Wedjat");
+            break;
+        case 20615:
+            strcpy(name, "Amduat");
+            break;
+        case 20621:
+            strcpy(name, "Imperfect Horus");
+            break;
+        case 20701:
+            strcpy(name, "Jack-o'-lantern");
+            break;
+        case 20702:
+            strcpy(name, "Jack-o'-lantern");
+            break;
+        case 20703:
+            strcpy(name, "Jack-o'-lantern");
+            break;
+        case 20704:
+            strcpy(name, "Jack-o'-lantern");
+            break;
+        case 20705:
+            strcpy(name, "Jack-o'-lantern");
+            break;
+        case 20711:
+            strcpy(name, "Chilling");
+            break;
+        case 20712:
+            strcpy(name, "Smokey");
+            break;
+        case 20713:
+            strcpy(name, "Windy");
+            break;
+        case 20714:
+            strcpy(name, "Misty");
+            break;
+        case 20715:
+            strcpy(name, "Dusky");
+            break;
+        case 20801:
+            strcpy(name, "Frankenstein");
+            break;
+        case 20802:
+            strcpy(name, "Frankenstein");
+            break;
+        case 20803:
+            strcpy(name, "Frankenstein");
+            break;
+        case 20804:
+            strcpy(name, "Frankenstein");
+            break;
+        case 20805:
+            strcpy(name, "Frankenstein");
+            break;
+        case 20811:
+            strcpy(name, "Tractor");
+            break;
+        case 20812:
+            strcpy(name, "Bulldozer");
+            break;
+        case 20813:
+            strcpy(name, "Crane");
+            break;
+        case 20814:
+            strcpy(name, "Driller");
+            break;
+        case 20815:
+            strcpy(name, "Crawler");
+            break;
+        case 20901:
+            strcpy(name, "Elven Ranger");
+            break;
+        case 20902:
+            strcpy(name, "Elven Ranger");
+            break;
+        case 20903:
+            strcpy(name, "Elven Ranger");
+            break;
+        case 20904:
+            strcpy(name, "Elven Ranger");
+            break;
+        case 20905:
+            strcpy(name, "Elven Ranger");
+            break;
+        case 20911:
+            strcpy(name, "Eluin");
+            break;
+        case 20912:
+            strcpy(name, "Adrian");
+            break;
+        case 20913:
+            strcpy(name, "Erwin");
+            break;
+        case 20914:
+            strcpy(name, "Lucien");
+            break;
+        case 20915:
+            strcpy(name, "Isillen");
+            break;
+        case 21001:
+            strcpy(name, "Harg");
+            break;
+        case 21002:
+            strcpy(name, "Harg");
+            break;
+        case 21003:
+            strcpy(name, "Harg");
+            break;
+        case 21004:
+            strcpy(name, "Harg");
+            break;
+        case 21005:
+            strcpy(name, "Harg");
+            break;
+        case 21011:
+            strcpy(name, "Remy");
+            break;
+        case 21012:
+            strcpy(name, "Racuni");
+            break;
+        case 21013:
+            strcpy(name, "Raviti");
+            break;
+        case 21014:
+            strcpy(name, "Dova");
+            break;
+        case 21015:
+            strcpy(name, "Kroa");
+            break;
+        case 21101:
+            strcpy(name, "Fairy King");
+            break;
+        case 21102:
+            strcpy(name, "Fairy King");
+            break;
+        case 21103:
+            strcpy(name, "Fairy King");
+            break;
+        case 21104:
+            strcpy(name, "Fairy King");
+            break;
+        case 21105:
+            strcpy(name, "Fairy King");
+            break;
+        case 21111:
+            strcpy(name, "Psamathe");
+            break;
+        case 21112:
+            strcpy(name, "Daphnis");
+            break;
+        case 21113:
+            strcpy(name, "Ganymede");
+            break;
+        case 21114:
+            strcpy(name, "Oberon");
+            break;
+        case 21115:
+            strcpy(name, "Nyx");
+            break;
+        case 21201:
+            strcpy(name, "Panda Warrior");
+            break;
+        case 21202:
+            strcpy(name, "Panda Warrior");
+            break;
+        case 21203:
+            strcpy(name, "Panda Warrior");
+            break;
+        case 21204:
+            strcpy(name, "Panda Warrior");
+            break;
+        case 21205:
+            strcpy(name, "Panda Warrior");
+            break;
+        case 21211:
+            strcpy(name, "Mo Long");
+            break;
+        case 21212:
+            strcpy(name, "Xiong Fei");
+            break;
+        case 21213:
+            strcpy(name, "Feng Yan");
+            break;
+        case 21214:
+            strcpy(name, "Tian Lang");
+            break;
+        case 21215:
+            strcpy(name, "Mi Ying");
+            break;
+        case 21301:
+            strcpy(name, "Dice Magician");
+            break;
+        case 21302:
+            strcpy(name, "Dice Magician");
+            break;
+        case 21303:
+            strcpy(name, "Dice Magician");
+            break;
+        case 21304:
+            strcpy(name, "Dice Magician");
+            break;
+        case 21305:
+            strcpy(name, "Dice Magician");
+            break;
+        case 21311:
+            strcpy(name, "Reno");
+            break;
+        case 21312:
+            strcpy(name, "Ludo");
+            break;
+        case 21313:
+            strcpy(name, "Morris");
+            break;
+        case 21314:
+            strcpy(name, "Tablo");
+            break;
+        case 21315:
+            strcpy(name, "Monte");
+            break;
+        case 21401:
+            strcpy(name, "Harp Magician");
+            break;
+        case 21402:
+            strcpy(name, "Harp Magician");
+            break;
+        case 21403:
+            strcpy(name, "Harp Magician");
+            break;
+        case 21404:
+            strcpy(name, "Harp Magician");
+            break;
+        case 21405:
+            strcpy(name, "Harp Magician");
+            break;
+        case 21411:
+            strcpy(name, "Sonnet");
+            break;
+        case 21412:
+            strcpy(name, "Harmonia");
+            break;
+        case 21413:
+            strcpy(name, "Triana");
+            break;
+        case 21414:
+            strcpy(name, "Celia");
+            break;
+        case 21415:
+            strcpy(name, "Vivachel");
+            break;
+        case 21422:
+            strcpy(name, "Imperfect Harp Magician");
+            break;
+        case 21501:
+            strcpy(name, "Unicorn");
+            break;
+        case 21502:
+            strcpy(name, "Unicorn");
+            break;
+        case 21503:
+            strcpy(name, "Unicorn");
+            break;
+        case 21504:
+            strcpy(name, "Unicorn");
+            break;
+        case 21505:
+            strcpy(name, "Unicorn");
+            break;
+        case 21511:
+            strcpy(name, "Amelia");
+            break;
+        case 21512:
+            strcpy(name, "Helena");
+            break;
+        case 21513:
+            strcpy(name, "Diana");
+            break;
+        case 21514:
+            strcpy(name, "Eleanor");
+            break;
+        case 21515:
+            strcpy(name, "Alexandra");
+            break;
+        case 21611:
+            strcpy(name, "Amelia");
+            break;
+        case 21612:
+            strcpy(name, "Helena");
+            break;
+        case 21613:
+            strcpy(name, "Diana");
+            break;
+        case 21614:
+            strcpy(name, "Eleanor");
+            break;
+        case 21615:
+            strcpy(name, "Alexandra");
+            break;
+        case 21714:
+            strcpy(name, "Super Angelmon");
+            break;
+        case 21801:
+            strcpy(name, "Paladin");
+            break;
+        case 21802:
+            strcpy(name, "Paladin");
+            break;
+        case 21803:
+            strcpy(name, "Paladin");
+            break;
+        case 21804:
+            strcpy(name, "Paladin");
+            break;
+        case 21805:
+            strcpy(name, "Paladin");
+            break;
+        case 21811:
+            strcpy(name, "Josephine");
+            break;
+        case 21812:
+            strcpy(name, "Ophilia");
+            break;
+        case 21813:
+            strcpy(name, "Louise");
+            break;
+        case 21814:
+            strcpy(name, "Jeanne");
+            break;
+        case 21815:
+            strcpy(name, "Leona");
+            break;
+        case 21901:
+            strcpy(name, "Chakram Dancer");
+            break;
+        case 21902:
+            strcpy(name, "Chakram Dancer");
+            break;
+        case 21903:
+            strcpy(name, "Chakram Dancer");
+            break;
+        case 21904:
+            strcpy(name, "Chakram Dancer");
+            break;
+        case 21905:
+            strcpy(name, "Chakram Dancer");
+            break;
+        case 21911:
+            strcpy(name, "Talia");
+            break;
+        case 21912:
+            strcpy(name, "Shaina");
+            break;
+        case 21913:
+            strcpy(name, "Melissa");
+            break;
+        case 21914:
+            strcpy(name, "Deva");
+            break;
+        case 21915:
+            strcpy(name, "Belita");
+            break;
+        case 22001:
+            strcpy(name, "Boomerang Warrior");
+            break;
+        case 22002:
+            strcpy(name, "Boomerang Warrior");
+            break;
+        case 22003:
+            strcpy(name, "Boomerang Warrior");
+            break;
+        case 22004:
+            strcpy(name, "Boomerang Warrior");
+            break;
+        case 22005:
+            strcpy(name, "Boomerang Warrior");
+            break;
+        case 22011:
+            strcpy(name, "Sabrina");
+            break;
+        case 22012:
+            strcpy(name, "Maruna");
+            break;
+        case 22013:
+            strcpy(name, "Zenobia");
+            break;
+        case 22014:
+            strcpy(name, "Bailey");
+            break;
+        case 22015:
+            strcpy(name, "Martina");
+            break;
+        case 22101:
+            strcpy(name, "Dryad");
+            break;
+        case 22102:
+            strcpy(name, "Dryad");
+            break;
+        case 22103:
+            strcpy(name, "Dryad");
+            break;
+        case 22104:
+            strcpy(name, "Dryad");
+            break;
+        case 22105:
+            strcpy(name, "Dryad");
+            break;
+        case 22111:
+            strcpy(name, "Herne");
+            break;
+        case 22112:
+            strcpy(name, "Nisha");
+            break;
+        case 22113:
+            strcpy(name, "Mellia");
+            break;
+        case 22114:
+            strcpy(name, "Felleria");
+            break;
+        case 22115:
+            strcpy(name, "Hyanes");
+            break;
+        case 22201:
+            strcpy(name, "Druid");
+            break;
+        case 22202:
+            strcpy(name, "Druid");
+            break;
+        case 22203:
+            strcpy(name, "Druid");
+            break;
+        case 22204:
+            strcpy(name, "Druid");
+            break;
+        case 22205:
+            strcpy(name, "Druid");
+            break;
+        case 22211:
+            strcpy(name, "Abellio");
+            break;
+        case 22212:
+            strcpy(name, "Bellenus");
+            break;
+        case 22213:
+            strcpy(name, "Taranys");
+            break;
+        case 22214:
+            strcpy(name, "Valantis");
+            break;
+        case 22215:
+            strcpy(name, "Pater");
+            break;
+        case 22311:
+            strcpy(name, "Abellio");
+            break;
+        case 22312:
+            strcpy(name, "Bellenus");
+            break;
+        case 22313:
+            strcpy(name, "Taranys");
+            break;
+        case 22314:
+            strcpy(name, "Valantis");
+            break;
+        case 22315:
+            strcpy(name, "Pater");
+            break;
+        case 22401:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22402:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22403:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22404:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22405:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22411:
+            strcpy(name, "Bagir");
+            break;
+        case 22412:
+            strcpy(name, "Vidurr");
+            break;
+        case 22413:
+            strcpy(name, "Skogul");
+            break;
+        case 22414:
+            strcpy(name, "Einheri");
+            break;
+        case 22415:
+            strcpy(name, "Trasar");
+            break;
+        case 22503:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22505:
+            strcpy(name, "Giant Warrior");
+            break;
+        case 22513:
+            strcpy(name, "Skogul");
+            break;
+        case 22515:
+            strcpy(name, "Trasar");
+            break;
+        case 22601:
+            strcpy(name, "Lightning Emperor");
+            break;
+        case 22602:
+            strcpy(name, "Lightning Emperor");
+            break;
+        case 22603:
+            strcpy(name, "Lightning Emperor");
+            break;
+        case 22604:
+            strcpy(name, "Lightning Emperor");
+            break;
+        case 22605:
+            strcpy(name, "Lightning Emperor");
+            break;
+        case 22611:
+            strcpy(name, "Bolverk");
+            break;
+        case 22612:
+            strcpy(name, "Baleygr");
+            break;
+        case 22613:
+            strcpy(name, "Odin");
+            break;
+        case 22614:
+            strcpy(name, "Geldnir");
+            break;
+        case 22615:
+            strcpy(name, "Herteit");
+            break;
+        case 22701:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22702:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22703:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22704:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22705:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22711:
+            strcpy(name, "Covenant");
+            break;
+        case 22712:
+            strcpy(name, "Carcano");
+            break;
+        case 22713:
+            strcpy(name, "Carbine");
+            break;
+        case 22714:
+            strcpy(name, "Magnum");
+            break;
+        case 22715:
+            strcpy(name, "Dragunov");
+            break;
+        case 22802:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22803:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22805:
+            strcpy(name, "Sniper Mk.I");
+            break;
+        case 22812:
+            strcpy(name, "Carcano");
+            break;
+        case 22813:
+            strcpy(name, "Carbine");
+            break;
+        case 22815:
+            strcpy(name, "Dragunov");
+            break;
+        case 22901:
+            strcpy(name, "Cannon Girl");
+            break;
+        case 22902:
+            strcpy(name, "Cannon Girl");
+            break;
+        case 22903:
+            strcpy(name, "Cannon Girl");
+            break;
+        case 22904:
+            strcpy(name, "Cannon Girl");
+            break;
+        case 22905:
+            strcpy(name, "Cannon Girl");
+            break;
+        case 22911:
+            strcpy(name, "Abigail");
+            break;
+        case 22912:
+            strcpy(name, "Scarlett");
+            break;
+        case 22913:
+            strcpy(name, "Christina");
+            break;
+        case 22914:
+            strcpy(name, "Emily");
+            break;
+        case 22915:
+            strcpy(name, "Bella");
+            break;
+        case 23005:
+            strcpy(name, "Vampire Lord");
+            break;
+        case 23015:
+            strcpy(name, "Eirgar");
+            break;
+        case 23101:
+            strcpy(name, "Demon");
+            break;
+        case 23102:
+            strcpy(name, "Demon");
+            break;
+        case 23103:
+            strcpy(name, "Demon");
+            break;
+        case 23104:
+            strcpy(name, "Demon");
+            break;
+        case 23105:
+            strcpy(name, "Demon");
+            break;
+        case 23111:
+            strcpy(name, "Belial");
+            break;
+        case 23112:
+            strcpy(name, "Bael");
+            break;
+        case 23113:
+            strcpy(name, "Mephisto");
+            break;
+        case 23114:
+            strcpy(name, "Lucifer");
+            break;
+        case 23115:
+            strcpy(name, "Beelzebub");
+            break;
+        case 23201:
+            strcpy(name, "데몬(물)");
+            break;
+        case 23205:
+            strcpy(name, "데몬(어둠)");
+            break;
+        case 23211:
+            strcpy(name, "데몬(물)");
+            break;
+        case 23215:
+            strcpy(name, "데몬(어둠)");
+            break;
+        case 23301:
+            strcpy(name, "Gargoyle");
+            break;
+        case 23302:
+            strcpy(name, "Gargoyle");
+            break;
+        case 23303:
+            strcpy(name, "Gargoyle");
+            break;
+        case 23304:
+            strcpy(name, "Gargoyle");
+            break;
+        case 23305:
+            strcpy(name, "Gargoyle");
+            break;
+        case 23311:
+            strcpy(name, "Tanzaite");
+            break;
+        case 23312:
+            strcpy(name, "Kunite");
+            break;
+        case 23313:
+            strcpy(name, "Malite");
+            break;
+        case 23314:
+            strcpy(name, "Phenaka");
+            break;
+        case 23315:
+            strcpy(name, "Onyx");
+            break;
+        case 23401:
+            strcpy(name, "가고일(물)");
+            break;
+        case 23402:
+            strcpy(name, "가고일(불)");
+            break;
+        case 23403:
+            strcpy(name, "가고일(바람)");
+            break;
+        case 23404:
+            strcpy(name, "가고일(빛)");
+            break;
+        case 23405:
+            strcpy(name, "가고일(어둠)");
+            break;
+        case 23411:
+            strcpy(name, "가고일(물)");
+            break;
+        case 23412:
+            strcpy(name, "가고일(불)");
+            break;
+        case 23413:
+            strcpy(name, "가고일(바람)");
+            break;
+        case 23414:
+            strcpy(name, "가고일(빛)");
+            break;
+        case 23415:
+            strcpy(name, "가고일(어둠)");
+            break;
+        case 23501:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23502:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23503:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23504:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23505:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23511:
+            strcpy(name, "Barbara");
+            break;
+        case 23512:
+            strcpy(name, "Masha");
+            break;
+        case 23513:
+            strcpy(name, "Savannah");
+            break;
+        case 23514:
+            strcpy(name, "Narsha");
+            break;
+        case 23515:
+            strcpy(name, "Xiana");
+            break;
+        case 23601:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23602:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23603:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23604:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23605:
+            strcpy(name, "Beast Rider");
+            break;
+        case 23611:
+            strcpy(name, "Barbara");
+            break;
+        case 23612:
+            strcpy(name, "Masha");
+            break;
+        case 23613:
+            strcpy(name, "Savannah");
+            break;
+        case 23614:
+            strcpy(name, "Narsha");
+            break;
+        case 23615:
+            strcpy(name, "Xiana");
+            break;
+        case 23701:
+            strcpy(name, "Art Master");
+            break;
+        case 23702:
+            strcpy(name, "Art Master");
+            break;
+        case 23703:
+            strcpy(name, "Art Master");
+            break;
+        case 23704:
+            strcpy(name, "Art Master");
+            break;
+        case 23705:
+            strcpy(name, "Art Master");
+            break;
+        case 23711:
+            strcpy(name, "Haegang");
+            break;
+        case 23712:
+            strcpy(name, "Jeogun");
+            break;
+        case 23713:
+            strcpy(name, "Cheongpung");
+            break;
+        case 23714:
+            strcpy(name, "Hanwul");
+            break;
+        case 23715:
+            strcpy(name, "Mookwol");
+            break;
+        case 23801:
+            strcpy(name, "족자(물)");
+            break;
+        case 23802:
+            strcpy(name, "족자(불)");
+            break;
+        case 23803:
+            strcpy(name, "족자(바람)");
+            break;
+        case 23804:
+            strcpy(name, "족자(빛)");
+            break;
+        case 23805:
+            strcpy(name, "족자(어둠)");
+            break;
+        case 23806:
+            strcpy(name, "족자(무)");
+            break;
+        case 23901:
+            strcpy(name, "String Master");
+            break;
+        case 23902:
+            strcpy(name, "String Master");
+            break;
+        case 23903:
+            strcpy(name, "String Master");
+            break;
+        case 23904:
+            strcpy(name, "String Master");
+            break;
+        case 23905:
+            strcpy(name, "String Master");
+            break;
+        case 23911:
+            strcpy(name, "Songseol");
+            break;
+        case 23912:
+            strcpy(name, "Hongyeon");
+            break;
+        case 23913:
+            strcpy(name, "Yeonhwa");
+            break;
+        case 23914:
+            strcpy(name, "Dongbaek");
+            break;
+        case 23915:
+            strcpy(name, "Mirinae");
+            break;
+        case 24001:
+            strcpy(name, "류(물)");
+            break;
+        case 24002:
+            strcpy(name, "류(불)");
+            break;
+        case 24003:
+            strcpy(name, "류(바람)");
+            break;
+        case 24004:
+            strcpy(name, "류(빛)");
+            break;
+        case 24005:
+            strcpy(name, "류(어둠)");
+            break;
+        case 24011:
+            strcpy(name, "RYU");
+            break;
+        case 24012:
+            strcpy(name, "RYU");
+            break;
+        case 24013:
+            strcpy(name, "RYU");
+            break;
+        case 24014:
+            strcpy(name, "RYU");
+            break;
+        case 24015:
+            strcpy(name, "RYU");
+            break;
+        case 24102:
+            strcpy(name, "켄(불)");
+            break;
+        case 24112:
+            strcpy(name, "KEN");
+            break;
+        case 24201:
+            strcpy(name, "바이슨(물)");
+            break;
+        case 24202:
+            strcpy(name, "바이슨(불)");
+            break;
+        case 24203:
+            strcpy(name, "바이슨(바람)");
+            break;
+        case 24204:
+            strcpy(name, "바이슨(빛)");
+            break;
+        case 24205:
+            strcpy(name, "바이슨(어둠)");
+            break;
+        case 24211:
+            strcpy(name, "M. BISON");
+            break;
+        case 24212:
+            strcpy(name, "M. BISON");
+            break;
+        case 24213:
+            strcpy(name, "M. BISON");
+            break;
+        case 24214:
+            strcpy(name, "M. BISON");
+            break;
+        case 24215:
+            strcpy(name, "M. BISON");
+            break;
+        case 24301:
+            strcpy(name, "달심(물)");
+            break;
+        case 24302:
+            strcpy(name, "달심(불)");
+            break;
+        case 24303:
+            strcpy(name, "달심(바람)");
+            break;
+        case 24304:
+            strcpy(name, "달심(빛)");
+            break;
+        case 24305:
+            strcpy(name, "달심(어둠)");
+            break;
+        case 24311:
+            strcpy(name, "DHALSIM");
+            break;
+        case 24312:
+            strcpy(name, "DHALSIM");
+            break;
+        case 24313:
+            strcpy(name, "DHALSIM");
+            break;
+        case 24314:
+            strcpy(name, "DHALSIM");
+            break;
+        case 24315:
+            strcpy(name, "DHALSIM");
+            break;
+        case 24401:
+            strcpy(name, "춘리(물)");
+            break;
+        case 24402:
+            strcpy(name, "춘리(불)");
+            break;
+        case 24403:
+            strcpy(name, "춘리(바람)");
+            break;
+        case 24404:
+            strcpy(name, "춘리(빛)");
+            break;
+        case 24405:
+            strcpy(name, "춘리(어둠)");
+            break;
+        case 24411:
+            strcpy(name, "CHUN-LI");
+            break;
+        case 24412:
+            strcpy(name, "CHUN-LI");
+            break;
+        case 24413:
+            strcpy(name, "CHUN-LI");
+            break;
+        case 24414:
+            strcpy(name, "CHUN-LI");
+            break;
+        case 24415:
+            strcpy(name, "CHUN-LI");
+            break;
+        case 24501:
+            strcpy(name, "Striker");
+            break;
+        case 24502:
+            strcpy(name, "Striker");
+            break;
+        case 24503:
+            strcpy(name, "Striker");
+            break;
+        case 24504:
+            strcpy(name, "Striker");
+            break;
+        case 24505:
+            strcpy(name, "Striker");
+            break;
+        case 24511:
+            strcpy(name, "Moore");
+            break;
+        case 24512:
+            strcpy(name, "Douglas");
+            break;
+        case 24513:
+            strcpy(name, "Kashmir");
+            break;
+        case 24514:
+            strcpy(name, "Talisman");
+            break;
+        case 24515:
+            strcpy(name, "Vancliffe");
+            break;
+        case 24602:
+            strcpy(name, "Shadow Claw");
+            break;
+        case 24612:
+            strcpy(name, "Bernadotte");
+            break;
+        case 24701:
+            strcpy(name, "Slayer");
+            break;
+        case 24702:
+            strcpy(name, "Slayer");
+            break;
+        case 24703:
+            strcpy(name, "Slayer");
+            break;
+        case 24704:
+            strcpy(name, "Slayer");
+            break;
+        case 24705:
+            strcpy(name, "Slayer");
+            break;
+        case 24711:
+            strcpy(name, "Borgnine");
+            break;
+        case 24712:
+            strcpy(name, "Karnal");
+            break;
+        case 24713:
+            strcpy(name, "Sagar");
+            break;
+        case 24714:
+            strcpy(name, "Craig");
+            break;
+        case 24715:
+            strcpy(name, "Gurkha");
+            break;
+        case 24801:
+            strcpy(name, "Poison Master");
+            break;
+        case 24802:
+            strcpy(name, "Poison Master");
+            break;
+        case 24803:
+            strcpy(name, "Poison Master");
+            break;
+        case 24804:
+            strcpy(name, "Poison Master");
+            break;
+        case 24805:
+            strcpy(name, "Poison Master");
+            break;
+        case 24811:
+            strcpy(name, "Kyle");
+            break;
+        case 24812:
+            strcpy(name, "Todd");
+            break;
+        case 24813:
+            strcpy(name, "Jarrett");
+            break;
+        case 24814:
+            strcpy(name, "Hekerson");
+            break;
+        case 24815:
+            strcpy(name, "Cayde");
+            break;
+        case 24901:
+            strcpy(name, "Blade Dancer");
+            break;
+        case 24902:
+            strcpy(name, "Blade Dancer");
+            break;
+        case 24903:
+            strcpy(name, "Blade Dancer");
+            break;
+        case 24904:
+            strcpy(name, "Blade Dancer");
+            break;
+        case 24905:
+            strcpy(name, "Blade Dancer");
+            break;
+        case 24911:
+            strcpy(name, "Lariel");
+            break;
+        case 24912:
+            strcpy(name, "Berenice");
+            break;
+        case 24913:
+            strcpy(name, "Cordelia");
+            break;
+        case 24914:
+            strcpy(name, "Leah");
+            break;
+        case 24915:
+            strcpy(name, "Vereesa");
+            break;
+        case 40101:
+            strcpy(name, "Inugami");
+            break;
+        case 40201:
+            strcpy(name, "Phoenix");
+            break;
+        case 40302:
+            strcpy(name, "Golem");
+            break;
+        case 40403:
+            strcpy(name, "Sylphid");
+            break;
+        case 40501:
+            strcpy(name, "Undine");
+            break;
+        case 40602:
+            strcpy(name, "Inferno");
+            break;
+        case 40703:
+            strcpy(name, "Chimera");
+            break;
+        case 40803:
+            strcpy(name, "Salamander");
+            break;
+        case 40903:
+            strcpy(name, "Sylph");
+            break;
+        case 41006:
+            strcpy(name, "Otherworldly Dragon");
+            break;
+        case 41101:
+            strcpy(name, "Death Knight");
+            break;
+        case 41202:
+            strcpy(name, "Lich");
+            break;
+        case 41303:
+            strcpy(name, "Keeper of Remains");
+            break;
+        case 41401:
+            strcpy(name, "Contaminated Dragon");
+            break;
+        case 42006:
+            strcpy(name, "Ath'taros");
+            break;
+        case 42106:
+            strcpy(name, "Lyrith");
+            break;
+        case 42206:
+            strcpy(name, "Lyrith");
+            break;
+        case 43001:
+            strcpy(name, "Ice Beast");
+            break;
+        case 43002:
+            strcpy(name, "Fire Beast");
+            break;
+        case 43003:
+            strcpy(name, "Wind Beast");
+            break;
+        case 43004:
+            strcpy(name, "Light Beast");
+            break;
+        case 43005:
+            strcpy(name, "Dark Beast");
+            break;
+        case 44007:
+            strcpy(name, "Chaos Beast Khi'zar Kha'jul");
+            break;
+        case 44008:
+            strcpy(name, "Chaos Beast Khi'zar Kha'jul");
+            break;
+        case 44009:
+            strcpy(name, "Chaos Beast Khi'zar Kha'jul");
+            break;
+        case 45001:
+            strcpy(name, "형상아이템용 더미(물)");
+            break;
+        case 45002:
+            strcpy(name, "형상아이템용 더미(불)");
+            break;
+        case 45003:
+            strcpy(name, "형상아이템용 더미(바람)");
+            break;
+        case 45004:
+            strcpy(name, "형상아이템용 더미(빛)");
+            break;
+        case 45005:
+            strcpy(name, "형상아이템용 더미(어둠)");
+            break;
+        case 46001:
+            strcpy(name, "Tartarus");
+            break;
+        case 46002:
+            strcpy(name, "미궁 보스 머리");
+            break;
+        case 46003:
+            strcpy(name, "미궁 보스 왼쪽팔");
+            break;
+        case 46004:
+            strcpy(name, "미궁 보스 오른쪽팔");
+            break;
+        case 46101:
+            strcpy(name, "Leos");
+            break;
+        case 46102:
+            strcpy(name, "Kotos");
+            break;
+        case 46103:
+            strcpy(name, "Guilles");
+            break;
+        case 46201:
+            strcpy(name, "미궁 룬문양 (물)");
+            break;
+        case 46202:
+            strcpy(name, "미궁 룬문양 (불)");
+            break;
+        case 46203:
+            strcpy(name, "미궁 룬문양 (바람)");
+            break;
+        case 46301:
+            strcpy(name, "Leos");
+            break;
+        case 46302:
+            strcpy(name, "Kotos");
+            break;
+        case 46303:
+            strcpy(name, "Guilles");
+            break;
+        case 46304:
+            strcpy(name, "Leos");
+            break;
+        case 46305:
+            strcpy(name, "Kotos");
+            break;
+        case 46306:
+            strcpy(name, "Guilles");
+            break;
+        case 46307:
+            strcpy(name, "Leos");
+            break;
+        case 46308:
+            strcpy(name, "Kotos");
+            break;
+        case 46309:
+            strcpy(name, "Guilles");
+            break;
+        case 47001:
+            strcpy(name, "Ancient Guardian");
+            break;
+        case 47002:
+            strcpy(name, "Ancient Guardian");
+            break;
+        case 47003:
+            strcpy(name, "Ancient Guardian");
+            break;
+        case 47101:
+            strcpy(name, "Fairy 2A");
+            break;
+        case 47102:
+            strcpy(name, "Fairy 2A");
+            break;
+        case 47103:
+            strcpy(name, "Fairy 2A");
+            break;
+        case 47104:
+            strcpy(name, "Fairy 2A");
+            break;
+        case 47105:
+            strcpy(name, "Fairy 2A");
+            break;
+        case 47201:
+            strcpy(name, "Pixie 2A");
+            break;
+        case 47202:
+            strcpy(name, "Pixie 2A");
+            break;
+        case 47203:
+            strcpy(name, "Pixie 2A");
+            break;
+        case 47204:
+            strcpy(name, "Pixie 2A");
+            break;
+        case 47205:
+            strcpy(name, "Pixie 2A");
+            break;
+        case 47301:
+            strcpy(name, "Warbear 2A");
+            break;
+        case 47302:
+            strcpy(name, "Warbear 2A");
+            break;
+        case 47303:
+            strcpy(name, "Warbear 2A");
+            break;
+        case 47304:
+            strcpy(name, "Warbear 2A");
+            break;
+        case 47305:
+            strcpy(name, "Warbear 2A");
+            break;
+        case 47401:
+            strcpy(name, "Inugami 2A");
+            break;
+        case 47402:
+            strcpy(name, "Inugami 2A");
+            break;
+        case 47403:
+            strcpy(name, "Inugami 2A");
+            break;
+        case 47404:
+            strcpy(name, "Inugami 2A");
+            break;
+        case 47405:
+            strcpy(name, "Inugami 2A");
+            break;
+        case 47501:
+            strcpy(name, "Werewolf 2A");
+            break;
+        case 47502:
+            strcpy(name, "Werewolf 2A");
+            break;
+        case 47503:
+            strcpy(name, "Werewolf 2A");
+            break;
+        case 47504:
+            strcpy(name, "Werewolf 2A");
+            break;
+        case 47505:
+            strcpy(name, "Werewolf 2A");
+            break;
+        case 47601:
+            strcpy(name, "Martial Cat 2A");
+            break;
+        case 47602:
+            strcpy(name, "Martial Cat 2A");
+            break;
+        case 47603:
+            strcpy(name, "Martial Cat 2A");
+            break;
+        case 47604:
+            strcpy(name, "Martial Cat 2A");
+            break;
+        case 47605:
+            strcpy(name, "Martial Cat 2A");
+            break;
+        case 47701:
+            strcpy(name, "Griffon 2A");
+            break;
+        case 47702:
+            strcpy(name, "Griffon 2A");
+            break;
+        case 47703:
+            strcpy(name, "Griffon 2A");
+            break;
+        case 47704:
+            strcpy(name, "Griffon 2A");
+            break;
+        case 47705:
+            strcpy(name, "Griffon 2A");
+            break;
+        case 60101:
+            strcpy(name, "Keeper of Water");
+            break;
+        case 60102:
+            strcpy(name, "Keeper of Fire");
+            break;
+        case 60103:
+            strcpy(name, "Keeper of Wind");
+            break;
+        case 60104:
+            strcpy(name, "Keeper of Light");
+            break;
+        case 60105:
+            strcpy(name, "Keeper of Darkness");
+            break;
+        case 60201:
+            strcpy(name, "Ancient Giant");
+            break;
+        case 60202:
+            strcpy(name, "Ancient Giant");
+            break;
+        case 60203:
+            strcpy(name, "Ancient Giant");
+            break;
+        case 60204:
+            strcpy(name, "Ancient Giant");
+            break;
+        case 60205:
+            strcpy(name, "Ancient Giant");
+            break;
+        case 60301:
+            strcpy(name, "Legendary Dragon");
+            break;
+        case 60302:
+            strcpy(name, "Legendary Dragon");
+            break;
+        case 60303:
+            strcpy(name, "Legendary Dragon");
+            break;
+        case 60304:
+            strcpy(name, "Legendary Dragon");
+            break;
+        case 60305:
+            strcpy(name, "Legendary Dragon");
+            break;
+        case 60401:
+            strcpy(name, "Angelmon");
+            break;
+        case 60402:
+            strcpy(name, "Angelmon");
+            break;
+        case 60403:
+            strcpy(name, "Angelmon");
+            break;
+        case 60404:
+            strcpy(name, "Angelmon");
+            break;
+        case 60405:
+            strcpy(name, "Angelmon");
+            break;
+        case 60501:
+            strcpy(name, "Angelmon");
+            break;
+        case 60502:
+            strcpy(name, "Angelmon");
+            break;
+        case 60503:
+            strcpy(name, "Angelmon");
+            break;
+        case 60504:
+            strcpy(name, "Angelmon");
+            break;
+        case 60505:
+            strcpy(name, "Angelmon");
+            break;
+        case 60601:
+            strcpy(name, "Angelmon");
+            break;
+        case 60602:
+            strcpy(name, "Angelmon");
+            break;
+        case 60603:
+            strcpy(name, "Angelmon");
+            break;
+        case 60604:
+            strcpy(name, "Angelmon");
+            break;
+        case 60605:
+            strcpy(name, "Angelmon");
+            break;
+        case 60701:
+            strcpy(name, "Angelmon");
+            break;
+        case 60702:
+            strcpy(name, "Angelmon");
+            break;
+        case 60703:
+            strcpy(name, "Angelmon");
+            break;
+        case 60704:
+            strcpy(name, "Angelmon");
+            break;
+        case 60705:
+            strcpy(name, "Angelmon");
+            break;
+        case 60804:
+            strcpy(name, "Rainbowmon");
+            break;
+        case 60805:
+            strcpy(name, "Devilmon");
+            break;
+        case 60904:
+            strcpy(name, "Rainbowmon");
+            break;
+        case 60905:
+            strcpy(name, "Devilmon");
+            break;
+        case 61004:
+            strcpy(name, "Rainbowmon");
+            break;
+        case 61005:
+            strcpy(name, "Devilmon");
+            break;
+        case 61104:
+            strcpy(name, "Rainbowmon");
+            break;
+        case 61105:
+            strcpy(name, "Devilmon");
+            break;
+        case 62004:
+            strcpy(name, "Keeper of Magic");
+            break;
+        case 62101:
+            strcpy(name, "Ancient Lich King");
+            break;
+        case 62102:
+            strcpy(name, "Ancient Lich King");
+            break;
+        case 62103:
+            strcpy(name, "Ancient Lich King");
+            break;
+        case 62104:
+            strcpy(name, "Ancient Lich King");
+            break;
+        case 62105:
+            strcpy(name, "Ancient Lich King");
+            break;
+        case 62200:
+            strcpy(name, "월드보스-고대골렘");
+            break;
+        case 62303:
+            strcpy(name, "Ancient Intercessor");
+            break;
+        case 62403:
+            strcpy(name, "Ancient Tormentor");
+            break;
+        case 62504:
+            strcpy(name, "Ancient Intercessor");
+            break;
+        case 62604:
+            strcpy(name, "Ancient Punisher");
+            break;
+        case 63102:
+            strcpy(name, "만랩튜토리얼보스(불)");
+            break;
+        case 63202:
+            strcpy(name, "만랩튜토리얼_드래곤(불)");
+            break;
+        case 63301:
+            strcpy(name, "만랩튜토리얼_가고일(물)");
+            break;
+        case 63302:
+            strcpy(name, "만랩튜토리얼_가고일(불)");
+            break;
+        case 63303:
+            strcpy(name, "만랩튜토리얼_가고일(바람)");
+            break;
+        case 70001:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70002:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70003:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70004:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70005:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70101:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70102:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70103:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70104:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70105:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70201:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70202:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70203:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70204:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 70205:
+            strcpy(name, "Dimension Predator");
+            break;
+        case 71004:
+            strcpy(name, "Hollow");
+            break;
+        case 71005:
+            strcpy(name, "Hollow");
+            break;
+        case 71101:
+            strcpy(name, "Void");
+            break;
+        case 71102:
+            strcpy(name, "Void");
+            break;
+        case 71103:
+            strcpy(name, "Void");
+            break;
+        case 100116:
+            strcpy(name, "Tower");
+            break;
+        case 100126:
+            strcpy(name, "Tower");
+            break;
+        case 100136:
+            strcpy(name, "Tower");
+            break;
+        case 100146:
+            strcpy(name, "Tower");
+            break;
+        case 100156:
+            strcpy(name, "Tower");
+            break;
+        case 100216:
+            strcpy(name, "Tower");
+            break;
+        case 100226:
+            strcpy(name, "Tower");
+            break;
+        case 100236:
+            strcpy(name, "Tower");
+            break;
+        case 100246:
+            strcpy(name, "Tower");
+            break;
+        case 100256:
+            strcpy(name, "Tower");
+            break;
+        case 100316:
+            strcpy(name, "Tower");
+            break;
+        case 100326:
+            strcpy(name, "Tower");
+            break;
+        case 100336:
+            strcpy(name, "Tower");
+            break;
+        case 100346:
+            strcpy(name, "Tower");
+            break;
+        case 100356:
+            strcpy(name, "Tower");
+            break;
+        case 100416:
+            strcpy(name, "Tower");
+            break;
+        case 100426:
+            strcpy(name, "Tower");
+            break;
+        case 100436:
+            strcpy(name, "Tower");
+            break;
+        case 100446:
+            strcpy(name, "Tower");
+            break;
+        case 100456:
+            strcpy(name, "Tower");
+            break;
+        case 100516:
+            strcpy(name, "Tower");
+            break;
+        case 100526:
+            strcpy(name, "Tower");
+            break;
+        case 100536:
+            strcpy(name, "Tower");
+            break;
+        case 100546:
+            strcpy(name, "Tower");
+            break;
+        case 100556:
+            strcpy(name, "Tower");
+            break;
+        case 100616:
+            strcpy(name, "Tower");
+            break;
+        case 100626:
+            strcpy(name, "Tower");
+            break;
+        case 100636:
+            strcpy(name, "Tower");
+            break;
+        case 100646:
+            strcpy(name, "Tower");
+            break;
+        case 100656:
+            strcpy(name, "Tower");
+            break;
+        case 100716:
+            strcpy(name, "Tower");
+            break;
+        case 100726:
+            strcpy(name, "Tower");
+            break;
+        case 100736:
+            strcpy(name, "Tower");
+            break;
+        case 100746:
+            strcpy(name, "Tower");
+            break;
+        case 100756:
+            strcpy(name, "Tower");
+            break;
+        case 100816:
+            strcpy(name, "Tower");
+            break;
+        case 100826:
+            strcpy(name, "Tower");
+            break;
+        case 100836:
+            strcpy(name, "Tower");
+            break;
+        case 100846:
+            strcpy(name, "Tower");
+            break;
+        case 100856:
+            strcpy(name, "Tower");
+            break;
+        case 100916:
+            strcpy(name, "Tower");
+            break;
+        case 100926:
+            strcpy(name, "Tower");
+            break;
+        case 100936:
+            strcpy(name, "Tower");
+            break;
+        case 100946:
+            strcpy(name, "Tower");
+            break;
+        case 100956:
+            strcpy(name, "Tower");
+            break;
+        case 101016:
+            strcpy(name, "Tower");
+            break;
+        case 101026:
+            strcpy(name, "Tower");
+            break;
+        case 101036:
+            strcpy(name, "Tower");
+            break;
+        case 101046:
+            strcpy(name, "Tower");
+            break;
+        case 101056:
+            strcpy(name, "Tower");
+            break;
+        case 101116:
+            strcpy(name, "Tower");
+            break;
+        case 101126:
+            strcpy(name, "Tower");
+            break;
+        case 101136:
+            strcpy(name, "Tower");
+            break;
+        case 101146:
+            strcpy(name, "Tower");
+            break;
+        case 101156:
+            strcpy(name, "Tower");
+            break;
+        case 101216:
+            strcpy(name, "Tower");
+            break;
+        case 101226:
+            strcpy(name, "Tower");
+            break;
+        case 101236:
+            strcpy(name, "Tower");
+            break;
+        case 101246:
+            strcpy(name, "Tower");
+            break;
+        case 101256:
+            strcpy(name, "Tower");
+            break;
+        case 101316:
+            strcpy(name, "Tower");
+            break;
+        case 101326:
+            strcpy(name, "Tower");
+            break;
+        case 101336:
+            strcpy(name, "Tower");
+            break;
+        case 101346:
+            strcpy(name, "Tower");
+            break;
+        case 101356:
+            strcpy(name, "Tower");
+            break;
+        case 101416:
+            strcpy(name, "Tower");
+            break;
+        case 101426:
+            strcpy(name, "Tower");
+            break;
+        case 101436:
+            strcpy(name, "Tower");
+            break;
+        case 101446:
+            strcpy(name, "Tower");
+            break;
+        case 101456:
+            strcpy(name, "Tower");
+            break;
+        case 101516:
+            strcpy(name, "Tower");
+            break;
+        case 101526:
+            strcpy(name, "Tower");
+            break;
+        case 101536:
+            strcpy(name, "Tower");
+            break;
+        case 101546:
+            strcpy(name, "Tower");
+            break;
+        case 101556:
+            strcpy(name, "Tower");
+            break;
+        case 101616:
+            strcpy(name, "타워(물) - 전체 충격 수정");
+            break;
+        case 101626:
+            strcpy(name, "타워(불) - 전체 충격 수정");
+            break;
+        case 101636:
+            strcpy(name, "타워(바람) - 전체 충격 수정");
+            break;
+        case 101646:
+            strcpy(name, "타워(빛) - 전체 충격 수정");
+            break;
+        case 101656:
+            strcpy(name, "타워(어둠) - 전체 충격 수정");
+            break;
+        case 101716:
+            strcpy(name, "타워(물) - 공속 게이지");
+            break;
+        case 101726:
+            strcpy(name, "타워(불) - 공속 게이지");
+            break;
+        case 101736:
+            strcpy(name, "타워(바람) - 공속 게이지");
+            break;
+        case 101746:
+            strcpy(name, "타워(빛) - 공속 게이지");
+            break;
+        case 101756:
+            strcpy(name, "타워(어둠) - 공속 게이지");
+            break;
+        case 110106:
+            strcpy(name, "시험의탑 타워(왼쪽)");
+            break;
+        case 110206:
+            strcpy(name, "시험의탑 타워(오른쪽)");
+            break;
+        case 110306:
+            strcpy(name, "Incarnation of Greed");
+            break;
+        case 110406:
+            strcpy(name, "Incarnation of Vendetta");
+            break;
+        case 110506:
+            strcpy(name, "Incarnation of Protection");
+            break;
+        case 110606:
+            strcpy(name, "Incarnation of Greed");
+            break;
+        case 110706:
+            strcpy(name, "Incarnation of Vendetta");
+            break;
+        case 110806:
+            strcpy(name, "Incarnation of Protection");
+            break;
+        case 110902:
+            strcpy(name, "Fire Minion");
+            break;
+        case 111006:
+            strcpy(name, "만랩튜토타워_방어 약화");
+            break;
+        case 111016:
+            strcpy(name, "만랩튜토타워_공격 강화");
+            break;
+        case 112023:
+            strcpy(name, "Tower");
+            break;
+        case 112033:
+            strcpy(name, "Tower");
+            break;
+        case 112124:
+            strcpy(name, "Tower");
+            break;
+        case 112134:
+            strcpy(name, "Tower");
+            break;
+        case 120101:
+            strcpy(name, "Tower");
+            break;
+        case 120102:
+            strcpy(name, "Tower");
+            break;
+        case 120103:
+            strcpy(name, "Tower");
+            break;
+        case 120104:
+            strcpy(name, "Tower");
+            break;
+        case 120105:
+            strcpy(name, "Tower");
+            break;
+        case 120111:
+            strcpy(name, "Tower");
+            break;
+        case 120112:
+            strcpy(name, "Tower");
+            break;
+        case 120113:
+            strcpy(name, "Tower");
+            break;
+        case 120114:
+            strcpy(name, "Tower");
+            break;
+        case 120115:
+            strcpy(name, "Tower");
+            break;
+        case 120201:
+            strcpy(name, "Tower");
+            break;
+        case 120202:
+            strcpy(name, "Tower");
+            break;
+        case 120203:
+            strcpy(name, "Tower");
+            break;
+        case 120204:
+            strcpy(name, "Tower");
+            break;
+        case 120205:
+            strcpy(name, "Tower");
+            break;
+        case 120211:
+            strcpy(name, "Tower");
+            break;
+        case 120212:
+            strcpy(name, "Tower");
+            break;
+        case 120213:
+            strcpy(name, "Tower");
+            break;
+        case 120214:
+            strcpy(name, "Tower");
+            break;
+        case 120215:
+            strcpy(name, "Tower");
+            break;
+        case 120301:
+            strcpy(name, "Tower");
+            break;
+        case 120302:
+            strcpy(name, "Tower");
+            break;
+        case 120303:
+            strcpy(name, "Tower");
+            break;
+        case 120304:
+            strcpy(name, "Tower");
+            break;
+        case 120305:
+            strcpy(name, "Tower");
+            break;
+        case 120311:
+            strcpy(name, "Tower");
+            break;
+        case 120312:
+            strcpy(name, "Tower");
+            break;
+        case 120313:
+            strcpy(name, "Tower");
+            break;
+        case 120314:
+            strcpy(name, "Tower");
+            break;
+        case 120315:
+            strcpy(name, "Tower");
+            break;
+        case 120401:
+            strcpy(name, "Tower");
+            break;
+        case 120402:
+            strcpy(name, "Tower");
+            break;
+        case 120403:
+            strcpy(name, "Tower");
+            break;
+        case 120404:
+            strcpy(name, "Tower");
+            break;
+        case 120405:
+            strcpy(name, "Tower");
+            break;
+        case 120411:
+            strcpy(name, "Tower");
+            break;
+        case 120412:
+            strcpy(name, "Tower");
+            break;
+        case 120413:
+            strcpy(name, "Tower");
+            break;
+        case 120414:
+            strcpy(name, "Tower");
+            break;
+        case 120415:
+            strcpy(name, "Tower");
+            break;
+        case 120501:
+            strcpy(name, "Tower");
+            break;
+        case 120502:
+            strcpy(name, "Tower");
+            break;
+        case 120503:
+            strcpy(name, "Tower");
+            break;
+        case 120504:
+            strcpy(name, "Tower");
+            break;
+        case 120505:
+            strcpy(name, "Tower");
+            break;
+        case 120511:
+            strcpy(name, "Tower");
+            break;
+        case 120512:
+            strcpy(name, "Tower");
+            break;
+        case 120513:
+            strcpy(name, "Tower");
+            break;
+        case 120514:
+            strcpy(name, "Tower");
+            break;
+        case 120515:
+            strcpy(name, "Tower");
+            break;
+        case 120601:
+            strcpy(name, "Tower");
+            break;
+        case 120602:
+            strcpy(name, "Tower");
+            break;
+        case 120603:
+            strcpy(name, "Tower");
+            break;
+        case 120604:
+            strcpy(name, "Tower");
+            break;
+        case 120605:
+            strcpy(name, "Tower");
+            break;
+        case 120611:
+            strcpy(name, "Tower");
+            break;
+        case 120612:
+            strcpy(name, "Tower");
+            break;
+        case 120613:
+            strcpy(name, "Tower");
+            break;
+        case 120614:
+            strcpy(name, "Tower");
+            break;
+        case 120615:
+            strcpy(name, "Tower");
+            break;
+        case 120701:
+            strcpy(name, "Tower");
+            break;
+        case 120702:
+            strcpy(name, "Tower");
+            break;
+        case 120703:
+            strcpy(name, "Tower");
+            break;
+        case 120704:
+            strcpy(name, "Tower");
+            break;
+        case 120705:
+            strcpy(name, "Tower");
+            break;
+        case 120711:
+            strcpy(name, "Tower");
+            break;
+        case 120712:
+            strcpy(name, "Tower");
+            break;
+        case 120713:
+            strcpy(name, "Tower");
+            break;
+        case 120714:
+            strcpy(name, "Tower");
+            break;
+        case 120715:
+            strcpy(name, "Tower");
+            break;
+        case 200103:
+            strcpy(name, "Small Crystal");
+            break;
+        case 200113:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 200204:
+            strcpy(name, "Small Crystal");
+            break;
+        case 200214:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 210106:
+            strcpy(name, "Small Crystal");
+            break;
+        case 210206:
+            strcpy(name, "Small Crystal");
+            break;
+        case 210306:
+            strcpy(name, "Small Crystal");
+            break;
+        case 210406:
+            strcpy(name, "Small Crystal");
+            break;
+        case 210506:
+            strcpy(name, "Small Crystal");
+            break;
+        case 210606:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 210706:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 210806:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 210906:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 211006:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 220001:
+            strcpy(name, "Small Crystal");
+            break;
+        case 220002:
+            strcpy(name, "Small Crystal");
+            break;
+        case 220003:
+            strcpy(name, "Small Crystal");
+            break;
+        case 220004:
+            strcpy(name, "Small Crystal");
+            break;
+        case 220005:
+            strcpy(name, "Small Crystal");
+            break;
+        case 220011:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 220012:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 220013:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 220014:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 220015:
+            strcpy(name, "Medium Crystal");
+            break;
+        case 310106:
+            strcpy(name, "Taotie");
+            break;
+        case 310206:
+            strcpy(name, "Turtle");
+            break;
+        case 310306:
+            strcpy(name, "Ice Beast");
+            break;
+        case 400001:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400002:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400003:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400004:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400005:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400006:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400007:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400008:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400009:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 400010:
+            strcpy(name, "Predator's Wreckage");
+            break;
+        case 1000101:
+            strcpy(name, "Homunculus(Attack)");
+            break;
+        case 1000102:
+            strcpy(name, "Homunculus(Attack)");
+            break;
+        case 1000103:
+            strcpy(name, "Homunculus(Attack)");
+            break;
+        case 1000111:
+            strcpy(name, "Homunculus(Attack)");
+            break;
+        case 1000112:
+            strcpy(name, "Homunculus(Attack)");
+            break;
+        case 1000113:
+            strcpy(name, "Homunculus(Attack)");
+            break;
+        case 1000204:
+            strcpy(name, "Homunculus(Support)");
+            break;
+        case 1000205:
+            strcpy(name, "Homunculus(Support)");
+            break;
+        case 1000214:
+            strcpy(name, "Homunculus(Support)");
+            break;
+        case 1000215:
+            strcpy(name, "Homunculus(Support)");
+            break;
+        case 10101:
+            strcpy(name, "Fairy");
+            break;
+        case 13231:
+            strcpy(name, "Lulu and Friends");
+            break;
+        case 13232:
+            strcpy(name, "Lala and Friends");
+            break;
+        case 13233:
+            strcpy(name, "Chichi and Friends");
+            break;
+        case 13234:
+            strcpy(name, "Shushu and Friends");
+            break;
+        case 13235:
+            strcpy(name, "Chacha and Friends");
+            break;
+        case 16031:
+            strcpy(name, "Hemos");
+            break;
+        case 16032:
+            strcpy(name, "Sath");
+            break;
+        case 16033:
+            strcpy(name, "Hiva");
+            break;
+        case 16034:
+            strcpy(name, "Prom");
+            break;
+        case 16035:
+            strcpy(name, "Thrain");
+            break;
+        case 47004:
+            strcpy(name, "Ancient Guardian");
+            break;
+        case 47801:
+            strcpy(name, "Lulu and Friends");
+            break;
+        case 47802:
+            strcpy(name, "Lala and Friends");
+            break;
+        case 47803:
+            strcpy(name, "Chichi and Friends");
+            break;
+        case 47804:
+            strcpy(name, "Shushu and Friends");
+            break;
+        case 47805:
+            strcpy(name, "Chacha and Friends");
+            break;
+        case 47901:
+            strcpy(name, "Hemos");
+            break;
+        case 47902:
+            strcpy(name, "Sath");
+            break;
+        case 47903:
+            strcpy(name, "Hiva");
+            break;
+        case 47904:
+            strcpy(name, "Prom");
+            break;
+        case 47905:
+            strcpy(name, "Thrain");
+            break;
+        case 120801:
+            strcpy(name, "Tower");
+            break;
+        case 120802:
+            strcpy(name, "Tower");
+            break;
+        case 120803:
+            strcpy(name, "Tower");
+            break;
+        case 120804:
+            strcpy(name, "Tower");
+            break;
+        case 120805:
+            strcpy(name, "Tower");
+            break;
+        case 120811:
+            strcpy(name, "Tower");
+            break;
+        case 120812:
+            strcpy(name, "Tower");
+            break;
+        case 120813:
+            strcpy(name, "Tower");
+            break;
+        case 120814:
+            strcpy(name, "Tower");
+            break;
+        case 120815:
+            strcpy(name, "Tower");
+            break;
+        case 120901:
+            strcpy(name, "Tower");
+            break;
+        case 120902:
+            strcpy(name, "Tower");
+            break;
+        case 120903:
+            strcpy(name, "Tower");
+            break;
+        case 120904:
+            strcpy(name, "Tower");
+            break;
+        case 120905:
+            strcpy(name, "Tower");
+            break;
+        case 120911:
+            strcpy(name, "Tower");
+            break;
+        case 120912:
+            strcpy(name, "Tower");
+            break;
+        case 120913:
+            strcpy(name, "Tower");
+            break;
+        case 120914:
+            strcpy(name, "Tower");
+            break;
+        case 120915:
+            strcpy(name, "Tower");
+            break;
+        case 25001:
+            strcpy(name, "Onmyouji");
+            break;
+        case 25002:
+            strcpy(name, "Onmyouji");
+            break;
+        case 25003:
+            strcpy(name, "Onmyouji");
+            break;
+        case 25004:
+            strcpy(name, "Onmyouji");
+            break;
+        case 25005:
+            strcpy(name, "Onmyouji");
+            break;
+        case 25011:
+            strcpy(name, "Shizuka");
+            break;
+        case 25012:
+            strcpy(name, "Tomoe");
+            break;
+        case 25013:
+            strcpy(name, "Giou");
+            break;
+        case 25014:
+            strcpy(name, "Seimei");
+            break;
+        case 25015:
+            strcpy(name, "Douman");
+            break;
+        case 25101:
+            strcpy(name, "Onimusha");
+            break;
+        case 25102:
+            strcpy(name, "Onimusha");
+            break;
+        case 25103:
+            strcpy(name, "Onimusha");
+            break;
+        case 25104:
+            strcpy(name, "Onimusha");
+            break;
+        case 25105:
+            strcpy(name, "Onimusha");
+            break;
+        case 25111:
+            strcpy(name, "Suiki");
+            break;
+        case 25112:
+            strcpy(name, "Kaki");
+            break;
+        case 25113:
+            strcpy(name, "Fuuki");
+            break;
+        case 25114:
+            strcpy(name, "Kinki");
+            break;
+        case 25115:
+            strcpy(name, "Ongyouki");
+            break;
+        case 12031:
+            strcpy(name, "Ellena");
+            break;
+        case 12032:
+            strcpy(name, "Kahli");
+            break;
+        case 12033:
+            strcpy(name, "Moria");
+            break;
+        case 12034:
+            strcpy(name, "Shren");
+            break;
+        case 12035:
+            strcpy(name, "Jumaline");
+            break;
+        case 48001:
+            strcpy(name, "하이엘리멘탈 2차 각성 보스(물)");
+            break;
+        case 48002:
+            strcpy(name, "하이엘리멘탈 2차 각성 보스(불)");
+            break;
+        case 48003:
+            strcpy(name, "하이엘리멘탈 2차 각성 보스(바람)");
+            break;
+        case 48004:
+            strcpy(name, "하이엘리멘탈 2차 각성 보스(빛)");
+            break;
+        case 48005:
+            strcpy(name, "하이엘리멘탈 2차 각성 보스(어둠)");
+            break;
+        case 121001:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_왼쪽(물)");
+            break;
+        case 121002:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_왼쪽(불)");
+            break;
+        case 121003:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_왼쪽(바람)");
+            break;
+        case 121004:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_왼쪽(빛)");
+            break;
+        case 121005:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_왼쪽(어둠)");
+            break;
+        case 121011:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_오른쪽(물)");
+            break;
+        case 121012:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_오른쪽(불)");
+            break;
+        case 121013:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_오른쪽(바람)");
+            break;
+        case 121014:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_오른쪽(빛)");
+            break;
+        case 121015:
+            strcpy(name, "2차각성 하이엘리멘탈 수정_오른쪽(어둠)");
+            break;
+        case 25201:
+            strcpy(name, "Mage");
+            break;
+        case 25202:
+            strcpy(name, "Mage");
+            break;
+        case 25203:
+            strcpy(name, "Mage");
+            break;
+        case 25204:
+            strcpy(name, "Mage");
+            break;
+        case 25205:
+            strcpy(name, "Mage");
+            break;
+        case 25211:
+            strcpy(name, "Nana");
+            break;
+        case 25212:
+            strcpy(name, "Coco");
+            break;
+        case 25213:
+            strcpy(name, "Momo");
+            break;
+        case 25214:
+            strcpy(name, "Dorothy");
+            break;
+        case 25215:
+            strcpy(name, "Kiki");
+            break;
+        case 25301:
+            strcpy(name, "Sky Surfer");
+            break;
+        case 25302:
+            strcpy(name, "Sky Surfer");
+            break;
+        case 25303:
+            strcpy(name, "Sky Surfer");
+            break;
+        case 25304:
+            strcpy(name, "Sky Surfer");
+            break;
+        case 25305:
+            strcpy(name, "Sky Surfer");
+            break;
+        case 25311:
+            strcpy(name, "Miles");
+            break;
+        case 25312:
+            strcpy(name, "John");
+            break;
+        case 25313:
+            strcpy(name, "Oliver");
+            break;
+        case 25314:
+            strcpy(name, "Daniel");
+            break;
+        case 25315:
+            strcpy(name, "Jackson");
+            break;
+        case 25401:
+            strcpy(name, "ROBO");
+            break;
+        case 25402:
+            strcpy(name, "ROBO");
+            break;
+        case 25403:
+            strcpy(name, "ROBO");
+            break;
+        case 25404:
+            strcpy(name, "ROBO");
+            break;
+        case 25405:
+            strcpy(name, "ROBO");
+            break;
+        case 25411:
+            strcpy(name, "ROBO-R40");
+            break;
+        case 25412:
+            strcpy(name, "ROBO-P27");
+            break;
+        case 25413:
+            strcpy(name, "ROBO-G92");
+            break;
+        case 25414:
+            strcpy(name, "ROBO-E65");
+            break;
+        case 25415:
+            strcpy(name, "ROBO-F29");
+            break;
+        case 25501:
+            strcpy(name, "ROBO(물)_잔해");
+            break;
+        case 25511:
+            strcpy(name, "ROBO(물)_잔해");
+            break;
+        case 20121:
+            strcpy(name, "Imperfect Neostone Agent");
+            break;
+        case 22123:
+            strcpy(name, "Imperfect Dryad");
+            break;
+        case 25601:
+            strcpy(name, "Totemist");
+            break;
+        case 25602:
+            strcpy(name, "Totemist");
+            break;
+        case 25603:
+            strcpy(name, "Totemist");
+            break;
+        case 25604:
+            strcpy(name, "Totemist");
+            break;
+        case 25605:
+            strcpy(name, "Totemist");
+            break;
+        case 25611:
+            strcpy(name, "Aaliyah");
+            break;
+        case 25612:
+            strcpy(name, "Nora");
+            break;
+        case 25613:
+            strcpy(name, "Riley");
+            break;
+        case 25614:
+            strcpy(name, "Ella");
+            break;
+        case 25615:
+            strcpy(name, "Maya");
+            break;
+    }
+}

+ 246 - 0
src/RuneOptimizer/update/update.h

@@ -14,3 +14,249 @@
  * You should have received a copy of the GNU General Public License along with
  * RuneOptimizer. If not, see <https://www.gnu.org/licenses/>.
  */
+
+struct Rune_Stat {
+    unsigned char stat;
+    unsigned int value;
+    unsigned int grind;
+    unsigned char enchant;
+};
+
+struct DB_Unit {
+    unsigned char id[12];
+    unsigned int monster;
+    unsigned char name[128];
+    unsigned char stars;
+    unsigned char level;
+    unsigned int base_hp;
+    unsigned short base_atk;
+    unsigned short base_def;
+    unsigned short base_spd;
+    unsigned short base_crr;
+    unsigned short base_crd;
+    unsigned short base_acc;
+    unsigned short base_res;
+    unsigned int base_ehp;
+    unsigned short base_dmg;
+    unsigned int current_hp;
+    unsigned short current_atk;
+    unsigned short current_def;
+    unsigned short current_spd;
+    unsigned short current_crr;
+    unsigned short current_crd;
+    unsigned short current_acc;
+    unsigned short current_res;
+    unsigned int current_ehp;
+    unsigned short current_dmg;
+};
+
+struct DB_Rune {
+    unsigned char id[12];
+    unsigned char slot;
+    unsigned char quality;
+    float efficiency;
+    float max_efficiency;
+    unsigned char stars;
+    unsigned char set;
+    unsigned char level;
+    unsigned int buy_value;
+    unsigned int sell_value;
+    unsigned char unit[12];
+    unsigned char current_hp_percent;
+    unsigned char current_atk_percent;
+    unsigned char current_def_percent;
+    unsigned char current_hp_flat;
+    unsigned char current_atk_flat;
+    unsigned char current_def_flat;
+    unsigned char current_spd;
+    unsigned char current_crr;
+    unsigned char current_crd;
+    unsigned char current_acc;
+    unsigned char current_res;
+    unsigned char lv12_hp_percent;
+    unsigned char lv12_atk_percent;
+    unsigned char lv12_def_percent;
+    unsigned char lv12_hp_flat;
+    unsigned char lv12_atk_flat;
+    unsigned char lv12_def_flat;
+    unsigned char lv12_spd;
+    unsigned char lv12_crr;
+    unsigned char lv12_crd;
+    unsigned char lv12_acc;
+    unsigned char lv12_res;
+    unsigned char lv15_hp_percent;
+    unsigned char lv15_atk_percent;
+    unsigned char lv15_def_percent;
+    unsigned char lv15_hp_flat;
+    unsigned char lv15_atk_flat;
+    unsigned char lv15_def_flat;
+    unsigned char lv15_spd;
+    unsigned char lv15_crr;
+    unsigned char lv15_crd;
+    unsigned char lv15_acc;
+    unsigned char lv15_res;
+    struct Rune_Stat main;
+    struct Rune_Stat innate;
+    unsigned char stat_count;
+    struct Rune_Stat stats[4];
+};
+
+#define HP_FLAT 1
+#define HP_PERCENT 2
+#define ATK_FLAT 3
+#define ATK_PERCENT 4
+#define DEF_FLAT 5
+#define DEF_PERCENT 6
+#define SPD 8
+#define CRR 9
+#define CRD 10
+#define RES 11
+#define ACC 12
+
+// Values for main stats.
+// Nested by stat, stars, level(0->12, 1->15)
+int main_stats_values[13][7][2] = {
+  { //HP_FLAT
+      {0, 0}, // 0 stars (unused)
+      {580, 804}, // 1 stars
+      {790, 1092}, // 2 stars
+      {1000, 1380}, // 3 stars
+      {1240, 1704}, // 4 stars
+      {1530, 2088}, // 5 stars
+      {1800, 2448} // 6 stars
+  },
+  { //HP_PERCENT
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {28, 38}, // 3 stars
+      {31, 43}, // 4 stars
+      {37, 51}, // 5 stars
+      {47, 63} // 6 stars
+  },
+  { //ATK_FLAT
+      {0, 0}, // 0 stars (unused)
+      {39, 54}, // 1 stars
+      {53, 73}, // 2 stars
+      {67, 92}, // 3 stars
+      {82, 112}, // 4 stars
+      {99, 135}, // 5 stars
+      {118, 160}, // 6 stars
+  },
+  { //ATK_PERCENT
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {28, 38}, // 3 stars
+      {31, 43}, // 4 stars
+      {37, 51}, // 5 stars
+      {47, 63} // 6 stars
+  },
+  { //DEF_FLAT
+      {0, 0}, // 0 stars (unused)
+      {39, 54}, // 1 stars
+      {53, 73}, // 2 stars
+      {67, 92}, // 3 stars
+      {82, 112}, // 4 stars
+      {99, 135}, // 5 stars
+      {118, 160}, // 6 stars
+  },
+  { //DEF_PERCENT
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {28, 38}, // 3 stars
+      {31, 43}, // 4 stars
+      {37, 51}, // 5 stars
+      {47, 63} // 6 stars
+  },
+  { //SPD
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {18, 25}, // 3 stars
+      {22, 30}, // 4 stars
+      {29, 39}, // 5 stars
+      {31, 42} // 6 stars
+  },
+  { //CRR
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {27, 37}, // 3 stars
+      {30, 41}, // 4 stars
+      {34, 47}, // 5 stars
+      {43, 58} // 6 stars
+  },
+  { //CRD
+      {0, 0}, // 0 stars (unused)
+      {14, 19}, // 1 stars
+      {27, 37}, // 2 stars
+      {32, 43}, // 3 stars
+      {42, 57}, // 4 stars
+      {48, 65}, // 5 stars
+      {59, 80} // 6 stars
+  },
+  { //RES
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {28, 38}, // 3 stars
+      {32, 44}, // 4 stars
+      {38, 51}, // 5 stars
+      {48, 64} // 6 stars
+  },
+  { //ACC
+      {0, 0}, // 0 stars (unused)
+      {13, 18}, // 1 stars
+      {14, 19}, // 2 stars
+      {28, 38}, // 3 stars
+      {32, 44}, // 4 stars
+      {38, 51}, // 5 stars
+      {48, 64} // 6 stars
+  }
+};
+
+/**
+ * Parses the command parameters and calls one of the update functions.
+ *
+ * @param[in] argc Argument count.
+ * @param[in] argv Argument list.
+ * @return SUCCESS or an error code.
+ */
+int update(int argc, char *argv[]);
+
+/**
+ * Calculates the current stats for units with runes in the database.
+ *
+ * @return SUCCESS or an error code.
+ */
+int calculate_current_stats();
+
+/**
+ * Recreates the tables in the database.
+ */
+int recreate_tables();
+
+/**
+ * Updates the database from a json file.
+ *
+ * @param[in] file Path to the file.
+ * @return SUCCESS or an error code..
+ */
+int update_json(char file[]);
+
+/**
+ * Calculates the total stat values for a rune.
+ *
+ * @param[in|out] rune Rune to do the calculation on.
+ */
+void calculate_rune_totals(struct DB_Rune *rune);
+
+/**
+ * Gets a monster name from it's ID.
+ *
+ * @param[in] id Monster ID.
+ * @param[out] name Monster name.
+ */
+void get_monster_name(int id, char name[64]);