]> git.openfabrics.org - ~adrianc/mstflint.git/commitdiff
porting of MFT-4.0.0 changes to mstflint pt1
authorAdrian Chiris <adrianc@mellanox.com>
Mon, 23 Feb 2015 16:03:46 +0000 (18:03 +0200)
committerAdrian Chiris <adrianc@mellanox.com>
Mon, 23 Feb 2015 16:03:46 +0000 (18:03 +0200)
35 files changed:
configure.ac
debian/changelog
flint/Makefile.am
flint/subcommands.cpp
flint/subcommands.h
include/mtcr_ul/mtcr.h
mflash/mflash.c
mlxfwops/lib/flint_base.h
mlxfwops/lib/flint_io.cpp
mlxfwops/lib/fs2_ops.cpp
mlxfwops/lib/fs2_ops.h
mlxfwops/lib/fs3_ops.cpp
mlxfwops/lib/fs3_ops.h
mlxfwops/lib/fw_ops.cpp
mlxfwops/lib/fw_ops.h
mlxfwops/lib/mlxfwops.cpp
mlxfwops/lib/mlxfwops.h
mlxfwops/lib/mlxfwops_com.h
mstdump/mstdump_dbs/ConnectX3Pro.csv
mstdump/mstdump_dbs/ConnectX4.csv
mstdump/mstdump_dbs/SwitchEN.csv
mstflint.spec.in
mtcr_ul/mtcr_int_defs.h
mtcr_ul/mtcr_tools_cif.c
mtcr_ul/mtcr_ul.c
mtcr_ul/mtcr_ul_icmd_cif.c
tools_layouts/Makefile.am
tools_layouts/cibfw_layouts.c
tools_layouts/cibfw_layouts.h
tools_layouts/cx4fw_layouts.c [new file with mode: 0644]
tools_layouts/cx4fw_layouts.h [new file with mode: 0644]
tools_layouts/register_access_sib_layouts.c
tools_layouts/register_access_sib_layouts.h
tools_layouts/tools_open_layouts.c
tools_layouts/tools_open_layouts.h

index ffd596a9f21c2930f9b507fc4f972c65ee2355be..59611e102be80e06036b1753ad595426c6b08e73 100644 (file)
@@ -1,16 +1,16 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT(mstflint, 3.8.0, orenk@mellanox.co.il)
+AC_INIT(mstflint, 4.0.0, orenk@mellanox.co.il)
 
 AC_DEFINE_UNQUOTED([PROJECT], ["mstflint"], [Define the project name.])
 AC_SUBST([PROJECT])
 
-AC_DEFINE_UNQUOTED([VERSION], ["3.8.0"], [Define the project version.])
+AC_DEFINE_UNQUOTED([VERSION], ["4.0.0"], [Define the project version.])
 AC_SUBST([VERSION])
 
 AC_CONFIG_AUX_DIR(config)
 AC_CONFIG_SRCDIR([README])
-AM_INIT_AUTOMAKE(mstflint, 3.8.0)
+AM_INIT_AUTOMAKE(mstflint, 4.0.0)
 
 dnl Checks for programs
 AC_PROG_CC
index 20ba67281fb03b26367329981a6ec79d96c49781..827f064d4675f8f2a407292c1be418ae8021c7ee 100644 (file)
@@ -1,3 +1,10 @@
+mstflint (4.0.0) unstable; urgency=low
+
+  * Updated from MFT-4.0.0 initial release
+
+ -- Adrian Chiris <adrianc@unknown>  Thu, 5 Feb 2015 10:20:33 +0200
 mstflint (3.8.0) unstable; urgency=low
 
   * Updated from MFT-3.8.0
index 0e793c6d1aceb047abac0eb64afdb0afb3b6fbdb..e1f5b71606efb3abcf370eab582afcde203f8d2e 100755 (executable)
@@ -66,5 +66,5 @@ endif
 
 #get mst device examples and tool name from makefile
 mstflint_CXXFLAGS+= -DFLINT_NAME=\"mstflint\" -DFLINT_DISPLAY_NAME=\"MstFlint\"
-mstflint_CXXFLAGS += -DMST_DEV_EXAMPLE1=\"03:00.0\" -DMST_DEV_EXAMPLE2=\"mlx4_0\" -DMST_DEV_EXAMPLE3=\"03:00.0\"
+mstflint_CXXFLAGS += -DMST_DEV_EXAMPLE1=\"03:00.0\" -DMST_DEV_EXAMPLE2=\"mlx4_0\" -DMST_DEV_EXAMPLE3=\"03:00.0\" -DMST_DEV_EXAMPLE4=\"04:00.0\"
 
index 3495b5be129b13f423625ac080d1637ae270fb64..c757e305aa693f4cd886d3e8a894179ac36185e5 100644 (file)
@@ -940,19 +940,6 @@ bool SubCommand::reportGuidChanges(guid_t* new_guids, guid_t* new_macs,\
     return true;
 }
 
-bool SubCommand::fwVerLessThan(const u_int16_t r1[3], const u_int16_t r2[3])
-{
-    for (int i = 0; i < 3 ; i++) {
-        if (r1[i] < r2[i]) {
-            return true;
-        }
-        else if (r1[i] > r2[i]) {
-            return false;
-        }
-    }
-    return false; // equal versions
-}
-
 //used for dc and dh subcommands
 
 bool SubCommand::unzipDataFile (std::vector<u_int8_t> data, std::vector<u_int8_t> &newData, const char *sectionName)
@@ -1027,8 +1014,8 @@ bool SubCommand::dumpFile(const char* confFile, std::vector<u_int8_t>& data, con
 }
 
 bool SubCommand::checkGuidsFlags (chip_type_t ct, u_int16_t devType, u_int8_t fwType,
-                            bool guidsSpecified, bool macsSpecified, bool uidsSpecified) {
-
+                            bool guidsSpecified, bool macsSpecified, bool uidsSpecified, bool ibDev, bool ethDev) {
+    (void)ibDev;
     if (guidsSpecified || macsSpecified || uidsSpecified) {
         if (ct == CT_BRIDGEX) {
             if (macsSpecified || guidsSpecified) {
@@ -1036,16 +1023,13 @@ bool SubCommand::checkGuidsFlags (chip_type_t ct, u_int16_t devType, u_int8_t fw
                 return false;
             }
         } else {
-            if (uidsSpecified) {
+            if (uidsSpecified && fwType != FIT_FS3) {
                 reportErr(true, "-uid(s) flag is applicable only for BridgeX and FS3 FW.\n");
                 return false;
-            } else if (fwType != FIT_FS2 && macsSpecified ) {
+            } else if (fwType != FIT_FS2 && !ethDev && macsSpecified ) {
                 reportErr(true, "-mac(s) flag is not applicable for IB MT%d device.\n", devType);
                 return false;
-            }// else if (!_fwOps->CntxEthOnly() && guids_specified) {
-            //     return errmsg("-guid(s) flag is not applicable for IB MT%d device.\n",
-            //                  devType);
-            //}
+            }
         }
     }
     return true;
@@ -1240,13 +1224,14 @@ void BurnSubCommand::updateBurnParams()
     _burnParams.userUids.resize(MAX_GUIDS, (guid_t){0xffffffff,0xffffffff});
 }
 
+#define VERSION_FORMAT(isFs2) isFs2 ? "%d.%d.%d" : "%d.%04d.%04d"
 bool BurnSubCommand::checkFwVersion()
 {
     char curr_ver[124], new_ver[124];
     printf("\n");
     printf("    Current FW version on flash:  ");
     if (_devInfo.fw_info.fw_ver[0] != 0) { // i.e if we have a fw_version we assume this is != 0
-        snprintf(curr_ver, 124, "%d.%d.%d", _devInfo.fw_info.fw_ver[0], _devInfo.fw_info.fw_ver[1], _devInfo.fw_info.fw_ver[2]);
+        snprintf(curr_ver, 124, VERSION_FORMAT(_devInfo.fw_type == FIT_FS2), _devInfo.fw_info.fw_ver[0], _devInfo.fw_info.fw_ver[1], _devInfo.fw_info.fw_ver[2]);
     } else {
         snprintf(curr_ver, 124, "N/A");
     }
@@ -1254,7 +1239,7 @@ bool BurnSubCommand::checkFwVersion()
 
     printf("    New FW version:               ");
     if (_imgInfo.fw_info.fw_ver[0] != 0) {
-        snprintf(new_ver, 124, "%d.%d.%d", _imgInfo.fw_info.fw_ver[0], _imgInfo.fw_info.fw_ver[1], _imgInfo.fw_info.fw_ver[2]);
+        snprintf(new_ver, 124, VERSION_FORMAT(_devInfo.fw_type == FIT_FS2), _imgInfo.fw_info.fw_ver[0], _imgInfo.fw_info.fw_ver[1], _imgInfo.fw_info.fw_ver[2]);
     } else {
         snprintf(new_ver, 124, "N/A");
     }
@@ -1263,14 +1248,19 @@ bool BurnSubCommand::checkFwVersion()
     if (_flintParams.log_specified) {
         print_line_to_log("Current FW version on flash: %s,  New FW version: %s\n", curr_ver, new_ver);
     }
-    bool updateRequired = true;
+    int verStatus = FVI_UNKNOWN;
 
     if (_devInfo.fw_info.fw_ver[0] != 0  &&
             _imgInfo.fw_info.fw_ver[0] != 0) {
-        updateRequired = fwVerLessThan(_devInfo.fw_info.fw_ver,_imgInfo.fw_info.fw_ver);
+        verStatus = FwOperations::FwVerLessThan(_devInfo.fw_info.fw_ver,_imgInfo.fw_info.fw_ver, _devInfo.fw_type);
     }
 
-    if (!updateRequired) {
+    if (verStatus == FVI_UNKNOWN) {
+        printf("\n    Warning: Cannot compare between FW versions(different branches).\n");
+        if (!askUser()) {
+            return false;
+        }
+    } else if (verStatus == FVI_EQUAL || verStatus == FVI_GREATER) {
         printf("\n    Note: The new FW version is not newer than the current FW version on flash.\n");
         if (!askUser()) {
             return false;
@@ -1532,7 +1522,7 @@ bool BurnSubCommand::dealWithGuids()
             || _burnParams.userUidsSpecified;
     if (is_guids_specified) {
         if (!checkGuidsFlags((chip_type_t)_imgInfo.fw_info.chip_type, _imgInfo.fw_info.dev_type, _fwType,\
-                _burnParams.userGuidsSpecified, _burnParams.userMacsSpecified, _burnParams.userUidsSpecified)) {
+                _burnParams.userGuidsSpecified, _burnParams.userMacsSpecified, _burnParams.userUidsSpecified, ib_dev, eth_dev)) {
             return false;
         }
     }
@@ -1829,21 +1819,33 @@ bool QuerySubCommand::displayFs2Uids(const fw_info_t& fwInfo)
 }
 
 #define BASE_STR "Base"
-#define PRINT_FS3_UID(uid1, str) printf("%-16s %016"U64H_FMT_GEN"        %d        %d\n", str, uid1.uid, uid1.num_allocated, uid1.step);
-#define PRINT_FS3_UIDS(uid1, uid2, str) {\
-       PRINT_FS3_UID(uid1, BASE_STR" "str":");\
+#define PRINT_FS3_UID(uid1, str, printStep) \
+    printf("%-16s %016"U64H_FMT_GEN"        %d", str, uid1.uid, uid1.num_allocated);\
+    if (printStep) {\
+        printf("       %d", uid1.step);\
+    }\
+    printf("\n");
+#define PRINT_FS3_UIDS(uid1, uid2, str, printStep) {\
+       PRINT_FS3_UID(uid1, BASE_STR" "str":", printStep);\
     if (uid1.uid !=  uid2.uid || uid1.num_allocated != uid2.num_allocated  || uid1.step != uid2.step) {\
-        PRINT_FS3_UID(uid2, "Orig " BASE_STR " "str":");\
+        PRINT_FS3_UID(uid2, "Orig " BASE_STR " "str":", printStep);\
     } \
 }
 
 bool QuerySubCommand::displayFs3Uids(const fw_info_t& fwInfo)
 {
-    printf("Description:     UID                GuidsNumber  Step\n");
-    PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.guids[0], fwInfo.fs3_info.orig_fs3_uids_info.guids[0], "GUID1");
-    PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.guids[1], fwInfo.fs3_info.orig_fs3_uids_info.guids[1], "GUID2");
-    PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.macs[0], fwInfo.fs3_info.orig_fs3_uids_info.macs[0], "MAC1");
-    PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.macs[1], fwInfo.fs3_info.orig_fs3_uids_info.macs[1], "MAC2");
+    if (fwInfo.fs3_info.fs3_uids_info.valid_field) {
+        // new GUIDs format
+        printf("Description:     UID                GuidsNumber\n");
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cx4_uids.base_guid, fwInfo.fs3_info.orig_fs3_uids_info.cx4_uids.base_guid, "GUID", 0);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cx4_uids.base_mac, fwInfo.fs3_info.orig_fs3_uids_info.cx4_uids.base_mac, "MAC", 0);
+    } else {
+        printf("Description:     UID                GuidsNumber  Step\n");
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.guids[0], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.guids[0], "GUID1", 1);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.guids[1], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.guids[1], "GUID2", 1);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.macs[0], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.macs[0], "MAC1", 1);
+        PRINT_FS3_UIDS(fwInfo.fs3_info.fs3_uids_info.cib_uids.macs[1], fwInfo.fs3_info.orig_fs3_uids_info.cib_uids.macs[1], "MAC2", 1);
+    }
     return true;
 }
 
@@ -1855,8 +1857,13 @@ FlintStatus QuerySubCommand::printInfo(const fw_info_t& fwInfo, bool fullQuery)
     printf("Image type:      %s\n",(isFs2)? "FS2" : "FS3");
 
     if (fwInfo.fw_info.fw_ver[0] || fwInfo.fw_info.fw_ver[1] || fwInfo.fw_info.fw_ver[2]) {
+        if (isFs2) {
         printf("FW Version:      %d.%d.%d\n", fwInfo.fw_info.fw_ver[0], fwInfo.fw_info.fw_ver[1],\
                 fwInfo.fw_info.fw_ver[2]);
+        } else {
+            printf("FW Version:      %d.%04d.%04d\n", fwInfo.fw_info.fw_ver[0], fwInfo.fw_info.fw_ver[1],\
+                            fwInfo.fw_info.fw_ver[2]);
+        }
     }
 
     if (fwInfo.fw_info.fw_rel_date[0] || fwInfo.fw_info.fw_rel_date[1] || fwInfo.fw_info.fw_rel_date[2]) {
@@ -2417,7 +2424,8 @@ SgSubCommand:: SgSubCommand()
                 INDENTEX"the full image crc after changing the guids\n"
                 INDENTEX"num_of_guids: number of GUIDs to be allocated per physical port (FS3 Only)\n"
                 INDENTEX"step_size: step size between GUIDs (FS3 Only)";
-    _example = FLINT_NAME" -d "MST_DEV_EXAMPLE1" -guid 0x0002c9000100d050 sg";
+    _example = FLINT_NAME" -d "MST_DEV_EXAMPLE1" -guid 0x0002c9000100d050 sg"
+  "\n"INDENTEX FLINT_NAME" -d "MST_DEV_EXAMPLE4" -guid 0x0002c9000100d050 -mac 0x0002c900d050 sg";
     _v = Wtv_Dev_Or_Img;
     _maxCmdParamNum = 2;
     _cmdType = SC_Sg;
@@ -2514,7 +2522,7 @@ bool SgSubCommand::CheckSetGuidsFlags()
 
     if (_sgParams.macsSpecified || _sgParams.guidsSpecified || _sgParams.uidsSpecified) {
         if (!checkGuidsFlags((chip_type_t)_info.fw_info.chip_type, _info.fw_info.dev_type,_info.fw_type,\
-                _sgParams.guidsSpecified, _sgParams.macsSpecified, _sgParams.uidsSpecified)) {
+                _sgParams.guidsSpecified, _sgParams.macsSpecified, _sgParams.uidsSpecified, ibDev, ethDev)) {
             return false;
         }
     } else {
@@ -2570,18 +2578,38 @@ FlintStatus SgSubCommand::sgFs2()
 
 FlintStatus SgSubCommand::sgFs3()
 {
-    if ( _flintParams.uid_specified) {
-        // for connectib we just need the base guid so we put it in the first location.
-        _sgParams.userGuids.resize(1);
-        _sgParams.userGuids[0]= _flintParams.baseUid;
-        if (!_ops->FwSetGuids(_sgParams, &verifyCbFunc)) {
-            reportErr(true, FLINT_SG_UID_ERROR, _ops->err());
+    if (!CheckSetGuidsFlags()){
+        return FLINT_FAILED;
+    }
+    // TODO: create method that checks the flags for FS3/FS2
+    if (_info.fw_info.chip_type == CT_CONNECTX) {
+        if (!_flintParams.uid_specified && !_flintParams.guid_specified && !_flintParams.mac_specified) {
+            reportErr(true, "Can not set GUIDs/MACs: please run with -uid/-guid/-mac flag.\n");
             return FLINT_FAILED;
         }
+        if (_flintParams.uid_specified) {
+            _sgParams.userGuids.resize(1);
+            _sgParams.userGuids[0]= _flintParams.baseUid;
+        } else {
+            // guids and/or macs were specified
+            _sgParams.userGuids.resize(2);
+            _sgParams.userGuids[0]= _sgParams.guidsSpecified ? _flintParams.user_guids[0] : (guid_t){0, 0};
+            _sgParams.userGuids[1]= _sgParams.macsSpecified ? _flintParams.user_macs[0] : (guid_t){0, 0};
+        }
     } else {
-        reportErr(true, "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n");
+        if (!_flintParams.uid_specified) {
+            reportErr(true, "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n");
+            return FLINT_FAILED;
+        }
+            // for connectib we just need the base guid so we put it in the first location.
+            _sgParams.userGuids.resize(1);
+            _sgParams.userGuids[0]= _flintParams.baseUid;
+    }
+
+    if (!_ops->FwSetGuids(_sgParams, &verifyCbFunc)) {
+        reportErr(true, FLINT_SG_UID_ERROR, _ops->err());
         return FLINT_FAILED;
-                    }
+    }
     return FLINT_SUCCESS;
 }
 
@@ -2622,7 +2650,7 @@ SmgSubCommand:: SmgSubCommand()
 #ifndef __WIN__
                "\n"INDENTEX FLINT_NAME" -d "MST_DEV_EXAMPLE3" -uid 0x0002c9000100d050 smg (should be used when device is idle)"
 #endif
-               ;
+               "\n"INDENTEX FLINT_NAME" -d "MST_DEV_EXAMPLE4" -guid 0x0002c9000100d050 -mac 0x0002c900d050 smg (should be used when device is idle)";
     _v = Wtv_Dev_Or_Img;
     _maxCmdParamNum = 2;
     _cmdType = SC_Smg;
@@ -2636,14 +2664,26 @@ SmgSubCommand:: ~SmgSubCommand()
 
 bool SmgSubCommand::verifyParams()
 {
-    if (!_flintParams.uid_specified) {
-        reportErr(true, FLINT_COMMAND_FLAGS_ERROR, _name.c_str(), "\"-uid\" flag");
+    if (!_flintParams.uid_specified && !_flintParams.guid_specified && !_flintParams.mac_specified) {
+        reportErr(true, FLINT_COMMAND_FLAGS_ERROR, _name.c_str(), "\"-uid or -guid/-mac\" flags");
         return false;
     }
     if (_flintParams.uids_specified) {
         reportErr(true, FLINT_INVALID_OPTION_ERROR, "\"-uids\"", _name.c_str(), "\"-uid\"");
         return false;
     }
+    if (_flintParams.guids_specified) {
+        reportErr(true, FLINT_INVALID_OPTION_ERROR, "\"-guids\"", _name.c_str(), "\"-guid\"");
+        return false;
+    }
+    if (_flintParams.macs_specified) {
+        reportErr(true, FLINT_INVALID_OPTION_ERROR, "\"-macs\"", _name.c_str(), "\"-mac\"");
+        return false;
+    }
+    if (_flintParams.uid_specified && (_flintParams.guid_specified || _flintParams.mac_specified)) {
+        reportErr(true, FLINT_INVALID_FLAG_WITH_FLAG_ERROR, "\"-uid\"", "\"-guid\"/-mac\"");
+                return false;
+    }
 
     if (_flintParams.cmd_params.size() != 0 && _flintParams.cmd_params.size() != 2) {
         reportErr(true, FLINT_CMD_ARGS_ERROR4, _name.c_str(), 0, 2, _flintParams.cmd_params.size());
@@ -2654,7 +2694,20 @@ bool SmgSubCommand::verifyParams()
         !extractUIDArgs(_flintParams.cmd_params, _baseGuid.num_of_guids, _baseGuid.step_size)) {
         return false;
     }
-    _baseGuid.uid = _flintParams.baseUid;
+
+    if (_flintParams.uid_specified) {
+        _baseGuid.set_mac_from_guid = true;
+    }
+
+    _baseGuid.base_guid_specified = _flintParams.uid_specified || _flintParams.guid_specified;
+    if (_baseGuid.base_guid_specified) {
+        _baseGuid.base_guid = _flintParams.uid_specified ? _flintParams.baseUid : _flintParams.user_guids[0];
+    }
+
+    _baseGuid.base_mac_specified = _flintParams.mac_specified;
+    if (_baseGuid.base_mac_specified) {
+        _baseGuid.base_mac = _flintParams.user_macs[0];
+    }
     //printf("-D-"GUID_FORMAT"\n", _baseGuid.h, _baseGuid.l);
     return true;
 }
@@ -2664,16 +2717,28 @@ FlintStatus SmgSubCommand::executeCommand()
     if (preFwOps()) {
         return FLINT_FAILED;
     }
-    FwOperations *ops = _flintParams.device_specified ? _fwOps : _imgOps;
+    _ops = _flintParams.device_specified ? _fwOps : _imgOps;
     //TODO: dispaly MFG guid changes
+     bool stripedImage = _flintParams.striped_image && _flintParams.image_specified;
+     if (!_ops->FwQuery(&_info, true, stripedImage)) {
+         reportErr(true, FLINT_MFG_ERROR, _ops->err());
+         return FLINT_FAILED;
+     }
+     if (_info.fw_info.chip_type == CT_CONNECTX) {
+         if (!_flintParams.uid_specified && !_flintParams.guid_specified && !_flintParams.mac_specified ) {
+             reportErr(true, "Can not set GUIDs/MACs: GUIDs/MACs are not specified, please run with -uid/-guid/-mac flags.\n");
+             return FLINT_FAILED;
+         }
+     } else {
+        if (!_flintParams.uid_specified) {
+        reportErr(true, "Can not set GUIDs/MACs: uid is not specified, please run with -uid flag.\n");
+        return FLINT_FAILED;
+        }
+     }
     bool ret;
-    if (_flintParams.cmd_params.size() == 2) {
-        ret = ops->FwSetMFG(_baseGuid, &verifyCbFunc);
-    } else {
-        ret = ops->FwSetMFG(_baseGuid.uid, &verifyCbFunc);
-    }
+    ret = _ops->FwSetMFG(_baseGuid, &verifyCbFunc);
     if (!ret) {
-        reportErr(true, FLINT_MFG_ERROR, ops->err());
+        reportErr(true, FLINT_MFG_ERROR, _ops->err());
         return FLINT_FAILED;
     }
     return FLINT_SUCCESS;
index d646879a04743de944bbfd08044d0591284d50ff..1630b4b137f558eb0c846464df4d5bf92dbe4219 100644 (file)
@@ -125,7 +125,7 @@ protected:
                                         guid_t* old_guids, guid_t* old_macs, bool printGuids,\
                                         bool printMacs, bool printUids, int guidNum);
     bool checkGuidsFlags(chip_type_t ct, u_int16_t devType, u_int8_t fwType,
-            bool guidsSpecified, bool macsSpecified, bool uidsSpecified);
+            bool guidsSpecified, bool macsSpecified, bool uidsSpecified, bool ibDev, bool ethDev);
     void printMissingGuidErr(bool ibDev, bool ethDev, bool bxDev);
 
     bool extractUIDArgs(std::vector<string>& cmdArgs, u_int8_t& numOfGuids, u_int8_t& stepSize);
@@ -139,9 +139,6 @@ protected:
     //print errors to an err buff, log if needed and stdout
     void reportErr(bool shouldPrint, const char *format, ...);
 
-
-    bool fwVerLessThan(const u_int16_t r1[3], const u_int16_t r2[3]);
-
     bool writeToFile(string filePath, const std::vector<u_int8_t>& buff);
 
     bool dumpFile(const char* confFile, std::vector<u_int8_t>& data, const char *sectionName);
@@ -298,7 +295,9 @@ public:
 class SmgSubCommand : public SubCommand
 {
 private:
-    fs3_guid_t _baseGuid;
+    fs3_uid_t _baseGuid;
+    fw_info_t _info;
+    FwOperations* _ops;
 public:
     SmgSubCommand();
     ~SmgSubCommand();
index f09f0f6ffa0d8cbe4472140056f5894b25135e38..054116fe1a2e0b73e400f0f5882499d93d667139 100644 (file)
@@ -1,33 +1,13 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) Jan 2013, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
 
@@ -49,16 +29,17 @@ typedef enum MError {
     ME_NOT_IMPLEMENTED,
     ME_SEM_LOCKED,
     ME_MEM_ERROR,
-    ME_PCI_READ_ERROR,
-    ME_PCI_WRITE_ERROR,
-    ME_PCI_SPACE_NOT_SUPPORTED,
-    ME_PCI_IFC_TOUT,
 
     ME_MAD_SEND_FAILED,
     ME_UNKOWN_ACCESS_TYPE,
     ME_UNSUPPORTED_DEVICE,
     ME_REG_NOT_SUPPORTED,
 
+    ME_PCI_READ_ERROR,
+    ME_PCI_WRITE_ERROR,
+    ME_PCI_SPACE_NOT_SUPPORTED,
+    ME_PCI_IFC_TOUT,
+
     // errors regarding REG_ACCESS
     ME_REG_ACCESS_OK = 0,
     ME_REG_ACCESS_BAD_STATUS_ERR = 0x100,
@@ -194,7 +175,7 @@ typedef enum mtcr_access_method {
     MTCR_ACCESS_ERROR  = 0x0,
     MTCR_ACCESS_MEMORY = 0x1,
     MTCR_ACCESS_CONFIG = 0x2,
-    MTCR_ACCESS_INBAND = 0x3,
+    MTCR_ACCESS_INBAND = 0x3
 } mtcr_access_method_t;
 /*
  * Read 4 bytes, return number of succ. read bytes or -1 on failure
@@ -291,8 +272,6 @@ const char* m_err2str(MError status);
 int mread_buffer(mfile *mf, unsigned int offset, u_int8_t* data, int byte_len);
 int mwrite_buffer(mfile *mf, unsigned int offset, u_int8_t* data, int byte_len);
 
-int msupp_fw_ifc_cap(mfile* mf);
-
 #ifdef __cplusplus
 }
 #endif
index e50f6d95c14a420267bc36aabf02896d49c14951..648861f145d85ad81d87e9caa4215af8b7489eae 100644 (file)
@@ -218,7 +218,7 @@ int release_semaphore(mflash* mfl, int ignore_writer_lock);
 #define ADDR_MSK       0x7ffffUL
 #define CMD_MASK       0xe0000000UL
 
-#define SST_STATUS_REG_VAL   0x80000000
+#define SST_STATUS_REG_VAL   0x80
 #define ATMEL_STATUS_REG_VAL 0x0
 
 #define CPUMODE_MSK    0xc0000000UL
@@ -361,7 +361,7 @@ int cntx_st_spi_block_read_ex  (mflash*   mfl,
 
 int cntx_spi_get_type(mflash* mfl, u_int8_t op_type, u_int8_t *vendor, u_int8_t *type, u_int8_t *capacity);
 
-int cntx_spi_write_status_reg(mflash* mfl, u_int32_t status_reg, u_int8_t write_cmd, u_int8_t status_is_double);
+int cntx_spi_write_status_reg(mflash* mfl, u_int32_t status_reg, u_int8_t write_cmd, u_int8_t bytes_num);
 
 int spi_get_num_of_flashes(int prev_num_of_flashes);
 
@@ -823,9 +823,9 @@ int get_flash_params(mflash* mfl, flash_params_t *flash_params, unsigned *type_i
             // Init SST flash.
             if (mfl->access_type == MFAT_MFILE) {
                 if (flash_info->vendor ==  FV_SST && flash_info->type == FMT_SST_25) {
-                    rc = cntx_spi_write_status_reg(mfl, SST_STATUS_REG_VAL, SFC_WRSR, 0); CHECK_RC(rc);
+                    rc = cntx_spi_write_status_reg(mfl, SST_STATUS_REG_VAL, SFC_WRSR, 1); CHECK_RC(rc);
                 } else if (flash_info->vendor ==  FV_ATMEL && flash_info->type == FMT_ATMEL) {
-                    rc = cntx_spi_write_status_reg(mfl, ATMEL_STATUS_REG_VAL, SFC_WRSR, 0); CHECK_RC(rc);
+                    rc = cntx_spi_write_status_reg(mfl, ATMEL_STATUS_REG_VAL, SFC_WRSR, 1); CHECK_RC(rc);
                 }
             }
 
@@ -1209,27 +1209,29 @@ int cntx_exec_cmd_set(mflash* mfl, u_int32_t gw_cmd, u_int32_t* buff,int buff_dw
     return MFE_OK;
 }
 
-int cntx_int_spi_get_status_data(mflash* mfl, u_int8_t op_type, u_int32_t* status, u_int8_t data_num)
+int cntx_int_spi_get_status_data(mflash* mfl, u_int8_t op_type, u_int32_t* status, u_int8_t bytes_num)
 {
     int rc;
 
     u_int32_t gw_cmd  = 0;
     u_int32_t flash_data = 0;
-
+    //TODO: adrianc: update msize from log2(bytes_num)
     gw_cmd = MERGE(gw_cmd,       1, HBO_READ_OP,    1);
     gw_cmd = MERGE(gw_cmd,       1, HBO_CMD_PHASE,  1);
-    gw_cmd = MERGE(gw_cmd,       1, HBO_DATA_PHASE, data_num);
+    gw_cmd = MERGE(gw_cmd,       1, HBO_DATA_PHASE, 1);
     gw_cmd = MERGE(gw_cmd,       2, HBO_MSIZE,      HBS_MSIZE);
 
     gw_cmd = MERGE(gw_cmd, op_type, HBO_CMD,        HBS_CMD);
 
-
+    if (bytes_num > 8) {
+        // self check
+        printf("-E- attempting to read %d bytes from register but only 8 bytes are read!\n", bytes_num);
+        return MFE_UNKNOWN_REG;
+    }
     rc = cntx_exec_cmd_get(mfl, gw_cmd, &flash_data, 1, NULL, "Read id");  CHECK_RC(rc);
 
     // printf("-D- cntx_int_spi_get_status_data: op=%02x status=%08x\n", op_type, flash_data);
-    // Return status reg byte is at offset 3 in word
-    *status = flash_data;
-
+    *status = (flash_data >> 8*(4 - bytes_num));
     return MFE_OK;
 }
 
@@ -1315,27 +1317,35 @@ int cntx_spi_get_type(mflash* mfl, u_int8_t op_type, u_int8_t *vendor, u_int8_t*
     u_int32_t flash_data = 0;
     int rc;
 
-    rc = cntx_int_spi_get_status_data(mfl, op_type, &flash_data, 3); CHECK_RC(rc);
+    rc = cntx_int_spi_get_status_data(mfl, op_type, &flash_data, 4); CHECK_RC(rc);
     //printf("-D- jedec_info = %#x\n", flash_data);
     // Get type and some other info from jededc_id
     get_info_from_jededc_id(flash_data, vendor, type, capacity);
     // printf("-D- cntx_spi_get_type: vendor = %#x, type = %#x, capacity = %#x\n", *vendor, *type, *capacity);
     return MFE_OK;
 }
-int cntx_spi_write_status_reg(mflash* mfl, u_int32_t status_reg, u_int8_t write_cmd, u_int8_t status_is_double)
+int cntx_spi_write_status_reg(mflash* mfl, u_int32_t status_reg, u_int8_t write_cmd, u_int8_t bytes_num)
 {
     int rc;
     u_int32_t gw_cmd = 0;
-
+    // TODO: adrianc: add support for dynamic writes of power of 2 bytes_num not just 1,2 bytes
     rc = cntx_st_spi_write_enable(mfl); CHECK_RC(rc);
     gw_cmd = MERGE(gw_cmd,        1, HBO_CMD_PHASE,  1);
     gw_cmd = MERGE(gw_cmd,        1, HBO_DATA_PHASE, 1);
 
     gw_cmd = MERGE(gw_cmd, write_cmd, HBO_CMD,        HBS_CMD);
 
-    if (status_is_double) {
-        gw_cmd = MERGE(gw_cmd, 1, HBO_MSIZE,      HBS_MSIZE);
+    if (bytes_num != 1 && bytes_num != 2) {
+        // self check
+        printf("-E- can only write status register of length 1 or 2 not %d\n", bytes_num);
+        return MFE_NOT_SUPPORTED_OPERATION;
     }
+    // push status reg to upper bytes
+    status_reg = status_reg << ((bytes_num==2) ? 16 : 24);
+    if (bytes_num == 2) {
+        gw_cmd = MERGE(gw_cmd, 1, HBO_MSIZE,      1);
+    }
+
     return cntx_exec_cmd_set(mfl, gw_cmd, &status_reg, 1, NULL, "Write-Status-Register");
 }
 
@@ -2307,22 +2317,21 @@ int get_dev_info(mflash* mfl)
         mfl->attr.rev_id    = (dev_id & 0xff0000) >> 16;
         mfl->attr.hw_dev_id = dev_id & 0xffff;
     }
+
     if (dev_flags & MDEVS_MLNX_OS) {
          mfl->opts[MFO_FW_ACCESS_TYPE_BY_MFILE] = ATBM_MLNXOS_CMDIF;
      } else if (dev_flags & MDEVS_IB){
              mfl->opts[MFO_FW_ACCESS_TYPE_BY_MFILE] = ATBM_INBAND;
-     } else if (HAS_ICMD_IF(mfl->attr.hw_dev_id)){
-        if (mfl->opts[MFO_IGNORE_CASHE_REP_GUARD] == 0) {
-            if (msupp_fw_ifc_cap(mfl->mf)) {
+     } else { // not mlnxOS or IB device - check HW ID to determine Access type
+        if (HAS_ICMD_IF(mfl->attr.hw_dev_id)){
+            if (mfl->opts[MFO_IGNORE_CASHE_REP_GUARD] == 0) {
                 mfl->opts[MFO_FW_ACCESS_TYPE_BY_MFILE] = ATBM_ICMD;
-            } else {
-                    mfl->opts[MFO_FW_ACCESS_TYPE_BY_MFILE] = ATBM_INBAND;
             }
         }
      }
     return MFE_OK;
-}
 
+}
 //Caller must zero the mflash struct before calling this func.
 int mf_open_fw(mflash* mfl, flash_params_t* flash_params, int num_of_banks)
 {
@@ -2651,14 +2660,19 @@ int     mf_update_boot_addr(mflash* mfl, u_int32_t boot_addr)
     return mf_update_boot_addr_by_type(mfl, boot_addr);
 }
 
-int     mf_read_modify_status_winbond (mflash *mfl, u_int8_t bank_num, u_int8_t first_byte, u_int8_t param, u_int8_t offset, u_int8_t size)
+int     mf_read_modify_status_winbond (mflash *mfl, u_int8_t bank_num, u_int8_t is_first_status_reg, u_int8_t param, u_int8_t offset, u_int8_t size)
 {
-    u_int8_t status1 = 0, status2 = 0, use_rdsr2 = 0, is_double = 0;
+    u_int8_t status1 = 0, status2 = 0, use_rdsr2 = 0;
     u_int32_t status = 0;
+    u_int8_t bytes_to_write = 1;
     int rc;
 
     rc = set_bank_int(mfl, bank_num); CHECK_RC(rc);
     if ( mfl->attr.vendor == FV_WINBOND &&  mfl->attr.type == FMT_WINBOND) {
+        /*
+         * if we have 2 status registers, winbond are allowing us to write both of them
+         * in a single command WRSR  status_reg1 located in MSB, status_reg2 after status_reg1
+         */
         use_rdsr2 = 1;
     }
 
@@ -2666,15 +2680,19 @@ int     mf_read_modify_status_winbond (mflash *mfl, u_int8_t bank_num, u_int8_t
     rc = mfl->f_spi_status(mfl, SFC_RDSR, &status1); CHECK_RC(rc);
     if (use_rdsr2) {
         rc = mfl->f_spi_status(mfl, SFC_RDSR2, &status2); CHECK_RC(rc);
-        status = MERGE(0, status2, 16, 8);
-        is_double = 1;
+        status = MERGE(0, status2, 0, 8);
+        bytes_to_write = 2;
     }
     // Prepare the read status word
-    status = MERGE(status, status1, 24, 8);
+    status = MERGE(status, status1, 8, 8);
     // Modify the status according to the function arguments
-    status = MERGE(status, param, 16 + offset + first_byte * 8 , size);
+    status = MERGE(status, param, offset + is_first_status_reg * 8 , size);
+    // fix status register in case we dont need to write status register 2
+    if (bytes_to_write == 1) {
+        status = status >> 8;
+    }
     // Write register status
-    rc = cntx_spi_write_status_reg(mfl, status, SFC_WRSR, is_double); CHECK_RC(rc);
+    rc = cntx_spi_write_status_reg(mfl, status, SFC_WRSR, bytes_to_write); CHECK_RC(rc);
     return MFE_OK;
 }
 #define QUAD_EN_OFFSET 1
@@ -2682,19 +2700,15 @@ int     mf_read_modify_status_winbond (mflash *mfl, u_int8_t bank_num, u_int8_t
 #define DUMMY_CYCLES_OFFSET_ST 12
 
 int mf_read_modify_status_new(mflash *mfl, u_int8_t bank_num, u_int8_t read_cmd, u_int8_t write_cmd, u_int8_t val,
-                              u_int8_t offset, u_int8_t size, u_int8_t is_double)
+                              u_int8_t offset, u_int8_t size, u_int8_t bytes_num)
 {
     int rc;
     u_int32_t status = 0;
 
     rc = set_bank_int(mfl, bank_num); CHECK_RC(rc);
-    rc = cntx_int_spi_get_status_data(mfl, read_cmd, &status, is_double); CHECK_RC(rc);
-    // status comes in be32 format (byte0 = MSB) so we switch
-    status = __be32_to_cpu(status);
+    rc = cntx_int_spi_get_status_data(mfl, read_cmd, &status, bytes_num); CHECK_RC(rc);
     status = MERGE(status, val, offset, size);
-    // and switch back
-    status = __be32_to_cpu(status);
-    rc = cntx_spi_write_status_reg(mfl, status, write_cmd, is_double); CHECK_RC(rc);
+    rc = cntx_spi_write_status_reg(mfl, status, write_cmd, bytes_num); CHECK_RC(rc);
     return MFE_OK;
 }
 
@@ -2703,16 +2717,11 @@ int mf_get_param_int(mflash* mfl, u_int8_t *param_p, u_int8_t cmd, u_int8_t offs
 {
     u_int32_t status = 0, is_first = 1, bank;
     int rc;
-
     for (bank = 0; bank < mfl->attr.banks_num; bank++ ) {
         u_int8_t curr_val;
         rc = set_bank_int(mfl, bank); CHECK_RC(rc);
-
         rc = cntx_int_spi_get_status_data(mfl, cmd, &status, bytes_num); CHECK_RC(rc);
-        //if (mfl->attr.vendor == FV_ST) {
-               //value is a word located in the higher bytes and is in be_32 format so we "fix" the bytes
-               status = __be32_to_cpu(status);
-        //}
+
         curr_val = EXTRACT(status, offset, bit_size);
         if (bit_size == 1) {
                curr_val = (curr_val == enabled_val);
@@ -2740,7 +2749,7 @@ int     mf_set_dummy_cycles (mflash *mfl, u_int8_t num_of_cycles)
         return MFE_NOT_SUPPORTED_OPERATION;
     }
     for (bank = 0; bank < mfl->attr.banks_num; bank++) {
-        rc =  mf_read_modify_status_new(mfl, bank, SFC_RDNVR, SFC_WRNVR, num_of_cycles, DUMMY_CYCLES_OFFSET_ST, 4, 1); CHECK_RC(rc);
+        rc =  mf_read_modify_status_new(mfl, bank, SFC_RDNVR, SFC_WRNVR, num_of_cycles, DUMMY_CYCLES_OFFSET_ST, 4, 2); CHECK_RC(rc);
     }
     return MFE_OK;
 }
@@ -2772,7 +2781,7 @@ int     mf_set_quad_en (mflash *mfl, u_int8_t quad_en)
         if (mfl->attr.vendor == FV_WINBOND) {
             rc = mf_read_modify_status_winbond(mfl, bank, 0, quad_en, QUAD_EN_OFFSET, 1); CHECK_RC(rc);
         } else if (mfl->attr.vendor == FV_ST) {
-            rc = mf_read_modify_status_new(mfl, bank, SFC_RDNVR, SFC_WRNVR, !quad_en, QUAD_EN_OFFSET_ST, 1, 1); CHECK_RC(rc);
+            rc = mf_read_modify_status_new(mfl, bank, SFC_RDNVR, SFC_WRNVR, !quad_en, QUAD_EN_OFFSET_ST, 1, 2); CHECK_RC(rc);
         }
     }
     return MFE_OK;
index 8a5f82eb68d7855e5dd0ed7163c4def5f080063c..27fba5a55dc3ceffd5bc3ec1c67ea578ba40dd68 100755 (executable)
@@ -321,8 +321,10 @@ typedef enum fs3_section {
     FS3_FW_ADB        = 0x33,
     FS3_MFG_INFO      = 0xe0,
     FS3_DEV_INFO      = 0xe1,
-    FS3_NV_DATA       = 0xe2,
+    FS3_NV_DATA1       = 0xe2,
     FS3_VPD_R0        = 0xe3,
+    FS3_NV_DATA2      = 0xe4,
+    FS3_FW_NV_LOG     = 0xe5,
     FS3_ITOC          = 0xfd,
     FS3_END           = 0xff,
 } fs3_section_t;
index db94a9b3674b086ddb0ef431fea8e7bc4f4201bc..1bc43d8bdc7c8e93df2acce31a8c0f23a4ee6270 100755 (executable)
@@ -580,7 +580,7 @@ bool Flash::erase_sector  (u_int32_t addr) {
     rc = mf_erase_sector(_mfl, phys_addr);
     deal_with_signal();
     if (rc != MFE_OK) {
-        if (rc == MFE_REG_ACCESS_RES_NOT_AVLBL) {
+        if (rc == MFE_REG_ACCESS_RES_NOT_AVLBL || rc == MFE_REG_ACCESS_BAD_PARAM) {
             return errmsg("Flash erase of address 0x%x failed: %s\n"
                           "    This may indicate that a FW image was already updated on flash, but not loaded by the device.\n"
                           "    Please load FW on the device (reset device or restart driver) before burning a new FW.",
index 87021d9f9508e2d0a14d14d534ebf14913ec657f..ae6637ca1f759488bbf68d0e7095d19042a6b3a5 100644 (file)
@@ -45,6 +45,7 @@ bool Fs2Operations::FwInit()
 {
     FwInitCom();
     memset(&_fs2ImgInfo, 0, sizeof(_fs2ImgInfo));
+    _fwImgInfo.fwType = FIT_FS2;
     return true;
 }
 
@@ -1487,7 +1488,7 @@ bool Fs2Operations::FwReadRom(std::vector<u_int8_t>& romSect)
     return true;
 }
 
-bool Fs2Operations::FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc)
+bool Fs2Operations::FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc)
 {
     // avoid compiler warrnings
     (void)baseGuid;
index a17dde70fac7ba4b9b35f13cb26d830ff4d4754d..99ed490c2cdc62b15e982dbfdb06e306bd85c631 100644 (file)
@@ -59,7 +59,7 @@ public:
     // virtual bool FwSetGuids(std::vector<guid_t>& userGuids, std::vector<guid_t>& userMacs, bool updateCrc=true, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc, ProgressCallBack progressFunc);
 
-    virtual bool FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
+    virtual bool FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwSetVSD(char* vsdStr, ProgressCallBack progressFunc=(ProgressCallBack)NULL, PrintCallBack printFunc=(PrintCallBack)NULL);
     virtual bool FwSetVPD(char* vpdFileStr, PrintCallBack callBackFunc=(PrintCallBack)NULL);
index c5c03f9e1c78619a6596f83067316954957a526e..3c1c41e2668e4790e5453af5ddf5d7d107a226be 100644 (file)
@@ -43,6 +43,8 @@
 
 #define FS3_FLASH_SIZE 0x400000
 #define FS3_LOG_CHUNK_SIZE 21
+#define CX4_FLASH_SIZE 22
+#define CX4_LOG_CHUNK_SIZE 22
 
 #define FS3_DFLT_GUID_NUM_TO_ALLOCATE 8
 #define FS3_DFLT_GUID_STEP 1
@@ -80,8 +82,10 @@ const Fs3Operations::SectionInfo Fs3Operations::_fs3SectionsInfoArr[] = {
 
     {FS3_MFG_INFO,      MFG_INFO},
     {FS3_DEV_INFO,      "DEV_INFO"},
-    {FS3_NV_DATA      "NV_DATA"},
+    {FS3_NV_DATA1,      "NV_DATA"},
     {FS3_VPD_R0,        "VPD_R0"},
+    {FS3_NV_DATA2,      "NV_DATA"},
+    {FS3_FW_NV_LOG,     "FW_NV_LOG"},
 };
 
 bool Fs3Operations::Fs3UpdateImgCache(u_int8_t *buff, u_int32_t addr, u_int32_t size)
@@ -146,17 +150,35 @@ bool Fs3Operations::CheckTocSignature(struct cibfw_itoc_header *itoc_header, u_i
                        (int)sizeof(uids_context), (int)sizeof(cibfw_guids_context));\
            }\
 }
+
+#define CHECK_MFG_NEW_FORMAT(mfg_st)\
+        ((mfg_st.major_version == 1) && (mfg_st.minor_version == 0))
+#define CHECK_MFG_OLD_FORMAT(mfg_st)\
+        ((mfg_st.major_version == 0) && (mfg_st.minor_version == 0))
 bool Fs3Operations::GetMfgInfo(u_int8_t *buff)
 {
-    struct cibfw_mfg_info mfg_info;
-    cibfw_mfg_info_unpack(&mfg_info, buff);
-    // cibfw_mfg_info_dump(&mfg_info, stdout);
-
-    CHECK_UID_STRUCTS_SIZE(_fs3ImgInfo.ext_info.orig_fs3_uids_info, mfg_info.guids);
-    memcpy(&_fs3ImgInfo.ext_info.orig_fs3_uids_info, &mfg_info.guids, sizeof(mfg_info.guids));
-    strcpy(_fs3ImgInfo.ext_info.orig_psid, mfg_info.psid);
+    // structs of the same size we can unpack either way
+    struct cibfw_mfg_info cib_mfg_info;
+    struct cx4fw_mfg_info cx4_mfg_info;
 
-    _fs3ImgInfo.ext_info.guids_override_en = mfg_info.guids_override_en;
+    cibfw_mfg_info_unpack(&cib_mfg_info, buff);
+    // cibfw_mfg_info_dump(&mfg_info, stdout);
+    if (CHECK_MFG_NEW_FORMAT(cib_mfg_info)) {
+        cx4fw_mfg_info_unpack(&cx4_mfg_info, buff);
+        CHECK_UID_STRUCTS_SIZE(_fs3ImgInfo.ext_info.orig_fs3_uids_info.cx4_uids, cx4_mfg_info.guids);
+        memcpy(&_fs3ImgInfo.ext_info.orig_fs3_uids_info.cx4_uids, &cx4_mfg_info.guids, sizeof(cx4_mfg_info.guids));
+        strcpy(_fs3ImgInfo.ext_info.orig_psid, cx4_mfg_info.psid);
+        _fs3ImgInfo.ext_info.guids_override_en = cx4_mfg_info.guids_override_en;
+        _fs3ImgInfo.ext_info.orig_fs3_uids_info.valid_field = 1;
+    } else if (CHECK_MFG_OLD_FORMAT(cib_mfg_info)){
+        CHECK_UID_STRUCTS_SIZE(_fs3ImgInfo.ext_info.orig_fs3_uids_info.cib_uids, cib_mfg_info.guids);
+        memcpy(&_fs3ImgInfo.ext_info.orig_fs3_uids_info.cib_uids, &cib_mfg_info.guids, sizeof(cib_mfg_info.guids));
+        strcpy(_fs3ImgInfo.ext_info.orig_psid, cib_mfg_info.psid);
+        _fs3ImgInfo.ext_info.guids_override_en = cib_mfg_info.guids_override_en;
+        _fs3ImgInfo.ext_info.orig_fs3_uids_info.valid_field = 0;
+    } else {
+        return errmsg("Unknown MFG_INFO format version (%d.%d).", cib_mfg_info.major_version, cib_mfg_info.minor_version);
+    }
     return true;
 
 }
@@ -190,16 +212,34 @@ bool Fs3Operations::GetImageInfo(u_int8_t *buff)
     return true;
 }
 
+#define CHECK_DEV_INFO_NEW_FORMAT(info_st)\
+        ((info_st.major_version == 2) && (info_st.minor_version == 0))
+#define CHECK_DEV_INFO_OLD_FORMAT(info_st)\
+        ((info_st.major_version == 1) && (info_st.minor_version == 0))
 bool Fs3Operations::GetDevInfo(u_int8_t *buff)
 {
-    struct cibfw_device_info dev_info;
-    cibfw_device_info_unpack(&dev_info, buff);
+    struct cibfw_device_info cib_dev_info;
+    struct cx4fw_device_info cx4_dev_info;
+    // same size, we can unpack to check version
+    cibfw_device_info_unpack(&cib_dev_info, buff);
     // cibfw_device_info_dump(&dev_info, stdout);
 
-    CHECK_UID_STRUCTS_SIZE(_fs3ImgInfo.ext_info.fs3_uids_info, dev_info.guids);
-    memcpy(&_fs3ImgInfo.ext_info.fs3_uids_info, &dev_info.guids, sizeof(dev_info.guids));
-    strcpy(_fwImgInfo.ext_info.vsd, dev_info.vsd);
-    _fwImgInfo.ext_info.vsd_sect_found = true;
+    if (CHECK_DEV_INFO_NEW_FORMAT(cib_dev_info)) {
+        cx4fw_device_info_unpack(&cx4_dev_info, buff);
+        CHECK_UID_STRUCTS_SIZE(_fs3ImgInfo.ext_info.fs3_uids_info.cx4_uids, cx4_dev_info.guids);
+        memcpy(&_fs3ImgInfo.ext_info.fs3_uids_info.cx4_uids, &cx4_dev_info.guids, sizeof(cx4_dev_info.guids));
+        strcpy(_fwImgInfo.ext_info.vsd, cx4_dev_info.vsd);
+        _fs3ImgInfo.ext_info.fs3_uids_info.valid_field = 1;
+        _fwImgInfo.ext_info.vsd_sect_found = true;
+    } else if (CHECK_DEV_INFO_OLD_FORMAT(cib_dev_info)){
+        CHECK_UID_STRUCTS_SIZE(_fs3ImgInfo.ext_info.fs3_uids_info.cib_uids, cib_dev_info.guids);
+        memcpy(&_fs3ImgInfo.ext_info.fs3_uids_info.cib_uids, &cib_dev_info.guids, sizeof(cib_dev_info.guids));
+        strcpy(_fwImgInfo.ext_info.vsd, cib_dev_info.vsd);
+        _fs3ImgInfo.ext_info.fs3_uids_info.valid_field = 0;
+        _fwImgInfo.ext_info.vsd_sect_found = true;
+    } else {
+        return errmsg("Unknown DEV_INFO format version (%d.%d).", cib_dev_info.major_version, cib_dev_info.minor_version);
+    }
     return true;
 }
 
@@ -215,9 +255,6 @@ bool Fs3Operations::GetRomInfo(u_int8_t *buff, u_int32_t size)
     return true;
 }
 
-
-
-
 bool Fs3Operations::GetImageInfoFromSection(u_int8_t *buff, u_int8_t sect_type, u_int32_t sect_size, u_int8_t check_support_only)
 {
     #define EXEC_GET_INFO_OR_GET_SUPPORT(get_info_func, buff, check_support_only) (check_support_only) ? true : get_info_func(buff);
@@ -349,9 +386,9 @@ bool Fs3Operations::VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCa
                         Fs3UpdateImgCache(buff, flash_addr, entry_size_in_bytes);
                         u_int32_t sect_crc = CalcImageCRC((u_int32_t*)buff, toc_entry.size);
 
-                        //printf("-D- flash_addr: %#x, toc_entry_size = %#x, actual sect = %#x, from itoc: %#x\n", flash_addr, toc_entry.size, sect_crc,
-                        //        toc_entry.section_crc);
-                        if (!DumpFs3CRCCheck(toc_entry.type, phys_addr, entry_size_in_bytes, sect_crc, toc_entry.section_crc, false, verifyCallBackFunc)) {
+                       // printf("-D- flash_addr: %#x, toc_entry_size = %#x, actual sect = %#x, from itoc: %#x np_crc = %s\n", flash_addr, toc_entry.size, sect_crc,
+                       //         toc_entry.section_crc, toc_entry.no_crc ? "yes" : "no");
+                        if (!DumpFs3CRCCheck(toc_entry.type, phys_addr, entry_size_in_bytes, sect_crc, toc_entry.section_crc, toc_entry.no_crc, verifyCallBackFunc)) {
                             if (toc_entry.device_data) {
                                 _badDevDataSections = true;
                             }
@@ -405,6 +442,46 @@ bool Fs3Operations::FwVerify(VerifyCallBack verifyCallBackFunc, bool isStripedIm
     return Fs3Verify(verifyCallBackFunc, showItoc, queryOptions);
 }
 
+#define BOOT_RECORD_SIZE 0x10
+bool Fs3Operations::checkPreboot(u_int32_t* prebootBuff, u_int32_t size, VerifyCallBack verifyCallBackFunc)
+{
+    u_int32_t expectedCRC;
+    char outputLine[512] = {0};
+    u_int32_t startAddr = (_ioAccess->is_flash()) ? \
+            _ioAccess->get_phys_from_cont(0x0, _fwImgInfo.cntxLog2ChunkSize, (_fwImgInfo.imgStart != 0)) : 0x0;
+
+    sprintf(outputLine,"%s /0x%08x-0x%08x (0x%06x)/ (PREBOOT)", PRE_CRC_OUTPUT, startAddr, 0x34, size << 2);
+    expectedCRC = prebootBuff[size-1];
+    // calc CRC
+    Crc16        crc1, crc2;
+    CRC1n(crc1, prebootBuff, size);
+    crc1.finish();
+    // HACK: due to a bug in imgen this crc might not be calculated correctly(calculate in the "wrong way" for backward compat)
+    // crc1 represents the proper way to calculate the crc , crc2 represents the "wrong" way
+
+    // signature
+    CRCn(crc2, prebootBuff, 4);
+    // boot record
+    u_int8_t bootRecordBE[BOOT_RECORD_SIZE];
+    memcpy(bootRecordBE, &prebootBuff[4], BOOT_RECORD_SIZE);
+    TOCPUn(bootRecordBE, (BOOT_RECORD_SIZE  >> 2));
+    for (int i = 0; i < BOOT_RECORD_SIZE; i++) {
+        crc2 << bootRecordBE[i];
+    }
+    // the rest of the section (leave last dword out of the crc calc as its the expected crc)
+    CRC1n(crc2, &prebootBuff[8], size - 8);
+    crc2.finish();
+
+    // print results
+    if (expectedCRC != crc1.get() && expectedCRC != crc2.get()) {
+        report_callback(verifyCallBackFunc, "%s /0x%08x/ - wrong CRC (exp:0x%x, act:0x%x)\n",
+                outputLine, startAddr, expectedCRC, crc1.get());
+        return errmsg("Bad CRC");
+    }
+    report_callback(verifyCallBackFunc, "%s - OK\n", outputLine);
+    return true;
+}
+
 bool Fs3Operations::Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc, struct QueryOptions queryOptions)
 {
     u_int32_t cntx_image_start[CNTX_START_POS_SIZE];
@@ -436,21 +513,19 @@ bool Fs3Operations::Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc,
     Fs3UpdateImgCache((u_int8_t*)buff, 0, FS3_BOOT_START);
     TOCPUn(buff, FS3_BOOT_START_IN_DW);
 
+    report_callback(verifyCallBackFunc, "\nFS3 failsafe image\n\n");
+    // adrianc: we dont check Preboot section (or boot start) because of a variance in the calculation of the CRC
 
+    // Get BOOT2 -Get Only bootSize if quickQuery == true else read and check CRC of boot2 section as well
+    offset += FS3_BOOT_START;
+    FS3_CHECKB2(0, offset, !queryOptions.quickQuery, PRE_CRC_OUTPUT, verifyCallBackFunc);
 
-    report_callback(verifyCallBackFunc, "\nFS3 failsafe image\n\n");
-    // Get BOOT2 - Only if quickQuery == false
-    offset += FS2_BOOT_START;
-    if (queryOptions.quickQuery == false) {
-        FS3_CHECKB2(0, offset, true, PRE_CRC_OUTPUT, verifyCallBackFunc);
-    }
-    offset += _fs3ImgInfo.bootSize;
+    offset += _fwImgInfo.bootSize;;
     _fs3ImgInfo.firstItocIsEmpty = false;
     // printf("-D- image_start = %#x\n", image_start);
     // Go over the ITOC entries
     u_int32_t sector_size = (_ioAccess->is_flash()) ? _ioAccess->get_sector_size() : FS3_DEFAULT_SECTOR_SIZE;
     offset = (offset % sector_size == 0) ? offset : (offset + sector_size - offset % 0x1000);
-
     while (offset < _ioAccess->get_size())
     {
         if (VerifyTOC(offset, bad_signature, verifyCallBackFunc, show_itoc, queryOptions)) {
@@ -474,12 +549,13 @@ bool Fs3Operations::Fs3IntQuery(bool readRom, bool quickQuery)
     struct QueryOptions queryOptions;
     queryOptions.readRom = readRom;
     queryOptions.quickQuery = quickQuery;
+
     if (!Fs3Verify((VerifyCallBack)NULL, 0, queryOptions)) {
         return false;
     }
-    // get chip type and device sw id, works only on device
+    // get chip type and device sw id, from device/image
+    const u_int32_t* swId = NULL;
     if (_ioAccess->is_flash()) {
-        const u_int32_t* swId;
         if (!getInfoFromHwDevid(_ioAccess->get_dev_id(), _fwImgInfo.ext_info.chip_type, &swId)) {
             return false;
         }
@@ -496,6 +572,15 @@ bool Fs3Operations::FwQuery(fw_info_t *fwInfo, bool readRom, bool isStripedImage
     if (!Fs3IntQuery(readRom)) {
         return false;
     }
+    //adrianc:  best effort to get chip_type for image on image since it can "theoretically" be used on more than one device , take the first one.
+    if (!_ioAccess->is_flash()) {
+        const u_int32_t* swId = NULL;
+        if (!getInfoFromHwDevid(_fwImgInfo.supportedHwId[0], _fwImgInfo.ext_info.chip_type, &swId)) {
+            return false;
+        }
+        _fwImgInfo.ext_info.dev_type = swId[0];
+    }
+
     memcpy(&(fwInfo->fw_info),  &(_fwImgInfo.ext_info),  sizeof(fw_info_com_t));
     memcpy(&(fwInfo->fs3_info), &(_fs3ImgInfo.ext_info), sizeof(fs3_info_t));
     fwInfo->fw_type = FIT_FS3;
@@ -512,6 +597,7 @@ bool Fs3Operations::FwInit()
 {
     FwInitCom();
     memset(&_fs3ImgInfo, 0, sizeof(_fs3ImgInfo));
+    _fwImgInfo.fwType = FIT_FS3;
     return true;
 }
 
@@ -563,6 +649,10 @@ bool Fs3Operations::GetMaxImageSize(u_int32_t flash_size, bool image_is_fs, u_in
 
 return true;
 }
+
+#define SUPPORTS_ISFU(chip_type) \
+    (chip_type == CT_CONNECT_IB || chip_type == CT_CONNECTX)
+
 bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
                                   ExtBurnParams& burnParams)
 {
@@ -658,8 +748,8 @@ bool Fs3Operations::BurnFs3Image(Fs3Operations &imageOps,
 
     // if we access without cache replacement or the burn was non failsafe, update YU bootloaders.
     // if we access with cache replacement notify currently running fw of new image start address to crspace (for SW reset)
-    //TODO: add SwitchIB, SwitchEN and ConnectX4 when we have support for ISFU
-    if (_fwImgInfo.ext_info.chip_type != CT_CONNECT_IB || !burnParams.burnFailsafe || f->get_ignore_cache_replacment()) {
+    //TODO: add SwitchIB, SwitchEN when we have support for ISFU
+    if (!SUPPORTS_ISFU(_fwImgInfo.ext_info.chip_type) || !burnParams.burnFailsafe || f->get_ignore_cache_replacment()) {
         boot_address_was_updated = f->update_boot_addr(new_image_start);
     } else {
         _isfuSupported = Fs3IsfuActivateImage(new_image_start);
@@ -917,11 +1007,12 @@ bool Fs3Operations::FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sec
     return true;
 }
 
-bool Fs3Operations::FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc)
+bool Fs3Operations::FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc)
 {
-    if (!baseGuid.num_of_guids || !baseGuid.step_size) {
-        return errmsg("invalid values for number_of_Guids(%d)/step_size(%d) should be: [1..255]", baseGuid.num_of_guids, baseGuid.step_size);
+    if (!baseGuid.base_guid_specified && !baseGuid.base_mac_specified) {
+        return errmsg("base GUID/MAC were not specified.");
     }
+
     if (!Fs3UpdateSection(&baseGuid, FS3_MFG_INFO, false, CMD_SET_MFG_GUIDS, callBackFunc)) {
         return false;
     }
@@ -931,13 +1022,13 @@ bool Fs3Operations::FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc)
 bool Fs3Operations::FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc)
 {
     // in FS3 default behavior when setting GUIDs / MFG is to assign 8 guids per port with step size of 1 between them.
-    fs3_guid_t bGuid = {baseGuid, FS3_DFLT_GUID_NUM_TO_ALLOCATE, FS3_DFLT_GUID_STEP};
+    fs3_uid_t bGuid = {baseGuid, 1, {0, 0}, 0, 0, 0, 1};
     return FwSetMFG(bGuid, callBackFunc);
 }
 
 bool Fs3Operations::FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc, ProgressCallBack progressFunc)
 {
-    fs3_guid_t usrGuid;
+    fs3_uid_t usrGuid;
     // Avoid Warning because there is no need for progressFunc
     (void)progressFunc;
     if (sgParam.userGuids.empty()) {
@@ -952,17 +1043,26 @@ bool Fs3Operations::FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc,
        return errmsg("guids override is not set, cannot set device guids");
     }
 
-    if (sgParam.numOfGUIDs && sgParam.stepSize) {
-        // user requested to specify the step and num of guids to be allocated per port
-        usrGuid.num_of_guids = sgParam.numOfGUIDs;
-        usrGuid.step_size = sgParam.stepSize;
-    } else {
-        // default behavior num_of_guids=8 step_size=1
-        usrGuid.num_of_guids = FS3_DFLT_GUID_NUM_TO_ALLOCATE;
-        usrGuid.step_size = FS3_DFLT_GUID_STEP;
+    usrGuid.num_of_guids = sgParam.numOfGUIDs ? sgParam.numOfGUIDs : 0;
+    usrGuid.step_size = usrGuid.step_size ? sgParam.stepSize : 0;
+
+    usrGuid.base_guid_specified = false;
+    usrGuid.base_mac_specified = false;
+    usrGuid.set_mac_from_guid = false;
+
+    if (sgParam.guidsSpecified || sgParam.uidsSpecified) {
+        usrGuid.base_guid_specified = true;
+        usrGuid.base_guid = sgParam.userGuids[0];
+        usrGuid.set_mac_from_guid = sgParam.uidsSpecified ? true : false;
+    }
+    if (sgParam.macsSpecified) {
+        usrGuid.base_mac_specified = true;
+        usrGuid.base_mac = sgParam.userGuids[1];
     }
-    usrGuid.uid = sgParam.userGuids[0];
 
+    if (!usrGuid.base_guid_specified && !usrGuid.base_mac_specified) {
+        return errmsg("base GUID/MAC were not specified.");
+    }
     if (!Fs3UpdateSection(&usrGuid, FS3_DEV_INFO, true, CMD_SET_GUIDS, callBackFunc)) {
         return false;
     }
@@ -1244,49 +1344,118 @@ bool Fs3Operations::Fs3GetItocInfo(struct toc_info *tocArr, int num_of_itocs, fs
     return errmsg("ITOC entry type: %s (%d) not found", GetSectionNameByType(sect_type), sect_type);
 }
 
-bool Fs3Operations::Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
+bool Fs3Operations::Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_uid_t base_uid,
                                             std::vector<u_int8_t>  &newSectionData)
 {
-    struct cibfw_mfg_info mfg_info;
-    cibfw_mfg_info_unpack(&mfg_info, (u_int8_t*)&section_data[0]);
+    struct cibfw_mfg_info cib_mfg_info;
+    struct cx4fw_mfg_info cx4_mfg_info;
+    cibfw_mfg_info_unpack(&cib_mfg_info, (u_int8_t*)&section_data[0]);
 
-    Fs3ChangeUidsFromBase(base_uid, &mfg_info.guids);
+    if (CHECK_MFG_OLD_FORMAT(cib_mfg_info)) {
+        if (!Fs3ChangeUidsFromBase(base_uid, cib_mfg_info.guids)) {
+            return false;
+        }
+    } else if (CHECK_MFG_NEW_FORMAT(cib_mfg_info)) {
+        cx4fw_mfg_info_unpack(&cx4_mfg_info, (u_int8_t*)&section_data[0]);
+        if (!Fs3ChangeUidsFromBase(base_uid, cx4_mfg_info.guids)) {
+            return false;
+        }
+    } else {
+        return errmsg("Unknown MFG_INFO format version (%d.%d).", cib_mfg_info.major_version, cib_mfg_info.minor_version);
+    }
     newSectionData = section_data;
     memset((u_int8_t*)&newSectionData[0], 0, curr_toc->toc_entry.size * 4);
-    cibfw_mfg_info_pack(&mfg_info, (u_int8_t*)&newSectionData[0]);
+
+    if (CHECK_MFG_NEW_FORMAT(cib_mfg_info)) {
+        cx4fw_mfg_info_pack(&cx4_mfg_info, (u_int8_t*)&newSectionData[0]);
+    } else {
+        cibfw_mfg_info_pack(&cib_mfg_info, (u_int8_t*)&newSectionData[0]);
+    }
     return true;
 }
 
-bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_guid_t base_uid, struct cibfw_guids *guids)
-{
-    u_int64_t base_uid_64 =  base_uid.uid.l | (u_int64_t)base_uid.uid.h << 32;
-    // Should be put somewhere in common place
-    u_int64_t base_mac_64 =  ((u_int64_t)base_uid.uid.l & 0xffffff) | (((u_int64_t)base_uid.uid.h & 0xffffff00) << 16);
-
-    guids->guids[0].uid = base_uid_64;
-    guids->guids[0].num_allocated = base_uid.num_of_guids;
-    guids->guids[0].step = base_uid.step_size;
-    guids->guids[1].uid = base_uid_64 + (base_uid.num_of_guids * base_uid.step_size);
-    guids->guids[1].num_allocated = base_uid.num_of_guids;
-    guids->guids[1].step = base_uid.step_size;
-    guids->macs[0].uid = base_mac_64;
-    guids->macs[0].num_allocated = base_uid.num_of_guids;
-    guids->macs[0].step = base_uid.step_size;
-    guids->macs[1].uid = base_mac_64 + (base_uid.num_of_guids * base_uid.step_size);
-    guids->macs[1].num_allocated = base_uid.num_of_guids;
-    guids->macs[1].step = base_uid.step_size;
+#define GUID_TO_64(guid_st) \
+        (guid_st.l | (u_int64_t)guid_st.h << 32)
+
+bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cibfw_guids& guids)
+{
+    /*
+     * On ConnectIB and SwitchIB we derrive macs and guids from a single base_guid
+     */
+    u_int64_t base_guid_64;
+    u_int64_t base_mac_64;
+    base_guid_64 = GUID_TO_64(base_uid.base_guid);
+    base_mac_64 = (((u_int64_t)base_uid.base_guid.l & 0xffffff) | (((u_int64_t)base_uid.base_guid.h & 0xffffff00) << 16));
+    guids.guids[0].uid = base_guid_64;
+    guids.guids[0].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.guids[0].num_allocated;
+    guids.guids[0].step = base_uid.step_size ? base_uid.step_size : guids.guids[0].step;
+
+    guids.guids[1].uid = base_guid_64 + (guids.guids[0].num_allocated * guids.guids[0].step);
+    guids.guids[1].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.guids[1].num_allocated;
+    guids.guids[1].step = base_uid.step_size ? base_uid.step_size : guids.guids[1].step;
+
+    guids.macs[0].uid = base_mac_64;
+    guids.macs[0].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.macs[0].num_allocated;
+    guids.macs[0].step = base_uid.step_size ? base_uid.step_size : guids.macs[0].step;
+
+    guids.macs[1].uid = base_mac_64 + (guids.macs[0].num_allocated * guids.macs[0].step);
+    guids.macs[1].num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.macs[1].num_allocated;
+    guids.macs[1].step = base_uid.step_size ? base_uid.step_size : guids.macs[1].step;
     return true;
 }
 
-bool Fs3Operations::Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
+bool Fs3Operations::Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cx4fw_guids& guids)
+{
+    /*
+     * on ConnectX4 we derrive guids from base_guid and macs from base_mac
+     */
+    u_int64_t base_guid_64;
+    u_int64_t base_mac_64;
+
+    base_guid_64 = base_uid.base_guid_specified ? GUID_TO_64(base_uid.base_guid) : guids.guids.uid;
+    base_mac_64 = base_uid.base_mac_specified ? GUID_TO_64(base_uid.base_mac) : guids.macs.uid;
+    if (base_uid.set_mac_from_guid && base_uid.base_guid_specified) {
+        // in case we derrive mac from guid
+        base_mac_64 = (((u_int64_t)base_uid.base_guid.l & 0xffffff) | (((u_int64_t)base_uid.base_guid.h & 0xffffff00) << 16));
+    }
+
+    guids.guids.uid = base_guid_64;
+    guids.guids.num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.guids.num_allocated;
+    guids.guids.step = base_uid.step_size ? base_uid.step_size : guids.guids.step;
+
+    guids.macs.uid = base_mac_64;
+    guids.macs.num_allocated = base_uid.num_of_guids ? base_uid.num_of_guids : guids.macs.num_allocated;
+    guids.macs.step = base_uid.step_size ? base_uid.step_size : guids.macs.step ;
+    return true;
+}
+
+bool Fs3Operations::Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_uid_t base_uid,
         std::vector<u_int8_t>  &newSectionData)
 {
-    struct cibfw_device_info dev_info;
-    cibfw_device_info_unpack(&dev_info, (u_int8_t*)&section_data[0]);
-    Fs3ChangeUidsFromBase(base_uid, &dev_info.guids);
+    struct cibfw_device_info cib_dev_info;
+    struct cx4fw_device_info cx4_dev_info;
+    cibfw_device_info_unpack(&cib_dev_info, (u_int8_t*)&section_data[0]);
+
+    if (CHECK_DEV_INFO_OLD_FORMAT(cib_dev_info)) {
+        if (!Fs3ChangeUidsFromBase(base_uid, cib_dev_info.guids)) {
+            return false;
+        }
+    } else if (CHECK_DEV_INFO_NEW_FORMAT(cib_dev_info)) {
+        cx4fw_device_info_unpack(&cx4_dev_info, (u_int8_t*)&section_data[0]);
+        if (!Fs3ChangeUidsFromBase(base_uid, cx4_dev_info.guids)) {
+            return false;
+        }
+    } else {
+        return errmsg("Unknown DEV_INFO format version (%d.%d).", cib_dev_info.major_version, cib_dev_info.minor_version);
+    }
     newSectionData = section_data;
     memset((u_int8_t*)&newSectionData[0], 0, curr_toc->toc_entry.size * 4);
-    cibfw_device_info_pack(&dev_info, (u_int8_t*)&newSectionData[0]);
+
+    if (CHECK_DEV_INFO_NEW_FORMAT(cib_dev_info)) {
+        cx4fw_device_info_pack(&cx4_dev_info, (u_int8_t*)&newSectionData[0]);
+    } else {
+        cibfw_device_info_pack(&cib_dev_info, (u_int8_t*)&newSectionData[0]);
+    }
     return true;
 }
 
@@ -1445,14 +1614,14 @@ bool  Fs3Operations::Fs3UpdateSection(void *new_info, fs3_section_t sect_type, b
      }
 
     if (sect_type == FS3_MFG_INFO) {
-        fs3_guid_t base_uid = *(fs3_guid_t*)new_info;
+        fs3_uid_t base_uid = *(fs3_uid_t*)new_info;
         type_msg = "GUID";
         if (!Fs3UpdateMfgUidsSection(curr_toc, curr_toc->section_data, base_uid, newUidSection)) {
             return false;
         }
     } else if (sect_type == FS3_DEV_INFO) {
         if (cmd_type == CMD_SET_GUIDS) {
-            fs3_guid_t base_uid = *(fs3_guid_t*)new_info;
+            fs3_uid_t base_uid = *(fs3_uid_t*)new_info;
             type_msg = "GUID";
             if (!Fs3UpdateUidsSection(curr_toc, curr_toc->section_data, base_uid, newUidSection)) {
                 return false;
@@ -1602,7 +1771,6 @@ bool Fs3Operations::reburnItocSection(PrintCallBack callBackFunc) {
     // Itoc section is failsafe (two sectors after boot section are reserved for itoc entries)
     u_int32_t oldItocAddr = _fs3ImgInfo.itocAddr;
     u_int32_t newItocAddr = (_fs3ImgInfo.firstItocIsEmpty) ? (_fs3ImgInfo.itocAddr - sector_size) :  (_fs3ImgInfo.itocAddr + sector_size);
-
     // Update new ITOC
     u_int32_t itocSize = (_fs3ImgInfo.numOfItocs + 1 ) * CIBFW_ITOC_ENTRY_SIZE + CIBFW_ITOC_HEADER_SIZE;
     u_int8_t *p = new u_int8_t[itocSize];
@@ -1635,9 +1803,13 @@ bool Fs3Operations::reburnItocSection(PrintCallBack callBackFunc) {
 #define PUSH_DEV_DATA(vec)\
         vec.push_back(FS3_MFG_INFO);\
         vec.push_back(FS3_DEV_INFO);\
-        vec.push_back(FS3_NV_DATA);\
+        vec.push_back(FS3_NV_DATA1);\
+        vec.push_back(FS3_NV_DATA2);\
+        vec.push_back(FS3_FW_NV_LOG);\
         vec.push_back(FS3_VPD_R0)
 #define POP_DEV_DATA(vec)\
+        vec.pop_back();\
+        vec.pop_back();\
         vec.pop_back();\
         vec.pop_back();\
         vec.pop_back();\
index 36b811dbdbfee53398336cb5b46111148779cb47..f762749a6e2e9f270eaa82f0473a56550c6a9610 100644 (file)
@@ -37,6 +37,7 @@
 // #include "flint_base.h"
 #include "fw_ops.h"
 #include <cibfw_layouts.h>
+#include <cx4fw_layouts.h>
 
 
 
@@ -64,7 +65,7 @@ public:
 
     virtual bool FwSetGuids(sg_params_t& sgParam, PrintCallBack callBack, ProgressCallBack progressFunc);
     virtual bool FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
-    virtual bool FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
+    virtual bool FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL);
     virtual bool FwGetSection (u_int32_t sectType, std::vector<u_int8_t>& sectInfo, bool stripedImage=false);
     virtual bool FwSetVSD(char* vsdStr, ProgressCallBack progressFunc=(ProgressCallBack)NULL, PrintCallBack printFunc=(PrintCallBack)NULL);
     virtual bool FwSetVPD(char* vpdFileStr, PrintCallBack callBackFunc=(PrintCallBack)NULL);
@@ -106,7 +107,6 @@ private:
         int             numOfItocs;
         struct toc_info tocArr[MAX_TOCS_NUM];
         u_int8_t        itocHeader[CIBFW_ITOC_HEADER_SIZE];
-        u_int32_t       bootSize;
         u_int8_t        firstItocIsEmpty;
         u_int32_t       itocAddr;
         u_int32_t       smallestAbsAddr;
@@ -128,6 +128,7 @@ private:
     virtual bool UpdateImgCache(u_int8_t *buff, u_int32_t addr, u_int32_t size);
     bool VerifyTOC(u_int32_t dtoc_addr, bool& bad_signature, VerifyCallBack verifyCallBackFunc, bool show_itoc,
             struct QueryOptions queryOptions);
+    bool checkPreboot(u_int32_t* prebootBuff, u_int32_t size, VerifyCallBack verifyCallBackFunc);
     bool Fs3Verify(VerifyCallBack verifyCallBackFunc, bool show_itoc, struct QueryOptions queryOptions);
     const char* GetSectionNameByType(u_int8_t section_type);
     bool CheckTocSignature(struct cibfw_itoc_header *itoc_header, u_int32_t first_signature);
@@ -146,10 +147,11 @@ private:
     bool UpdateDevDataITOC(u_int8_t *image_data, struct toc_info *image_toc_entry, struct toc_info *flash_toc_arr, int flash_toc_size);
     bool Fs3UpdateSection(void *new_info, fs3_section_t sect_type=FS3_DEV_INFO, bool is_sect_failsafe=true, CommandType cmd_type=CMD_UNKNOWN, PrintCallBack callBackFunc=(PrintCallBack)NULL );
     bool Fs3GetItocInfo(struct toc_info *tocArr, int num_of_itocs, fs3_section_t sect_type, struct toc_info *&curr_toc);
-    bool Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
+    bool Fs3UpdateMfgUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_uid_t base_uid,
                                             std::vector<u_int8_t>  &newSectionData);
-    bool Fs3ChangeUidsFromBase(fs3_guid_t base_uid, struct cibfw_guids *guids);
-    bool Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_guid_t base_uid,
+    bool Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cibfw_guids& guids);
+    bool Fs3ChangeUidsFromBase(fs3_uid_t base_uid, struct cx4fw_guids& guids);
+    bool Fs3UpdateUidsSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, fs3_uid_t base_uid,
                                              std::vector<u_int8_t>  &newSectionData);
     bool Fs3UpdateVsdSection(struct toc_info *curr_toc, std::vector<u_int8_t>  section_data, char* user_vsd,
                                      std::vector<u_int8_t>  &newSectionData);
index f1966aa531421465fd9d81d8ae30a1a983adda41..5d4b118a5e4218f9cf66827737b86acec87988d0 100644 (file)
@@ -240,38 +240,59 @@ bool FwOperations::checkBoot2(u_int32_t beg, u_int32_t offs, u_int32_t& next, bo
 bool FwOperations::CheckAndPrintCrcRes(char* pr, bool blank_crc, u_int32_t off, u_int32_t crc_act, u_int32_t crc_exp, bool ignore_crc,
          VerifyCallBack verifyCallBackFunc)
 {
-
-    if (!blank_crc && crc_exp != crc_act) {
-        report_callback(verifyCallBackFunc, "%s /0x%08x/ - wrong CRC (exp:0x%x, act:0x%x)\n",
-               pr, off, crc_exp, crc_act);
-        return errmsg(BAD_CRC_MSG);
-    }
-    // if (_print_crc) {
-    // TODO: Print CRC here.
-    if (0) {
-        report_callback(verifyCallBackFunc, "%s - OK (CRC:0x%04x)\n", pr, crc_act & 0xffff);
+    if (ignore_crc) {
+        report_callback(verifyCallBackFunc, "%s - CRC IGNORED\n", pr);
     } else {
-        if (ignore_crc) {
-            report_callback(verifyCallBackFunc, "%s - CRC IGNORED\n", pr);
+        if(blank_crc) {
+            report_callback(verifyCallBackFunc, "%s - BLANK CRC (0xffff)\n", pr);
+        } else if (crc_exp == crc_act) {
+            report_callback(verifyCallBackFunc, "%s - OK\n", pr);
         } else {
-            if (blank_crc) {
-                report_callback(verifyCallBackFunc, "%s - BLANK CRC (0xffff)\n", pr);
-            } else {
-                report_callback(verifyCallBackFunc, "%s - OK\n", pr);
-            }
+            report_callback(verifyCallBackFunc, "%s /0x%08x/ - wrong CRC (exp:0x%x, act:0x%x)\n",
+                           pr, off, crc_exp, crc_act);
+            return errmsg(BAD_CRC_MSG);
         }
     }
     return true;
 }
 
-bool FwOperations::FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3]) {
-    for (int i = 0; i < 3 ; i++)
-        if (r1[i] < r2[i])
-            return true;
-        else if (r1[i] > r2[i])
-            return false;
-
-    return false; // equal versions
+FwVerInfo FwOperations::FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3], u_int8_t fwType) {
+    // copy version arrays to local variables
+    u_int16_t fwVer1[3];
+    u_int16_t fwVer2[3];
+    u_int16_t branch1 = 0, branch2 = 0;
+    memcpy(fwVer1, r1, sizeof(fwVer1));
+    memcpy(fwVer2, r2, sizeof(fwVer2));
+    // update minor according to format
+    if (fwType == FIT_FS3) {
+        // extract GA release version from minor (upper 2 digits)
+        fwVer1[1] = r1[1] / 100;
+        fwVer2[1] = r2[1] / 100;
+        // extract branch (assume branch is 0 in old format)
+        branch1 = r1[1] % 100;
+        branch2 = r2[1] % 100;
+    }
+    //compare
+    for (int i = 0; i < 3 ; i++) {
+        if (i == 2 && branch1 != branch2) {
+            // major and minor versions are the same
+            // check branches to see if its an upgrade/downgrade
+            if (branch1 != 0 && branch2 != 0) {
+                return FVI_UNKNOWN;
+            } else if (branch1 > branch2) {
+                return FVI_GREATER;
+            } else {
+                return FVI_SMALLER;
+            }
+        }
+        if (fwVer1[i] < fwVer2[i]) {
+            return FVI_SMALLER;
+        }
+        else if (fwVer1[i] > fwVer2[i]) {
+            return FVI_GREATER;
+        }
+    }
+    return FVI_EQUAL; // equal versions
 }
 const u_int32_t FwOperations::_cntx_magic_pattern[4] = {
     0x4D544657,   // Ascii of "MTFW"
@@ -741,7 +762,7 @@ const FwOperations::HwDev2Str FwOperations::hwDev2Str[] = {
         {"ConnectX-3 A0",     CX3_HW_ID,        0x00},
         {"ConnectX-3 A1",     CX3_HW_ID,        0x01},
         {"ConnectX-3Pro",     CX3_PRO_HW_ID,    0x00},
-        {"ConnectX-4",        CX4_HW_ID,       0x00},
+        {"ConnectX-4",        CX4_HW_ID,        0x00},
         {"SwitchX A0",        SWITCHX_HW_ID,    0x00},
         {"SwitchX A1",        SWITCHX_HW_ID,    0x01},
         {"BridgeX",           BRIDGEX_HW_ID,    0xA0},
@@ -897,10 +918,12 @@ bool FwOperations::CheckPSID(FwOperations &imageOps, u_int8_t allow_psid_change)
 
 bool FwOperations::CheckFwVersion(FwOperations &imageOps, u_int8_t forceVersion)
 {
-    bool updateRequired = true;
+    FwVerInfo updateRequired = FVI_UNKNOWN;
     if (!forceVersion) {
-        updateRequired = FwVerLessThan(_fwImgInfo.ext_info.fw_ver, imageOps._fwImgInfo.ext_info.fw_ver);
-        if (!updateRequired) {
+        updateRequired = FwVerLessThan(_fwImgInfo.ext_info.fw_ver, imageOps._fwImgInfo.ext_info.fw_ver, _fwImgInfo.fwType);
+        if (updateRequired == FVI_UNKNOWN) {
+            return errmsg("Cannot compare between FW versions(different branches)");
+        } else if (updateRequired != FVI_SMALLER ) {
             return errmsg("FW is already updated.");
         }
     }
@@ -1312,8 +1335,8 @@ void FwOperations::SetDevFlags(chip_type_t chipType, u_int32_t devType, fw_img_t
         ibDev = true;
         ethDev = true;
     } else {
-        ibDev  = (fwType == FIT_FS3) || !CntxEthOnly(devType);
-        ethDev = chipType == CT_CONNECTX;
+        ibDev  = (fwType == FIT_FS3 && chipType != CT_SWITCH_EN) || !CntxEthOnly(devType);
+        ethDev = (chipType == CT_CONNECTX) || (chipType == CT_SWITCH_EN);
     }
 
     if ((!ibDev && !ethDev) || chipType == CT_UNKNOWN) {
@@ -1332,7 +1355,9 @@ void FwOperations::SetDevFlags(chip_type_t chipType, u_int32_t devType, fw_img_t
 bool FwOperations::IsFwSupportingRomModify(u_int16_t fw_ver[3])
 {
     u_int16_t supported_fw[3] = {MAJOR_MOD_ROM_FW,  MINOR_MOD_ROM_FW, SUBMINOR_MOD_ROM_FW};
-    return !FwVerLessThan(fw_ver, supported_fw);
+    // only used in connectx (FS2)
+    FwVerInfo verInfo = FwVerLessThan(fw_ver, supported_fw, FIT_FS2);
+    return ((verInfo == FVI_EQUAL) || (verInfo == FVI_GREATER));
 }
 
 bool FwOperations::checkMatchingExpRomDevId(const fw_info_t& info)
index 1b7f9f98ba88f0958a47d11ebfe9b042ff65d6c7..73be75dd7f5d67ed446b79e62c78e400c9391ae5 100644 (file)
@@ -41,6 +41,7 @@
 typedef f_prog_func_str VerifyCallBack;
 typedef f_prog_func     ProgressCallBack;
 typedef f_prog_func_str PrintCallBack;
+typedef fw_ver_info_t   FwVerInfo;
 
 typedef int (*PrintCallBackAdv) (int completion, char* str);
 
@@ -69,7 +70,7 @@ public:
     virtual ~FwOperations()  {};
     //virtual void print_type() {};
     virtual u_int8_t FwType() = 0;
-    static bool FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3]);
+    static FwVerInfo FwVerLessThan(u_int16_t r1[3], u_int16_t r2[3], u_int8_t fwType);
     static bool IsFwSupportingRomModify(u_int16_t fw_ver[3]);
     static bool CntxEthOnly(u_int32_t devid);
     static void SetDevFlags(chip_type_t chipType, u_int32_t devType, fw_img_type_t fwType, bool &ibDev, bool &ethDev);
@@ -94,7 +95,7 @@ public:
 
     virtual bool FwSetGuids(sg_params_t& sgParam, PrintCallBack callBackFunc=(PrintCallBack)NULL, ProgressCallBack progressFunc=(ProgressCallBack)NULL) = 0;
 
-    virtual bool FwSetMFG(fs3_guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL) = 0;
+    virtual bool FwSetMFG(fs3_uid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL) = 0;
     virtual bool FwSetMFG(guid_t baseGuid, PrintCallBack callBackFunc=(PrintCallBack)NULL) = 0;
     // use progressFunc when dealing with FS2 image and printFunc when dealing with FS3 image.
     virtual bool FwSetVSD(char* vsdStr, ProgressCallBack progressFunc=(ProgressCallBack)NULL, PrintCallBack printFunc=(PrintCallBack)NULL) = 0;
@@ -227,10 +228,10 @@ public:
             bool stripedImage; // default shuold be set to false unless working on striped image file
             bool macsSpecified;
             bool guidsSpecified;
-            bool uidsSpecified;
+            bool uidsSpecified; // valid for BridgeX and ConnectIB only
             std::vector<guid_t> userGuids;
-            u_int8_t numOfGUIDs; // number of GUIDs to allocate for each port. (FS3 image Only)
-            u_int8_t stepSize; // step size between GUIDs. (FS3 Image Only).
+            u_int8_t numOfGUIDs; // number of GUIDs to allocate for each port. keep zero for default. (FS3 image Only)
+            u_int8_t stepSize; // step size between GUIDs. keep zero for default. (FS3 Image Only)
         };
 
 protected:
@@ -250,7 +251,8 @@ protected:
         bool         magicPatternFound;
         bool         imageOk;
         bool         wasQueried;
-        u_int32_t     lastImageAddr;
+        u_int32_t    lastImageAddr;
+        fw_img_type_t fwType;
     };
     enum {
         OLD_CNTX_START_POS_SIZE = 6,
index dbf5016cb6d406030cb0aab393d65007cd6995b5..d08e3015ade1b50030e712f2c52656b8635bab56 100755 (executable)
     #include "uefi_c.h"
 #endif
 
-int mlxfw_open_int(mlxfwops_t** mlxfwops_p, void* fw_hndl, void* extra, char* psid, fw_hndl_type_t hndl_type)
+int mlxfw_open_int(mlxfwops_t** mlxfwops_p, void* fw_hndl, void* extra, char* psid, fw_hndl_type_t hndl_type, char* err_buf, int buf_size)
 {
-     *mlxfwops_p = (mlxfwops_t*) FwOperations::FwOperationsCreate((void*)fw_hndl, extra, psid, hndl_type);
+     *mlxfwops_p = (mlxfwops_t*) FwOperations::FwOperationsCreate((void*)fw_hndl, extra, psid, hndl_type, err_buf, buf_size);
      if (*mlxfwops_p == NULL) {
          return MLXFW_MEM_ERR;
      }
      return MLXFW_OK;
 }
 
-MLXFWOP_API int MLXFWOPCALL mlxfw_fw_ver_less_than(u_int16_t ver_a[3], u_int16_t ver_b[3])
+MLXFWOP_API int MLXFWOPCALL mlxfw_open_device_verbose(mlxfwops_t** mlxfwops_p, char *device_name, char* buf, int buf_size)
 {
-    return FwOperations::FwVerLessThan(ver_a, ver_b);
+    return mlxfw_open_int(mlxfwops_p, device_name, NULL, (char*)NULL, FHT_MST_DEV, buf, buf_size);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_device(mlxfwops_t** mlxfwops_p, char *handle_name)
 {
-    return mlxfw_open_int(mlxfwops_p, handle_name, NULL, (char*)NULL, FHT_MST_DEV);
+    return mlxfw_open_int(mlxfwops_p, handle_name, NULL, (char*)NULL, FHT_MST_DEV, NULL, 0);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_image(mlxfwops_t** mlxfwops_p, char *file_name, char *psid)
 {
-    return mlxfw_open_int(mlxfwops_p, file_name, NULL, psid, FHT_FW_FILE);
+    return mlxfw_open_int(mlxfwops_p, file_name, NULL, psid, FHT_FW_FILE, NULL, 0);
 }
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_buffer(mlxfwops_t** mlxfwops_p, void* buffer, u_int32_t size, char *psid)
 {
-    return mlxfw_open_int(mlxfwops_p, buffer, &size, psid, FHT_FW_BUFF);
+    return mlxfw_open_int(mlxfwops_p, buffer, &size, psid, FHT_FW_BUFF, NULL, 0);
 }
 
 #ifdef UEFI_BUILD
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_uefi(mlxfwops_t** mlxfwops_p, uefi_Dev_t* dev, f_fw_cmd fw_cmd_func)
 {
-    return mlxfw_open_int(mlxfwops_p, dev, (void*)fw_cmd_func, (char*)NULL, FHT_UEFI_DEV);
+    return mlxfw_open_int(mlxfwops_p, dev, (void*)fw_cmd_func, (char*)NULL, FHT_UEFI_DEV, NULL, 0);
 
 }
 
index fda172606c7a0b9e1f2e453974fac4179bb16e4c..0360476e95a466e3bb74bf857cb5e505164c1dad 100755 (executable)
@@ -59,6 +59,8 @@ struct image_context {
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_device(mlxfwops_t** mlxfwops_p, char *device_name);
 
+MLXFWOP_API int MLXFWOPCALL mlxfw_open_device_verbose(mlxfwops_t** mlxfwops_p, char *device_name, char* buf, int buf_size);
+
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_image(mlxfwops_t** mlxfwops_p, char *file_name, char *psid);
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_open_buffer(mlxfwops_t** mlxfwops_p, void* buffer, u_int32_t size, char *psid);
@@ -83,8 +85,6 @@ MLXFWOP_API int MLXFWOPCALL mlxfw_query(mlxfwops_t* mlxfwops, fw_info_t* fw_quer
 
 MLXFWOP_API int MLXFWOPCALL mlxfw_type_match(mlxfwops_t* dev_mlxfwops, mlxfwops_t* img_mlxfwops);
 
-MLXFWOP_API int MLXFWOPCALL mlxfw_fw_ver_less_than(u_int16_t ver_a[3], u_int16_t ver_b[3]);
-
 MLXFWOP_API const char* MLXFWOPCALL mlxfw_exp_rom_type_to_str(u_int16_t type);
 
 MLXFWOP_API void MLXFWOPCALL mlxfw_close(mlxfwops_t* mlxfwops);
index 494fb9f60cf863012a6b4eaee1aa9c169a92819a..5d4a19d8c76fdfe4e926f6c1f47eab7b7035b186 100644 (file)
@@ -119,7 +119,7 @@ typedef enum chip_type {
     CT_IS4,
     CT_CONNECT_IB,
     CT_SWITCH_IB,
-    CT_SWITCH_EN
+    CT_SWITCH_EN,
 }chip_type_t;
 
 typedef struct guid {
@@ -128,11 +128,15 @@ typedef struct guid {
 } guid_t;
 typedef guid_t hw_key_t;
 
-typedef struct fs3_guid {
-    guid_t uid;
-    u_int8_t num_of_guids;
-    u_int8_t step_size;
-} fs3_guid_t;
+typedef struct fs3_uid {
+    guid_t base_guid;
+    int base_guid_specified;
+    guid_t base_mac;
+    int base_mac_specified;
+    u_int8_t num_of_guids; // set 0 for default
+    u_int8_t step_size; // set 0 for default, not relevant for devices >= CX4
+    int set_mac_from_guid;  // if set , base_mac will be derrived automatically from base guid
+} fs3_uid_t;
 
 typedef struct rom_info {
     u_int16_t exp_rom_product_id; // 0 - invalid.
@@ -145,17 +149,30 @@ typedef struct rom_info {
 } rom_info_t;
 
 
-struct cib_uid_entry {
+struct fs3_uid_entry {
      u_int8_t num_allocated;
-     u_int8_t step;
+     u_int8_t step; // not relevant for devices >= CX4
      u_int64_t uid;
 };
+
 typedef struct cibfw_uids {
-    struct cib_uid_entry guids[2];
-    struct cib_uid_entry macs[2];
+    struct fs3_uid_entry guids[2];
+    struct fs3_uid_entry macs[2];
+} cib_uids_t;
+
+typedef struct cx4fw_uids {
+    struct fs3_uid_entry base_guid;
+    struct fs3_uid_entry base_mac;
+} cx4_uids_t;
+
+typedef struct uids {
+    int valid_field; // 0: cib_uids , 1: cx4_uids
+    union {
+    cib_uids_t cib_uids;
+    cx4_uids_t cx4_uids;
+    };
 } uids_t;
 
-
 typedef struct fs3_info_ext {
     u_int8_t        guids_override_en;
     uids_t          fs3_uids_info;
@@ -234,6 +251,12 @@ enum ExpRomProto {
     ER_VPI = 2
 };
 
+typedef enum fw_ver_info {
+    FVI_UNKNOWN = -1,
+    FVI_SMALLER = 0,
+    FVI_EQUAL = 1,
+    FVI_GREATER = 2,
+} fw_ver_info_t;
 
 typedef struct _MLX4_DEV uefi_Dev_t;
 typedef int (*f_fw_cmd) (uefi_Dev_t* dev, void* buffer, int* size);
index f930b3bd5495e6187e046b89bd266a2c16d4add5..e3b71e58b9068e1756601dc491d33199d454a388 100755 (executable)
 0x01dba0,3,
 0x01dc00,1,
 0x01dc0c,1,
+0x01dc80,6,
+0x01dca0,1,
 0x01dd80,13,
 0x01ddbc,1,
 0x01dde0,9,
index 8cb16aabd8261399e73a8c6f5de3ad83133b7576..6bd2889f37ddcb5cfe5364f8887214cab8b2478b 100644 (file)
 0x035210,3,
 0x035244,3,
 0x035300,64,
-0x035410,7,
+0x035404,1,
+0x03540c,8,
 0x037000,6,
 0x03702c,7,
 0x037080,10,
 0x050d80,1,
 0x050d90,1,
 0x050da0,1,
-0x052000,384,
+0x052000,192,
 0x052800,2,
 0x053000,51,
 0x053400,3,
 0x0a3490,1,
 0x0a3504,1,
 0x0a3510,76,
-0x0a4000,32,
+0x0a4000,48,
 0x0a4100,3,
 0x0a4110,6,
 0x0a412c,4,
 0x0f20e0,6,
 0x0f2100,2,
 0x0f210c,3,
-0x0f2120,2,
-0x0f2140,2,
+0x0f2120,10,
 0x0f2160,6,
 0x0f2180,2,
 0x0f218c,3,
-0x0f21a0,2,
-0x0f21c0,2,
+0x0f21a0,10,
 0x0f21e0,6,
 0x0f2200,2,
 0x0f220c,3,
-0x0f2220,2,
-0x0f2240,2,
+0x0f2220,10,
 0x0f2260,6,
 0x0f2280,2,
 0x0f228c,3,
-0x0f22a0,2,
-0x0f22c0,2,
+0x0f22a0,10,
 0x0f22e0,6,
 0x0f2300,2,
 0x0f230c,3,
-0x0f2320,2,
-0x0f2340,2,
+0x0f2320,10,
 0x0f2360,6,
 0x0f2380,2,
 0x0f238c,3,
-0x0f23a0,2,
-0x0f23c0,2,
+0x0f23a0,10,
 0x0f23e0,6,
 0x0f2400,2,
 0x0f240c,3,
-0x0f2420,2,
-0x0f2440,2,
+0x0f2420,10,
 0x0f2460,6,
 0x0f2480,2,
 0x0f248c,3,
-0x0f24a0,2,
-0x0f24c0,2,
+0x0f24a0,10,
 0x0f24e0,6,
 0x0f2500,2,
 0x0f250c,3,
-0x0f2520,2,
-0x0f2540,2,
+0x0f2520,10,
 0x0f2560,6,
 0x0f2580,2,
 0x0f258c,3,
-0x0f25a0,2,
-0x0f25c0,2,
+0x0f25a0,10,
 0x0f25e0,6,
 0x0f2600,2,
 0x0f260c,3,
-0x0f2620,2,
-0x0f2640,2,
+0x0f2620,10,
 0x0f2660,6,
 0x0f2680,2,
 0x0f268c,3,
-0x0f26a0,2,
-0x0f26c0,2,
+0x0f26a0,10,
 0x0f26e0,6,
 0x0f2700,2,
 0x0f270c,3,
-0x0f2720,2,
-0x0f2740,2,
+0x0f2720,10,
 0x0f2760,6,
 0x0f2780,2,
 0x0f278c,3,
-0x0f27a0,2,
-0x0f27c0,2,
+0x0f27a0,10,
 0x0f27e0,6,
 0x0f2800,2,
 0x0f280c,3,
-0x0f2820,2,
-0x0f2840,2,
+0x0f2820,10,
 0x0f2860,6,
 0x0f2880,2,
 0x0f288c,3,
-0x0f28a0,2,
-0x0f28c0,2,
+0x0f28a0,10,
 0x0f28e0,6,
 0x0f2900,2,
 0x0f290c,3,
-0x0f2920,2,
-0x0f2940,2,
+0x0f2920,10,
 0x0f2960,6,
 0x0f2980,2,
 0x0f298c,3,
-0x0f29a0,2,
-0x0f29c0,2,
+0x0f29a0,10,
 0x0f29e0,6,
 0x0f4000,7,
 0x0f4020,4,
 0x11da00,3,
 0x11da10,1,
 0x11da18,2,
-0x11da24,15,
+0x11da24,7,
+0x11da50,4,
 0x11da80,3,
 0x11da90,1,
 0x11da98,2,
-0x11daa4,15,
+0x11daa4,7,
+0x11dad0,4,
 0x11db00,3,
 0x11db10,1,
 0x11db18,2,
-0x11db24,15,
+0x11db24,7,
+0x11db50,4,
 0x11db80,3,
 0x11db90,1,
 0x11db98,2,
-0x11dba4,15,
+0x11dba4,7,
+0x11dbd0,4,
 0x11dc00,17,
 0x11e000,72,
 0x11e200,72,
index 37ceeee6fe903ae3cfbdfb898a0aea5daf545ffd..1fdc0880ba9285e6941ac3f44116886305af88eb 100644 (file)
 #Addr, Size, Enable addr
-0x000400,1,
-0x000408,14,
-0x000480,1,
-0x000488,18,
-0x000500,9,
-0x000534,2,
-0x00054c,4,
-0x00056c,11,
-0x0005ac,8,
-0x0005d0,1,
-0x000604,1,
-0x00060c,13,
-0x000644,1,
-0x000654,3,
-0x000664,1,
-0x00066c,7,
-0x0006a8,3,
-0x0006c0,8,
-0x000700,6,
-0x000760,4,
-0x000780,8,
-0x0007b8,8,
-0x0007dc,10,
+0x000800,1,
 0x000808,14,
 0x000880,1,
-0x000888,18,
-0x000900,9,
-0x000934,2,
-0x00094c,4,
-0x00096c,11,
-0x0009ac,8,
-0x0009d0,1,
-0x000a04,1,
-0x000a0c,13,
-0x000a44,1,
-0x000a54,3,
-0x000a64,1,
-0x000a6c,7,
-0x000aa8,3,
-0x000ac0,8,
-0x000b00,6,
-0x000b60,4,
+0x000888,16,
+0x000900,11,
+0x000940,3,
+0x000950,12,
+0x000984,19,
+0x000a00,1,
+0x000a18,5,
+0x000a30,2,
+0x000a3c,9,
+0x000a84,1,
+0x000a90,4,
+0x000aa4,1,
+0x000aac,7,
+0x000ae8,3,
+0x000b00,8,
+0x000b40,6,
+0x000b60,3,
 0x000b80,8,
-0x000bb8,8,
-0x000bdc,10,
+0x000bb8,19,
 0x000c08,14,
 0x000c80,1,
-0x000c88,18,
-0x000d00,9,
-0x000d34,2,
-0x000d4c,4,
-0x000d6c,11,
-0x000dac,8,
-0x000dd0,1,
-0x000e04,1,
-0x000e0c,13,
-0x000e44,1,
-0x000e54,3,
-0x000e64,1,
-0x000e6c,7,
-0x000ea8,3,
-0x000ec0,8,
-0x000f00,6,
-0x000f60,4,
+0x000c88,16,
+0x000d00,11,
+0x000d40,3,
+0x000d50,12,
+0x000d84,19,
+0x000e00,1,
+0x000e18,5,
+0x000e30,2,
+0x000e3c,9,
+0x000e84,1,
+0x000e90,4,
+0x000ea4,1,
+0x000eac,7,
+0x000ee8,3,
+0x000f00,8,
+0x000f40,6,
+0x000f60,3,
 0x000f80,8,
-0x000fb8,8,
-0x000fdc,10,
+0x000fb8,19,
 0x001008,14,
 0x001080,1,
-0x001088,18,
-0x001100,9,
-0x001134,2,
-0x00114c,4,
-0x00116c,11,
-0x0011ac,8,
-0x0011d0,1,
-0x001204,1,
-0x00120c,13,
-0x001244,1,
-0x001254,3,
-0x001264,1,
-0x00126c,7,
-0x0012a8,3,
-0x0012c0,8,
-0x001300,6,
-0x001360,4,
+0x001088,16,
+0x001100,11,
+0x001140,3,
+0x001150,12,
+0x001184,19,
+0x001200,1,
+0x001218,5,
+0x001230,2,
+0x00123c,9,
+0x001284,1,
+0x001290,4,
+0x0012a4,1,
+0x0012ac,7,
+0x0012e8,3,
+0x001300,8,
+0x001340,6,
+0x001360,3,
 0x001380,8,
-0x0013b8,8,
-0x0013dc,10,
+0x0013b8,19,
 0x001408,14,
 0x001480,1,
-0x001488,18,
-0x001500,9,
-0x001534,2,
-0x00154c,4,
-0x00156c,11,
-0x0015ac,8,
-0x0015d0,1,
-0x001604,1,
-0x00160c,13,
-0x001644,1,
-0x001654,3,
-0x001664,1,
-0x00166c,7,
-0x0016a8,3,
-0x0016c0,8,
-0x001700,6,
-0x001760,4,
+0x001488,16,
+0x001500,11,
+0x001540,3,
+0x001550,12,
+0x001584,19,
+0x001600,1,
+0x001618,5,
+0x001630,2,
+0x00163c,9,
+0x001684,1,
+0x001690,4,
+0x0016a4,1,
+0x0016ac,7,
+0x0016e8,3,
+0x001700,8,
+0x001740,6,
+0x001760,3,
 0x001780,8,
-0x0017b8,8,
-0x0017dc,10,
+0x0017b8,19,
 0x001808,14,
 0x001880,1,
-0x001888,18,
-0x001900,9,
-0x001934,2,
-0x00194c,4,
-0x00196c,11,
-0x0019ac,8,
-0x0019d0,1,
-0x001a04,1,
-0x001a0c,13,
-0x001a44,1,
-0x001a54,3,
-0x001a64,1,
-0x001a6c,7,
-0x001aa8,3,
-0x001ac0,8,
-0x001b00,6,
-0x001b60,4,
+0x001888,16,
+0x001900,11,
+0x001940,3,
+0x001950,12,
+0x001984,19,
+0x001a00,1,
+0x001a18,5,
+0x001a30,2,
+0x001a3c,9,
+0x001a84,1,
+0x001a90,4,
+0x001aa4,1,
+0x001aac,7,
+0x001ae8,3,
+0x001b00,8,
+0x001b40,6,
+0x001b60,3,
 0x001b80,8,
-0x001bb8,8,
-0x001bdc,10,
+0x001bb8,19,
 0x001c08,14,
 0x001c80,1,
-0x001c88,18,
-0x001d00,9,
-0x001d34,2,
-0x001d4c,4,
-0x001d6c,11,
-0x001dac,8,
-0x001dd0,1,
-0x001e04,1,
-0x001e0c,13,
-0x001e44,1,
-0x001e54,3,
-0x001e64,1,
-0x001e6c,7,
-0x001ea8,3,
-0x001ec0,8,
-0x001f00,6,
-0x001f60,4,
+0x001c88,16,
+0x001d00,11,
+0x001d40,3,
+0x001d50,12,
+0x001d84,19,
+0x001e00,1,
+0x001e18,5,
+0x001e30,2,
+0x001e3c,9,
+0x001e84,1,
+0x001e90,4,
+0x001ea4,1,
+0x001eac,7,
+0x001ee8,3,
+0x001f00,8,
+0x001f40,6,
+0x001f60,3,
 0x001f80,8,
-0x001fb8,8,
-0x001fdc,10,
+0x001fb8,19,
 0x002008,14,
 0x002080,1,
-0x002088,18,
-0x002100,9,
-0x002134,2,
-0x00214c,4,
-0x00216c,11,
-0x0021ac,8,
-0x0021d0,1,
-0x002204,1,
-0x00220c,13,
-0x002244,1,
-0x002254,3,
-0x002264,1,
-0x00226c,7,
-0x0022a8,3,
-0x0022c0,8,
-0x002300,6,
-0x002360,4,
+0x002088,16,
+0x002100,11,
+0x002140,3,
+0x002150,12,
+0x002184,19,
+0x002200,1,
+0x002218,5,
+0x002230,2,
+0x00223c,9,
+0x002284,1,
+0x002290,4,
+0x0022a4,1,
+0x0022ac,7,
+0x0022e8,3,
+0x002300,8,
+0x002340,6,
+0x002360,3,
 0x002380,8,
-0x0023b8,8,
-0x0023dc,10,
+0x0023b8,19,
 0x002408,14,
 0x002480,1,
-0x002488,18,
-0x002500,9,
-0x002534,2,
-0x00254c,4,
-0x00256c,11,
-0x0025ac,8,
-0x0025d0,1,
-0x002604,1,
-0x00260c,13,
-0x002644,1,
-0x002654,3,
-0x002664,1,
-0x00266c,7,
-0x0026a8,3,
-0x0026c0,8,
-0x002700,6,
-0x002760,4,
+0x002488,16,
+0x002500,11,
+0x002540,3,
+0x002550,12,
+0x002584,19,
+0x002600,1,
+0x002618,5,
+0x002630,2,
+0x00263c,9,
+0x002684,1,
+0x002690,4,
+0x0026a4,1,
+0x0026ac,7,
+0x0026e8,3,
+0x002700,8,
+0x002740,6,
+0x002760,3,
 0x002780,8,
-0x0027b8,8,
-0x0027dc,10,
+0x0027b8,19,
 0x002808,14,
 0x002880,1,
-0x002888,18,
-0x002900,9,
-0x002934,2,
-0x00294c,4,
-0x00296c,11,
-0x0029ac,8,
-0x0029d0,1,
-0x002a04,1,
-0x002a0c,13,
-0x002a44,1,
-0x002a54,3,
-0x002a64,1,
-0x002a6c,7,
-0x002aa8,3,
-0x002ac0,8,
-0x002b00,6,
-0x002b60,4,
+0x002888,16,
+0x002900,11,
+0x002940,3,
+0x002950,12,
+0x002984,19,
+0x002a00,1,
+0x002a18,5,
+0x002a30,2,
+0x002a3c,9,
+0x002a84,1,
+0x002a90,4,
+0x002aa4,1,
+0x002aac,7,
+0x002ae8,3,
+0x002b00,8,
+0x002b40,6,
+0x002b60,3,
 0x002b80,8,
-0x002bb8,8,
-0x002bdc,10,
+0x002bb8,19,
 0x002c08,14,
 0x002c80,1,
-0x002c88,18,
-0x002d00,9,
-0x002d34,2,
-0x002d4c,4,
-0x002d6c,11,
-0x002dac,8,
-0x002dd0,1,
-0x002e04,1,
-0x002e0c,13,
-0x002e44,1,
-0x002e54,3,
-0x002e64,1,
-0x002e6c,7,
-0x002ea8,3,
-0x002ec0,8,
-0x002f00,6,
-0x002f60,4,
+0x002c88,16,
+0x002d00,11,
+0x002d40,3,
+0x002d50,12,
+0x002d84,19,
+0x002e00,1,
+0x002e18,5,
+0x002e30,2,
+0x002e3c,9,
+0x002e84,1,
+0x002e90,4,
+0x002ea4,1,
+0x002eac,7,
+0x002ee8,3,
+0x002f00,8,
+0x002f40,6,
+0x002f60,3,
 0x002f80,8,
-0x002fb8,8,
-0x002fdc,10,
+0x002fb8,19,
 0x003008,14,
 0x003080,1,
-0x003088,18,
-0x003100,9,
-0x003134,2,
-0x00314c,4,
-0x00316c,11,
-0x0031ac,8,
-0x0031d0,1,
-0x003204,1,
-0x00320c,13,
-0x003244,1,
-0x003254,3,
-0x003264,1,
-0x00326c,7,
-0x0032a8,3,
-0x0032c0,8,
-0x003300,6,
-0x003360,4,
+0x003088,16,
+0x003100,11,
+0x003140,3,
+0x003150,12,
+0x003184,19,
+0x003200,1,
+0x003218,5,
+0x003230,2,
+0x00323c,9,
+0x003284,1,
+0x003290,4,
+0x0032a4,1,
+0x0032ac,7,
+0x0032e8,3,
+0x003300,8,
+0x003340,6,
+0x003360,3,
 0x003380,8,
-0x0033b8,8,
-0x0033dc,10,
+0x0033b8,19,
 0x003408,14,
 0x003480,1,
-0x003488,18,
-0x003500,9,
-0x003534,2,
-0x00354c,4,
-0x00356c,11,
-0x0035ac,8,
-0x0035d0,1,
-0x003604,1,
-0x00360c,13,
-0x003644,1,
-0x003654,3,
-0x003664,1,
-0x00366c,7,
-0x0036a8,3,
-0x0036c0,8,
-0x003700,6,
-0x003760,4,
+0x003488,16,
+0x003500,11,
+0x003540,3,
+0x003550,12,
+0x003584,19,
+0x003600,1,
+0x003618,5,
+0x003630,2,
+0x00363c,9,
+0x003684,1,
+0x003690,4,
+0x0036a4,1,
+0x0036ac,7,
+0x0036e8,3,
+0x003700,8,
+0x003740,6,
+0x003760,3,
 0x003780,8,
-0x0037b8,8,
-0x0037dc,10,
+0x0037b8,19,
 0x003808,14,
 0x003880,1,
-0x003888,18,
-0x003900,9,
-0x003934,2,
-0x00394c,4,
-0x00396c,11,
-0x0039ac,8,
-0x0039d0,1,
-0x003a04,1,
-0x003a0c,13,
-0x003a44,1,
-0x003a54,3,
-0x003a64,1,
-0x003a6c,7,
-0x003aa8,3,
-0x003ac0,8,
-0x003b00,6,
-0x003b60,4,
+0x003888,16,
+0x003900,11,
+0x003940,3,
+0x003950,12,
+0x003984,19,
+0x003a00,1,
+0x003a18,5,
+0x003a30,2,
+0x003a3c,9,
+0x003a84,1,
+0x003a90,4,
+0x003aa4,1,
+0x003aac,7,
+0x003ae8,3,
+0x003b00,8,
+0x003b40,6,
+0x003b60,3,
 0x003b80,8,
-0x003bb8,8,
-0x003bdc,10,
+0x003bb8,19,
 0x003c08,14,
 0x003c80,1,
-0x003c88,18,
-0x003d00,9,
-0x003d34,2,
-0x003d4c,4,
-0x003d6c,11,
-0x003dac,8,
-0x003dd0,1,
-0x003e04,1,
-0x003e0c,13,
-0x003e44,1,
-0x003e54,3,
-0x003e64,1,
-0x003e6c,7,
-0x003ea8,3,
-0x003ec0,8,
-0x003f00,6,
-0x003f60,4,
+0x003c88,16,
+0x003d00,11,
+0x003d40,3,
+0x003d50,12,
+0x003d84,19,
+0x003e00,1,
+0x003e18,5,
+0x003e30,2,
+0x003e3c,9,
+0x003e84,1,
+0x003e90,4,
+0x003ea4,1,
+0x003eac,7,
+0x003ee8,3,
+0x003f00,8,
+0x003f40,6,
+0x003f60,3,
 0x003f80,8,
-0x003fb8,8,
-0x003fdc,10,
+0x003fb8,19,
 0x004008,14,
 0x004080,1,
-0x004088,18,
-0x004100,9,
-0x004134,2,
-0x00414c,4,
-0x00416c,11,
-0x0041ac,8,
-0x0041d0,1,
-0x004204,1,
-0x00420c,13,
-0x004244,1,
-0x004254,3,
-0x004264,1,
-0x00426c,7,
-0x0042a8,3,
-0x0042c0,8,
-0x004300,6,
-0x004360,4,
+0x004088,16,
+0x004100,11,
+0x004140,3,
+0x004150,12,
+0x004184,19,
+0x004200,1,
+0x004218,5,
+0x004230,2,
+0x00423c,9,
+0x004284,1,
+0x004290,4,
+0x0042a4,1,
+0x0042ac,7,
+0x0042e8,3,
+0x004300,8,
+0x004340,6,
+0x004360,3,
 0x004380,8,
-0x0043b8,8,
-0x0043dc,10,
+0x0043b8,19,
 0x004408,14,
 0x004480,1,
-0x004488,18,
-0x004500,9,
-0x004534,2,
-0x00454c,4,
-0x00456c,11,
-0x0045ac,8,
-0x0045d0,1,
-0x004604,1,
-0x00460c,13,
-0x004644,1,
-0x004654,3,
-0x004664,1,
-0x00466c,7,
-0x0046a8,3,
-0x0046c0,8,
-0x004700,6,
-0x004760,4,
+0x004488,16,
+0x004500,11,
+0x004540,3,
+0x004550,12,
+0x004584,19,
+0x004600,1,
+0x004618,5,
+0x004630,2,
+0x00463c,9,
+0x004684,1,
+0x004690,4,
+0x0046a4,1,
+0x0046ac,7,
+0x0046e8,3,
+0x004700,8,
+0x004740,6,
+0x004760,3,
 0x004780,8,
-0x0047b8,8,
-0x0047dc,10,
+0x0047b8,19,
 0x004808,14,
 0x004880,1,
-0x004888,18,
-0x004900,9,
-0x004934,2,
-0x00494c,4,
-0x00496c,11,
-0x0049ac,8,
-0x0049d0,1,
-0x004a04,1,
-0x004a0c,13,
-0x004a44,1,
-0x004a54,3,
-0x004a64,1,
-0x004a6c,7,
-0x004aa8,3,
-0x004ac0,8,
-0x004b00,6,
-0x004b60,4,
+0x004888,16,
+0x004900,11,
+0x004940,3,
+0x004950,12,
+0x004984,19,
+0x004a00,1,
+0x004a18,5,
+0x004a30,2,
+0x004a3c,9,
+0x004a84,1,
+0x004a90,4,
+0x004aa4,1,
+0x004aac,7,
+0x004ae8,3,
+0x004b00,8,
+0x004b40,6,
+0x004b60,3,
 0x004b80,8,
-0x004bb8,8,
-0x004bdc,10,
+0x004bb8,19,
 0x004c08,14,
 0x004c80,1,
-0x004c88,18,
-0x004d00,9,
-0x004d34,2,
-0x004d4c,4,
-0x004d6c,11,
-0x004dac,8,
-0x004dd0,1,
-0x004e04,1,
-0x004e0c,13,
-0x004e44,1,
-0x004e54,3,
-0x004e64,1,
-0x004e6c,7,
-0x004ea8,3,
-0x004ec0,8,
-0x004f00,6,
-0x004f60,4,
+0x004c88,16,
+0x004d00,11,
+0x004d40,3,
+0x004d50,12,
+0x004d84,19,
+0x004e00,1,
+0x004e18,5,
+0x004e30,2,
+0x004e3c,9,
+0x004e84,1,
+0x004e90,4,
+0x004ea4,1,
+0x004eac,7,
+0x004ee8,3,
+0x004f00,8,
+0x004f40,6,
+0x004f60,3,
 0x004f80,8,
-0x004fb8,8,
-0x004fdc,10,
+0x004fb8,19,
 0x005008,14,
 0x005080,1,
-0x005088,18,
-0x005100,9,
-0x005134,2,
-0x00514c,4,
-0x00516c,11,
-0x0051ac,8,
-0x0051d0,1,
-0x005204,1,
-0x00520c,13,
-0x005244,1,
-0x005254,3,
-0x005264,1,
-0x00526c,7,
-0x0052a8,3,
-0x0052c0,8,
-0x005300,6,
-0x005360,4,
+0x005088,16,
+0x005100,11,
+0x005140,3,
+0x005150,12,
+0x005184,19,
+0x005200,1,
+0x005218,5,
+0x005230,2,
+0x00523c,9,
+0x005284,1,
+0x005290,4,
+0x0052a4,1,
+0x0052ac,7,
+0x0052e8,3,
+0x005300,8,
+0x005340,6,
+0x005360,3,
 0x005380,8,
-0x0053b8,8,
-0x0053dc,10,
-0x005428,1,
-0x005450,1,
-0x005478,1,
-0x0054a0,1,
-0x0055ac,1,
-0x0055d8,4,
-0x005600,6,
-0x005620,6,
-0x005640,3,
-0x005800,13,
-0x005840,6,
-0x005860,3,
-0x005880,2,
-0x005904,2,
-0x005918,1,
-0x005940,1,
-0x008400,1,
+0x0053b8,19,
+0x005408,14,
+0x005480,1,
+0x005488,16,
+0x005500,11,
+0x005540,3,
+0x005550,12,
+0x005584,19,
+0x005600,1,
+0x005618,5,
+0x005630,2,
+0x00563c,9,
+0x005684,1,
+0x005690,4,
+0x0056a4,1,
+0x0056ac,7,
+0x0056e8,3,
+0x005700,8,
+0x005740,6,
+0x005760,3,
+0x005780,8,
+0x0057b8,19,
+0x005808,14,
+0x005880,1,
+0x005888,16,
+0x005900,11,
+0x005940,3,
+0x005950,12,
+0x005984,19,
+0x005a00,1,
+0x005a18,5,
+0x005a30,2,
+0x005a3c,9,
+0x005a84,1,
+0x005a90,4,
+0x005aa4,1,
+0x005aac,7,
+0x005ae8,3,
+0x005b00,8,
+0x005b40,6,
+0x005b60,3,
+0x005b80,8,
+0x005bb8,19,
+0x005c08,14,
+0x005c80,1,
+0x005c88,16,
+0x005d00,11,
+0x005d40,3,
+0x005d50,12,
+0x005d84,19,
+0x005e00,1,
+0x005e18,5,
+0x005e30,2,
+0x005e3c,9,
+0x005e84,1,
+0x005e90,4,
+0x005ea4,1,
+0x005eac,7,
+0x005ee8,3,
+0x005f00,8,
+0x005f40,6,
+0x005f60,3,
+0x005f80,8,
+0x005fb8,19,
+0x006008,14,
+0x006080,1,
+0x006088,16,
+0x006100,11,
+0x006140,3,
+0x006150,12,
+0x006184,19,
+0x006200,1,
+0x006218,5,
+0x006230,2,
+0x00623c,9,
+0x006284,1,
+0x006290,4,
+0x0062a4,1,
+0x0062ac,7,
+0x0062e8,3,
+0x006300,8,
+0x006340,6,
+0x006360,3,
+0x006380,8,
+0x0063b8,19,
+0x006408,14,
+0x006480,1,
+0x006488,16,
+0x006500,11,
+0x006540,3,
+0x006550,12,
+0x006584,19,
+0x006600,1,
+0x006618,5,
+0x006630,2,
+0x00663c,9,
+0x006684,1,
+0x006690,4,
+0x0066a4,1,
+0x0066ac,7,
+0x0066e8,3,
+0x006700,8,
+0x006740,6,
+0x006760,3,
+0x006780,8,
+0x0067b8,19,
+0x006808,14,
+0x006880,1,
+0x006888,16,
+0x006900,11,
+0x006940,3,
+0x006950,12,
+0x006984,19,
+0x006a00,1,
+0x006a18,5,
+0x006a30,2,
+0x006a3c,9,
+0x006a84,1,
+0x006a90,4,
+0x006aa4,1,
+0x006aac,7,
+0x006ae8,3,
+0x006b00,8,
+0x006b40,6,
+0x006b60,3,
+0x006b80,8,
+0x006bb8,19,
+0x006c08,14,
+0x006c80,1,
+0x006c88,16,
+0x006d00,11,
+0x006d40,3,
+0x006d50,12,
+0x006d84,19,
+0x006e00,1,
+0x006e18,5,
+0x006e30,2,
+0x006e3c,9,
+0x006e84,1,
+0x006e90,4,
+0x006ea4,1,
+0x006eac,7,
+0x006ee8,3,
+0x006f00,8,
+0x006f40,6,
+0x006f60,3,
+0x006f80,8,
+0x006fb8,19,
+0x007008,14,
+0x007080,1,
+0x007088,16,
+0x007100,11,
+0x007140,3,
+0x007150,12,
+0x007184,19,
+0x007200,1,
+0x007218,5,
+0x007230,2,
+0x00723c,9,
+0x007284,1,
+0x007290,4,
+0x0072a4,1,
+0x0072ac,7,
+0x0072e8,3,
+0x007300,8,
+0x007340,6,
+0x007360,3,
+0x007380,8,
+0x0073b8,19,
+0x007408,14,
+0x007480,1,
+0x007488,16,
+0x007500,11,
+0x007540,3,
+0x007550,12,
+0x007584,19,
+0x007600,1,
+0x007618,5,
+0x007630,2,
+0x00763c,9,
+0x007684,1,
+0x007690,4,
+0x0076a4,1,
+0x0076ac,7,
+0x0076e8,3,
+0x007700,8,
+0x007740,6,
+0x007760,3,
+0x007780,8,
+0x0077b8,19,
+0x007808,14,
+0x007880,1,
+0x007888,16,
+0x007900,11,
+0x007940,3,
+0x007950,12,
+0x007984,19,
+0x007a00,1,
+0x007a18,5,
+0x007a30,2,
+0x007a3c,9,
+0x007a84,1,
+0x007a90,4,
+0x007aa4,1,
+0x007aac,7,
+0x007ae8,3,
+0x007b00,8,
+0x007b40,6,
+0x007b60,3,
+0x007b80,8,
+0x007bb8,19,
+0x007c08,14,
+0x007c80,1,
+0x007c88,16,
+0x007d00,11,
+0x007d40,3,
+0x007d50,12,
+0x007d84,19,
+0x007e00,1,
+0x007e18,5,
+0x007e30,2,
+0x007e3c,9,
+0x007e84,1,
+0x007e90,4,
+0x007ea4,1,
+0x007eac,7,
+0x007ee8,3,
+0x007f00,8,
+0x007f40,6,
+0x007f60,3,
+0x007f80,8,
+0x007fb8,19,
+0x008008,14,
+0x008080,1,
+0x008088,16,
+0x008100,11,
+0x008140,3,
+0x008150,12,
+0x008184,19,
+0x008200,1,
+0x008218,5,
+0x008230,2,
+0x00823c,9,
+0x008284,1,
+0x008290,4,
+0x0082a4,1,
+0x0082ac,7,
+0x0082e8,3,
+0x008300,8,
+0x008340,6,
+0x008360,3,
+0x008380,8,
+0x0083b8,19,
 0x008408,14,
 0x008480,1,
-0x008488,18,
-0x008500,9,
-0x008534,2,
-0x00854c,4,
-0x00856c,11,
-0x0085ac,8,
-0x0085d0,1,
-0x008604,1,
-0x00860c,13,
-0x008644,1,
-0x008654,3,
-0x008664,1,
-0x00866c,7,
-0x0086a8,3,
-0x0086c0,8,
-0x008700,6,
-0x008760,4,
+0x008488,16,
+0x008500,11,
+0x008540,3,
+0x008550,12,
+0x008584,19,
+0x008600,1,
+0x008618,5,
+0x008630,2,
+0x00863c,9,
+0x008684,1,
+0x008690,4,
+0x0086a4,1,
+0x0086ac,7,
+0x0086e8,3,
+0x008700,8,
+0x008740,6,
+0x008760,3,
 0x008780,8,
-0x0087b8,8,
-0x0087dc,10,
+0x0087b8,19,
 0x008808,14,
 0x008880,1,
-0x008888,18,
-0x008900,9,
-0x008934,2,
-0x00894c,4,
-0x00896c,11,
-0x0089ac,8,
-0x0089d0,1,
-0x008a04,1,
-0x008a0c,13,
-0x008a44,1,
-0x008a54,3,
-0x008a64,1,
-0x008a6c,7,
-0x008aa8,3,
-0x008ac0,8,
-0x008b00,6,
-0x008b60,4,
+0x008888,16,
+0x008900,11,
+0x008940,3,
+0x008950,12,
+0x008984,19,
+0x008a00,1,
+0x008a18,5,
+0x008a30,2,
+0x008a3c,9,
+0x008a84,1,
+0x008a90,4,
+0x008aa4,1,
+0x008aac,7,
+0x008ae8,3,
+0x008b00,8,
+0x008b40,6,
+0x008b60,3,
 0x008b80,8,
-0x008bb8,8,
-0x008bdc,10,
+0x008bb8,19,
 0x008c08,14,
 0x008c80,1,
-0x008c88,18,
-0x008d00,9,
-0x008d34,2,
-0x008d4c,4,
-0x008d6c,11,
-0x008dac,8,
-0x008dd0,1,
-0x008e04,1,
-0x008e0c,13,
-0x008e44,1,
-0x008e54,3,
-0x008e64,1,
-0x008e6c,7,
-0x008ea8,3,
-0x008ec0,8,
-0x008f00,6,
-0x008f60,4,
+0x008c88,16,
+0x008d00,11,
+0x008d40,3,
+0x008d50,12,
+0x008d84,19,
+0x008e00,1,
+0x008e18,5,
+0x008e30,2,
+0x008e3c,9,
+0x008e84,1,
+0x008e90,4,
+0x008ea4,1,
+0x008eac,7,
+0x008ee8,3,
+0x008f00,8,
+0x008f40,6,
+0x008f60,3,
 0x008f80,8,
-0x008fb8,8,
-0x008fdc,10,
-0x009008,14,
-0x009080,1,
-0x009088,18,
-0x009100,9,
-0x009134,2,
-0x00914c,4,
-0x00916c,11,
-0x0091ac,8,
-0x0091d0,1,
-0x009204,1,
-0x00920c,13,
-0x009244,1,
-0x009254,3,
-0x009264,1,
-0x00926c,7,
-0x0092a8,3,
-0x0092c0,8,
-0x009300,6,
-0x009360,4,
-0x009380,8,
-0x0093b8,8,
-0x0093dc,10,
-0x009408,14,
-0x009480,1,
-0x009488,18,
-0x009500,9,
-0x009534,2,
-0x00954c,4,
-0x00956c,11,
-0x0095ac,8,
-0x0095d0,1,
-0x009604,1,
-0x00960c,13,
-0x009644,1,
-0x009654,3,
-0x009664,1,
-0x00966c,7,
-0x0096a8,3,
-0x0096c0,8,
-0x009700,6,
-0x009760,4,
-0x009780,8,
-0x0097b8,8,
-0x0097dc,10,
-0x009808,14,
-0x009880,1,
-0x009888,18,
-0x009900,9,
-0x009934,2,
-0x00994c,4,
-0x00996c,11,
-0x0099ac,8,
-0x0099d0,1,
-0x009a04,1,
-0x009a0c,13,
-0x009a44,1,
-0x009a54,3,
-0x009a64,1,
-0x009a6c,7,
-0x009aa8,3,
-0x009ac0,8,
-0x009b00,6,
-0x009b60,4,
-0x009b80,8,
-0x009bb8,8,
-0x009bdc,10,
-0x009c08,14,
-0x009c80,1,
-0x009c88,18,
-0x009d00,9,
-0x009d34,2,
-0x009d4c,4,
-0x009d6c,11,
-0x009dac,8,
-0x009dd0,1,
-0x009e04,1,
-0x009e0c,13,
-0x009e44,1,
-0x009e54,3,
-0x009e64,1,
-0x009e6c,7,
-0x009ea8,3,
-0x009ec0,8,
-0x009f00,6,
-0x009f60,4,
-0x009f80,8,
-0x009fb8,8,
-0x009fdc,10,
-0x00a008,14,
-0x00a080,1,
-0x00a088,18,
-0x00a100,9,
-0x00a134,2,
-0x00a14c,4,
-0x00a16c,11,
-0x00a1ac,8,
-0x00a1d0,1,
-0x00a204,1,
-0x00a20c,13,
-0x00a244,1,
-0x00a254,3,
-0x00a264,1,
-0x00a26c,7,
-0x00a2a8,3,
-0x00a2c0,8,
-0x00a300,6,
-0x00a360,4,
-0x00a380,8,
-0x00a3b8,8,
-0x00a3dc,10,
-0x00a408,14,
-0x00a480,1,
-0x00a488,18,
-0x00a500,9,
-0x00a534,2,
-0x00a54c,4,
-0x00a56c,11,
-0x00a5ac,8,
-0x00a5d0,1,
-0x00a604,1,
-0x00a60c,13,
-0x00a644,1,
-0x00a654,3,
-0x00a664,1,
-0x00a66c,7,
-0x00a6a8,3,
-0x00a6c0,8,
-0x00a700,6,
-0x00a760,4,
-0x00a780,8,
-0x00a7b8,8,
-0x00a7dc,10,
-0x00a808,14,
-0x00a880,1,
-0x00a888,18,
-0x00a900,9,
-0x00a934,2,
-0x00a94c,4,
-0x00a96c,11,
-0x00a9ac,8,
-0x00a9d0,1,
-0x00aa04,1,
-0x00aa0c,13,
-0x00aa44,1,
-0x00aa54,3,
-0x00aa64,1,
-0x00aa6c,7,
-0x00aaa8,3,
-0x00aac0,8,
-0x00ab00,6,
-0x00ab60,4,
-0x00ab80,8,
-0x00abb8,8,
-0x00abdc,10,
-0x00ac08,14,
-0x00ac80,1,
-0x00ac88,18,
-0x00ad00,9,
-0x00ad34,2,
-0x00ad4c,4,
-0x00ad6c,11,
-0x00adac,8,
-0x00add0,1,
-0x00ae04,1,
-0x00ae0c,13,
-0x00ae44,1,
-0x00ae54,3,
-0x00ae64,1,
-0x00ae6c,7,
-0x00aea8,3,
-0x00aec0,8,
-0x00af00,6,
-0x00af60,4,
-0x00af80,8,
-0x00afb8,8,
-0x00afdc,10,
-0x00b008,14,
-0x00b080,1,
-0x00b088,18,
-0x00b100,9,
-0x00b134,2,
-0x00b14c,4,
-0x00b16c,11,
-0x00b1ac,8,
-0x00b1d0,1,
-0x00b204,1,
-0x00b20c,13,
-0x00b244,1,
-0x00b254,3,
-0x00b264,1,
-0x00b26c,7,
-0x00b2a8,3,
-0x00b2c0,8,
-0x00b300,6,
-0x00b360,4,
-0x00b380,8,
-0x00b3b8,8,
-0x00b3dc,10,
-0x00b408,14,
-0x00b480,1,
-0x00b488,18,
-0x00b500,9,
-0x00b534,2,
-0x00b54c,4,
-0x00b56c,11,
-0x00b5ac,8,
-0x00b5d0,1,
-0x00b604,1,
-0x00b60c,13,
-0x00b644,1,
-0x00b654,3,
-0x00b664,1,
-0x00b66c,7,
-0x00b6a8,3,
-0x00b6c0,8,
-0x00b700,6,
-0x00b760,4,
-0x00b780,8,
-0x00b7b8,8,
-0x00b7dc,10,
-0x00b808,14,
-0x00b880,1,
-0x00b888,18,
-0x00b900,9,
-0x00b934,2,
-0x00b94c,4,
-0x00b96c,11,
-0x00b9ac,8,
-0x00b9d0,1,
-0x00ba04,1,
-0x00ba0c,13,
-0x00ba44,1,
-0x00ba54,3,
-0x00ba64,1,
-0x00ba6c,7,
-0x00baa8,3,
-0x00bac0,8,
-0x00bb00,6,
-0x00bb60,4,
-0x00bb80,8,
-0x00bbb8,8,
-0x00bbdc,10,
-0x00bc08,14,
-0x00bc80,1,
-0x00bc88,18,
-0x00bd00,9,
-0x00bd34,2,
-0x00bd4c,4,
-0x00bd6c,11,
-0x00bdac,8,
-0x00bdd0,1,
-0x00be04,1,
-0x00be0c,13,
-0x00be44,1,
-0x00be54,3,
-0x00be64,1,
-0x00be6c,7,
-0x00bea8,3,
-0x00bec0,8,
-0x00bf00,6,
-0x00bf60,4,
-0x00bf80,8,
-0x00bfb8,8,
-0x00bfdc,10,
-0x00c008,14,
-0x00c080,1,
-0x00c088,18,
-0x00c100,9,
-0x00c134,2,
-0x00c14c,4,
-0x00c16c,11,
-0x00c1ac,8,
-0x00c1d0,1,
-0x00c204,1,
-0x00c20c,13,
-0x00c244,1,
-0x00c254,3,
-0x00c264,1,
-0x00c26c,7,
-0x00c2a8,3,
-0x00c2c0,8,
-0x00c300,6,
-0x00c360,4,
-0x00c380,8,
-0x00c3b8,8,
-0x00c3dc,10,
-0x00c408,14,
-0x00c480,1,
-0x00c488,18,
-0x00c500,9,
-0x00c534,2,
-0x00c54c,4,
-0x00c56c,11,
-0x00c5ac,8,
-0x00c5d0,1,
-0x00c604,1,
-0x00c60c,13,
-0x00c644,1,
-0x00c654,3,
-0x00c664,1,
-0x00c66c,7,
-0x00c6a8,3,
-0x00c6c0,8,
-0x00c700,6,
-0x00c760,4,
-0x00c780,8,
-0x00c7b8,8,
-0x00c7dc,10,
-0x00c808,14,
-0x00c880,1,
-0x00c888,18,
-0x00c900,9,
-0x00c934,2,
-0x00c94c,4,
-0x00c96c,11,
-0x00c9ac,8,
-0x00c9d0,1,
-0x00ca04,1,
-0x00ca0c,13,
-0x00ca44,1,
-0x00ca54,3,
-0x00ca64,1,
-0x00ca6c,7,
-0x00caa8,3,
-0x00cac0,8,
-0x00cb00,6,
-0x00cb60,4,
-0x00cb80,8,
-0x00cbb8,8,
-0x00cbdc,10,
-0x00cc08,14,
-0x00cc80,1,
-0x00cc88,18,
-0x00cd00,9,
-0x00cd34,2,
-0x00cd4c,4,
-0x00cd6c,11,
-0x00cdac,8,
-0x00cdd0,1,
-0x00ce04,1,
-0x00ce0c,13,
-0x00ce44,1,
-0x00ce54,3,
-0x00ce64,1,
-0x00ce6c,7,
-0x00cea8,3,
-0x00cec0,8,
-0x00cf00,6,
-0x00cf60,4,
-0x00cf80,8,
-0x00cfb8,8,
-0x00cfdc,10,
-0x00d008,14,
-0x00d080,1,
-0x00d088,18,
-0x00d100,9,
-0x00d134,2,
-0x00d14c,4,
-0x00d16c,11,
-0x00d1ac,8,
-0x00d1d0,1,
-0x00d204,1,
-0x00d20c,13,
-0x00d244,1,
-0x00d254,3,
-0x00d264,1,
-0x00d26c,7,
-0x00d2a8,3,
-0x00d2c0,8,
-0x00d300,6,
-0x00d360,4,
-0x00d380,8,
-0x00d3b8,8,
-0x00d3dc,10,
-0x00d428,1,
-0x00d450,1,
-0x00d478,1,
-0x00d4a0,1,
-0x00d5ac,1,
-0x00d5d8,4,
-0x00d600,6,
-0x00d620,6,
-0x00d640,3,
-0x00d800,13,
-0x00d840,6,
-0x00d860,3,
-0x00d880,2,
-0x00d904,2,
-0x00d918,1,
-0x00d940,1,
+0x008fb8,19,
+0x009028,1,
+0x009050,1,
+0x009078,1,
+0x0090a0,1,
+0x0091ac,1,
+0x0091d8,4,
+0x009200,6,
+0x009220,6,
+0x009240,3,
+0x009400,13,
+0x009440,6,
+0x009460,3,
+0x009480,3,
+0x009490,3,
+0x0094a0,6,
+0x0094bc,2,
+0x009500,2,
+0x010800,1,
+0x010808,14,
+0x010880,1,
+0x010888,16,
+0x010900,11,
+0x010940,3,
+0x010950,12,
+0x010984,19,
+0x010a00,1,
+0x010a18,5,
+0x010a30,2,
+0x010a3c,9,
+0x010a84,1,
+0x010a90,4,
+0x010aa4,1,
+0x010aac,7,
+0x010ae8,3,
+0x010b00,8,
+0x010b40,6,
+0x010b60,3,
+0x010b80,8,
+0x010bb8,19,
+0x010c08,14,
+0x010c80,1,
+0x010c88,16,
+0x010d00,11,
+0x010d40,3,
+0x010d50,12,
+0x010d84,19,
+0x010e00,1,
+0x010e18,5,
+0x010e30,2,
+0x010e3c,9,
+0x010e84,1,
+0x010e90,4,
+0x010ea4,1,
+0x010eac,7,
+0x010ee8,3,
+0x010f00,8,
+0x010f40,6,
+0x010f60,3,
+0x010f80,8,
+0x010fb8,19,
+0x011008,14,
+0x011080,1,
+0x011088,16,
+0x011100,11,
+0x011140,3,
+0x011150,12,
+0x011184,19,
+0x011200,1,
+0x011218,5,
+0x011230,2,
+0x01123c,9,
+0x011284,1,
+0x011290,4,
+0x0112a4,1,
+0x0112ac,7,
+0x0112e8,3,
+0x011300,8,
+0x011340,6,
+0x011360,3,
+0x011380,8,
+0x0113b8,19,
+0x011408,14,
+0x011480,1,
+0x011488,16,
+0x011500,11,
+0x011540,3,
+0x011550,12,
+0x011584,19,
+0x011600,1,
+0x011618,5,
+0x011630,2,
+0x01163c,9,
+0x011684,1,
+0x011690,4,
+0x0116a4,1,
+0x0116ac,7,
+0x0116e8,3,
+0x011700,8,
+0x011740,6,
+0x011760,3,
+0x011780,8,
+0x0117b8,19,
+0x011808,14,
+0x011880,1,
+0x011888,16,
+0x011900,11,
+0x011940,3,
+0x011950,12,
+0x011984,19,
+0x011a00,1,
+0x011a18,5,
+0x011a30,2,
+0x011a3c,9,
+0x011a84,1,
+0x011a90,4,
+0x011aa4,1,
+0x011aac,7,
+0x011ae8,3,
+0x011b00,8,
+0x011b40,6,
+0x011b60,3,
+0x011b80,8,
+0x011bb8,19,
+0x011c08,14,
+0x011c80,1,
+0x011c88,16,
+0x011d00,11,
+0x011d40,3,
+0x011d50,12,
+0x011d84,19,
+0x011e00,1,
+0x011e18,5,
+0x011e30,2,
+0x011e3c,9,
+0x011e84,1,
+0x011e90,4,
+0x011ea4,1,
+0x011eac,7,
+0x011ee8,3,
+0x011f00,8,
+0x011f40,6,
+0x011f60,3,
+0x011f80,8,
+0x011fb8,19,
+0x012008,14,
+0x012080,1,
+0x012088,16,
+0x012100,11,
+0x012140,3,
+0x012150,12,
+0x012184,19,
+0x012200,1,
+0x012218,5,
+0x012230,2,
+0x01223c,9,
+0x012284,1,
+0x012290,4,
+0x0122a4,1,
+0x0122ac,7,
+0x0122e8,3,
+0x012300,8,
+0x012340,6,
+0x012360,3,
+0x012380,8,
+0x0123b8,19,
+0x012408,14,
+0x012480,1,
+0x012488,16,
+0x012500,11,
+0x012540,3,
+0x012550,12,
+0x012584,19,
+0x012600,1,
+0x012618,5,
+0x012630,2,
+0x01263c,9,
+0x012684,1,
+0x012690,4,
+0x0126a4,1,
+0x0126ac,7,
+0x0126e8,3,
+0x012700,8,
+0x012740,6,
+0x012760,3,
+0x012780,8,
+0x0127b8,19,
+0x012808,14,
+0x012880,1,
+0x012888,16,
+0x012900,11,
+0x012940,3,
+0x012950,12,
+0x012984,19,
+0x012a00,1,
+0x012a18,5,
+0x012a30,2,
+0x012a3c,9,
+0x012a84,1,
+0x012a90,4,
+0x012aa4,1,
+0x012aac,7,
+0x012ae8,3,
+0x012b00,8,
+0x012b40,6,
+0x012b60,3,
+0x012b80,8,
+0x012bb8,19,
+0x012c08,14,
+0x012c80,1,
+0x012c88,16,
+0x012d00,11,
+0x012d40,3,
+0x012d50,12,
+0x012d84,19,
+0x012e00,1,
+0x012e18,5,
+0x012e30,2,
+0x012e3c,9,
+0x012e84,1,
+0x012e90,4,
+0x012ea4,1,
+0x012eac,7,
+0x012ee8,3,
+0x012f00,8,
+0x012f40,6,
+0x012f60,3,
+0x012f80,8,
+0x012fb8,19,
+0x013008,14,
+0x013080,1,
+0x013088,16,
+0x013100,11,
+0x013140,3,
+0x013150,12,
+0x013184,19,
+0x013200,1,
+0x013218,5,
+0x013230,2,
+0x01323c,9,
+0x013284,1,
+0x013290,4,
+0x0132a4,1,
+0x0132ac,7,
+0x0132e8,3,
+0x013300,8,
+0x013340,6,
+0x013360,3,
+0x013380,8,
+0x0133b8,19,
+0x013408,14,
+0x013480,1,
+0x013488,16,
+0x013500,11,
+0x013540,3,
+0x013550,12,
+0x013584,19,
+0x013600,1,
+0x013618,5,
+0x013630,2,
+0x01363c,9,
+0x013684,1,
+0x013690,4,
+0x0136a4,1,
+0x0136ac,7,
+0x0136e8,3,
+0x013700,8,
+0x013740,6,
+0x013760,3,
+0x013780,8,
+0x0137b8,19,
+0x013808,14,
+0x013880,1,
+0x013888,16,
+0x013900,11,
+0x013940,3,
+0x013950,12,
+0x013984,19,
+0x013a00,1,
+0x013a18,5,
+0x013a30,2,
+0x013a3c,9,
+0x013a84,1,
+0x013a90,4,
+0x013aa4,1,
+0x013aac,7,
+0x013ae8,3,
+0x013b00,8,
+0x013b40,6,
+0x013b60,3,
+0x013b80,8,
+0x013bb8,19,
+0x013c08,14,
+0x013c80,1,
+0x013c88,16,
+0x013d00,11,
+0x013d40,3,
+0x013d50,12,
+0x013d84,19,
+0x013e00,1,
+0x013e18,5,
+0x013e30,2,
+0x013e3c,9,
+0x013e84,1,
+0x013e90,4,
+0x013ea4,1,
+0x013eac,7,
+0x013ee8,3,
+0x013f00,8,
+0x013f40,6,
+0x013f60,3,
+0x013f80,8,
+0x013fb8,19,
+0x014008,14,
+0x014080,1,
+0x014088,16,
+0x014100,11,
+0x014140,3,
+0x014150,12,
+0x014184,19,
+0x014200,1,
+0x014218,5,
+0x014230,2,
+0x01423c,9,
+0x014284,1,
+0x014290,4,
+0x0142a4,1,
+0x0142ac,7,
+0x0142e8,3,
+0x014300,8,
+0x014340,6,
+0x014360,3,
+0x014380,8,
+0x0143b8,19,
+0x014408,14,
+0x014480,1,
+0x014488,16,
+0x014500,11,
+0x014540,3,
+0x014550,12,
+0x014584,19,
+0x014600,1,
+0x014618,5,
+0x014630,2,
+0x01463c,9,
+0x014684,1,
+0x014690,4,
+0x0146a4,1,
+0x0146ac,7,
+0x0146e8,3,
+0x014700,8,
+0x014740,6,
+0x014760,3,
+0x014780,8,
+0x0147b8,19,
+0x014808,14,
+0x014880,1,
+0x014888,16,
+0x014900,11,
+0x014940,3,
+0x014950,12,
+0x014984,19,
+0x014a00,1,
+0x014a18,5,
+0x014a30,2,
+0x014a3c,9,
+0x014a84,1,
+0x014a90,4,
+0x014aa4,1,
+0x014aac,7,
+0x014ae8,3,
+0x014b00,8,
+0x014b40,6,
+0x014b60,3,
+0x014b80,8,
+0x014bb8,19,
+0x014c08,14,
+0x014c80,1,
+0x014c88,16,
+0x014d00,11,
+0x014d40,3,
+0x014d50,12,
+0x014d84,19,
+0x014e00,1,
+0x014e18,5,
+0x014e30,2,
+0x014e3c,9,
+0x014e84,1,
+0x014e90,4,
+0x014ea4,1,
+0x014eac,7,
+0x014ee8,3,
+0x014f00,8,
+0x014f40,6,
+0x014f60,3,
+0x014f80,8,
+0x014fb8,19,
+0x015008,14,
+0x015080,1,
+0x015088,16,
+0x015100,11,
+0x015140,3,
+0x015150,12,
+0x015184,19,
+0x015200,1,
+0x015218,5,
+0x015230,2,
+0x01523c,9,
+0x015284,1,
+0x015290,4,
+0x0152a4,1,
+0x0152ac,7,
+0x0152e8,3,
+0x015300,8,
+0x015340,6,
+0x015360,3,
+0x015380,8,
+0x0153b8,19,
+0x015408,14,
+0x015480,1,
+0x015488,16,
+0x015500,11,
+0x015540,3,
+0x015550,12,
+0x015584,19,
+0x015600,1,
+0x015618,5,
+0x015630,2,
+0x01563c,9,
+0x015684,1,
+0x015690,4,
+0x0156a4,1,
+0x0156ac,7,
+0x0156e8,3,
+0x015700,8,
+0x015740,6,
+0x015760,3,
+0x015780,8,
+0x0157b8,19,
+0x015808,14,
+0x015880,1,
+0x015888,16,
+0x015900,11,
+0x015940,3,
+0x015950,12,
+0x015984,19,
+0x015a00,1,
+0x015a18,5,
+0x015a30,2,
+0x015a3c,9,
+0x015a84,1,
+0x015a90,4,
+0x015aa4,1,
+0x015aac,7,
+0x015ae8,3,
+0x015b00,8,
+0x015b40,6,
+0x015b60,3,
+0x015b80,8,
+0x015bb8,19,
+0x015c08,14,
+0x015c80,1,
+0x015c88,16,
+0x015d00,11,
+0x015d40,3,
+0x015d50,12,
+0x015d84,19,
+0x015e00,1,
+0x015e18,5,
+0x015e30,2,
+0x015e3c,9,
+0x015e84,1,
+0x015e90,4,
+0x015ea4,1,
+0x015eac,7,
+0x015ee8,3,
+0x015f00,8,
+0x015f40,6,
+0x015f60,3,
+0x015f80,8,
+0x015fb8,19,
+0x016008,14,
+0x016080,1,
+0x016088,16,
+0x016100,11,
+0x016140,3,
+0x016150,12,
+0x016184,19,
+0x016200,1,
+0x016218,5,
+0x016230,2,
+0x01623c,9,
+0x016284,1,
+0x016290,4,
+0x0162a4,1,
+0x0162ac,7,
+0x0162e8,3,
+0x016300,8,
+0x016340,6,
+0x016360,3,
+0x016380,8,
+0x0163b8,19,
+0x016408,14,
+0x016480,1,
+0x016488,16,
+0x016500,11,
+0x016540,3,
+0x016550,12,
+0x016584,19,
+0x016600,1,
+0x016618,5,
+0x016630,2,
+0x01663c,9,
+0x016684,1,
+0x016690,4,
+0x0166a4,1,
+0x0166ac,7,
+0x0166e8,3,
+0x016700,8,
+0x016740,6,
+0x016760,3,
+0x016780,8,
+0x0167b8,19,
+0x016808,14,
+0x016880,1,
+0x016888,16,
+0x016900,11,
+0x016940,3,
+0x016950,12,
+0x016984,19,
+0x016a00,1,
+0x016a18,5,
+0x016a30,2,
+0x016a3c,9,
+0x016a84,1,
+0x016a90,4,
+0x016aa4,1,
+0x016aac,7,
+0x016ae8,3,
+0x016b00,8,
+0x016b40,6,
+0x016b60,3,
+0x016b80,8,
+0x016bb8,19,
+0x016c08,14,
+0x016c80,1,
+0x016c88,16,
+0x016d00,11,
+0x016d40,3,
+0x016d50,12,
+0x016d84,19,
+0x016e00,1,
+0x016e18,5,
+0x016e30,2,
+0x016e3c,9,
+0x016e84,1,
+0x016e90,4,
+0x016ea4,1,
+0x016eac,7,
+0x016ee8,3,
+0x016f00,8,
+0x016f40,6,
+0x016f60,3,
+0x016f80,8,
+0x016fb8,19,
+0x017008,14,
+0x017080,1,
+0x017088,16,
+0x017100,11,
+0x017140,3,
+0x017150,12,
+0x017184,19,
+0x017200,1,
+0x017218,5,
+0x017230,2,
+0x01723c,9,
+0x017284,1,
+0x017290,4,
+0x0172a4,1,
+0x0172ac,7,
+0x0172e8,3,
+0x017300,8,
+0x017340,6,
+0x017360,3,
+0x017380,8,
+0x0173b8,19,
+0x017408,14,
+0x017480,1,
+0x017488,16,
+0x017500,11,
+0x017540,3,
+0x017550,12,
+0x017584,19,
+0x017600,1,
+0x017618,5,
+0x017630,2,
+0x01763c,9,
+0x017684,1,
+0x017690,4,
+0x0176a4,1,
+0x0176ac,7,
+0x0176e8,3,
+0x017700,8,
+0x017740,6,
+0x017760,3,
+0x017780,8,
+0x0177b8,19,
+0x017808,14,
+0x017880,1,
+0x017888,16,
+0x017900,11,
+0x017940,3,
+0x017950,12,
+0x017984,19,
+0x017a00,1,
+0x017a18,5,
+0x017a30,2,
+0x017a3c,9,
+0x017a84,1,
+0x017a90,4,
+0x017aa4,1,
+0x017aac,7,
+0x017ae8,3,
+0x017b00,8,
+0x017b40,6,
+0x017b60,3,
+0x017b80,8,
+0x017bb8,19,
+0x017c08,14,
+0x017c80,1,
+0x017c88,16,
+0x017d00,11,
+0x017d40,3,
+0x017d50,12,
+0x017d84,19,
+0x017e00,1,
+0x017e18,5,
+0x017e30,2,
+0x017e3c,9,
+0x017e84,1,
+0x017e90,4,
+0x017ea4,1,
+0x017eac,7,
+0x017ee8,3,
+0x017f00,8,
+0x017f40,6,
+0x017f60,3,
+0x017f80,8,
+0x017fb8,19,
+0x018008,14,
+0x018080,1,
+0x018088,16,
+0x018100,11,
+0x018140,3,
+0x018150,12,
+0x018184,19,
+0x018200,1,
+0x018218,5,
+0x018230,2,
+0x01823c,9,
+0x018284,1,
+0x018290,4,
+0x0182a4,1,
+0x0182ac,7,
+0x0182e8,3,
+0x018300,8,
+0x018340,6,
+0x018360,3,
+0x018380,8,
+0x0183b8,19,
+0x018408,14,
+0x018480,1,
+0x018488,16,
+0x018500,11,
+0x018540,3,
+0x018550,12,
+0x018584,19,
+0x018600,1,
+0x018618,5,
+0x018630,2,
+0x01863c,9,
+0x018684,1,
+0x018690,4,
+0x0186a4,1,
+0x0186ac,7,
+0x0186e8,3,
+0x018700,8,
+0x018740,6,
+0x018760,3,
+0x018780,8,
+0x0187b8,19,
+0x018808,14,
+0x018880,1,
+0x018888,16,
+0x018900,11,
+0x018940,3,
+0x018950,12,
+0x018984,19,
+0x018a00,1,
+0x018a18,5,
+0x018a30,2,
+0x018a3c,9,
+0x018a84,1,
+0x018a90,4,
+0x018aa4,1,
+0x018aac,7,
+0x018ae8,3,
+0x018b00,8,
+0x018b40,6,
+0x018b60,3,
+0x018b80,8,
+0x018bb8,19,
+0x018c08,14,
+0x018c80,1,
+0x018c88,16,
+0x018d00,11,
+0x018d40,3,
+0x018d50,12,
+0x018d84,19,
+0x018e00,1,
+0x018e18,5,
+0x018e30,2,
+0x018e3c,9,
+0x018e84,1,
+0x018e90,4,
+0x018ea4,1,
+0x018eac,7,
+0x018ee8,3,
+0x018f00,8,
+0x018f40,6,
+0x018f60,3,
+0x018f80,8,
+0x018fb8,19,
+0x019028,1,
+0x019050,1,
+0x019078,1,
+0x0190a0,1,
+0x0191ac,1,
+0x0191d8,4,
+0x019200,6,
+0x019220,6,
+0x019240,3,
+0x019400,13,
+0x019440,6,
+0x019460,3,
+0x019480,3,
+0x019490,3,
+0x0194a0,6,
+0x0194bc,2,
+0x019500,2,
 0x020000,1,
 0x020008,10,
 0x020034,16,
 0x023e04,3,
 0x023e14,4,
 0x023ff0,1,
-0x024800,2,
-0x02480c,37,
-0x0248a4,64,
-0x024a00,84,
-0x024b54,2,
-0x024b7c,1,
-0x024b84,1,
-0x024b8c,4,
-0x024ba4,1,
-0x024bac,75,
-0x024d00,60,
-0x024dfc,7,
-0x024e20,6,
-0x024e40,6,
-0x024e60,6,
-0x024e80,3,
-0x024f00,14,
-0x024f40,1,
 0x025000,4,
 0x025028,4,
 0x025050,4,
 0x02be04,3,
 0x02be14,4,
 0x02bff0,1,
-0x02c800,2,
-0x02c80c,37,
-0x02c8a4,64,
-0x02ca00,84,
-0x02cb54,2,
-0x02cb7c,1,
-0x02cb84,1,
-0x02cb8c,4,
-0x02cba4,1,
-0x02cbac,75,
-0x02cd00,60,
-0x02cdfc,7,
-0x02ce20,6,
-0x02ce40,6,
-0x02ce60,6,
-0x02ce80,3,
-0x02cf00,14,
-0x02cf40,1,
 0x02d000,4,
 0x02d028,4,
 0x02d050,4,
 0x02d440,3,
 0x02d500,13,
 0x02d900,1,
-0x030000,9,
-0x030030,8,
-0x030080,9,
-0x0300b0,8,
-0x030100,9,
-0x030130,8,
-0x030180,9,
-0x0301b0,8,
-0x030200,9,
-0x030230,8,
-0x030280,9,
-0x0302b0,8,
-0x030300,9,
-0x030330,8,
-0x030380,9,
-0x0303b0,8,
-0x030400,9,
-0x030430,8,
-0x030480,9,
-0x0304b0,8,
-0x030500,9,
-0x030530,8,
-0x030580,9,
-0x0305b0,8,
-0x030600,9,
-0x030630,8,
-0x030680,9,
-0x0306b0,8,
-0x030700,9,
-0x030730,8,
-0x030780,9,
-0x0307b0,8,
-0x030800,9,
-0x030830,8,
-0x030880,9,
-0x0308b0,8,
-0x030900,9,
-0x030930,8,
-0x030980,9,
-0x0309b0,8,
-0x030a00,9,
-0x030a30,8,
-0x030a80,9,
-0x030ab0,8,
-0x030b00,9,
-0x030b30,8,
-0x030b80,9,
-0x030bb0,8,
-0x030c00,9,
-0x030c30,8,
-0x030c80,9,
-0x030cb0,8,
-0x030d00,9,
-0x030d30,8,
-0x030d80,9,
-0x030db0,8,
-0x030e00,9,
-0x030e30,8,
-0x030e80,9,
-0x030eb0,8,
-0x030f00,9,
-0x030f30,8,
-0x030f80,9,
-0x030fb0,8,
-0x031000,9,
-0x031030,8,
-0x031080,9,
-0x0310b0,8,
-0x031100,9,
-0x031130,8,
-0x031180,9,
-0x0311b0,8,
-0x032400,13,
-0x032440,6,
-0x032460,3,
+0x030000,37,
+0x030100,37,
+0x030200,37,
+0x030300,37,
+0x030400,37,
+0x030500,37,
+0x030600,37,
+0x030700,37,
+0x030800,37,
+0x030900,37,
+0x030a00,37,
+0x030b00,37,
+0x030c00,37,
+0x030d00,37,
+0x030e00,37,
+0x030f00,37,
+0x031000,37,
+0x031100,37,
+0x031200,37,
+0x031300,37,
+0x031400,37,
+0x031500,37,
+0x031600,37,
+0x031700,37,
+0x031800,37,
+0x031900,37,
+0x031a00,37,
+0x031b00,37,
+0x031c00,37,
+0x031d00,37,
+0x031e00,37,
+0x031f00,37,
+0x032000,6,
+0x032020,6,
+0x032040,3,
+0x032054,2,
+0x03206c,1,
+0x032080,6,
+0x0320a0,6,
+0x0320c0,3,
+0x0320d4,2,
+0x0320ec,1,
+0x032100,6,
+0x032120,6,
+0x032140,3,
+0x032154,2,
+0x03216c,1,
+0x032180,6,
+0x0321a0,6,
+0x0321c0,3,
+0x0321d4,2,
+0x0321ec,1,
+0x032200,6,
+0x032220,6,
+0x032240,3,
+0x032254,2,
+0x03226c,1,
+0x032280,6,
+0x0322a0,6,
+0x0322c0,3,
+0x0322d4,2,
+0x0322ec,1,
+0x032300,6,
+0x032320,6,
+0x032340,3,
+0x032354,2,
+0x03236c,1,
+0x032380,6,
+0x0323a0,6,
+0x0323c0,3,
+0x0323d4,2,
+0x0323ec,1,
+0x032400,6,
+0x032420,6,
+0x032440,3,
+0x032454,2,
+0x03246c,1,
+0x032480,6,
+0x0324a0,6,
 0x0324c0,3,
-0x0324d0,3,
+0x0324d4,2,
+0x0324ec,1,
 0x032500,6,
 0x032520,6,
-0x032540,6,
-0x032560,6,
+0x032540,3,
+0x032554,2,
+0x03256c,1,
 0x032580,6,
 0x0325a0,6,
-0x0325c0,6,
-0x0325e0,6,
+0x0325c0,3,
+0x0325d4,2,
+0x0325ec,1,
 0x032600,6,
 0x032620,6,
-0x032640,6,
-0x032660,6,
+0x032640,3,
+0x032654,2,
+0x03266c,1,
 0x032680,6,
 0x0326a0,6,
-0x0326c0,6,
-0x0326e0,6,
+0x0326c0,3,
+0x0326d4,2,
+0x0326ec,1,
 0x032700,6,
 0x032720,6,
-0x032740,6,
-0x032760,6,
+0x032740,3,
+0x032754,2,
+0x03276c,1,
 0x032780,6,
 0x0327a0,6,
-0x0327c0,6,
-0x0327e0,6,
+0x0327c0,3,
+0x0327d4,2,
+0x0327ec,1,
 0x032800,6,
 0x032820,6,
-0x032840,6,
-0x032860,6,
+0x032840,3,
+0x032854,2,
+0x03286c,1,
 0x032880,6,
 0x0328a0,6,
-0x0328c0,6,
-0x0328e0,6,
+0x0328c0,3,
+0x0328d4,2,
+0x0328ec,1,
 0x032900,6,
 0x032920,6,
-0x032940,6,
-0x032960,6,
-0x032c00,5,
-0x032cf4,3,
-0x033000,38,
+0x032940,3,
+0x032954,2,
+0x03296c,1,
+0x032980,6,
+0x0329a0,6,
+0x0329c0,3,
+0x0329d4,2,
+0x0329ec,1,
+0x032a00,6,
+0x032a20,6,
+0x032a40,3,
+0x032a54,2,
+0x032a6c,1,
+0x032a80,6,
+0x032aa0,6,
+0x032ac0,3,
+0x032ad4,2,
+0x032aec,1,
+0x032b00,6,
+0x032b20,6,
+0x032b40,3,
+0x032b54,2,
+0x032b6c,1,
+0x032b80,6,
+0x032ba0,6,
+0x032bc0,3,
+0x032bd4,2,
+0x032bec,1,
+0x032c00,6,
+0x032c20,6,
+0x032c40,3,
+0x032c54,2,
+0x032c6c,1,
+0x032c80,6,
+0x032ca0,6,
+0x032cc0,3,
+0x032cd4,2,
+0x032cec,1,
+0x032d00,6,
+0x032d20,6,
+0x032d40,3,
+0x032d54,2,
+0x032d6c,1,
+0x032d80,6,
+0x032da0,6,
+0x032dc0,3,
+0x032dd4,2,
+0x032dec,1,
+0x032e00,6,
+0x032e20,6,
+0x032e40,3,
+0x032e54,2,
+0x032e6c,1,
+0x032e80,6,
+0x032ea0,6,
+0x032ec0,3,
+0x032ed4,2,
+0x032eec,1,
+0x032f00,6,
+0x032f20,6,
+0x032f40,3,
+0x032f54,2,
+0x032f6c,1,
+0x032f80,6,
+0x032fa0,6,
+0x032fc0,3,
+0x032fd4,2,
+0x032fec,1,
+0x033000,6,
+0x033020,6,
+0x033040,3,
+0x033054,2,
+0x03306c,1,
+0x033080,6,
+0x0330a0,6,
+0x0330c0,3,
+0x0330d4,2,
+0x0330ec,1,
 0x033100,37,
-0x033200,18,
-0x033400,6,
-0x033420,6,
-0x033440,6,
-0x033460,6,
-0x033480,6,
-0x0334a0,6,
-0x0334c0,6,
-0x0334e0,6,
-0x033500,6,
-0x033520,6,
-0x033540,6,
-0x033560,6,
-0x033580,6,
-0x0335a0,6,
-0x0335c0,6,
-0x0335e0,6,
-0x033600,6,
-0x033620,6,
-0x033640,3,
+0x033200,13,
+0x033240,6,
+0x033260,3,
+0x0332c0,3,
+0x0332d0,3,
+0x033300,7,
+0x0333fc,33,
+0x033490,2,
+0x033500,33,
+0x033600,2,
 0x033800,6,
 0x033820,6,
 0x033840,6,
 0x0339a0,6,
 0x0339c0,6,
 0x0339e0,6,
-0x033a00,6,
-0x033a20,6,
-0x033a40,6,
-0x033a60,3,
-0x033c00,2,
+0x033a00,3,
+0x033c00,6,
+0x033c20,6,
+0x033c40,6,
+0x033c60,6,
+0x033c80,6,
+0x033ca0,6,
+0x033cc0,6,
+0x033ce0,6,
+0x033d00,6,
+0x033d20,6,
+0x033d40,6,
+0x033d60,6,
+0x033d80,6,
+0x033da0,6,
+0x033dc0,6,
+0x033de0,6,
+0x033e00,6,
+0x033e20,3,
+0x034000,8,
+0x034024,13,
+0x034068,1,
+0x034070,12,
+0x0340a4,13,
+0x0340e8,1,
+0x0340f0,12,
+0x034124,13,
+0x034168,1,
+0x034170,12,
+0x0341a4,13,
+0x0341e8,1,
+0x0341f0,12,
+0x034224,13,
+0x034268,1,
+0x034270,12,
+0x0342a4,13,
+0x0342e8,1,
+0x0342f0,12,
+0x034324,13,
+0x034368,1,
+0x034370,12,
+0x0343a4,13,
+0x0343e8,1,
+0x0343f0,12,
+0x034424,13,
+0x034468,1,
+0x034470,12,
+0x0344a4,13,
+0x0344e8,1,
+0x0344f0,12,
+0x034524,13,
+0x034568,1,
+0x034570,12,
+0x0345a4,13,
+0x0345e8,1,
+0x0345f0,12,
+0x034624,13,
+0x034668,1,
+0x034670,12,
+0x0346a4,13,
+0x0346e8,1,
+0x0346f0,12,
+0x034724,13,
+0x034768,1,
+0x034770,12,
+0x0347a4,13,
+0x0347e8,1,
+0x0347f0,12,
+0x034824,13,
+0x034868,1,
+0x034870,12,
+0x0348a4,13,
+0x0348e8,1,
+0x0348f0,12,
+0x034924,13,
+0x034968,1,
+0x034970,12,
+0x0349a4,13,
+0x0349e8,1,
+0x0349f0,12,
+0x034a24,13,
+0x034a68,1,
+0x034a70,12,
+0x034aa4,13,
+0x034ae8,1,
+0x034af0,12,
+0x034b24,13,
+0x034b68,1,
+0x034b70,12,
+0x034ba4,13,
+0x034be8,1,
+0x034bf0,12,
+0x034c24,13,
+0x034c68,1,
+0x034c70,12,
+0x034ca4,13,
+0x034ce8,1,
+0x034cf0,12,
+0x034d24,13,
+0x034d68,1,
+0x034d70,12,
+0x034da4,13,
+0x034de8,1,
+0x034df0,12,
+0x034e24,13,
+0x034e68,1,
+0x034e70,12,
+0x034ea4,13,
+0x034ee8,1,
+0x034ef0,12,
+0x034f24,13,
+0x034f68,1,
+0x034f70,12,
+0x034fa4,13,
+0x034fe8,1,
+0x034ff0,4,
 0x035200,2,
 0x035800,6,
-0x035820,4,
-0x035840,8,
+0x035828,2,
 0x03587c,7,
-0x0358a0,4,
-0x0358c0,8,
+0x0358a8,2,
 0x0358fc,7,
-0x035920,4,
-0x035940,8,
+0x035928,2,
 0x03597c,7,
-0x0359a0,4,
-0x0359c0,8,
+0x0359a8,2,
 0x0359fc,7,
-0x035a20,4,
-0x035a40,8,
+0x035a28,2,
 0x035a7c,7,
-0x035aa0,4,
-0x035ac0,8,
+0x035aa8,2,
 0x035afc,7,
-0x035b20,4,
-0x035b40,8,
+0x035b28,2,
 0x035b7c,7,
-0x035ba0,4,
-0x035bc0,8,
+0x035ba8,2,
 0x035bfc,7,
-0x035c20,4,
-0x035c40,8,
+0x035c28,2,
 0x035c7c,7,
-0x035ca0,4,
-0x035cc0,8,
+0x035ca8,2,
 0x035cfc,7,
-0x035d20,4,
-0x035d40,8,
+0x035d28,2,
 0x035d7c,7,
-0x035da0,4,
-0x035dc0,8,
+0x035da8,2,
 0x035dfc,7,
-0x035e20,4,
-0x035e40,8,
+0x035e28,2,
 0x035e7c,7,
-0x035ea0,4,
-0x035ec0,8,
+0x035ea8,2,
 0x035efc,7,
-0x035f20,4,
-0x035f40,8,
+0x035f28,2,
 0x035f7c,7,
-0x035fa0,4,
-0x035fc0,8,
+0x035fa8,2,
 0x035ffc,7,
-0x036020,4,
-0x036040,8,
+0x036028,2,
 0x03607c,7,
-0x0360a0,4,
-0x0360c0,8,
+0x0360a8,2,
 0x0360fc,7,
-0x036120,4,
-0x036140,8,
+0x036128,2,
 0x03617c,7,
-0x0361a0,4,
-0x0361c0,8,
+0x0361a8,2,
 0x0361fc,7,
-0x036220,4,
-0x036240,8,
+0x036228,2,
 0x03627c,7,
-0x0362a0,4,
-0x0362c0,8,
+0x0362a8,2,
 0x0362fc,7,
-0x036320,4,
-0x036340,8,
+0x036328,2,
 0x03637c,7,
-0x0363a0,4,
-0x0363c0,8,
+0x0363a8,2,
 0x0363fc,7,
-0x036420,4,
-0x036440,8,
+0x036428,2,
 0x03647c,7,
-0x0364a0,4,
-0x0364c0,8,
+0x0364a8,2,
 0x0364fc,7,
-0x036520,4,
-0x036540,8,
+0x036528,2,
 0x03657c,7,
-0x0365a0,4,
-0x0365c0,8,
+0x0365a8,2,
 0x0365fc,7,
-0x036620,4,
-0x036640,8,
+0x036628,2,
 0x03667c,7,
-0x0366a0,4,
-0x0366c0,8,
+0x0366a8,2,
 0x0366fc,7,
-0x036720,4,
-0x036740,8,
+0x036728,2,
 0x03677c,7,
-0x0367a0,4,
-0x0367c0,8,
-0x0367fc,7,
-0x036820,4,
-0x036840,8,
-0x03687c,7,
-0x0368a0,4,
-0x0368c0,8,
-0x0368fc,7,
-0x036920,4,
-0x036940,8,
-0x03697c,7,
-0x0369a0,4,
-0x0369c0,8,
-0x0369fc,7,
-0x036a20,4,
+0x0367a8,2,
+0x0367fc,1,
+0x036a00,6,
+0x036a28,2,
 0x036a40,8,
-0x036a7c,7,
-0x036aa0,4,
-0x036ac0,8,
-0x036afc,1,
-0x037408,13,
+0x036a7c,1,
+0x037410,3,
+0x03742c,4,
 0x037440,1,
 0x037448,1,
 0x03745c,4,
-0x037470,10,
+0x037480,6,
 0x0374a0,6,
 0x0374c0,6,
 0x0374e0,3,
-0x037800,4,
-0x037828,4,
-0x037850,4,
-0x037878,4,
-0x0378a0,4,
+0x037800,6,
+0x037828,6,
+0x037850,6,
+0x037878,6,
+0x0378a0,6,
 0x0379ac,1,
 0x0379d8,4,
 0x037a00,6,
 0x037aa0,6,
 0x037ac0,6,
 0x037ae0,6,
-0x037b00,3,
+0x037b00,6,
+0x037b20,6,
+0x037b40,6,
+0x037b60,6,
+0x037b80,3,
 0x037c00,13,
-0x037c40,3,
-0x037c50,6,
+0x037c40,1,
 0x037c6c,1,
 0x037c80,6,
 0x037ca0,6,
-0x037cc0,6,
-0x037ce0,3,
+0x037cc0,3,
 0x037d00,1,
-0x037d80,6,
-0x037da0,6,
-0x037dc0,6,
-0x037de0,3,
-0x037e00,1,
-0x037e08,4,
+0x037e0c,3,
 0x037ffc,1,
 0x057000,2,
-0x05700c,9,
-0x057040,6,
-0x057060,6,
-0x057080,2,
-0x05708c,5,
-0x0570a4,3,
-0x0570e0,1,
-0x057500,2,
-0x057518,5,
-0x057540,6,
+0x05700c,3,
+0x057028,2,
+0x057038,47,
+0x057500,6,
+0x057520,6,
+0x057540,3,
 0x057580,10,
+0x0575c0,15,
+0x057600,2,
+0x057618,5,
+0x057630,1,
 0x057800,6,
 0x057820,3,
 0x057840,2,
 0x0c1500,13,
 0x0c1540,3,
 0x0c2000,14,
-0x0c2070,3,
+0x0c2040,6,
+0x0c2060,6,
 0x0c2080,6,
+0x0c20a0,3,
 0x0c2100,9,
 0x0c2204,1,
 0x0c220c,6,
 0x0cb400,5,
 0x0cb59c,1,
 0x0cb5ac,9,
-0x0d0000,5,
-0x0d0020,4,
-0x0d0034,17,
-0x0d0080,1,
+0x0d0000,4,
+0x0d0014,1,
+0x0d0020,3,
+0x0d0030,3,
+0x0d0040,8,
+0x0d007c,2,
 0x0d00a0,6,
-0x0d0100,5,
-0x0d0120,4,
-0x0d0134,17,
-0x0d0180,1,
+0x0d00c0,6,
+0x0d00e0,6,
+0x0d0100,4,
+0x0d0114,1,
+0x0d0120,3,
+0x0d0130,3,
+0x0d0140,8,
+0x0d017c,2,
 0x0d01a0,6,
-0x0d0200,5,
-0x0d0220,4,
-0x0d0234,17,
-0x0d0280,1,
+0x0d01c0,6,
+0x0d01e0,6,
+0x0d0200,4,
+0x0d0214,1,
+0x0d0220,3,
+0x0d0230,3,
+0x0d0240,8,
+0x0d027c,2,
 0x0d02a0,6,
-0x0d0300,5,
-0x0d0320,4,
-0x0d0334,17,
-0x0d0380,1,
+0x0d02c0,6,
+0x0d02e0,6,
+0x0d0300,4,
+0x0d0314,1,
+0x0d0320,3,
+0x0d0330,3,
+0x0d0340,8,
+0x0d037c,2,
 0x0d03a0,6,
+0x0d03c0,6,
+0x0d03e0,6,
 0x0d0400,6,
 0x0d0440,6,
 0x0d0480,3,
 0x0d04c0,3,
-0x0d0500,6,
-0x0d051c,7,
-0x0d0540,1,
+0x0d0500,2,
+0x0d050c,4,
+0x0d0520,2,
+0x0d052c,4,
+0x0d0540,2,
 0x0d0c00,13,
 0x0d0c40,12,
 0x0d0c80,13,
 0x0d0cc0,12,
-0x0d0d00,6,
-0x0d0d20,6,
+0x0d0d00,14,
+0x0d0d40,2,
 0x0d0d80,14,
 0x0d0dc0,2,
-0x0d0e40,11,
+0x0d0e00,11,
+0x0d0e40,6,
+0x0d0e60,6,
 0x0d0e80,6,
 0x0d0ea0,6,
 0x0d1000,2,
-0x0d1010,5,
+0x0d1014,4,
 0x0d1040,3,
 0x0d1050,3,
-0x0d1060,32,
-0x0d1100,8,
-0x0d1140,8,
+0x0d1080,42,
+0x0d1140,10,
 0x0d1180,3,
 0x0d1190,2,
-0x0d119c,9,
-0x0d1218,9,
-0x0d1240,3,
-0x0d1250,6,
-0x0d1280,1,
-0x0d1288,6,
-0x0d12a4,1,
-0x0d12c0,1,
-0x0d12c8,6,
-0x0d12e4,1,
-0x0d1400,8,
-0x0d1424,2,
+0x0d119c,15,
+0x0d1200,9,
+0x0d1300,1,
+0x0d1308,6,
+0x0d1324,10,
+0x0d1380,1,
+0x0d1388,6,
+0x0d13a4,10,
+0x0d1400,6,
+0x0d1420,6,
 0x0d1500,5,
 0x0d1520,4,
 0x0d1540,5,
 0x0d1560,4,
 0x0d1800,24,
-0x0d1864,5,
+0x0d1864,6,
 0x0d1880,8,
-0x0d1900,13,
-0x0d1980,4,
-0x0d19a0,6,
-0x0d19c0,6,
-0x0d19dc,1,
-0x0d1a00,6,
-0x0d1a1c,1,
-0x0d1a40,1,
-0x0d1a60,1,
-0x0d1a68,23,
+0x0d1900,24,
+0x0d1964,6,
+0x0d1980,8,
+0x0d1a00,17,
+0x0d1a48,6,
+0x0d1a80,17,
 0x0d1ac8,6,
-0x0d1b00,17,
-0x0d1b48,6,
-0x0d1b80,12,
+0x0d1b00,6,
+0x0d1b20,6,
+0x0d1b40,3,
+0x0d1b80,6,
+0x0d1ba0,6,
+0x0d1bc0,3,
 0x0d1c00,6,
 0x0d1c20,6,
-0x0d1c40,6,
-0x0d1c60,3,
-0x0d1d00,6,
-0x0d1d20,6,
-0x0d1d40,3,
-0x0d1d80,6,
-0x0d1da0,6,
-0x0d1dc0,3,
-0x0d2000,5,
-0x0d2020,4,
-0x0d2034,17,
-0x0d2080,1,
+0x0d1c40,3,
+0x0d1c80,6,
+0x0d1ca0,6,
+0x0d1cc0,3,
+0x0d1d10,2,
+0x0d1d1c,1,
+0x0d1d50,2,
+0x0d1d5c,1,
+0x0d1d80,1,
+0x0d1da0,1,
+0x0d1da8,7,
+0x0d1de0,1,
+0x0d1de8,19,
+0x0d1e40,6,
+0x0d1e60,6,
+0x0d1e80,6,
+0x0d1ea0,6,
+0x0d1ec0,7,
+0x0d1ee0,7,
+0x0d1f00,12,
+0x0d1f40,3,
+0x0d1f50,8,
+0x0d2000,4,
+0x0d2014,1,
+0x0d2020,3,
+0x0d2030,3,
+0x0d2040,8,
+0x0d207c,2,
 0x0d20a0,6,
-0x0d2100,5,
-0x0d2120,4,
-0x0d2134,17,
-0x0d2180,1,
+0x0d20c0,6,
+0x0d20e0,6,
+0x0d2100,4,
+0x0d2114,1,
+0x0d2120,3,
+0x0d2130,3,
+0x0d2140,8,
+0x0d217c,2,
 0x0d21a0,6,
-0x0d2200,5,
-0x0d2220,4,
-0x0d2234,17,
-0x0d2280,1,
+0x0d21c0,6,
+0x0d21e0,6,
+0x0d2200,4,
+0x0d2214,1,
+0x0d2220,3,
+0x0d2230,3,
+0x0d2240,8,
+0x0d227c,2,
 0x0d22a0,6,
-0x0d2300,5,
-0x0d2320,4,
-0x0d2334,17,
-0x0d2380,1,
+0x0d22c0,6,
+0x0d22e0,6,
+0x0d2300,4,
+0x0d2314,1,
+0x0d2320,3,
+0x0d2330,3,
+0x0d2340,8,
+0x0d237c,2,
 0x0d23a0,6,
+0x0d23c0,6,
+0x0d23e0,6,
 0x0d2400,6,
 0x0d2440,6,
 0x0d2480,3,
 0x0d24c0,3,
-0x0d2500,6,
-0x0d251c,7,
-0x0d2540,1,
+0x0d2500,2,
+0x0d250c,4,
+0x0d2520,2,
+0x0d252c,4,
+0x0d2540,2,
 0x0d2c00,13,
 0x0d2c40,12,
 0x0d2c80,13,
 0x0d2cc0,12,
-0x0d2d00,6,
-0x0d2d20,6,
+0x0d2d00,14,
+0x0d2d40,2,
 0x0d2d80,14,
 0x0d2dc0,2,
-0x0d2e40,11,
+0x0d2e00,11,
+0x0d2e40,6,
+0x0d2e60,6,
 0x0d2e80,6,
 0x0d2ea0,6,
 0x0d3000,2,
-0x0d3010,5,
+0x0d3014,4,
 0x0d3040,3,
 0x0d3050,3,
-0x0d3060,32,
-0x0d3100,8,
-0x0d3140,8,
+0x0d3080,42,
+0x0d3140,10,
 0x0d3180,3,
 0x0d3190,2,
-0x0d319c,9,
-0x0d3218,9,
-0x0d3240,3,
-0x0d3250,6,
-0x0d3280,1,
-0x0d3288,6,
-0x0d32a4,1,
-0x0d32c0,1,
-0x0d32c8,6,
-0x0d32e4,1,
-0x0d3400,8,
-0x0d3424,2,
+0x0d319c,15,
+0x0d3200,9,
+0x0d3300,1,
+0x0d3308,6,
+0x0d3324,10,
+0x0d3380,1,
+0x0d3388,6,
+0x0d33a4,10,
+0x0d3400,6,
+0x0d3420,6,
 0x0d3500,5,
 0x0d3520,4,
 0x0d3540,5,
 0x0d3560,4,
 0x0d3800,24,
-0x0d3864,5,
+0x0d3864,6,
 0x0d3880,8,
-0x0d3900,13,
-0x0d3980,4,
-0x0d39a0,6,
-0x0d39c0,6,
-0x0d39dc,1,
-0x0d3a00,6,
-0x0d3a1c,1,
-0x0d3a40,1,
-0x0d3a60,1,
-0x0d3a68,23,
+0x0d3900,24,
+0x0d3964,6,
+0x0d3980,8,
+0x0d3a00,17,
+0x0d3a48,6,
+0x0d3a80,17,
 0x0d3ac8,6,
-0x0d3b00,17,
-0x0d3b48,6,
-0x0d3b80,12,
+0x0d3b00,6,
+0x0d3b20,6,
+0x0d3b40,3,
+0x0d3b80,6,
+0x0d3ba0,6,
+0x0d3bc0,3,
 0x0d3c00,6,
 0x0d3c20,6,
-0x0d3c40,6,
-0x0d3c60,3,
-0x0d3d00,6,
-0x0d3d20,6,
-0x0d3d40,3,
-0x0d3d80,6,
-0x0d3da0,6,
-0x0d3dc0,3,
+0x0d3c40,3,
+0x0d3c80,6,
+0x0d3ca0,6,
+0x0d3cc0,3,
+0x0d3d10,2,
+0x0d3d1c,1,
+0x0d3d50,2,
+0x0d3d5c,1,
+0x0d3d80,1,
+0x0d3da0,1,
+0x0d3da8,7,
+0x0d3de0,1,
+0x0d3de8,19,
+0x0d3e40,6,
+0x0d3e60,6,
+0x0d3e80,6,
+0x0d3ea0,6,
+0x0d3ec0,7,
+0x0d3ee0,7,
+0x0d3f00,12,
+0x0d3f40,3,
+0x0d3f50,8,
 0x0d7400,5,
 0x0d7438,1,
 0x0d7444,1,
-0x0d7450,2,
+0x0d7450,4,
 0x0d7540,6,
 0x0d7600,1,
 0x0d8000,6,
 0x0d89f4,3,
 0x0d9000,4,
 0x0d9020,4,
-0x0d9040,3,
-0x0d9050,3,
-0x0d9080,2,
-0x0d90b0,3,
-0x0d912c,1,
-0x0d9140,6,
-0x0d9200,20,
-0x0d925c,30,
-0x0d9300,24,
+0x0d9040,11,
+0x0d9070,3,
+0x0d9080,4,
+0x0d90b0,22,
+0x0d9110,2,
+0x0d9120,22,
+0x0d9180,1,
+0x0d91a0,6,
+0x0d9200,42,
+0x0d92c0,1,
+0x0d92c8,3,
+0x0d9300,25,
+0x0d936c,4,
 0x0d9380,2,
 0x0d93a0,1,
 0x0d93c0,11,
 0x0d9480,6,
 0x0d9500,6,
 0x0d9520,6,
+0x0d9540,3,
+0x0d9550,7,
+0x0d9570,4,
 0x0d9800,410,
 0x0da000,4,
 0x0da020,4,
-0x0da040,3,
-0x0da050,3,
-0x0da080,2,
-0x0da0b0,3,
-0x0da12c,1,
-0x0da140,6,
-0x0da200,20,
-0x0da25c,30,
-0x0da300,24,
+0x0da040,11,
+0x0da070,3,
+0x0da080,4,
+0x0da0b0,22,
+0x0da110,2,
+0x0da120,22,
+0x0da180,1,
+0x0da1a0,6,
+0x0da200,42,
+0x0da2c0,1,
+0x0da2c8,3,
+0x0da300,25,
+0x0da36c,4,
 0x0da380,2,
 0x0da3a0,1,
 0x0da3c0,11,
 0x0da480,6,
 0x0da500,6,
 0x0da520,6,
+0x0da540,3,
+0x0da550,7,
+0x0da570,4,
 0x0da800,410,
 0x0df800,5,
 0x0df818,1,
 0x0f6d10,10,
 0x0f6d3c,3,
 0x0f8000,9,
-0x0f8048,6,
 0x0f8100,6,
 0x0f8120,6,
 0x0f8140,3,
-0x0f8180,6,
+0x0f8180,10,
 0x0f81c0,3,
 0x0f81d0,2,
 0x0f8200,9,
-0x0f8248,6,
 0x0f8300,6,
 0x0f8320,6,
 0x0f8340,3,
-0x0f8380,6,
+0x0f8380,10,
 0x0f83c0,3,
 0x0f83d0,2,
 0x0f8400,9,
-0x0f8448,6,
 0x0f8500,6,
 0x0f8520,6,
 0x0f8540,3,
-0x0f8580,6,
+0x0f8580,10,
 0x0f85c0,3,
 0x0f85d0,2,
 0x0f8600,9,
-0x0f8648,6,
 0x0f8700,6,
 0x0f8720,6,
 0x0f8740,3,
-0x0f8780,6,
+0x0f8780,10,
 0x0f87c0,3,
 0x0f87d0,2,
 0x0f8800,9,
-0x0f8848,6,
 0x0f8900,6,
 0x0f8920,6,
 0x0f8940,3,
-0x0f8980,6,
+0x0f8980,10,
 0x0f89c0,3,
 0x0f89d0,2,
 0x0f8a00,9,
-0x0f8a48,6,
 0x0f8b00,6,
 0x0f8b20,6,
 0x0f8b40,3,
-0x0f8b80,6,
+0x0f8b80,10,
 0x0f8bc0,3,
 0x0f8bd0,2,
 0x0f8c00,9,
-0x0f8c48,6,
 0x0f8d00,6,
 0x0f8d20,6,
 0x0f8d40,3,
-0x0f8d80,6,
+0x0f8d80,10,
 0x0f8dc0,3,
 0x0f8dd0,2,
 0x0f8e00,9,
-0x0f8e48,6,
 0x0f8f00,6,
 0x0f8f20,6,
 0x0f8f40,3,
-0x0f8f80,6,
+0x0f8f80,10,
 0x0f8fc0,3,
 0x0f8fd0,2,
 0x0f9000,9,
-0x0f9048,6,
 0x0f9100,6,
 0x0f9120,6,
 0x0f9140,3,
-0x0f9180,6,
+0x0f9180,10,
 0x0f91c0,3,
 0x0f91d0,2,
 0x0f9200,9,
-0x0f9248,6,
 0x0f9300,6,
 0x0f9320,6,
 0x0f9340,3,
-0x0f9380,6,
+0x0f9380,10,
 0x0f93c0,3,
 0x0f93d0,2,
 0x0f9400,9,
-0x0f9448,6,
 0x0f9500,6,
 0x0f9520,6,
 0x0f9540,3,
-0x0f9580,6,
+0x0f9580,10,
 0x0f95c0,3,
 0x0f95d0,2,
 0x0f9600,9,
-0x0f9648,6,
 0x0f9700,6,
 0x0f9720,6,
 0x0f9740,3,
-0x0f9780,6,
+0x0f9780,10,
 0x0f97c0,3,
 0x0f97d0,2,
 0x0f9800,9,
-0x0f9848,6,
 0x0f9900,6,
 0x0f9920,6,
 0x0f9940,3,
-0x0f9980,6,
+0x0f9980,10,
 0x0f99c0,3,
 0x0f99d0,2,
 0x0f9a00,9,
-0x0f9a48,6,
 0x0f9b00,6,
 0x0f9b20,6,
 0x0f9b40,3,
-0x0f9b80,6,
+0x0f9b80,10,
 0x0f9bc0,3,
 0x0f9bd0,2,
 0x0f9c00,9,
-0x0f9c48,6,
 0x0f9d00,6,
 0x0f9d20,6,
 0x0f9d40,3,
-0x0f9d80,6,
+0x0f9d80,10,
 0x0f9dc0,3,
 0x0f9dd0,2,
 0x0f9e00,9,
-0x0f9e48,6,
 0x0f9f00,6,
 0x0f9f20,6,
 0x0f9f40,3,
-0x0f9f80,6,
+0x0f9f80,10,
 0x0f9fc0,3,
 0x0f9fd0,2,
 0x0fa000,9,
-0x0fa048,6,
-0x0fa100,6,
+0x0fa080,10,
+0x0fa0c0,1,
+0x0fa0e0,2,
+0x0fa0ec,1,
+0x0fa0f4,9,
 0x0fa120,6,
 0x0fa140,3,
-0x0fa180,6,
+0x0fa180,10,
 0x0fa1c0,3,
 0x0fa1d0,2,
+0x0fa1e8,2,
 0x0fa200,9,
-0x0fa248,6,
-0x0fa300,6,
+0x0fa280,10,
+0x0fa2c0,1,
+0x0fa2e0,2,
+0x0fa2ec,1,
+0x0fa2f4,9,
 0x0fa320,6,
 0x0fa340,3,
-0x0fa380,6,
+0x0fa380,8,
 0x0fa3c0,3,
 0x0fa3d0,2,
 0x0fa400,9,
-0x0fa448,6,
 0x0fa480,10,
 0x0fa4c0,1,
 0x0fa4e0,2,
 0x0fa4f4,9,
 0x0fa520,6,
 0x0fa540,3,
-0x0fa580,4,
+0x0fa580,8,
 0x0fa5c0,3,
-0x0fa5d0,6,
+0x0fa5d0,2,
 0x0fa600,9,
-0x0fa648,6,
 0x0fa680,10,
 0x0fa6c0,1,
 0x0fa6e0,2,
 0x0fa6f4,9,
 0x0fa720,6,
 0x0fa740,3,
-0x0fa780,4,
+0x0fa780,10,
 0x0fa7c0,3,
-0x0fa7d0,6,
+0x0fa7d0,2,
+0x0fa7e8,2,
 0x0fa800,9,
-0x0fa848,6,
 0x0fa880,10,
 0x0fa8c0,1,
 0x0fa8e0,2,
 0x0fa940,3,
 0x0fa980,6,
 0x0fa9c0,3,
-0x0fa9d0,2,
+0x0fa9d0,4,
 0x0faa00,9,
-0x0faa48,6,
 0x0faa80,10,
 0x0faac0,1,
 0x0faae0,2,
 0x0fab40,3,
 0x0fab80,6,
 0x0fabc0,3,
-0x0fabd0,2,
+0x0fabd0,4,
 0x0fac00,9,
-0x0fac48,6,
 0x0fac80,10,
 0x0facc0,1,
 0x0face0,2,
 0x0fadd0,2,
 0x0fade8,2,
 0x0fae00,9,
-0x0fae48,6,
 0x0fae80,10,
 0x0faec0,1,
 0x0faee0,2,
 0x0faef4,9,
 0x0faf20,6,
 0x0faf40,3,
-0x0faf80,8,
+0x0faf80,12,
 0x0fafc0,3,
 0x0fafd0,2,
 0x100000,1,
 0x17e240,6,
 0x17e260,6,
 0x17e280,3,
-0x1c0000,6,
-0x1c0028,6,
-0x1c0050,6,
-0x1c0078,6,
+0x1c0000,4,
+0x1c0028,4,
+0x1c0050,4,
+0x1c0078,4,
 0x1c00a0,3,
 0x1c01ac,1,
 0x1c01d8,4,
 0x1c02a0,6,
 0x1c02c0,6,
 0x1c02e0,6,
-0x1c0300,6,
-0x1c0320,6,
-0x1c0340,6,
-0x1c0360,6,
-0x1c0380,3,
-0x1c0400,8,
-0x1c0480,2,
-0x1c0800,64,
-0x1c0b00,1,
-0x1c0b10,68,
-0x1c0c28,1,
-0x1c0c30,1,
-0x1c0c38,1,
-0x1c0c40,2,
-0x1c0c50,2,
-0x1c0d00,8,
-0x1c0d80,1,
-0x1c0d98,11,
-0x1c1000,7,
-0x1c1020,7,
-0x1c1040,1,
-0x1c1200,1,
+0x1c0300,3,
+0x1c0400,6,
+0x1c0420,6,
+0x1c0440,6,
+0x1c0460,6,
+0x1c0480,6,
+0x1c04a0,6,
+0x1c04c0,6,
+0x1c04e0,6,
+0x1c0500,6,
+0x1c0520,3,
+0x1c0600,6,
+0x1c0620,2,
+0x1c0630,1,
+0x1c0a00,64,
+0x1c0d00,66,
+0x1c0e10,4,
+0x1c0e28,3,
+0x1c0e38,1,
+0x1c0e40,1,
+0x1c0e50,1,
+0x1c0f00,14,
+0x1c0f80,19,
+0x1c0fd0,4,
+0x1c1000,37,
 0x1c1240,2,
-0x1c1280,1,
-0x1c1288,3,
+0x1c1280,5,
 0x1c129c,2,
-0x1c12f0,68,
 0x1c1614,2,
 0x1c1620,2,
-0x1c1640,1,
-0x1c2000,34,
-0x1c2090,3,
-0x1c20a0,4,
-0x1c2100,33,
+0x1c2080,11,
+0x1c20b0,2,
+0x1c20c0,3,
+0x1c20d0,4,
+0x1c2180,1,
 0x1c21a0,1,
-0x1c21b0,2,
-0x1c2600,6,
+0x1c2200,3,
+0x1c2210,3,
+0x1c2220,3,
+0x1c2230,3,
+0x1c2240,3,
+0x1c2250,3,
+0x1c2260,3,
+0x1c2270,3,
+0x1c2280,68,
+0x1c2584,3,
+0x1c2594,3,
+0x1c25a4,3,
+0x1c25b4,3,
+0x1c25c4,3,
+0x1c25d4,3,
+0x1c25e4,3,
+0x1c25f4,9,
 0x1c261c,15,
 0x1c265c,15,
 0x1c269c,15,
 0x1c275c,15,
 0x1c279c,15,
 0x1c27dc,9,
+0x1c2e00,11,
+0x1c2e30,1,
+0x1c2e40,5,
+0x1c2e60,5,
+0x1c2f00,5,
+0x1c2f20,1,
+0x1c2f30,15,
+0x1c2f90,2,
 0x1c3004,4,
 0x1c3018,2,
-0x1c3040,9,
-0x1c3080,9,
-0x1c30c0,9,
-0x1c3100,9,
-0x1c3140,9,
+0x1c3028,3,
+0x1c3040,10,
+0x1c3080,10,
+0x1c30c0,10,
+0x1c3100,10,
+0x1c3140,10,
+0x1c3184,5,
+0x1c319c,2,
 0x1c3204,4,
 0x1c3218,2,
-0x1c3240,9,
-0x1c3280,9,
-0x1c32c0,9,
-0x1c3300,9,
-0x1c3340,9,
+0x1c3228,3,
+0x1c3240,10,
+0x1c3280,10,
+0x1c32c0,10,
+0x1c3300,10,
+0x1c3340,10,
+0x1c3384,5,
+0x1c339c,2,
 0x1c3404,4,
 0x1c3418,2,
-0x1c3440,9,
-0x1c3480,9,
-0x1c34c0,9,
-0x1c3500,9,
-0x1c3540,9,
+0x1c3428,3,
+0x1c3440,10,
+0x1c3480,10,
+0x1c34c0,10,
+0x1c3500,10,
+0x1c3540,10,
+0x1c3584,5,
+0x1c359c,2,
 0x1c3604,4,
 0x1c3618,2,
-0x1c3640,9,
-0x1c3680,9,
-0x1c36c0,9,
-0x1c3700,9,
-0x1c3740,9,
+0x1c3628,3,
+0x1c3640,10,
+0x1c3680,10,
+0x1c36c0,10,
+0x1c3700,10,
+0x1c3740,10,
+0x1c3784,5,
+0x1c379c,2,
 0x1c3804,4,
 0x1c3818,2,
-0x1c3840,9,
-0x1c3880,9,
-0x1c38c0,9,
-0x1c3900,9,
-0x1c3940,9,
+0x1c3828,3,
+0x1c3840,10,
+0x1c3880,10,
+0x1c38c0,10,
+0x1c3900,10,
+0x1c3940,10,
+0x1c3984,5,
+0x1c399c,2,
 0x1c3a04,4,
 0x1c3a18,2,
-0x1c3a40,9,
-0x1c3a80,9,
-0x1c3ac0,9,
-0x1c3b00,9,
-0x1c3b40,9,
+0x1c3a28,3,
+0x1c3a40,10,
+0x1c3a80,10,
+0x1c3ac0,10,
+0x1c3b00,10,
+0x1c3b40,10,
+0x1c3b84,5,
+0x1c3b9c,2,
 0x1c3c04,4,
 0x1c3c18,2,
-0x1c3c40,9,
-0x1c3c80,9,
-0x1c3cc0,9,
-0x1c3d00,9,
-0x1c3d40,9,
+0x1c3c28,3,
+0x1c3c40,10,
+0x1c3c80,10,
+0x1c3cc0,10,
+0x1c3d00,10,
+0x1c3d40,10,
+0x1c3d84,5,
+0x1c3d9c,2,
 0x1c3e04,4,
 0x1c3e18,2,
-0x1c3e40,9,
-0x1c3e80,9,
-0x1c3ec0,9,
-0x1c3f00,9,
-0x1c3f40,9,
+0x1c3e28,3,
+0x1c3e40,10,
+0x1c3e80,10,
+0x1c3ec0,10,
+0x1c3f00,10,
+0x1c3f40,10,
+0x1c3f84,5,
+0x1c3f9c,2,
+0x1c4000,4,
+0x1c4028,4,
+0x1c4050,4,
+0x1c4078,4,
+0x1c40a0,3,
+0x1c41ac,1,
+0x1c41d8,4,
+0x1c4200,6,
+0x1c4220,6,
+0x1c4240,6,
+0x1c4260,6,
+0x1c4280,6,
+0x1c42a0,6,
+0x1c42c0,6,
+0x1c42e0,6,
+0x1c4300,3,
+0x1c4400,6,
+0x1c4420,6,
+0x1c4440,6,
+0x1c4460,6,
+0x1c4480,6,
+0x1c44a0,6,
+0x1c44c0,6,
+0x1c44e0,6,
+0x1c4500,6,
+0x1c4520,3,
+0x1c4600,6,
+0x1c4620,2,
+0x1c4630,1,
+0x1c4a00,64,
+0x1c4d00,66,
+0x1c4e10,4,
+0x1c4e28,3,
+0x1c4e38,1,
+0x1c4e40,1,
+0x1c4e50,1,
+0x1c4f00,14,
+0x1c4f80,19,
+0x1c4fd0,4,
+0x1c5000,37,
+0x1c5240,2,
+0x1c5280,5,
+0x1c529c,2,
+0x1c5614,2,
+0x1c5620,2,
+0x1c6080,11,
+0x1c60b0,2,
+0x1c60c0,3,
+0x1c60d0,4,
+0x1c6180,1,
+0x1c61a0,1,
+0x1c6200,3,
+0x1c6210,3,
+0x1c6220,3,
+0x1c6230,3,
+0x1c6240,3,
+0x1c6250,3,
+0x1c6260,3,
+0x1c6270,3,
+0x1c6280,68,
+0x1c6584,3,
+0x1c6594,3,
+0x1c65a4,3,
+0x1c65b4,3,
+0x1c65c4,3,
+0x1c65d4,3,
+0x1c65e4,3,
+0x1c65f4,9,
+0x1c661c,15,
+0x1c665c,15,
+0x1c669c,15,
+0x1c66dc,15,
+0x1c671c,15,
+0x1c675c,15,
+0x1c679c,15,
+0x1c67dc,9,
+0x1c6e00,11,
+0x1c6e30,1,
+0x1c6e40,5,
+0x1c6e60,5,
+0x1c6f00,5,
+0x1c6f20,1,
+0x1c6f30,15,
+0x1c6f90,2,
+0x1c7004,4,
+0x1c7018,2,
+0x1c7028,3,
+0x1c7040,10,
+0x1c7080,10,
+0x1c70c0,10,
+0x1c7100,10,
+0x1c7140,10,
+0x1c7184,5,
+0x1c719c,2,
+0x1c7204,4,
+0x1c7218,2,
+0x1c7228,3,
+0x1c7240,10,
+0x1c7280,10,
+0x1c72c0,10,
+0x1c7300,10,
+0x1c7340,10,
+0x1c7384,5,
+0x1c739c,2,
+0x1c7404,4,
+0x1c7418,2,
+0x1c7428,3,
+0x1c7440,10,
+0x1c7480,10,
+0x1c74c0,10,
+0x1c7500,10,
+0x1c7540,10,
+0x1c7584,5,
+0x1c759c,2,
+0x1c7604,4,
+0x1c7618,2,
+0x1c7628,3,
+0x1c7640,10,
+0x1c7680,10,
+0x1c76c0,10,
+0x1c7700,10,
+0x1c7740,10,
+0x1c7784,5,
+0x1c779c,2,
+0x1c7804,4,
+0x1c7818,2,
+0x1c7828,3,
+0x1c7840,10,
+0x1c7880,10,
+0x1c78c0,10,
+0x1c7900,10,
+0x1c7940,10,
+0x1c7984,5,
+0x1c799c,2,
+0x1c7a04,4,
+0x1c7a18,2,
+0x1c7a28,3,
+0x1c7a40,10,
+0x1c7a80,10,
+0x1c7ac0,10,
+0x1c7b00,10,
+0x1c7b40,10,
+0x1c7b84,5,
+0x1c7b9c,2,
+0x1c7c04,4,
+0x1c7c18,2,
+0x1c7c28,3,
+0x1c7c40,10,
+0x1c7c80,10,
+0x1c7cc0,10,
+0x1c7d00,10,
+0x1c7d40,10,
+0x1c7d84,5,
+0x1c7d9c,2,
+0x1c7e04,4,
+0x1c7e18,2,
+0x1c7e28,3,
+0x1c7e40,10,
+0x1c7e80,10,
+0x1c7ec0,10,
+0x1c7f00,10,
+0x1c7f40,10,
+0x1c7f84,5,
+0x1c7f9c,2,
 0x1c8000,34,
 0x1c8100,184,
-0x1c8440,16,
-0x1c8540,33,
+0x1c8460,14,
+0x1c85c0,1,
 0x1c85e0,1,
-0x1c85f0,2,
-0x1c8640,34,
-0x1c86d0,3,
-0x1c86e0,4,
-0x1c8740,20,
+0x1c86c0,11,
+0x1c86f0,2,
+0x1c8700,3,
+0x1c8710,4,
+0x1c8740,9,
+0x1c8768,5,
 0x1c8810,36,
 0x1c88a4,2,
 0x1c8920,5,
-0x1c9100,5,
-0x1c9124,12,
-0x1c9164,12,
-0x1c91a4,12,
-0x1c91e4,12,
-0x1c9224,12,
-0x1c9264,12,
-0x1c92a4,12,
-0x1c92e4,7,
+0x1c9100,7,
+0x1c9120,7,
+0x1c9140,7,
+0x1c9160,7,
+0x1c9180,7,
 0x1c9304,1,
 0x1c9324,10,
 0x1c9384,1,
 0x1c94a4,10,
 0x1c9504,1,
 0x1c9524,10,
-0x1c9584,1,
-0x1c95a4,10,
-0x1c9604,1,
-0x1c9624,10,
-0x1c9684,1,
-0x1c96a4,10,
 0x1c9800,2,
 0x1c9828,2,
 0x1c9850,2,
 0x1c9a80,3,
 0x1c9c04,1,
 0x1c9c0c,4,
-0x1c9c20,144,
+0x1c9c20,10,
+0x1c9c60,10,
+0x1c9ca0,10,
+0x1c9ce0,10,
+0x1c9d40,10,
+0x1c9d80,8,
+0x1c9dc0,10,
+0x1c9e00,5,
+0x1c9e20,10,
 0x1ca000,34,
 0x1ca100,184,
-0x1ca440,16,
-0x1ca540,33,
+0x1ca460,14,
+0x1ca5c0,1,
 0x1ca5e0,1,
-0x1ca5f0,2,
-0x1ca640,34,
-0x1ca6d0,3,
-0x1ca6e0,4,
-0x1ca740,20,
+0x1ca6c0,11,
+0x1ca6f0,2,
+0x1ca700,3,
+0x1ca710,4,
+0x1ca740,9,
+0x1ca768,5,
 0x1ca810,36,
 0x1ca8a4,2,
 0x1ca920,5,
-0x1cb100,5,
-0x1cb124,12,
-0x1cb164,12,
-0x1cb1a4,12,
-0x1cb1e4,12,
-0x1cb224,12,
-0x1cb264,12,
-0x1cb2a4,12,
-0x1cb2e4,7,
+0x1cb100,7,
+0x1cb120,7,
+0x1cb140,7,
+0x1cb160,7,
+0x1cb180,7,
 0x1cb304,1,
 0x1cb324,10,
 0x1cb384,1,
 0x1cb4a4,10,
 0x1cb504,1,
 0x1cb524,10,
-0x1cb584,1,
-0x1cb5a4,10,
-0x1cb604,1,
-0x1cb624,10,
-0x1cb684,1,
-0x1cb6a4,10,
 0x1cb800,2,
 0x1cb828,2,
 0x1cb850,2,
 0x1cba80,3,
 0x1cbc04,1,
 0x1cbc0c,4,
-0x1cbc20,144,
-0x1d8000,2,
-0x1d8028,2,
-0x1d8050,2,
-0x1d8078,2,
-0x1d80a0,2,
+0x1cbc20,10,
+0x1cbc60,10,
+0x1cbca0,10,
+0x1cbce0,10,
+0x1cbd40,10,
+0x1cbd80,8,
+0x1cbdc0,10,
+0x1cbe00,5,
+0x1cbe20,10,
+0x1cc000,34,
+0x1cc100,184,
+0x1cc460,14,
+0x1cc5c0,1,
+0x1cc5e0,1,
+0x1cc6c0,11,
+0x1cc6f0,2,
+0x1cc700,3,
+0x1cc710,4,
+0x1cc740,9,
+0x1cc768,5,
+0x1cc810,36,
+0x1cc8a4,2,
+0x1cc920,5,
+0x1cd100,7,
+0x1cd120,7,
+0x1cd140,7,
+0x1cd160,7,
+0x1cd180,7,
+0x1cd304,1,
+0x1cd324,10,
+0x1cd384,1,
+0x1cd3a4,10,
+0x1cd404,1,
+0x1cd424,10,
+0x1cd484,1,
+0x1cd4a4,10,
+0x1cd504,1,
+0x1cd524,10,
+0x1cd800,2,
+0x1cd828,2,
+0x1cd850,2,
+0x1cd878,2,
+0x1cd8a0,5,
+0x1cd9ac,1,
+0x1cd9d8,4,
+0x1cda00,6,
+0x1cda20,6,
+0x1cda40,6,
+0x1cda60,6,
+0x1cda80,3,
+0x1cdc04,1,
+0x1cdc0c,4,
+0x1cdc20,10,
+0x1cdc60,10,
+0x1cdca0,10,
+0x1cdce0,10,
+0x1cdd40,10,
+0x1cdd80,8,
+0x1cddc0,10,
+0x1cde00,5,
+0x1cde20,10,
+0x1ce000,34,
+0x1ce100,184,
+0x1ce460,14,
+0x1ce5c0,1,
+0x1ce5e0,1,
+0x1ce6c0,11,
+0x1ce6f0,2,
+0x1ce700,3,
+0x1ce710,4,
+0x1ce740,9,
+0x1ce768,5,
+0x1ce810,36,
+0x1ce8a4,2,
+0x1ce920,5,
+0x1cf100,7,
+0x1cf120,7,
+0x1cf140,7,
+0x1cf160,7,
+0x1cf180,7,
+0x1cf304,1,
+0x1cf324,10,
+0x1cf384,1,
+0x1cf3a4,10,
+0x1cf404,1,
+0x1cf424,10,
+0x1cf484,1,
+0x1cf4a4,10,
+0x1cf504,1,
+0x1cf524,10,
+0x1cf800,2,
+0x1cf828,2,
+0x1cf850,2,
+0x1cf878,2,
+0x1cf8a0,5,
+0x1cf9ac,1,
+0x1cf9d8,4,
+0x1cfa00,6,
+0x1cfa20,6,
+0x1cfa40,6,
+0x1cfa60,6,
+0x1cfa80,3,
+0x1cfc04,1,
+0x1cfc0c,4,
+0x1cfc20,10,
+0x1cfc60,10,
+0x1cfca0,10,
+0x1cfce0,10,
+0x1cfd40,10,
+0x1cfd80,8,
+0x1cfdc0,10,
+0x1cfe00,5,
+0x1cfe20,10,
+0x1d8000,1,
+0x1d8028,1,
+0x1d8050,1,
+0x1d8078,1,
+0x1d80a0,1,
 0x1d81ac,1,
 0x1d81d8,4,
 0x1d8200,6,
 0x1d8220,6,
-0x1d8240,6,
-0x1d8260,6,
-0x1d8280,3,
-0x1d8500,2,
-0x1d8510,2,
-0x1d8520,2,
-0x1d8530,2,
-0x1d8540,2,
-0x1d8550,2,
-0x1d8560,2,
-0x1d8570,2,
-0x1d8580,1,
-0x1d8588,6,
-0x1d8600,16,
-0x1d8700,20,
-0x1d8760,2,
-0x1d8770,10,
-0x1d8800,10,
-0x1d8900,1,
-0x1d8908,1,
-0x1d8910,3,
-0x1d9000,11,
-0x1d9030,3,
-0x1d9058,2,
-0x1d907c,2,
-0x1d90a0,2,
-0x1d90c4,2,
-0x1d90e8,2,
-0x1d910c,2,
-0x1d9130,2,
-0x1d9154,2,
-0x1d9178,2,
-0x1d919c,2,
-0x1d91c0,2,
-0x1d91e4,2,
-0x1d9208,2,
-0x1d922c,2,
-0x1d9250,2,
-0x1d9300,8,
+0x1d8240,3,
+0x1d8404,1,
+0x1d840c,5,
+0x1d8424,1,
+0x1d842c,5,
+0x1d8444,1,
+0x1d844c,5,
+0x1d8464,1,
+0x1d846c,8,
+0x1d8504,1,
+0x1d850c,5,
+0x1d8524,1,
+0x1d852c,5,
+0x1d8544,1,
+0x1d854c,5,
+0x1d8564,1,
+0x1d856c,8,
+0x1d8604,1,
+0x1d860c,5,
+0x1d8624,1,
+0x1d862c,5,
+0x1d8644,1,
+0x1d864c,5,
+0x1d8664,1,
+0x1d866c,8,
+0x1d8704,1,
+0x1d870c,5,
+0x1d8724,1,
+0x1d872c,5,
+0x1d8744,1,
+0x1d874c,5,
+0x1d8764,1,
+0x1d876c,8,
+0x1d8804,1,
+0x1d880c,5,
+0x1d8824,1,
+0x1d882c,5,
+0x1d8844,1,
+0x1d884c,5,
+0x1d8864,1,
+0x1d886c,8,
+0x1d8904,1,
+0x1d890c,5,
+0x1d8924,1,
+0x1d892c,5,
+0x1d8944,1,
+0x1d894c,5,
+0x1d8964,1,
+0x1d896c,8,
+0x1d8a04,1,
+0x1d8a0c,5,
+0x1d8a24,1,
+0x1d8a2c,5,
+0x1d8a44,1,
+0x1d8a4c,5,
+0x1d8a64,1,
+0x1d8a6c,8,
+0x1d8b04,1,
+0x1d8b0c,5,
+0x1d8b24,1,
+0x1d8b2c,5,
+0x1d8b44,1,
+0x1d8b4c,5,
+0x1d8b64,1,
+0x1d8b6c,8,
+0x1d8c00,2,
+0x1d8c10,2,
+0x1d8c20,2,
+0x1d8c30,2,
+0x1d8c40,2,
+0x1d8c50,2,
+0x1d8c60,2,
+0x1d8c70,2,
+0x1d8c80,1,
+0x1d8c88,6,
+0x1d8d00,16,
 0x1dc004,1,
 0x1dc020,1,
 0x1dc044,15,
 0x1ec260,6,
 0x1ec280,3,
 0x1ec600,2,
-0x200000,5,
-0x200020,4,
-0x200034,17,
-0x200080,1,
+0x200000,4,
+0x200014,1,
+0x200020,3,
+0x200030,3,
+0x200040,8,
+0x20007c,2,
 0x2000a0,6,
-0x200100,5,
-0x200120,4,
-0x200134,17,
-0x200180,1,
+0x2000c0,6,
+0x2000e0,6,
+0x200100,4,
+0x200114,1,
+0x200120,3,
+0x200130,3,
+0x200140,8,
+0x20017c,2,
 0x2001a0,6,
-0x200200,5,
-0x200220,4,
-0x200234,17,
-0x200280,1,
+0x2001c0,6,
+0x2001e0,6,
+0x200200,4,
+0x200214,1,
+0x200220,3,
+0x200230,3,
+0x200240,8,
+0x20027c,2,
 0x2002a0,6,
-0x200300,5,
-0x200320,4,
-0x200334,17,
-0x200380,1,
+0x2002c0,6,
+0x2002e0,6,
+0x200300,4,
+0x200314,1,
+0x200320,3,
+0x200330,3,
+0x200340,8,
+0x20037c,2,
 0x2003a0,6,
+0x2003c0,6,
+0x2003e0,6,
 0x200400,6,
 0x200440,6,
 0x200480,3,
 0x2004c0,3,
-0x200500,6,
-0x20051c,7,
-0x200540,1,
+0x200500,2,
+0x20050c,4,
+0x200520,2,
+0x20052c,4,
+0x200540,2,
 0x200c00,13,
 0x200c40,12,
 0x200c80,13,
 0x200cc0,12,
-0x200d00,6,
-0x200d20,6,
+0x200d00,14,
+0x200d40,2,
 0x200d80,14,
 0x200dc0,2,
-0x200e40,11,
+0x200e00,11,
+0x200e40,6,
+0x200e60,6,
 0x200e80,6,
 0x200ea0,6,
 0x201000,2,
-0x201010,5,
+0x201014,4,
 0x201040,3,
 0x201050,3,
-0x201060,32,
-0x201100,8,
-0x201140,8,
+0x201080,42,
+0x201140,10,
 0x201180,3,
 0x201190,2,
-0x20119c,9,
-0x201218,9,
-0x201240,3,
-0x201250,6,
-0x201280,1,
-0x201288,6,
-0x2012a4,1,
-0x2012c0,1,
-0x2012c8,6,
-0x2012e4,1,
-0x201400,8,
-0x201424,2,
+0x20119c,15,
+0x201200,9,
+0x201300,1,
+0x201308,6,
+0x201324,10,
+0x201380,1,
+0x201388,6,
+0x2013a4,10,
+0x201400,6,
+0x201420,6,
 0x201500,5,
 0x201520,4,
 0x201540,5,
 0x201560,4,
 0x201800,24,
-0x201864,5,
+0x201864,6,
 0x201880,8,
-0x201900,13,
-0x201980,4,
-0x2019a0,6,
-0x2019c0,6,
-0x2019dc,1,
-0x201a00,6,
-0x201a1c,1,
-0x201a40,1,
-0x201a60,1,
-0x201a68,23,
+0x201900,24,
+0x201964,6,
+0x201980,8,
+0x201a00,17,
+0x201a48,6,
+0x201a80,17,
 0x201ac8,6,
-0x201b00,17,
-0x201b48,6,
-0x201b80,12,
+0x201b00,6,
+0x201b20,6,
+0x201b40,3,
+0x201b80,6,
+0x201ba0,6,
+0x201bc0,3,
 0x201c00,6,
 0x201c20,6,
-0x201c40,6,
-0x201c60,3,
-0x201d00,6,
-0x201d20,6,
-0x201d40,3,
-0x201d80,6,
-0x201da0,6,
-0x201dc0,3,
-0x202000,5,
-0x202020,4,
-0x202034,17,
-0x202080,1,
+0x201c40,3,
+0x201c80,6,
+0x201ca0,6,
+0x201cc0,3,
+0x201d10,2,
+0x201d1c,1,
+0x201d50,2,
+0x201d5c,1,
+0x201d80,1,
+0x201da0,1,
+0x201da8,7,
+0x201de0,1,
+0x201de8,19,
+0x201e40,6,
+0x201e60,6,
+0x201e80,6,
+0x201ea0,6,
+0x201ec0,7,
+0x201ee0,7,
+0x201f00,12,
+0x201f40,3,
+0x201f50,8,
+0x202000,4,
+0x202014,1,
+0x202020,3,
+0x202030,3,
+0x202040,8,
+0x20207c,2,
 0x2020a0,6,
-0x202100,5,
-0x202120,4,
-0x202134,17,
-0x202180,1,
+0x2020c0,6,
+0x2020e0,6,
+0x202100,4,
+0x202114,1,
+0x202120,3,
+0x202130,3,
+0x202140,8,
+0x20217c,2,
 0x2021a0,6,
-0x202200,5,
-0x202220,4,
-0x202234,17,
-0x202280,1,
+0x2021c0,6,
+0x2021e0,6,
+0x202200,4,
+0x202214,1,
+0x202220,3,
+0x202230,3,
+0x202240,8,
+0x20227c,2,
 0x2022a0,6,
-0x202300,5,
-0x202320,4,
-0x202334,17,
-0x202380,1,
+0x2022c0,6,
+0x2022e0,6,
+0x202300,4,
+0x202314,1,
+0x202320,3,
+0x202330,3,
+0x202340,8,
+0x20237c,2,
 0x2023a0,6,
+0x2023c0,6,
+0x2023e0,6,
 0x202400,6,
 0x202440,6,
 0x202480,3,
 0x2024c0,3,
-0x202500,6,
-0x20251c,7,
-0x202540,1,
+0x202500,2,
+0x20250c,4,
+0x202520,2,
+0x20252c,4,
+0x202540,2,
 0x202c00,13,
 0x202c40,12,
 0x202c80,13,
 0x202cc0,12,
-0x202d00,6,
-0x202d20,6,
+0x202d00,14,
+0x202d40,2,
 0x202d80,14,
 0x202dc0,2,
-0x202e40,11,
+0x202e00,11,
+0x202e40,6,
+0x202e60,6,
 0x202e80,6,
 0x202ea0,6,
 0x203000,2,
-0x203010,5,
+0x203014,4,
 0x203040,3,
 0x203050,3,
-0x203060,32,
-0x203100,8,
-0x203140,8,
+0x203080,42,
+0x203140,10,
 0x203180,3,
 0x203190,2,
-0x20319c,9,
-0x203218,9,
-0x203240,3,
-0x203250,6,
-0x203280,1,
-0x203288,6,
-0x2032a4,1,
-0x2032c0,1,
-0x2032c8,6,
-0x2032e4,1,
-0x203400,8,
-0x203424,2,
+0x20319c,15,
+0x203200,9,
+0x203300,1,
+0x203308,6,
+0x203324,10,
+0x203380,1,
+0x203388,6,
+0x2033a4,10,
+0x203400,6,
+0x203420,6,
 0x203500,5,
 0x203520,4,
 0x203540,5,
 0x203560,4,
 0x203800,24,
-0x203864,5,
+0x203864,6,
 0x203880,8,
-0x203900,13,
-0x203980,4,
-0x2039a0,6,
-0x2039c0,6,
-0x2039dc,1,
-0x203a00,6,
-0x203a1c,1,
-0x203a40,1,
-0x203a60,1,
-0x203a68,23,
+0x203900,24,
+0x203964,6,
+0x203980,8,
+0x203a00,17,
+0x203a48,6,
+0x203a80,17,
 0x203ac8,6,
-0x203b00,17,
-0x203b48,6,
-0x203b80,12,
+0x203b00,6,
+0x203b20,6,
+0x203b40,3,
+0x203b80,6,
+0x203ba0,6,
+0x203bc0,3,
 0x203c00,6,
 0x203c20,6,
-0x203c40,6,
-0x203c60,3,
-0x203d00,6,
-0x203d20,6,
-0x203d40,3,
-0x203d80,6,
-0x203da0,6,
-0x203dc0,3,
+0x203c40,3,
+0x203c80,6,
+0x203ca0,6,
+0x203cc0,3,
+0x203d10,2,
+0x203d1c,1,
+0x203d50,2,
+0x203d5c,1,
+0x203d80,1,
+0x203da0,1,
+0x203da8,7,
+0x203de0,1,
+0x203de8,19,
+0x203e40,6,
+0x203e60,6,
+0x203e80,6,
+0x203ea0,6,
+0x203ec0,7,
+0x203ee0,7,
+0x203f00,12,
+0x203f40,3,
+0x203f50,8,
 0x204000,29,
 0x204078,4,
 0x204090,2,
 0x205eac,1,
 0x205eb4,3,
 0x206000,14,
-0x206070,3,
+0x206040,6,
+0x206060,6,
 0x206080,6,
+0x2060a0,3,
 0x206100,9,
 0x206204,1,
 0x20620c,6,
 0x206c94,8,
 0x206cb8,9,
 0x206ce0,4,
-0x207000,6,
-0x207020,3,
-0x207040,7,
-0x207060,6,
-0x207100,5,
-0x207138,1,
-0x207144,1,
-0x207150,2,
+0x207000,1,
+0x207028,1,
+0x207050,1,
+0x207078,1,
+0x2070a0,4,
+0x2071ac,1,
+0x2071d8,4,
+0x207200,6,
+0x207220,6,
+0x207240,3,
+0x207400,5,
+0x207438,1,
+0x207444,1,
+0x207450,4,
+0x207500,7,
+0x207520,6,
+0x207540,6,
+0x207560,3,
+0x207570,1,
 0x208000,6,
 0x208020,3,
-0x208030,1,
-0x208038,7,
+0x208030,3,
+0x208050,1,
 0x208100,6,
 0x208120,10,
 0x208150,10,
 0x2089f4,3,
 0x209000,4,
 0x209020,4,
-0x209040,3,
-0x209050,3,
-0x209080,2,
-0x2090b0,3,
-0x20912c,1,
-0x209140,6,
-0x209200,20,
-0x20925c,30,
-0x209300,24,
+0x209040,11,
+0x209070,3,
+0x209080,4,
+0x2090b0,22,
+0x209110,2,
+0x209120,22,
+0x209180,1,
+0x2091a0,6,
+0x209200,42,
+0x2092c0,1,
+0x2092c8,3,
+0x209300,25,
+0x20936c,4,
 0x209380,2,
 0x2093a0,1,
 0x2093c0,11,
 0x209480,6,
 0x209500,6,
 0x209520,6,
+0x209540,3,
+0x209550,7,
+0x209570,4,
 0x209800,410,
 0x20a000,4,
 0x20a020,4,
-0x20a040,3,
-0x20a050,3,
-0x20a080,2,
-0x20a0b0,3,
-0x20a12c,1,
-0x20a140,6,
-0x20a200,20,
-0x20a25c,30,
-0x20a300,24,
+0x20a040,11,
+0x20a070,3,
+0x20a080,4,
+0x20a0b0,22,
+0x20a110,2,
+0x20a120,22,
+0x20a180,1,
+0x20a1a0,6,
+0x20a200,42,
+0x20a2c0,1,
+0x20a2c8,3,
+0x20a300,25,
+0x20a36c,4,
 0x20a380,2,
 0x20a3a0,1,
 0x20a3c0,11,
 0x20a480,6,
 0x20a500,6,
 0x20a520,6,
+0x20a540,3,
+0x20a550,7,
+0x20a570,4,
 0x20a800,410,
 0x20b000,4,
 0x20b020,4,
-0x20b040,3,
-0x20b050,3,
-0x20b080,2,
-0x20b0b0,3,
-0x20b12c,1,
-0x20b140,6,
-0x20b200,20,
-0x20b25c,30,
-0x20b300,24,
+0x20b040,11,
+0x20b070,3,
+0x20b080,4,
+0x20b0b0,22,
+0x20b110,2,
+0x20b120,22,
+0x20b180,1,
+0x20b1a0,6,
+0x20b200,42,
+0x20b2c0,1,
+0x20b2c8,3,
+0x20b300,25,
+0x20b36c,4,
 0x20b380,2,
 0x20b3a0,1,
 0x20b3c0,11,
 0x20b480,6,
 0x20b500,6,
 0x20b520,6,
+0x20b540,3,
+0x20b550,7,
+0x20b570,4,
 0x20b800,410,
 0x20c000,4,
 0x20c020,4,
-0x20c040,3,
-0x20c050,3,
-0x20c080,2,
-0x20c0b0,3,
-0x20c12c,1,
-0x20c140,6,
-0x20c200,20,
-0x20c25c,30,
-0x20c300,24,
+0x20c040,11,
+0x20c070,3,
+0x20c080,4,
+0x20c0b0,22,
+0x20c110,2,
+0x20c120,22,
+0x20c180,1,
+0x20c1a0,6,
+0x20c200,42,
+0x20c2c0,1,
+0x20c2c8,3,
+0x20c300,25,
+0x20c36c,4,
 0x20c380,2,
 0x20c3a0,1,
 0x20c3c0,11,
 0x20c480,6,
 0x20c500,6,
 0x20c520,6,
+0x20c540,3,
+0x20c550,7,
+0x20c570,4,
 0x20c800,410,
 0x20f800,5,
 0x20f818,1,
 0x20fba4,1,
 0x20fbac,2,
 0x214000,3,
-0x214018,3,
-0x214100,25,
+0x214018,4,
+0x214100,56,
+0x2141f0,1,
 0x214400,3,
-0x214418,3,
-0x214500,25,
-0x214800,1,
+0x214418,4,
+0x214500,56,
+0x2145f0,1,
+0x214800,5,
+0x214820,3,
 0x215000,3,
-0x215018,3,
-0x215100,25,
+0x215018,4,
+0x215100,56,
+0x2151f0,1,
 0x215400,3,
-0x215418,3,
-0x215500,25,
-0x215800,1,
+0x215418,4,
+0x215500,56,
+0x2155f0,1,
+0x215800,5,
+0x215820,3,
 0x216004,7,
-0x216024,3,
+0x216024,1,
+0x216034,3,
 0x216300,5,
-0x21631c,3,
+0x21631c,1,
 0x216600,10,
 0x216630,1,
 0x216680,10,
 0x216780,10,
 0x2167b0,1,
 0x216800,47,
-0x216910,12,
-0x217000,64,
+0x216910,14,
+0x216e00,1,
+0x217000,65,
 0x218000,2,
-0x21800c,9,
-0x218040,6,
-0x218060,6,
-0x218080,2,
-0x21808c,5,
-0x2180a4,3,
-0x2180e0,1,
-0x218500,2,
-0x218518,5,
-0x218540,6,
+0x21800c,3,
+0x218028,2,
+0x218038,47,
+0x218500,6,
+0x218520,6,
+0x218540,3,
 0x218580,10,
+0x2185c0,15,
+0x218600,2,
+0x218618,5,
+0x218630,1,
 0x218800,2,
-0x21880c,9,
-0x218840,6,
-0x218860,6,
-0x218880,2,
-0x21888c,5,
-0x2188a4,3,
-0x2188e0,1,
-0x218d00,2,
-0x218d18,5,
-0x218d40,6,
+0x21880c,3,
+0x218828,2,
+0x218838,47,
+0x218d00,6,
+0x218d20,6,
+0x218d40,3,
 0x218d80,10,
-0x219800,2,
-0x219828,2,
-0x219850,2,
-0x219878,2,
+0x218dc0,15,
+0x218e00,2,
+0x218e18,5,
+0x218e30,1,
+0x219800,3,
+0x219828,3,
+0x219850,3,
+0x219878,3,
 0x2198a0,7,
 0x2199ac,1,
 0x2199d8,4,
 0x219a20,6,
 0x219a40,6,
 0x219a60,6,
-0x219a80,3,
+0x219a80,6,
+0x219aa0,6,
+0x219ac0,3,
 0x219c00,6,
 0x219c20,3,
 0x219c40,2,
 0x219c60,1,
-0x220000,5,
-0x220020,4,
-0x220034,17,
-0x220080,1,
+0x220000,4,
+0x220014,1,
+0x220020,3,
+0x220030,3,
+0x220040,8,
+0x22007c,2,
 0x2200a0,6,
-0x220100,5,
-0x220120,4,
-0x220134,17,
-0x220180,1,
+0x2200c0,6,
+0x2200e0,6,
+0x220100,4,
+0x220114,1,
+0x220120,3,
+0x220130,3,
+0x220140,8,
+0x22017c,2,
 0x2201a0,6,
-0x220200,5,
-0x220220,4,
-0x220234,17,
-0x220280,1,
+0x2201c0,6,
+0x2201e0,6,
+0x220200,4,
+0x220214,1,
+0x220220,3,
+0x220230,3,
+0x220240,8,
+0x22027c,2,
 0x2202a0,6,
-0x220300,5,
-0x220320,4,
-0x220334,17,
-0x220380,1,
+0x2202c0,6,
+0x2202e0,6,
+0x220300,4,
+0x220314,1,
+0x220320,3,
+0x220330,3,
+0x220340,8,
+0x22037c,2,
 0x2203a0,6,
+0x2203c0,6,
+0x2203e0,6,
 0x220400,6,
 0x220440,6,
 0x220480,3,
 0x2204c0,3,
-0x220500,6,
-0x22051c,7,
-0x220540,1,
+0x220500,2,
+0x22050c,4,
+0x220520,2,
+0x22052c,4,
+0x220540,2,
 0x220c00,13,
 0x220c40,12,
 0x220c80,13,
 0x220cc0,12,
-0x220d00,6,
-0x220d20,6,
+0x220d00,14,
+0x220d40,2,
 0x220d80,14,
 0x220dc0,2,
-0x220e40,11,
+0x220e00,11,
+0x220e40,6,
+0x220e60,6,
 0x220e80,6,
 0x220ea0,6,
 0x221000,2,
-0x221010,5,
+0x221014,4,
 0x221040,3,
 0x221050,3,
-0x221060,32,
-0x221100,8,
-0x221140,8,
+0x221080,42,
+0x221140,10,
 0x221180,3,
 0x221190,2,
-0x22119c,9,
-0x221218,9,
-0x221240,3,
-0x221250,6,
-0x221280,1,
-0x221288,6,
-0x2212a4,1,
-0x2212c0,1,
-0x2212c8,6,
-0x2212e4,1,
-0x221400,8,
-0x221424,2,
+0x22119c,15,
+0x221200,9,
+0x221300,1,
+0x221308,6,
+0x221324,10,
+0x221380,1,
+0x221388,6,
+0x2213a4,10,
+0x221400,6,
+0x221420,6,
 0x221500,5,
 0x221520,4,
 0x221540,5,
 0x221560,4,
 0x221800,24,
-0x221864,5,
+0x221864,6,
 0x221880,8,
-0x221900,13,
-0x221980,4,
-0x2219a0,6,
-0x2219c0,6,
-0x2219dc,1,
-0x221a00,6,
-0x221a1c,1,
-0x221a40,1,
-0x221a60,1,
-0x221a68,23,
+0x221900,24,
+0x221964,6,
+0x221980,8,
+0x221a00,17,
+0x221a48,6,
+0x221a80,17,
 0x221ac8,6,
-0x221b00,17,
-0x221b48,6,
-0x221b80,12,
+0x221b00,6,
+0x221b20,6,
+0x221b40,3,
+0x221b80,6,
+0x221ba0,6,
+0x221bc0,3,
 0x221c00,6,
 0x221c20,6,
-0x221c40,6,
-0x221c60,3,
-0x221d00,6,
-0x221d20,6,
-0x221d40,3,
-0x221d80,6,
-0x221da0,6,
-0x221dc0,3,
-0x222000,5,
-0x222020,4,
-0x222034,17,
-0x222080,1,
+0x221c40,3,
+0x221c80,6,
+0x221ca0,6,
+0x221cc0,3,
+0x221d10,2,
+0x221d1c,1,
+0x221d50,2,
+0x221d5c,1,
+0x221d80,1,
+0x221da0,1,
+0x221da8,7,
+0x221de0,1,
+0x221de8,19,
+0x221e40,6,
+0x221e60,6,
+0x221e80,6,
+0x221ea0,6,
+0x221ec0,7,
+0x221ee0,7,
+0x221f00,12,
+0x221f40,3,
+0x221f50,8,
+0x222000,4,
+0x222014,1,
+0x222020,3,
+0x222030,3,
+0x222040,8,
+0x22207c,2,
 0x2220a0,6,
-0x222100,5,
-0x222120,4,
-0x222134,17,
-0x222180,1,
+0x2220c0,6,
+0x2220e0,6,
+0x222100,4,
+0x222114,1,
+0x222120,3,
+0x222130,3,
+0x222140,8,
+0x22217c,2,
 0x2221a0,6,
-0x222200,5,
-0x222220,4,
-0x222234,17,
-0x222280,1,
+0x2221c0,6,
+0x2221e0,6,
+0x222200,4,
+0x222214,1,
+0x222220,3,
+0x222230,3,
+0x222240,8,
+0x22227c,2,
 0x2222a0,6,
-0x222300,5,
-0x222320,4,
-0x222334,17,
-0x222380,1,
+0x2222c0,6,
+0x2222e0,6,
+0x222300,4,
+0x222314,1,
+0x222320,3,
+0x222330,3,
+0x222340,8,
+0x22237c,2,
 0x2223a0,6,
+0x2223c0,6,
+0x2223e0,6,
 0x222400,6,
 0x222440,6,
 0x222480,3,
 0x2224c0,3,
-0x222500,6,
-0x22251c,7,
-0x222540,1,
+0x222500,2,
+0x22250c,4,
+0x222520,2,
+0x22252c,4,
+0x222540,2,
 0x222c00,13,
 0x222c40,12,
 0x222c80,13,
 0x222cc0,12,
-0x222d00,6,
-0x222d20,6,
+0x222d00,14,
+0x222d40,2,
 0x222d80,14,
 0x222dc0,2,
-0x222e40,11,
+0x222e00,11,
+0x222e40,6,
+0x222e60,6,
 0x222e80,6,
 0x222ea0,6,
 0x223000,2,
-0x223010,5,
+0x223014,4,
 0x223040,3,
 0x223050,3,
-0x223060,32,
-0x223100,8,
-0x223140,8,
+0x223080,42,
+0x223140,10,
 0x223180,3,
 0x223190,2,
-0x22319c,9,
-0x223218,9,
-0x223240,3,
-0x223250,6,
-0x223280,1,
-0x223288,6,
-0x2232a4,1,
-0x2232c0,1,
-0x2232c8,6,
-0x2232e4,1,
-0x223400,8,
-0x223424,2,
+0x22319c,15,
+0x223200,9,
+0x223300,1,
+0x223308,6,
+0x223324,10,
+0x223380,1,
+0x223388,6,
+0x2233a4,10,
+0x223400,6,
+0x223420,6,
 0x223500,5,
 0x223520,4,
 0x223540,5,
 0x223560,4,
 0x223800,24,
-0x223864,5,
+0x223864,6,
 0x223880,8,
-0x223900,13,
-0x223980,4,
-0x2239a0,6,
-0x2239c0,6,
-0x2239dc,1,
-0x223a00,6,
-0x223a1c,1,
-0x223a40,1,
-0x223a60,1,
-0x223a68,23,
+0x223900,24,
+0x223964,6,
+0x223980,8,
+0x223a00,17,
+0x223a48,6,
+0x223a80,17,
 0x223ac8,6,
-0x223b00,17,
-0x223b48,6,
-0x223b80,12,
+0x223b00,6,
+0x223b20,6,
+0x223b40,3,
+0x223b80,6,
+0x223ba0,6,
+0x223bc0,3,
 0x223c00,6,
 0x223c20,6,
-0x223c40,6,
-0x223c60,3,
-0x223d00,6,
-0x223d20,6,
-0x223d40,3,
-0x223d80,6,
-0x223da0,6,
-0x223dc0,3,
+0x223c40,3,
+0x223c80,6,
+0x223ca0,6,
+0x223cc0,3,
+0x223d10,2,
+0x223d1c,1,
+0x223d50,2,
+0x223d5c,1,
+0x223d80,1,
+0x223da0,1,
+0x223da8,7,
+0x223de0,1,
+0x223de8,19,
+0x223e40,6,
+0x223e60,6,
+0x223e80,6,
+0x223ea0,6,
+0x223ec0,7,
+0x223ee0,7,
+0x223f00,12,
+0x223f40,3,
+0x223f50,8,
 0x224000,29,
 0x224078,4,
 0x224090,2,
 0x225eac,1,
 0x225eb4,3,
 0x226000,14,
-0x226070,3,
+0x226040,6,
+0x226060,6,
 0x226080,6,
+0x2260a0,3,
 0x226100,9,
 0x226204,1,
 0x22620c,6,
 0x226c94,8,
 0x226cb8,9,
 0x226ce0,4,
-0x227000,6,
-0x227020,3,
-0x227040,7,
-0x227060,6,
-0x227100,5,
-0x227138,1,
-0x227144,1,
-0x227150,2,
+0x227000,1,
+0x227028,1,
+0x227050,1,
+0x227078,1,
+0x2270a0,4,
+0x2271ac,1,
+0x2271d8,4,
+0x227200,6,
+0x227220,6,
+0x227240,3,
+0x227400,5,
+0x227438,1,
+0x227444,1,
+0x227450,4,
+0x227500,7,
+0x227520,6,
+0x227540,6,
+0x227560,3,
+0x227570,1,
 0x228000,6,
 0x228020,3,
-0x228030,1,
-0x228038,7,
+0x228030,3,
+0x228050,1,
 0x228100,6,
 0x228120,10,
 0x228150,10,
 0x2289f4,3,
 0x229000,4,
 0x229020,4,
-0x229040,3,
-0x229050,3,
-0x229080,2,
-0x2290b0,3,
-0x22912c,1,
-0x229140,6,
-0x229200,20,
-0x22925c,30,
-0x229300,24,
+0x229040,11,
+0x229070,3,
+0x229080,4,
+0x2290b0,22,
+0x229110,2,
+0x229120,22,
+0x229180,1,
+0x2291a0,6,
+0x229200,42,
+0x2292c0,1,
+0x2292c8,3,
+0x229300,25,
+0x22936c,4,
 0x229380,2,
 0x2293a0,1,
 0x2293c0,11,
 0x229480,6,
 0x229500,6,
 0x229520,6,
+0x229540,3,
+0x229550,7,
+0x229570,4,
 0x229800,410,
 0x22a000,4,
 0x22a020,4,
-0x22a040,3,
-0x22a050,3,
-0x22a080,2,
-0x22a0b0,3,
-0x22a12c,1,
-0x22a140,6,
-0x22a200,20,
-0x22a25c,30,
-0x22a300,24,
+0x22a040,11,
+0x22a070,3,
+0x22a080,4,
+0x22a0b0,22,
+0x22a110,2,
+0x22a120,22,
+0x22a180,1,
+0x22a1a0,6,
+0x22a200,42,
+0x22a2c0,1,
+0x22a2c8,3,
+0x22a300,25,
+0x22a36c,4,
 0x22a380,2,
 0x22a3a0,1,
 0x22a3c0,11,
 0x22a480,6,
 0x22a500,6,
 0x22a520,6,
+0x22a540,3,
+0x22a550,7,
+0x22a570,4,
 0x22a800,410,
 0x22b000,4,
 0x22b020,4,
-0x22b040,3,
-0x22b050,3,
-0x22b080,2,
-0x22b0b0,3,
-0x22b12c,1,
-0x22b140,6,
-0x22b200,20,
-0x22b25c,30,
-0x22b300,24,
+0x22b040,11,
+0x22b070,3,
+0x22b080,4,
+0x22b0b0,22,
+0x22b110,2,
+0x22b120,22,
+0x22b180,1,
+0x22b1a0,6,
+0x22b200,42,
+0x22b2c0,1,
+0x22b2c8,3,
+0x22b300,25,
+0x22b36c,4,
 0x22b380,2,
 0x22b3a0,1,
 0x22b3c0,11,
 0x22b480,6,
 0x22b500,6,
 0x22b520,6,
+0x22b540,3,
+0x22b550,7,
+0x22b570,4,
 0x22b800,410,
 0x22c000,4,
 0x22c020,4,
-0x22c040,3,
-0x22c050,3,
-0x22c080,2,
-0x22c0b0,3,
-0x22c12c,1,
-0x22c140,6,
-0x22c200,20,
-0x22c25c,30,
-0x22c300,24,
+0x22c040,11,
+0x22c070,3,
+0x22c080,4,
+0x22c0b0,22,
+0x22c110,2,
+0x22c120,22,
+0x22c180,1,
+0x22c1a0,6,
+0x22c200,42,
+0x22c2c0,1,
+0x22c2c8,3,
+0x22c300,25,
+0x22c36c,4,
 0x22c380,2,
 0x22c3a0,1,
 0x22c3c0,11,
 0x22c480,6,
 0x22c500,6,
 0x22c520,6,
+0x22c540,3,
+0x22c550,7,
+0x22c570,4,
 0x22c800,410,
 0x22f800,5,
 0x22f818,1,
 0x22fba4,1,
 0x22fbac,2,
 0x234000,3,
-0x234018,3,
-0x234100,25,
+0x234018,4,
+0x234100,56,
+0x2341f0,1,
 0x234400,3,
-0x234418,3,
-0x234500,25,
-0x234800,1,
+0x234418,4,
+0x234500,56,
+0x2345f0,1,
+0x234800,5,
+0x234820,3,
 0x235000,3,
-0x235018,3,
-0x235100,25,
+0x235018,4,
+0x235100,56,
+0x2351f0,1,
 0x235400,3,
-0x235418,3,
-0x235500,25,
-0x235800,1,
+0x235418,4,
+0x235500,56,
+0x2355f0,1,
+0x235800,5,
+0x235820,3,
 0x236004,7,
-0x236024,3,
+0x236024,1,
+0x236034,3,
 0x236300,5,
-0x23631c,3,
+0x23631c,1,
 0x236600,10,
 0x236630,1,
 0x236680,10,
 0x236780,10,
 0x2367b0,1,
 0x236800,47,
-0x236910,12,
-0x237000,64,
+0x236910,14,
+0x236e00,1,
+0x237000,65,
 0x238000,2,
-0x23800c,9,
-0x238040,6,
-0x238060,6,
-0x238080,2,
-0x23808c,5,
-0x2380a4,3,
-0x2380e0,1,
-0x238500,2,
-0x238518,5,
-0x238540,6,
+0x23800c,3,
+0x238028,2,
+0x238038,47,
+0x238500,6,
+0x238520,6,
+0x238540,3,
 0x238580,10,
+0x2385c0,15,
+0x238600,2,
+0x238618,5,
+0x238630,1,
 0x238800,2,
-0x23880c,9,
-0x238840,6,
-0x238860,6,
-0x238880,2,
-0x23888c,5,
-0x2388a4,3,
-0x2388e0,1,
-0x238d00,2,
-0x238d18,5,
-0x238d40,6,
+0x23880c,3,
+0x238828,2,
+0x238838,47,
+0x238d00,6,
+0x238d20,6,
+0x238d40,3,
 0x238d80,10,
-0x239800,2,
-0x239828,2,
-0x239850,2,
-0x239878,2,
+0x238dc0,15,
+0x238e00,2,
+0x238e18,5,
+0x238e30,1,
+0x239800,3,
+0x239828,3,
+0x239850,3,
+0x239878,3,
 0x2398a0,7,
 0x2399ac,1,
 0x2399d8,4,
 0x239a20,6,
 0x239a40,6,
 0x239a60,6,
-0x239a80,3,
+0x239a80,6,
+0x239aa0,6,
+0x239ac0,3,
 0x239c00,6,
 0x239c20,3,
 0x239c40,2,
 0x239c60,1,
-0x240000,5,
-0x240020,4,
-0x240034,17,
-0x240080,1,
+0x240000,4,
+0x240014,1,
+0x240020,3,
+0x240030,3,
+0x240040,8,
+0x24007c,2,
 0x2400a0,6,
-0x240100,5,
-0x240120,4,
-0x240134,17,
-0x240180,1,
+0x2400c0,6,
+0x2400e0,6,
+0x240100,4,
+0x240114,1,
+0x240120,3,
+0x240130,3,
+0x240140,8,
+0x24017c,2,
 0x2401a0,6,
-0x240200,5,
-0x240220,4,
-0x240234,17,
-0x240280,1,
+0x2401c0,6,
+0x2401e0,6,
+0x240200,4,
+0x240214,1,
+0x240220,3,
+0x240230,3,
+0x240240,8,
+0x24027c,2,
 0x2402a0,6,
-0x240300,5,
-0x240320,4,
-0x240334,17,
-0x240380,1,
+0x2402c0,6,
+0x2402e0,6,
+0x240300,4,
+0x240314,1,
+0x240320,3,
+0x240330,3,
+0x240340,8,
+0x24037c,2,
 0x2403a0,6,
+0x2403c0,6,
+0x2403e0,6,
 0x240400,6,
 0x240440,6,
 0x240480,3,
 0x2404c0,3,
-0x240500,6,
-0x24051c,7,
-0x240540,1,
+0x240500,2,
+0x24050c,4,
+0x240520,2,
+0x24052c,4,
+0x240540,2,
 0x240c00,13,
 0x240c40,12,
 0x240c80,13,
 0x240cc0,12,
-0x240d00,6,
-0x240d20,6,
+0x240d00,14,
+0x240d40,2,
 0x240d80,14,
 0x240dc0,2,
-0x240e40,11,
+0x240e00,11,
+0x240e40,6,
+0x240e60,6,
 0x240e80,6,
 0x240ea0,6,
 0x241000,2,
-0x241010,5,
+0x241014,4,
 0x241040,3,
 0x241050,3,
-0x241060,32,
-0x241100,8,
-0x241140,8,
+0x241080,42,
+0x241140,10,
 0x241180,3,
 0x241190,2,
-0x24119c,9,
-0x241218,9,
-0x241240,3,
-0x241250,6,
-0x241280,1,
-0x241288,6,
-0x2412a4,1,
-0x2412c0,1,
-0x2412c8,6,
-0x2412e4,1,
-0x241400,8,
-0x241424,2,
+0x24119c,15,
+0x241200,9,
+0x241300,1,
+0x241308,6,
+0x241324,10,
+0x241380,1,
+0x241388,6,
+0x2413a4,10,
+0x241400,6,
+0x241420,6,
 0x241500,5,
 0x241520,4,
 0x241540,5,
 0x241560,4,
 0x241800,24,
-0x241864,5,
+0x241864,6,
 0x241880,8,
-0x241900,13,
-0x241980,4,
-0x2419a0,6,
-0x2419c0,6,
-0x2419dc,1,
-0x241a00,6,
-0x241a1c,1,
-0x241a40,1,
-0x241a60,1,
-0x241a68,23,
+0x241900,24,
+0x241964,6,
+0x241980,8,
+0x241a00,17,
+0x241a48,6,
+0x241a80,17,
 0x241ac8,6,
-0x241b00,17,
-0x241b48,6,
-0x241b80,12,
+0x241b00,6,
+0x241b20,6,
+0x241b40,3,
+0x241b80,6,
+0x241ba0,6,
+0x241bc0,3,
 0x241c00,6,
 0x241c20,6,
-0x241c40,6,
-0x241c60,3,
-0x241d00,6,
-0x241d20,6,
-0x241d40,3,
-0x241d80,6,
-0x241da0,6,
-0x241dc0,3,
-0x242000,5,
-0x242020,4,
-0x242034,17,
-0x242080,1,
+0x241c40,3,
+0x241c80,6,
+0x241ca0,6,
+0x241cc0,3,
+0x241d10,2,
+0x241d1c,1,
+0x241d50,2,
+0x241d5c,1,
+0x241d80,1,
+0x241da0,1,
+0x241da8,7,
+0x241de0,1,
+0x241de8,19,
+0x241e40,6,
+0x241e60,6,
+0x241e80,6,
+0x241ea0,6,
+0x241ec0,7,
+0x241ee0,7,
+0x241f00,12,
+0x241f40,3,
+0x241f50,8,
+0x242000,4,
+0x242014,1,
+0x242020,3,
+0x242030,3,
+0x242040,8,
+0x24207c,2,
 0x2420a0,6,
-0x242100,5,
-0x242120,4,
-0x242134,17,
-0x242180,1,
+0x2420c0,6,
+0x2420e0,6,
+0x242100,4,
+0x242114,1,
+0x242120,3,
+0x242130,3,
+0x242140,8,
+0x24217c,2,
 0x2421a0,6,
-0x242200,5,
-0x242220,4,
-0x242234,17,
-0x242280,1,
+0x2421c0,6,
+0x2421e0,6,
+0x242200,4,
+0x242214,1,
+0x242220,3,
+0x242230,3,
+0x242240,8,
+0x24227c,2,
 0x2422a0,6,
-0x242300,5,
-0x242320,4,
-0x242334,17,
-0x242380,1,
+0x2422c0,6,
+0x2422e0,6,
+0x242300,4,
+0x242314,1,
+0x242320,3,
+0x242330,3,
+0x242340,8,
+0x24237c,2,
 0x2423a0,6,
+0x2423c0,6,
+0x2423e0,6,
 0x242400,6,
 0x242440,6,
 0x242480,3,
 0x2424c0,3,
-0x242500,6,
-0x24251c,7,
-0x242540,1,
+0x242500,2,
+0x24250c,4,
+0x242520,2,
+0x24252c,4,
+0x242540,2,
 0x242c00,13,
 0x242c40,12,
 0x242c80,13,
 0x242cc0,12,
-0x242d00,6,
-0x242d20,6,
+0x242d00,14,
+0x242d40,2,
 0x242d80,14,
 0x242dc0,2,
-0x242e40,11,
+0x242e00,11,
+0x242e40,6,
+0x242e60,6,
 0x242e80,6,
 0x242ea0,6,
 0x243000,2,
-0x243010,5,
+0x243014,4,
 0x243040,3,
 0x243050,3,
-0x243060,32,
-0x243100,8,
-0x243140,8,
+0x243080,42,
+0x243140,10,
 0x243180,3,
 0x243190,2,
-0x24319c,9,
-0x243218,9,
-0x243240,3,
-0x243250,6,
-0x243280,1,
-0x243288,6,
-0x2432a4,1,
-0x2432c0,1,
-0x2432c8,6,
-0x2432e4,1,
-0x243400,8,
-0x243424,2,
+0x24319c,15,
+0x243200,9,
+0x243300,1,
+0x243308,6,
+0x243324,10,
+0x243380,1,
+0x243388,6,
+0x2433a4,10,
+0x243400,6,
+0x243420,6,
 0x243500,5,
 0x243520,4,
 0x243540,5,
 0x243560,4,
 0x243800,24,
-0x243864,5,
+0x243864,6,
 0x243880,8,
-0x243900,13,
-0x243980,4,
-0x2439a0,6,
-0x2439c0,6,
-0x2439dc,1,
-0x243a00,6,
-0x243a1c,1,
-0x243a40,1,
-0x243a60,1,
-0x243a68,23,
+0x243900,24,
+0x243964,6,
+0x243980,8,
+0x243a00,17,
+0x243a48,6,
+0x243a80,17,
 0x243ac8,6,
-0x243b00,17,
-0x243b48,6,
-0x243b80,12,
+0x243b00,6,
+0x243b20,6,
+0x243b40,3,
+0x243b80,6,
+0x243ba0,6,
+0x243bc0,3,
 0x243c00,6,
 0x243c20,6,
-0x243c40,6,
-0x243c60,3,
-0x243d00,6,
-0x243d20,6,
-0x243d40,3,
-0x243d80,6,
-0x243da0,6,
-0x243dc0,3,
+0x243c40,3,
+0x243c80,6,
+0x243ca0,6,
+0x243cc0,3,
+0x243d10,2,
+0x243d1c,1,
+0x243d50,2,
+0x243d5c,1,
+0x243d80,1,
+0x243da0,1,
+0x243da8,7,
+0x243de0,1,
+0x243de8,19,
+0x243e40,6,
+0x243e60,6,
+0x243e80,6,
+0x243ea0,6,
+0x243ec0,7,
+0x243ee0,7,
+0x243f00,12,
+0x243f40,3,
+0x243f50,8,
 0x244000,29,
 0x244078,4,
 0x244090,2,
 0x245eac,1,
 0x245eb4,3,
 0x246000,14,
-0x246070,3,
+0x246040,6,
+0x246060,6,
 0x246080,6,
+0x2460a0,3,
 0x246100,9,
 0x246204,1,
 0x24620c,6,
 0x246c94,8,
 0x246cb8,9,
 0x246ce0,4,
-0x247000,6,
-0x247020,3,
-0x247040,7,
-0x247060,6,
-0x247100,5,
-0x247138,1,
-0x247144,1,
-0x247150,2,
+0x247000,1,
+0x247028,1,
+0x247050,1,
+0x247078,1,
+0x2470a0,4,
+0x2471ac,1,
+0x2471d8,4,
+0x247200,6,
+0x247220,6,
+0x247240,3,
+0x247400,5,
+0x247438,1,
+0x247444,1,
+0x247450,4,
+0x247500,7,
+0x247520,6,
+0x247540,6,
+0x247560,3,
+0x247570,1,
 0x248000,6,
 0x248020,3,
-0x248030,1,
-0x248038,7,
+0x248030,3,
+0x248050,1,
 0x248100,6,
 0x248120,10,
 0x248150,10,
 0x2489f4,3,
 0x249000,4,
 0x249020,4,
-0x249040,3,
-0x249050,3,
-0x249080,2,
-0x2490b0,3,
-0x24912c,1,
-0x249140,6,
-0x249200,20,
-0x24925c,30,
-0x249300,24,
+0x249040,11,
+0x249070,3,
+0x249080,4,
+0x2490b0,22,
+0x249110,2,
+0x249120,22,
+0x249180,1,
+0x2491a0,6,
+0x249200,42,
+0x2492c0,1,
+0x2492c8,3,
+0x249300,25,
+0x24936c,4,
 0x249380,2,
 0x2493a0,1,
 0x2493c0,11,
 0x249480,6,
 0x249500,6,
 0x249520,6,
+0x249540,3,
+0x249550,7,
+0x249570,4,
 0x249800,410,
 0x24a000,4,
 0x24a020,4,
-0x24a040,3,
-0x24a050,3,
-0x24a080,2,
-0x24a0b0,3,
-0x24a12c,1,
-0x24a140,6,
-0x24a200,20,
-0x24a25c,30,
-0x24a300,24,
+0x24a040,11,
+0x24a070,3,
+0x24a080,4,
+0x24a0b0,22,
+0x24a110,2,
+0x24a120,22,
+0x24a180,1,
+0x24a1a0,6,
+0x24a200,42,
+0x24a2c0,1,
+0x24a2c8,3,
+0x24a300,25,
+0x24a36c,4,
 0x24a380,2,
 0x24a3a0,1,
 0x24a3c0,11,
 0x24a480,6,
 0x24a500,6,
 0x24a520,6,
+0x24a540,3,
+0x24a550,7,
+0x24a570,4,
 0x24a800,410,
 0x24b000,4,
 0x24b020,4,
-0x24b040,3,
-0x24b050,3,
-0x24b080,2,
-0x24b0b0,3,
-0x24b12c,1,
-0x24b140,6,
-0x24b200,20,
-0x24b25c,30,
-0x24b300,24,
+0x24b040,11,
+0x24b070,3,
+0x24b080,4,
+0x24b0b0,22,
+0x24b110,2,
+0x24b120,22,
+0x24b180,1,
+0x24b1a0,6,
+0x24b200,42,
+0x24b2c0,1,
+0x24b2c8,3,
+0x24b300,25,
+0x24b36c,4,
 0x24b380,2,
 0x24b3a0,1,
 0x24b3c0,11,
 0x24b480,6,
 0x24b500,6,
 0x24b520,6,
+0x24b540,3,
+0x24b550,7,
+0x24b570,4,
 0x24b800,410,
 0x24c000,4,
 0x24c020,4,
-0x24c040,3,
-0x24c050,3,
-0x24c080,2,
-0x24c0b0,3,
-0x24c12c,1,
-0x24c140,6,
-0x24c200,20,
-0x24c25c,30,
-0x24c300,24,
+0x24c040,11,
+0x24c070,3,
+0x24c080,4,
+0x24c0b0,22,
+0x24c110,2,
+0x24c120,22,
+0x24c180,1,
+0x24c1a0,6,
+0x24c200,42,
+0x24c2c0,1,
+0x24c2c8,3,
+0x24c300,25,
+0x24c36c,4,
 0x24c380,2,
 0x24c3a0,1,
 0x24c3c0,11,
 0x24c480,6,
 0x24c500,6,
 0x24c520,6,
+0x24c540,3,
+0x24c550,7,
+0x24c570,4,
 0x24c800,410,
 0x24f800,5,
 0x24f818,1,
 0x24fba4,1,
 0x24fbac,2,
 0x254000,3,
-0x254018,3,
-0x254100,25,
+0x254018,4,
+0x254100,56,
+0x2541f0,1,
 0x254400,3,
-0x254418,3,
-0x254500,25,
-0x254800,1,
+0x254418,4,
+0x254500,56,
+0x2545f0,1,
+0x254800,5,
+0x254820,3,
 0x255000,3,
-0x255018,3,
-0x255100,25,
+0x255018,4,
+0x255100,56,
+0x2551f0,1,
 0x255400,3,
-0x255418,3,
-0x255500,25,
-0x255800,1,
+0x255418,4,
+0x255500,56,
+0x2555f0,1,
+0x255800,5,
+0x255820,3,
 0x256004,7,
-0x256024,3,
+0x256024,1,
+0x256034,3,
 0x256300,5,
-0x25631c,3,
+0x25631c,1,
 0x256600,10,
 0x256630,1,
 0x256680,10,
 0x256780,10,
 0x2567b0,1,
 0x256800,47,
-0x256910,12,
-0x257000,64,
+0x256910,14,
+0x256e00,1,
+0x257000,65,
 0x258000,2,
-0x25800c,9,
-0x258040,6,
-0x258060,6,
-0x258080,2,
-0x25808c,5,
-0x2580a4,3,
-0x2580e0,1,
-0x258500,2,
-0x258518,5,
-0x258540,6,
+0x25800c,3,
+0x258028,2,
+0x258038,47,
+0x258500,6,
+0x258520,6,
+0x258540,3,
 0x258580,10,
+0x2585c0,15,
+0x258600,2,
+0x258618,5,
+0x258630,1,
 0x258800,2,
-0x25880c,9,
-0x258840,6,
-0x258860,6,
-0x258880,2,
-0x25888c,5,
-0x2588a4,3,
-0x2588e0,1,
-0x258d00,2,
-0x258d18,5,
-0x258d40,6,
+0x25880c,3,
+0x258828,2,
+0x258838,47,
+0x258d00,6,
+0x258d20,6,
+0x258d40,3,
 0x258d80,10,
-0x259800,2,
-0x259828,2,
-0x259850,2,
-0x259878,2,
+0x258dc0,15,
+0x258e00,2,
+0x258e18,5,
+0x258e30,1,
+0x259800,3,
+0x259828,3,
+0x259850,3,
+0x259878,3,
 0x2598a0,7,
 0x2599ac,1,
 0x2599d8,4,
 0x259a20,6,
 0x259a40,6,
 0x259a60,6,
-0x259a80,3,
+0x259a80,6,
+0x259aa0,6,
+0x259ac0,3,
 0x259c00,6,
 0x259c20,3,
 0x259c40,2,
 0x259c60,1,
-0x260000,5,
-0x260020,4,
-0x260034,17,
-0x260080,1,
+0x260000,4,
+0x260014,1,
+0x260020,3,
+0x260030,3,
+0x260040,8,
+0x26007c,2,
 0x2600a0,6,
-0x260100,5,
-0x260120,4,
-0x260134,17,
-0x260180,1,
+0x2600c0,6,
+0x2600e0,6,
+0x260100,4,
+0x260114,1,
+0x260120,3,
+0x260130,3,
+0x260140,8,
+0x26017c,2,
 0x2601a0,6,
-0x260200,5,
-0x260220,4,
-0x260234,17,
-0x260280,1,
+0x2601c0,6,
+0x2601e0,6,
+0x260200,4,
+0x260214,1,
+0x260220,3,
+0x260230,3,
+0x260240,8,
+0x26027c,2,
 0x2602a0,6,
-0x260300,5,
-0x260320,4,
-0x260334,17,
-0x260380,1,
+0x2602c0,6,
+0x2602e0,6,
+0x260300,4,
+0x260314,1,
+0x260320,3,
+0x260330,3,
+0x260340,8,
+0x26037c,2,
 0x2603a0,6,
+0x2603c0,6,
+0x2603e0,6,
 0x260400,6,
 0x260440,6,
 0x260480,3,
 0x2604c0,3,
-0x260500,6,
-0x26051c,7,
-0x260540,1,
+0x260500,2,
+0x26050c,4,
+0x260520,2,
+0x26052c,4,
+0x260540,2,
 0x260c00,13,
 0x260c40,12,
 0x260c80,13,
 0x260cc0,12,
-0x260d00,6,
-0x260d20,6,
+0x260d00,14,
+0x260d40,2,
 0x260d80,14,
 0x260dc0,2,
-0x260e40,11,
+0x260e00,11,
+0x260e40,6,
+0x260e60,6,
 0x260e80,6,
 0x260ea0,6,
 0x261000,2,
-0x261010,5,
+0x261014,4,
 0x261040,3,
 0x261050,3,
-0x261060,32,
-0x261100,8,
-0x261140,8,
+0x261080,42,
+0x261140,10,
 0x261180,3,
 0x261190,2,
-0x26119c,9,
-0x261218,9,
-0x261240,3,
-0x261250,6,
-0x261280,1,
-0x261288,6,
-0x2612a4,1,
-0x2612c0,1,
-0x2612c8,6,
-0x2612e4,1,
-0x261400,8,
-0x261424,2,
+0x26119c,15,
+0x261200,9,
+0x261300,1,
+0x261308,6,
+0x261324,10,
+0x261380,1,
+0x261388,6,
+0x2613a4,10,
+0x261400,6,
+0x261420,6,
 0x261500,5,
 0x261520,4,
 0x261540,5,
 0x261560,4,
 0x261800,24,
-0x261864,5,
+0x261864,6,
 0x261880,8,
-0x261900,13,
-0x261980,4,
-0x2619a0,6,
-0x2619c0,6,
-0x2619dc,1,
-0x261a00,6,
-0x261a1c,1,
-0x261a40,1,
-0x261a60,1,
-0x261a68,23,
+0x261900,24,
+0x261964,6,
+0x261980,8,
+0x261a00,17,
+0x261a48,6,
+0x261a80,17,
 0x261ac8,6,
-0x261b00,17,
-0x261b48,6,
-0x261b80,12,
+0x261b00,6,
+0x261b20,6,
+0x261b40,3,
+0x261b80,6,
+0x261ba0,6,
+0x261bc0,3,
 0x261c00,6,
 0x261c20,6,
-0x261c40,6,
-0x261c60,3,
-0x261d00,6,
-0x261d20,6,
-0x261d40,3,
-0x261d80,6,
-0x261da0,6,
-0x261dc0,3,
-0x262000,5,
-0x262020,4,
-0x262034,17,
-0x262080,1,
+0x261c40,3,
+0x261c80,6,
+0x261ca0,6,
+0x261cc0,3,
+0x261d10,2,
+0x261d1c,1,
+0x261d50,2,
+0x261d5c,1,
+0x261d80,1,
+0x261da0,1,
+0x261da8,7,
+0x261de0,1,
+0x261de8,19,
+0x261e40,6,
+0x261e60,6,
+0x261e80,6,
+0x261ea0,6,
+0x261ec0,7,
+0x261ee0,7,
+0x261f00,12,
+0x261f40,3,
+0x261f50,8,
+0x262000,4,
+0x262014,1,
+0x262020,3,
+0x262030,3,
+0x262040,8,
+0x26207c,2,
 0x2620a0,6,
-0x262100,5,
-0x262120,4,
-0x262134,17,
-0x262180,1,
+0x2620c0,6,
+0x2620e0,6,
+0x262100,4,
+0x262114,1,
+0x262120,3,
+0x262130,3,
+0x262140,8,
+0x26217c,2,
 0x2621a0,6,
-0x262200,5,
-0x262220,4,
-0x262234,17,
-0x262280,1,
+0x2621c0,6,
+0x2621e0,6,
+0x262200,4,
+0x262214,1,
+0x262220,3,
+0x262230,3,
+0x262240,8,
+0x26227c,2,
 0x2622a0,6,
-0x262300,5,
-0x262320,4,
-0x262334,17,
-0x262380,1,
+0x2622c0,6,
+0x2622e0,6,
+0x262300,4,
+0x262314,1,
+0x262320,3,
+0x262330,3,
+0x262340,8,
+0x26237c,2,
 0x2623a0,6,
+0x2623c0,6,
+0x2623e0,6,
 0x262400,6,
 0x262440,6,
 0x262480,3,
 0x2624c0,3,
-0x262500,6,
-0x26251c,7,
-0x262540,1,
+0x262500,2,
+0x26250c,4,
+0x262520,2,
+0x26252c,4,
+0x262540,2,
 0x262c00,13,
 0x262c40,12,
 0x262c80,13,
 0x262cc0,12,
-0x262d00,6,
-0x262d20,6,
+0x262d00,14,
+0x262d40,2,
 0x262d80,14,
 0x262dc0,2,
-0x262e40,11,
+0x262e00,11,
+0x262e40,6,
+0x262e60,6,
 0x262e80,6,
 0x262ea0,6,
 0x263000,2,
-0x263010,5,
+0x263014,4,
 0x263040,3,
 0x263050,3,
-0x263060,32,
-0x263100,8,
-0x263140,8,
+0x263080,42,
+0x263140,10,
 0x263180,3,
 0x263190,2,
-0x26319c,9,
-0x263218,9,
-0x263240,3,
-0x263250,6,
-0x263280,1,
-0x263288,6,
-0x2632a4,1,
-0x2632c0,1,
-0x2632c8,6,
-0x2632e4,1,
-0x263400,8,
-0x263424,2,
+0x26319c,15,
+0x263200,9,
+0x263300,1,
+0x263308,6,
+0x263324,10,
+0x263380,1,
+0x263388,6,
+0x2633a4,10,
+0x263400,6,
+0x263420,6,
 0x263500,5,
 0x263520,4,
 0x263540,5,
 0x263560,4,
 0x263800,24,
-0x263864,5,
+0x263864,6,
 0x263880,8,
-0x263900,13,
-0x263980,4,
-0x2639a0,6,
-0x2639c0,6,
-0x2639dc,1,
-0x263a00,6,
-0x263a1c,1,
-0x263a40,1,
-0x263a60,1,
-0x263a68,23,
+0x263900,24,
+0x263964,6,
+0x263980,8,
+0x263a00,17,
+0x263a48,6,
+0x263a80,17,
 0x263ac8,6,
-0x263b00,17,
-0x263b48,6,
-0x263b80,12,
+0x263b00,6,
+0x263b20,6,
+0x263b40,3,
+0x263b80,6,
+0x263ba0,6,
+0x263bc0,3,
 0x263c00,6,
 0x263c20,6,
-0x263c40,6,
-0x263c60,3,
-0x263d00,6,
-0x263d20,6,
-0x263d40,3,
-0x263d80,6,
-0x263da0,6,
-0x263dc0,3,
+0x263c40,3,
+0x263c80,6,
+0x263ca0,6,
+0x263cc0,3,
+0x263d10,2,
+0x263d1c,1,
+0x263d50,2,
+0x263d5c,1,
+0x263d80,1,
+0x263da0,1,
+0x263da8,7,
+0x263de0,1,
+0x263de8,19,
+0x263e40,6,
+0x263e60,6,
+0x263e80,6,
+0x263ea0,6,
+0x263ec0,7,
+0x263ee0,7,
+0x263f00,12,
+0x263f40,3,
+0x263f50,8,
 0x264000,29,
 0x264078,4,
 0x264090,2,
 0x265eac,1,
 0x265eb4,3,
 0x266000,14,
-0x266070,3,
+0x266040,6,
+0x266060,6,
 0x266080,6,
+0x2660a0,3,
 0x266100,9,
 0x266204,1,
 0x26620c,6,
 0x266c94,8,
 0x266cb8,9,
 0x266ce0,4,
-0x267000,6,
-0x267020,3,
-0x267040,7,
-0x267060,6,
-0x267100,5,
-0x267138,1,
-0x267144,1,
-0x267150,2,
+0x267000,1,
+0x267028,1,
+0x267050,1,
+0x267078,1,
+0x2670a0,4,
+0x2671ac,1,
+0x2671d8,4,
+0x267200,6,
+0x267220,6,
+0x267240,3,
+0x267400,5,
+0x267438,1,
+0x267444,1,
+0x267450,4,
+0x267500,7,
+0x267520,6,
+0x267540,6,
+0x267560,3,
+0x267570,1,
 0x268000,6,
 0x268020,3,
-0x268030,1,
-0x268038,7,
+0x268030,3,
+0x268050,1,
 0x268100,6,
 0x268120,10,
 0x268150,10,
 0x2689f4,3,
 0x269000,4,
 0x269020,4,
-0x269040,3,
-0x269050,3,
-0x269080,2,
-0x2690b0,3,
-0x26912c,1,
-0x269140,6,
-0x269200,20,
-0x26925c,30,
-0x269300,24,
+0x269040,11,
+0x269070,3,
+0x269080,4,
+0x2690b0,22,
+0x269110,2,
+0x269120,22,
+0x269180,1,
+0x2691a0,6,
+0x269200,42,
+0x2692c0,1,
+0x2692c8,3,
+0x269300,25,
+0x26936c,4,
 0x269380,2,
 0x2693a0,1,
 0x2693c0,11,
 0x269480,6,
 0x269500,6,
 0x269520,6,
+0x269540,3,
+0x269550,7,
+0x269570,4,
 0x269800,410,
 0x26a000,4,
 0x26a020,4,
-0x26a040,3,
-0x26a050,3,
-0x26a080,2,
-0x26a0b0,3,
-0x26a12c,1,
-0x26a140,6,
-0x26a200,20,
-0x26a25c,30,
-0x26a300,24,
+0x26a040,11,
+0x26a070,3,
+0x26a080,4,
+0x26a0b0,22,
+0x26a110,2,
+0x26a120,22,
+0x26a180,1,
+0x26a1a0,6,
+0x26a200,42,
+0x26a2c0,1,
+0x26a2c8,3,
+0x26a300,25,
+0x26a36c,4,
 0x26a380,2,
 0x26a3a0,1,
 0x26a3c0,11,
 0x26a480,6,
 0x26a500,6,
 0x26a520,6,
+0x26a540,3,
+0x26a550,7,
+0x26a570,4,
 0x26a800,410,
 0x26b000,4,
 0x26b020,4,
-0x26b040,3,
-0x26b050,3,
-0x26b080,2,
-0x26b0b0,3,
-0x26b12c,1,
-0x26b140,6,
-0x26b200,20,
-0x26b25c,30,
-0x26b300,24,
+0x26b040,11,
+0x26b070,3,
+0x26b080,4,
+0x26b0b0,22,
+0x26b110,2,
+0x26b120,22,
+0x26b180,1,
+0x26b1a0,6,
+0x26b200,42,
+0x26b2c0,1,
+0x26b2c8,3,
+0x26b300,25,
+0x26b36c,4,
 0x26b380,2,
 0x26b3a0,1,
 0x26b3c0,11,
 0x26b480,6,
 0x26b500,6,
 0x26b520,6,
+0x26b540,3,
+0x26b550,7,
+0x26b570,4,
 0x26b800,410,
 0x26c000,4,
 0x26c020,4,
-0x26c040,3,
-0x26c050,3,
-0x26c080,2,
-0x26c0b0,3,
-0x26c12c,1,
-0x26c140,6,
-0x26c200,20,
-0x26c25c,30,
-0x26c300,24,
+0x26c040,11,
+0x26c070,3,
+0x26c080,4,
+0x26c0b0,22,
+0x26c110,2,
+0x26c120,22,
+0x26c180,1,
+0x26c1a0,6,
+0x26c200,42,
+0x26c2c0,1,
+0x26c2c8,3,
+0x26c300,25,
+0x26c36c,4,
 0x26c380,2,
 0x26c3a0,1,
 0x26c3c0,11,
 0x26c480,6,
 0x26c500,6,
 0x26c520,6,
+0x26c540,3,
+0x26c550,7,
+0x26c570,4,
 0x26c800,410,
 0x26f800,5,
 0x26f818,1,
 0x26fba4,1,
 0x26fbac,2,
 0x274000,3,
-0x274018,3,
-0x274100,25,
+0x274018,4,
+0x274100,56,
+0x2741f0,1,
 0x274400,3,
-0x274418,3,
-0x274500,25,
-0x274800,1,
+0x274418,4,
+0x274500,56,
+0x2745f0,1,
+0x274800,5,
+0x274820,3,
 0x275000,3,
-0x275018,3,
-0x275100,25,
+0x275018,4,
+0x275100,56,
+0x2751f0,1,
 0x275400,3,
-0x275418,3,
-0x275500,25,
-0x275800,1,
+0x275418,4,
+0x275500,56,
+0x2755f0,1,
+0x275800,5,
+0x275820,3,
 0x276004,7,
-0x276024,3,
+0x276024,1,
+0x276034,3,
 0x276300,5,
-0x27631c,3,
+0x27631c,1,
 0x276600,10,
 0x276630,1,
 0x276680,10,
 0x276780,10,
 0x2767b0,1,
 0x276800,47,
-0x276910,12,
-0x277000,64,
+0x276910,14,
+0x276e00,1,
+0x277000,65,
 0x278000,2,
-0x27800c,9,
-0x278040,6,
-0x278060,6,
-0x278080,2,
-0x27808c,5,
-0x2780a4,3,
-0x2780e0,1,
-0x278500,2,
-0x278518,5,
-0x278540,6,
+0x27800c,3,
+0x278028,2,
+0x278038,47,
+0x278500,6,
+0x278520,6,
+0x278540,3,
 0x278580,10,
+0x2785c0,15,
+0x278600,2,
+0x278618,5,
+0x278630,1,
 0x278800,2,
-0x27880c,9,
-0x278840,6,
-0x278860,6,
-0x278880,2,
-0x27888c,5,
-0x2788a4,3,
-0x2788e0,1,
-0x278d00,2,
-0x278d18,5,
-0x278d40,6,
+0x27880c,3,
+0x278828,2,
+0x278838,47,
+0x278d00,6,
+0x278d20,6,
+0x278d40,3,
 0x278d80,10,
-0x279800,2,
-0x279828,2,
-0x279850,2,
-0x279878,2,
+0x278dc0,15,
+0x278e00,2,
+0x278e18,5,
+0x278e30,1,
+0x279800,3,
+0x279828,3,
+0x279850,3,
+0x279878,3,
 0x2798a0,7,
 0x2799ac,1,
 0x2799d8,4,
 0x279a20,6,
 0x279a40,6,
 0x279a60,6,
-0x279a80,3,
+0x279a80,6,
+0x279aa0,6,
+0x279ac0,3,
 0x279c00,6,
 0x279c20,3,
 0x279c40,2,
 0x279c60,1,
-0x280000,5,
-0x280020,4,
-0x280034,17,
-0x280080,1,
+0x280000,4,
+0x280014,1,
+0x280020,3,
+0x280030,3,
+0x280040,8,
+0x28007c,2,
 0x2800a0,6,
-0x280100,5,
-0x280120,4,
-0x280134,17,
-0x280180,1,
+0x2800c0,6,
+0x2800e0,6,
+0x280100,4,
+0x280114,1,
+0x280120,3,
+0x280130,3,
+0x280140,8,
+0x28017c,2,
 0x2801a0,6,
-0x280200,5,
-0x280220,4,
-0x280234,17,
-0x280280,1,
+0x2801c0,6,
+0x2801e0,6,
+0x280200,4,
+0x280214,1,
+0x280220,3,
+0x280230,3,
+0x280240,8,
+0x28027c,2,
 0x2802a0,6,
-0x280300,5,
-0x280320,4,
-0x280334,17,
-0x280380,1,
+0x2802c0,6,
+0x2802e0,6,
+0x280300,4,
+0x280314,1,
+0x280320,3,
+0x280330,3,
+0x280340,8,
+0x28037c,2,
 0x2803a0,6,
+0x2803c0,6,
+0x2803e0,6,
 0x280400,6,
 0x280440,6,
 0x280480,3,
 0x2804c0,3,
-0x280500,6,
-0x28051c,7,
-0x280540,1,
+0x280500,2,
+0x28050c,4,
+0x280520,2,
+0x28052c,4,
+0x280540,2,
 0x280c00,13,
 0x280c40,12,
 0x280c80,13,
 0x280cc0,12,
-0x280d00,6,
-0x280d20,6,
+0x280d00,14,
+0x280d40,2,
 0x280d80,14,
 0x280dc0,2,
-0x280e40,11,
+0x280e00,11,
+0x280e40,6,
+0x280e60,6,
 0x280e80,6,
 0x280ea0,6,
 0x281000,2,
-0x281010,5,
+0x281014,4,
 0x281040,3,
 0x281050,3,
-0x281060,32,
-0x281100,8,
-0x281140,8,
+0x281080,42,
+0x281140,10,
 0x281180,3,
 0x281190,2,
-0x28119c,9,
-0x281218,9,
-0x281240,3,
-0x281250,6,
-0x281280,1,
-0x281288,6,
-0x2812a4,1,
-0x2812c0,1,
-0x2812c8,6,
-0x2812e4,1,
-0x281400,8,
-0x281424,2,
+0x28119c,15,
+0x281200,9,
+0x281300,1,
+0x281308,6,
+0x281324,10,
+0x281380,1,
+0x281388,6,
+0x2813a4,10,
+0x281400,6,
+0x281420,6,
 0x281500,5,
 0x281520,4,
 0x281540,5,
 0x281560,4,
 0x281800,24,
-0x281864,5,
+0x281864,6,
 0x281880,8,
-0x281900,13,
-0x281980,4,
-0x2819a0,6,
-0x2819c0,6,
-0x2819dc,1,
-0x281a00,6,
-0x281a1c,1,
-0x281a40,1,
-0x281a60,1,
-0x281a68,23,
+0x281900,24,
+0x281964,6,
+0x281980,8,
+0x281a00,17,
+0x281a48,6,
+0x281a80,17,
 0x281ac8,6,
-0x281b00,17,
-0x281b48,6,
-0x281b80,12,
+0x281b00,6,
+0x281b20,6,
+0x281b40,3,
+0x281b80,6,
+0x281ba0,6,
+0x281bc0,3,
 0x281c00,6,
 0x281c20,6,
-0x281c40,6,
-0x281c60,3,
-0x281d00,6,
-0x281d20,6,
-0x281d40,3,
-0x281d80,6,
-0x281da0,6,
-0x281dc0,3,
-0x282000,5,
-0x282020,4,
-0x282034,17,
-0x282080,1,
+0x281c40,3,
+0x281c80,6,
+0x281ca0,6,
+0x281cc0,3,
+0x281d10,2,
+0x281d1c,1,
+0x281d50,2,
+0x281d5c,1,
+0x281d80,1,
+0x281da0,1,
+0x281da8,7,
+0x281de0,1,
+0x281de8,19,
+0x281e40,6,
+0x281e60,6,
+0x281e80,6,
+0x281ea0,6,
+0x281ec0,7,
+0x281ee0,7,
+0x281f00,12,
+0x281f40,3,
+0x281f50,8,
+0x282000,4,
+0x282014,1,
+0x282020,3,
+0x282030,3,
+0x282040,8,
+0x28207c,2,
 0x2820a0,6,
-0x282100,5,
-0x282120,4,
-0x282134,17,
-0x282180,1,
+0x2820c0,6,
+0x2820e0,6,
+0x282100,4,
+0x282114,1,
+0x282120,3,
+0x282130,3,
+0x282140,8,
+0x28217c,2,
 0x2821a0,6,
-0x282200,5,
-0x282220,4,
-0x282234,17,
-0x282280,1,
+0x2821c0,6,
+0x2821e0,6,
+0x282200,4,
+0x282214,1,
+0x282220,3,
+0x282230,3,
+0x282240,8,
+0x28227c,2,
 0x2822a0,6,
-0x282300,5,
-0x282320,4,
-0x282334,17,
-0x282380,1,
+0x2822c0,6,
+0x2822e0,6,
+0x282300,4,
+0x282314,1,
+0x282320,3,
+0x282330,3,
+0x282340,8,
+0x28237c,2,
 0x2823a0,6,
+0x2823c0,6,
+0x2823e0,6,
 0x282400,6,
 0x282440,6,
 0x282480,3,
 0x2824c0,3,
-0x282500,6,
-0x28251c,7,
-0x282540,1,
+0x282500,2,
+0x28250c,4,
+0x282520,2,
+0x28252c,4,
+0x282540,2,
 0x282c00,13,
 0x282c40,12,
 0x282c80,13,
 0x282cc0,12,
-0x282d00,6,
-0x282d20,6,
+0x282d00,14,
+0x282d40,2,
 0x282d80,14,
 0x282dc0,2,
-0x282e40,11,
+0x282e00,11,
+0x282e40,6,
+0x282e60,6,
 0x282e80,6,
 0x282ea0,6,
 0x283000,2,
-0x283010,5,
+0x283014,4,
 0x283040,3,
 0x283050,3,
-0x283060,32,
-0x283100,8,
-0x283140,8,
+0x283080,42,
+0x283140,10,
 0x283180,3,
 0x283190,2,
-0x28319c,9,
-0x283218,9,
-0x283240,3,
-0x283250,6,
-0x283280,1,
-0x283288,6,
-0x2832a4,1,
-0x2832c0,1,
-0x2832c8,6,
-0x2832e4,1,
-0x283400,8,
-0x283424,2,
+0x28319c,15,
+0x283200,9,
+0x283300,1,
+0x283308,6,
+0x283324,10,
+0x283380,1,
+0x283388,6,
+0x2833a4,10,
+0x283400,6,
+0x283420,6,
 0x283500,5,
 0x283520,4,
 0x283540,5,
 0x283560,4,
 0x283800,24,
-0x283864,5,
+0x283864,6,
 0x283880,8,
-0x283900,13,
-0x283980,4,
-0x2839a0,6,
-0x2839c0,6,
-0x2839dc,1,
-0x283a00,6,
-0x283a1c,1,
-0x283a40,1,
-0x283a60,1,
-0x283a68,23,
+0x283900,24,
+0x283964,6,
+0x283980,8,
+0x283a00,17,
+0x283a48,6,
+0x283a80,17,
 0x283ac8,6,
-0x283b00,17,
-0x283b48,6,
-0x283b80,12,
+0x283b00,6,
+0x283b20,6,
+0x283b40,3,
+0x283b80,6,
+0x283ba0,6,
+0x283bc0,3,
 0x283c00,6,
 0x283c20,6,
-0x283c40,6,
-0x283c60,3,
-0x283d00,6,
-0x283d20,6,
-0x283d40,3,
-0x283d80,6,
-0x283da0,6,
-0x283dc0,3,
+0x283c40,3,
+0x283c80,6,
+0x283ca0,6,
+0x283cc0,3,
+0x283d10,2,
+0x283d1c,1,
+0x283d50,2,
+0x283d5c,1,
+0x283d80,1,
+0x283da0,1,
+0x283da8,7,
+0x283de0,1,
+0x283de8,19,
+0x283e40,6,
+0x283e60,6,
+0x283e80,6,
+0x283ea0,6,
+0x283ec0,7,
+0x283ee0,7,
+0x283f00,12,
+0x283f40,3,
+0x283f50,8,
 0x284000,29,
 0x284078,4,
 0x284090,2,
 0x285eac,1,
 0x285eb4,3,
 0x286000,14,
-0x286070,3,
+0x286040,6,
+0x286060,6,
 0x286080,6,
+0x2860a0,3,
 0x286100,9,
 0x286204,1,
 0x28620c,6,
 0x286c94,8,
 0x286cb8,9,
 0x286ce0,4,
-0x287000,6,
-0x287020,3,
-0x287040,7,
-0x287060,6,
-0x287100,5,
-0x287138,1,
-0x287144,1,
-0x287150,2,
+0x287000,1,
+0x287028,1,
+0x287050,1,
+0x287078,1,
+0x2870a0,4,
+0x2871ac,1,
+0x2871d8,4,
+0x287200,6,
+0x287220,6,
+0x287240,3,
+0x287400,5,
+0x287438,1,
+0x287444,1,
+0x287450,4,
+0x287500,7,
+0x287520,6,
+0x287540,6,
+0x287560,3,
+0x287570,1,
 0x288000,6,
 0x288020,3,
-0x288030,1,
-0x288038,7,
+0x288030,3,
+0x288050,1,
 0x288100,6,
 0x288120,10,
 0x288150,10,
 0x2889f4,3,
 0x289000,4,
 0x289020,4,
-0x289040,3,
-0x289050,3,
-0x289080,2,
-0x2890b0,3,
-0x28912c,1,
-0x289140,6,
-0x289200,20,
-0x28925c,30,
-0x289300,24,
+0x289040,11,
+0x289070,3,
+0x289080,4,
+0x2890b0,22,
+0x289110,2,
+0x289120,22,
+0x289180,1,
+0x2891a0,6,
+0x289200,42,
+0x2892c0,1,
+0x2892c8,3,
+0x289300,25,
+0x28936c,4,
 0x289380,2,
 0x2893a0,1,
 0x2893c0,11,
 0x289480,6,
 0x289500,6,
 0x289520,6,
+0x289540,3,
+0x289550,7,
+0x289570,4,
 0x289800,410,
 0x28a000,4,
 0x28a020,4,
-0x28a040,3,
-0x28a050,3,
-0x28a080,2,
-0x28a0b0,3,
-0x28a12c,1,
-0x28a140,6,
-0x28a200,20,
-0x28a25c,30,
-0x28a300,24,
+0x28a040,11,
+0x28a070,3,
+0x28a080,4,
+0x28a0b0,22,
+0x28a110,2,
+0x28a120,22,
+0x28a180,1,
+0x28a1a0,6,
+0x28a200,42,
+0x28a2c0,1,
+0x28a2c8,3,
+0x28a300,25,
+0x28a36c,4,
 0x28a380,2,
 0x28a3a0,1,
 0x28a3c0,11,
 0x28a480,6,
 0x28a500,6,
 0x28a520,6,
+0x28a540,3,
+0x28a550,7,
+0x28a570,4,
 0x28a800,410,
 0x28b000,4,
 0x28b020,4,
-0x28b040,3,
-0x28b050,3,
-0x28b080,2,
-0x28b0b0,3,
-0x28b12c,1,
-0x28b140,6,
-0x28b200,20,
-0x28b25c,30,
-0x28b300,24,
+0x28b040,11,
+0x28b070,3,
+0x28b080,4,
+0x28b0b0,22,
+0x28b110,2,
+0x28b120,22,
+0x28b180,1,
+0x28b1a0,6,
+0x28b200,42,
+0x28b2c0,1,
+0x28b2c8,3,
+0x28b300,25,
+0x28b36c,4,
 0x28b380,2,
 0x28b3a0,1,
 0x28b3c0,11,
 0x28b480,6,
 0x28b500,6,
 0x28b520,6,
+0x28b540,3,
+0x28b550,7,
+0x28b570,4,
 0x28b800,410,
 0x28c000,4,
 0x28c020,4,
-0x28c040,3,
-0x28c050,3,
-0x28c080,2,
-0x28c0b0,3,
-0x28c12c,1,
-0x28c140,6,
-0x28c200,20,
-0x28c25c,30,
-0x28c300,24,
+0x28c040,11,
+0x28c070,3,
+0x28c080,4,
+0x28c0b0,22,
+0x28c110,2,
+0x28c120,22,
+0x28c180,1,
+0x28c1a0,6,
+0x28c200,42,
+0x28c2c0,1,
+0x28c2c8,3,
+0x28c300,25,
+0x28c36c,4,
 0x28c380,2,
 0x28c3a0,1,
 0x28c3c0,11,
 0x28c480,6,
 0x28c500,6,
 0x28c520,6,
+0x28c540,3,
+0x28c550,7,
+0x28c570,4,
 0x28c800,410,
 0x28f800,5,
 0x28f818,1,
 0x28fba4,1,
 0x28fbac,2,
 0x294000,3,
-0x294018,3,
-0x294100,25,
+0x294018,4,
+0x294100,56,
+0x2941f0,1,
 0x294400,3,
-0x294418,3,
-0x294500,25,
-0x294800,1,
+0x294418,4,
+0x294500,56,
+0x2945f0,1,
+0x294800,5,
+0x294820,3,
 0x295000,3,
-0x295018,3,
-0x295100,25,
+0x295018,4,
+0x295100,56,
+0x2951f0,1,
 0x295400,3,
-0x295418,3,
-0x295500,25,
-0x295800,1,
+0x295418,4,
+0x295500,56,
+0x2955f0,1,
+0x295800,5,
+0x295820,3,
 0x296004,7,
-0x296024,3,
+0x296024,1,
+0x296034,3,
 0x296300,5,
-0x29631c,3,
+0x29631c,1,
 0x296600,10,
 0x296630,1,
 0x296680,10,
 0x296780,10,
 0x2967b0,1,
 0x296800,47,
-0x296910,12,
-0x297000,64,
+0x296910,14,
+0x296e00,1,
+0x297000,65,
 0x298000,2,
-0x29800c,9,
-0x298040,6,
-0x298060,6,
-0x298080,2,
-0x29808c,5,
-0x2980a4,3,
-0x2980e0,1,
-0x298500,2,
-0x298518,5,
-0x298540,6,
+0x29800c,3,
+0x298028,2,
+0x298038,47,
+0x298500,6,
+0x298520,6,
+0x298540,3,
 0x298580,10,
+0x2985c0,15,
+0x298600,2,
+0x298618,5,
+0x298630,1,
 0x298800,2,
-0x29880c,9,
-0x298840,6,
-0x298860,6,
-0x298880,2,
-0x29888c,5,
-0x2988a4,3,
-0x2988e0,1,
-0x298d00,2,
-0x298d18,5,
-0x298d40,6,
+0x29880c,3,
+0x298828,2,
+0x298838,47,
+0x298d00,6,
+0x298d20,6,
+0x298d40,3,
 0x298d80,10,
-0x299800,2,
-0x299828,2,
-0x299850,2,
-0x299878,2,
+0x298dc0,15,
+0x298e00,2,
+0x298e18,5,
+0x298e30,1,
+0x299800,3,
+0x299828,3,
+0x299850,3,
+0x299878,3,
 0x2998a0,7,
 0x2999ac,1,
 0x2999d8,4,
 0x299a20,6,
 0x299a40,6,
 0x299a60,6,
-0x299a80,3,
+0x299a80,6,
+0x299aa0,6,
+0x299ac0,3,
 0x299c00,6,
 0x299c20,3,
 0x299c40,2,
 0x299c60,1,
-0x2a0000,5,
-0x2a0020,4,
-0x2a0034,17,
-0x2a0080,1,
+0x2a0000,4,
+0x2a0014,1,
+0x2a0020,3,
+0x2a0030,3,
+0x2a0040,8,
+0x2a007c,2,
 0x2a00a0,6,
-0x2a0100,5,
-0x2a0120,4,
-0x2a0134,17,
-0x2a0180,1,
+0x2a00c0,6,
+0x2a00e0,6,
+0x2a0100,4,
+0x2a0114,1,
+0x2a0120,3,
+0x2a0130,3,
+0x2a0140,8,
+0x2a017c,2,
 0x2a01a0,6,
-0x2a0200,5,
-0x2a0220,4,
-0x2a0234,17,
-0x2a0280,1,
+0x2a01c0,6,
+0x2a01e0,6,
+0x2a0200,4,
+0x2a0214,1,
+0x2a0220,3,
+0x2a0230,3,
+0x2a0240,8,
+0x2a027c,2,
 0x2a02a0,6,
-0x2a0300,5,
-0x2a0320,4,
-0x2a0334,17,
-0x2a0380,1,
+0x2a02c0,6,
+0x2a02e0,6,
+0x2a0300,4,
+0x2a0314,1,
+0x2a0320,3,
+0x2a0330,3,
+0x2a0340,8,
+0x2a037c,2,
 0x2a03a0,6,
+0x2a03c0,6,
+0x2a03e0,6,
 0x2a0400,6,
 0x2a0440,6,
 0x2a0480,3,
 0x2a04c0,3,
-0x2a0500,6,
-0x2a051c,7,
-0x2a0540,1,
+0x2a0500,2,
+0x2a050c,4,
+0x2a0520,2,
+0x2a052c,4,
+0x2a0540,2,
 0x2a0c00,13,
 0x2a0c40,12,
 0x2a0c80,13,
 0x2a0cc0,12,
-0x2a0d00,6,
-0x2a0d20,6,
+0x2a0d00,14,
+0x2a0d40,2,
 0x2a0d80,14,
 0x2a0dc0,2,
-0x2a0e40,11,
+0x2a0e00,11,
+0x2a0e40,6,
+0x2a0e60,6,
 0x2a0e80,6,
 0x2a0ea0,6,
 0x2a1000,2,
-0x2a1010,5,
+0x2a1014,4,
 0x2a1040,3,
 0x2a1050,3,
-0x2a1060,32,
-0x2a1100,8,
-0x2a1140,8,
+0x2a1080,42,
+0x2a1140,10,
 0x2a1180,3,
 0x2a1190,2,
-0x2a119c,9,
-0x2a1218,9,
-0x2a1240,3,
-0x2a1250,6,
-0x2a1280,1,
-0x2a1288,6,
-0x2a12a4,1,
-0x2a12c0,1,
-0x2a12c8,6,
-0x2a12e4,1,
-0x2a1400,8,
-0x2a1424,2,
+0x2a119c,15,
+0x2a1200,9,
+0x2a1300,1,
+0x2a1308,6,
+0x2a1324,10,
+0x2a1380,1,
+0x2a1388,6,
+0x2a13a4,10,
+0x2a1400,6,
+0x2a1420,6,
 0x2a1500,5,
 0x2a1520,4,
 0x2a1540,5,
 0x2a1560,4,
 0x2a1800,24,
-0x2a1864,5,
+0x2a1864,6,
 0x2a1880,8,
-0x2a1900,13,
-0x2a1980,4,
-0x2a19a0,6,
-0x2a19c0,6,
-0x2a19dc,1,
-0x2a1a00,6,
-0x2a1a1c,1,
-0x2a1a40,1,
-0x2a1a60,1,
-0x2a1a68,23,
+0x2a1900,24,
+0x2a1964,6,
+0x2a1980,8,
+0x2a1a00,17,
+0x2a1a48,6,
+0x2a1a80,17,
 0x2a1ac8,6,
-0x2a1b00,17,
-0x2a1b48,6,
-0x2a1b80,12,
+0x2a1b00,6,
+0x2a1b20,6,
+0x2a1b40,3,
+0x2a1b80,6,
+0x2a1ba0,6,
+0x2a1bc0,3,
 0x2a1c00,6,
 0x2a1c20,6,
-0x2a1c40,6,
-0x2a1c60,3,
-0x2a1d00,6,
-0x2a1d20,6,
-0x2a1d40,3,
-0x2a1d80,6,
-0x2a1da0,6,
-0x2a1dc0,3,
-0x2a2000,5,
-0x2a2020,4,
-0x2a2034,17,
-0x2a2080,1,
+0x2a1c40,3,
+0x2a1c80,6,
+0x2a1ca0,6,
+0x2a1cc0,3,
+0x2a1d10,2,
+0x2a1d1c,1,
+0x2a1d50,2,
+0x2a1d5c,1,
+0x2a1d80,1,
+0x2a1da0,1,
+0x2a1da8,7,
+0x2a1de0,1,
+0x2a1de8,19,
+0x2a1e40,6,
+0x2a1e60,6,
+0x2a1e80,6,
+0x2a1ea0,6,
+0x2a1ec0,7,
+0x2a1ee0,7,
+0x2a1f00,12,
+0x2a1f40,3,
+0x2a1f50,8,
+0x2a2000,4,
+0x2a2014,1,
+0x2a2020,3,
+0x2a2030,3,
+0x2a2040,8,
+0x2a207c,2,
 0x2a20a0,6,
-0x2a2100,5,
-0x2a2120,4,
-0x2a2134,17,
-0x2a2180,1,
+0x2a20c0,6,
+0x2a20e0,6,
+0x2a2100,4,
+0x2a2114,1,
+0x2a2120,3,
+0x2a2130,3,
+0x2a2140,8,
+0x2a217c,2,
 0x2a21a0,6,
-0x2a2200,5,
-0x2a2220,4,
-0x2a2234,17,
-0x2a2280,1,
+0x2a21c0,6,
+0x2a21e0,6,
+0x2a2200,4,
+0x2a2214,1,
+0x2a2220,3,
+0x2a2230,3,
+0x2a2240,8,
+0x2a227c,2,
 0x2a22a0,6,
-0x2a2300,5,
-0x2a2320,4,
-0x2a2334,17,
-0x2a2380,1,
+0x2a22c0,6,
+0x2a22e0,6,
+0x2a2300,4,
+0x2a2314,1,
+0x2a2320,3,
+0x2a2330,3,
+0x2a2340,8,
+0x2a237c,2,
 0x2a23a0,6,
+0x2a23c0,6,
+0x2a23e0,6,
 0x2a2400,6,
 0x2a2440,6,
 0x2a2480,3,
 0x2a24c0,3,
-0x2a2500,6,
-0x2a251c,7,
-0x2a2540,1,
+0x2a2500,2,
+0x2a250c,4,
+0x2a2520,2,
+0x2a252c,4,
+0x2a2540,2,
 0x2a2c00,13,
 0x2a2c40,12,
 0x2a2c80,13,
 0x2a2cc0,12,
-0x2a2d00,6,
-0x2a2d20,6,
+0x2a2d00,14,
+0x2a2d40,2,
 0x2a2d80,14,
 0x2a2dc0,2,
-0x2a2e40,11,
+0x2a2e00,11,
+0x2a2e40,6,
+0x2a2e60,6,
 0x2a2e80,6,
 0x2a2ea0,6,
 0x2a3000,2,
-0x2a3010,5,
+0x2a3014,4,
 0x2a3040,3,
 0x2a3050,3,
-0x2a3060,32,
-0x2a3100,8,
-0x2a3140,8,
+0x2a3080,42,
+0x2a3140,10,
 0x2a3180,3,
 0x2a3190,2,
-0x2a319c,9,
-0x2a3218,9,
-0x2a3240,3,
-0x2a3250,6,
-0x2a3280,1,
-0x2a3288,6,
-0x2a32a4,1,
-0x2a32c0,1,
-0x2a32c8,6,
-0x2a32e4,1,
-0x2a3400,8,
-0x2a3424,2,
+0x2a319c,15,
+0x2a3200,9,
+0x2a3300,1,
+0x2a3308,6,
+0x2a3324,10,
+0x2a3380,1,
+0x2a3388,6,
+0x2a33a4,10,
+0x2a3400,6,
+0x2a3420,6,
 0x2a3500,5,
 0x2a3520,4,
 0x2a3540,5,
 0x2a3560,4,
 0x2a3800,24,
-0x2a3864,5,
+0x2a3864,6,
 0x2a3880,8,
-0x2a3900,13,
-0x2a3980,4,
-0x2a39a0,6,
-0x2a39c0,6,
-0x2a39dc,1,
-0x2a3a00,6,
-0x2a3a1c,1,
-0x2a3a40,1,
-0x2a3a60,1,
-0x2a3a68,23,
+0x2a3900,24,
+0x2a3964,6,
+0x2a3980,8,
+0x2a3a00,17,
+0x2a3a48,6,
+0x2a3a80,17,
 0x2a3ac8,6,
-0x2a3b00,17,
-0x2a3b48,6,
-0x2a3b80,12,
+0x2a3b00,6,
+0x2a3b20,6,
+0x2a3b40,3,
+0x2a3b80,6,
+0x2a3ba0,6,
+0x2a3bc0,3,
 0x2a3c00,6,
 0x2a3c20,6,
-0x2a3c40,6,
-0x2a3c60,3,
-0x2a3d00,6,
-0x2a3d20,6,
-0x2a3d40,3,
-0x2a3d80,6,
-0x2a3da0,6,
-0x2a3dc0,3,
+0x2a3c40,3,
+0x2a3c80,6,
+0x2a3ca0,6,
+0x2a3cc0,3,
+0x2a3d10,2,
+0x2a3d1c,1,
+0x2a3d50,2,
+0x2a3d5c,1,
+0x2a3d80,1,
+0x2a3da0,1,
+0x2a3da8,7,
+0x2a3de0,1,
+0x2a3de8,19,
+0x2a3e40,6,
+0x2a3e60,6,
+0x2a3e80,6,
+0x2a3ea0,6,
+0x2a3ec0,7,
+0x2a3ee0,7,
+0x2a3f00,12,
+0x2a3f40,3,
+0x2a3f50,8,
 0x2a4000,29,
 0x2a4078,4,
 0x2a4090,2,
 0x2a5eac,1,
 0x2a5eb4,3,
 0x2a6000,14,
-0x2a6070,3,
+0x2a6040,6,
+0x2a6060,6,
 0x2a6080,6,
+0x2a60a0,3,
 0x2a6100,9,
 0x2a6204,1,
 0x2a620c,6,
 0x2a6c94,8,
 0x2a6cb8,9,
 0x2a6ce0,4,
-0x2a7000,6,
-0x2a7020,3,
-0x2a7040,7,
-0x2a7060,6,
-0x2a7100,5,
-0x2a7138,1,
-0x2a7144,1,
-0x2a7150,2,
+0x2a7000,1,
+0x2a7028,1,
+0x2a7050,1,
+0x2a7078,1,
+0x2a70a0,4,
+0x2a71ac,1,
+0x2a71d8,4,
+0x2a7200,6,
+0x2a7220,6,
+0x2a7240,3,
+0x2a7400,5,
+0x2a7438,1,
+0x2a7444,1,
+0x2a7450,4,
+0x2a7500,7,
+0x2a7520,6,
+0x2a7540,6,
+0x2a7560,3,
+0x2a7570,1,
 0x2a8000,6,
 0x2a8020,3,
-0x2a8030,1,
-0x2a8038,7,
+0x2a8030,3,
+0x2a8050,1,
 0x2a8100,6,
 0x2a8120,10,
 0x2a8150,10,
 0x2a89f4,3,
 0x2a9000,4,
 0x2a9020,4,
-0x2a9040,3,
-0x2a9050,3,
-0x2a9080,2,
-0x2a90b0,3,
-0x2a912c,1,
-0x2a9140,6,
-0x2a9200,20,
-0x2a925c,30,
-0x2a9300,24,
+0x2a9040,11,
+0x2a9070,3,
+0x2a9080,4,
+0x2a90b0,22,
+0x2a9110,2,
+0x2a9120,22,
+0x2a9180,1,
+0x2a91a0,6,
+0x2a9200,42,
+0x2a92c0,1,
+0x2a92c8,3,
+0x2a9300,25,
+0x2a936c,4,
 0x2a9380,2,
 0x2a93a0,1,
 0x2a93c0,11,
 0x2a9480,6,
 0x2a9500,6,
 0x2a9520,6,
+0x2a9540,3,
+0x2a9550,7,
+0x2a9570,4,
 0x2a9800,410,
 0x2aa000,4,
 0x2aa020,4,
-0x2aa040,3,
-0x2aa050,3,
-0x2aa080,2,
-0x2aa0b0,3,
-0x2aa12c,1,
-0x2aa140,6,
-0x2aa200,20,
-0x2aa25c,30,
-0x2aa300,24,
+0x2aa040,11,
+0x2aa070,3,
+0x2aa080,4,
+0x2aa0b0,22,
+0x2aa110,2,
+0x2aa120,22,
+0x2aa180,1,
+0x2aa1a0,6,
+0x2aa200,42,
+0x2aa2c0,1,
+0x2aa2c8,3,
+0x2aa300,25,
+0x2aa36c,4,
 0x2aa380,2,
 0x2aa3a0,1,
 0x2aa3c0,11,
 0x2aa480,6,
 0x2aa500,6,
 0x2aa520,6,
+0x2aa540,3,
+0x2aa550,7,
+0x2aa570,4,
 0x2aa800,410,
 0x2ab000,4,
 0x2ab020,4,
-0x2ab040,3,
-0x2ab050,3,
-0x2ab080,2,
-0x2ab0b0,3,
-0x2ab12c,1,
-0x2ab140,6,
-0x2ab200,20,
-0x2ab25c,30,
-0x2ab300,24,
+0x2ab040,11,
+0x2ab070,3,
+0x2ab080,4,
+0x2ab0b0,22,
+0x2ab110,2,
+0x2ab120,22,
+0x2ab180,1,
+0x2ab1a0,6,
+0x2ab200,42,
+0x2ab2c0,1,
+0x2ab2c8,3,
+0x2ab300,25,
+0x2ab36c,4,
 0x2ab380,2,
 0x2ab3a0,1,
 0x2ab3c0,11,
 0x2ab480,6,
 0x2ab500,6,
 0x2ab520,6,
+0x2ab540,3,
+0x2ab550,7,
+0x2ab570,4,
 0x2ab800,410,
 0x2ac000,4,
 0x2ac020,4,
-0x2ac040,3,
-0x2ac050,3,
-0x2ac080,2,
-0x2ac0b0,3,
-0x2ac12c,1,
-0x2ac140,6,
-0x2ac200,20,
-0x2ac25c,30,
-0x2ac300,24,
+0x2ac040,11,
+0x2ac070,3,
+0x2ac080,4,
+0x2ac0b0,22,
+0x2ac110,2,
+0x2ac120,22,
+0x2ac180,1,
+0x2ac1a0,6,
+0x2ac200,42,
+0x2ac2c0,1,
+0x2ac2c8,3,
+0x2ac300,25,
+0x2ac36c,4,
 0x2ac380,2,
 0x2ac3a0,1,
 0x2ac3c0,11,
 0x2ac480,6,
 0x2ac500,6,
 0x2ac520,6,
+0x2ac540,3,
+0x2ac550,7,
+0x2ac570,4,
 0x2ac800,410,
 0x2af800,5,
 0x2af818,1,
 0x2afba4,1,
 0x2afbac,2,
 0x2b4000,3,
-0x2b4018,3,
-0x2b4100,25,
+0x2b4018,4,
+0x2b4100,56,
+0x2b41f0,1,
 0x2b4400,3,
-0x2b4418,3,
-0x2b4500,25,
-0x2b4800,1,
+0x2b4418,4,
+0x2b4500,56,
+0x2b45f0,1,
+0x2b4800,5,
+0x2b4820,3,
 0x2b5000,3,
-0x2b5018,3,
-0x2b5100,25,
+0x2b5018,4,
+0x2b5100,56,
+0x2b51f0,1,
 0x2b5400,3,
-0x2b5418,3,
-0x2b5500,25,
-0x2b5800,1,
+0x2b5418,4,
+0x2b5500,56,
+0x2b55f0,1,
+0x2b5800,5,
+0x2b5820,3,
 0x2b6004,7,
-0x2b6024,3,
+0x2b6024,1,
+0x2b6034,3,
 0x2b6300,5,
-0x2b631c,3,
+0x2b631c,1,
 0x2b6600,10,
 0x2b6630,1,
 0x2b6680,10,
 0x2b6780,10,
 0x2b67b0,1,
 0x2b6800,47,
-0x2b6910,12,
-0x2b7000,64,
+0x2b6910,14,
+0x2b6e00,1,
+0x2b7000,65,
 0x2b8000,2,
-0x2b800c,9,
-0x2b8040,6,
-0x2b8060,6,
-0x2b8080,2,
-0x2b808c,5,
-0x2b80a4,3,
-0x2b80e0,1,
-0x2b8500,2,
-0x2b8518,5,
-0x2b8540,6,
+0x2b800c,3,
+0x2b8028,2,
+0x2b8038,47,
+0x2b8500,6,
+0x2b8520,6,
+0x2b8540,3,
 0x2b8580,10,
+0x2b85c0,15,
+0x2b8600,2,
+0x2b8618,5,
+0x2b8630,1,
 0x2b8800,2,
-0x2b880c,9,
-0x2b8840,6,
-0x2b8860,6,
-0x2b8880,2,
-0x2b888c,5,
-0x2b88a4,3,
-0x2b88e0,1,
-0x2b8d00,2,
-0x2b8d18,5,
-0x2b8d40,6,
+0x2b880c,3,
+0x2b8828,2,
+0x2b8838,47,
+0x2b8d00,6,
+0x2b8d20,6,
+0x2b8d40,3,
 0x2b8d80,10,
-0x2b9800,2,
-0x2b9828,2,
-0x2b9850,2,
-0x2b9878,2,
+0x2b8dc0,15,
+0x2b8e00,2,
+0x2b8e18,5,
+0x2b8e30,1,
+0x2b9800,3,
+0x2b9828,3,
+0x2b9850,3,
+0x2b9878,3,
 0x2b98a0,7,
 0x2b99ac,1,
 0x2b99d8,4,
 0x2b9a20,6,
 0x2b9a40,6,
 0x2b9a60,6,
-0x2b9a80,3,
+0x2b9a80,6,
+0x2b9aa0,6,
+0x2b9ac0,3,
 0x2b9c00,6,
 0x2b9c20,3,
 0x2b9c40,2,
 0x2b9c60,1,
-0x2c0000,5,
-0x2c0020,4,
-0x2c0034,17,
-0x2c0080,1,
+0x2c0000,4,
+0x2c0014,1,
+0x2c0020,3,
+0x2c0030,3,
+0x2c0040,8,
+0x2c007c,2,
 0x2c00a0,6,
-0x2c0100,5,
-0x2c0120,4,
-0x2c0134,17,
-0x2c0180,1,
+0x2c00c0,6,
+0x2c00e0,6,
+0x2c0100,4,
+0x2c0114,1,
+0x2c0120,3,
+0x2c0130,3,
+0x2c0140,8,
+0x2c017c,2,
 0x2c01a0,6,
-0x2c0200,5,
-0x2c0220,4,
-0x2c0234,17,
-0x2c0280,1,
+0x2c01c0,6,
+0x2c01e0,6,
+0x2c0200,4,
+0x2c0214,1,
+0x2c0220,3,
+0x2c0230,3,
+0x2c0240,8,
+0x2c027c,2,
 0x2c02a0,6,
-0x2c0300,5,
-0x2c0320,4,
-0x2c0334,17,
-0x2c0380,1,
+0x2c02c0,6,
+0x2c02e0,6,
+0x2c0300,4,
+0x2c0314,1,
+0x2c0320,3,
+0x2c0330,3,
+0x2c0340,8,
+0x2c037c,2,
 0x2c03a0,6,
+0x2c03c0,6,
+0x2c03e0,6,
 0x2c0400,6,
 0x2c0440,6,
 0x2c0480,3,
 0x2c04c0,3,
-0x2c0500,6,
-0x2c051c,7,
-0x2c0540,1,
+0x2c0500,2,
+0x2c050c,4,
+0x2c0520,2,
+0x2c052c,4,
+0x2c0540,2,
 0x2c0c00,13,
 0x2c0c40,12,
 0x2c0c80,13,
 0x2c0cc0,12,
-0x2c0d00,6,
-0x2c0d20,6,
+0x2c0d00,14,
+0x2c0d40,2,
 0x2c0d80,14,
 0x2c0dc0,2,
-0x2c0e40,11,
+0x2c0e00,11,
+0x2c0e40,6,
+0x2c0e60,6,
 0x2c0e80,6,
 0x2c0ea0,6,
 0x2c1000,2,
-0x2c1010,5,
+0x2c1014,4,
 0x2c1040,3,
 0x2c1050,3,
-0x2c1060,32,
-0x2c1100,8,
-0x2c1140,8,
+0x2c1080,42,
+0x2c1140,10,
 0x2c1180,3,
 0x2c1190,2,
-0x2c119c,9,
-0x2c1218,9,
-0x2c1240,3,
-0x2c1250,6,
-0x2c1280,1,
-0x2c1288,6,
-0x2c12a4,1,
-0x2c12c0,1,
-0x2c12c8,6,
-0x2c12e4,1,
-0x2c1400,8,
-0x2c1424,2,
+0x2c119c,15,
+0x2c1200,9,
+0x2c1300,1,
+0x2c1308,6,
+0x2c1324,10,
+0x2c1380,1,
+0x2c1388,6,
+0x2c13a4,10,
+0x2c1400,6,
+0x2c1420,6,
 0x2c1500,5,
 0x2c1520,4,
 0x2c1540,5,
 0x2c1560,4,
 0x2c1800,24,
-0x2c1864,5,
+0x2c1864,6,
 0x2c1880,8,
-0x2c1900,13,
-0x2c1980,4,
-0x2c19a0,6,
-0x2c19c0,6,
-0x2c19dc,1,
-0x2c1a00,6,
-0x2c1a1c,1,
-0x2c1a40,1,
-0x2c1a60,1,
-0x2c1a68,23,
+0x2c1900,24,
+0x2c1964,6,
+0x2c1980,8,
+0x2c1a00,17,
+0x2c1a48,6,
+0x2c1a80,17,
 0x2c1ac8,6,
-0x2c1b00,17,
-0x2c1b48,6,
-0x2c1b80,12,
+0x2c1b00,6,
+0x2c1b20,6,
+0x2c1b40,3,
+0x2c1b80,6,
+0x2c1ba0,6,
+0x2c1bc0,3,
 0x2c1c00,6,
 0x2c1c20,6,
-0x2c1c40,6,
-0x2c1c60,3,
-0x2c1d00,6,
-0x2c1d20,6,
-0x2c1d40,3,
-0x2c1d80,6,
-0x2c1da0,6,
-0x2c1dc0,3,
-0x2c2000,5,
-0x2c2020,4,
-0x2c2034,17,
-0x2c2080,1,
+0x2c1c40,3,
+0x2c1c80,6,
+0x2c1ca0,6,
+0x2c1cc0,3,
+0x2c1d10,2,
+0x2c1d1c,1,
+0x2c1d50,2,
+0x2c1d5c,1,
+0x2c1d80,1,
+0x2c1da0,1,
+0x2c1da8,7,
+0x2c1de0,1,
+0x2c1de8,19,
+0x2c1e40,6,
+0x2c1e60,6,
+0x2c1e80,6,
+0x2c1ea0,6,
+0x2c1ec0,7,
+0x2c1ee0,7,
+0x2c1f00,12,
+0x2c1f40,3,
+0x2c1f50,8,
+0x2c2000,4,
+0x2c2014,1,
+0x2c2020,3,
+0x2c2030,3,
+0x2c2040,8,
+0x2c207c,2,
 0x2c20a0,6,
-0x2c2100,5,
-0x2c2120,4,
-0x2c2134,17,
-0x2c2180,1,
+0x2c20c0,6,
+0x2c20e0,6,
+0x2c2100,4,
+0x2c2114,1,
+0x2c2120,3,
+0x2c2130,3,
+0x2c2140,8,
+0x2c217c,2,
 0x2c21a0,6,
-0x2c2200,5,
-0x2c2220,4,
-0x2c2234,17,
-0x2c2280,1,
+0x2c21c0,6,
+0x2c21e0,6,
+0x2c2200,4,
+0x2c2214,1,
+0x2c2220,3,
+0x2c2230,3,
+0x2c2240,8,
+0x2c227c,2,
 0x2c22a0,6,
-0x2c2300,5,
-0x2c2320,4,
-0x2c2334,17,
-0x2c2380,1,
+0x2c22c0,6,
+0x2c22e0,6,
+0x2c2300,4,
+0x2c2314,1,
+0x2c2320,3,
+0x2c2330,3,
+0x2c2340,8,
+0x2c237c,2,
 0x2c23a0,6,
+0x2c23c0,6,
+0x2c23e0,6,
 0x2c2400,6,
 0x2c2440,6,
 0x2c2480,3,
 0x2c24c0,3,
-0x2c2500,6,
-0x2c251c,7,
-0x2c2540,1,
+0x2c2500,2,
+0x2c250c,4,
+0x2c2520,2,
+0x2c252c,4,
+0x2c2540,2,
 0x2c2c00,13,
 0x2c2c40,12,
 0x2c2c80,13,
 0x2c2cc0,12,
-0x2c2d00,6,
-0x2c2d20,6,
+0x2c2d00,14,
+0x2c2d40,2,
 0x2c2d80,14,
 0x2c2dc0,2,
-0x2c2e40,11,
+0x2c2e00,11,
+0x2c2e40,6,
+0x2c2e60,6,
 0x2c2e80,6,
 0x2c2ea0,6,
 0x2c3000,2,
-0x2c3010,5,
+0x2c3014,4,
 0x2c3040,3,
 0x2c3050,3,
-0x2c3060,32,
-0x2c3100,8,
-0x2c3140,8,
+0x2c3080,42,
+0x2c3140,10,
 0x2c3180,3,
 0x2c3190,2,
-0x2c319c,9,
-0x2c3218,9,
-0x2c3240,3,
-0x2c3250,6,
-0x2c3280,1,
-0x2c3288,6,
-0x2c32a4,1,
-0x2c32c0,1,
-0x2c32c8,6,
-0x2c32e4,1,
-0x2c3400,8,
-0x2c3424,2,
+0x2c319c,15,
+0x2c3200,9,
+0x2c3300,1,
+0x2c3308,6,
+0x2c3324,10,
+0x2c3380,1,
+0x2c3388,6,
+0x2c33a4,10,
+0x2c3400,6,
+0x2c3420,6,
 0x2c3500,5,
 0x2c3520,4,
 0x2c3540,5,
 0x2c3560,4,
 0x2c3800,24,
-0x2c3864,5,
+0x2c3864,6,
 0x2c3880,8,
-0x2c3900,13,
-0x2c3980,4,
-0x2c39a0,6,
-0x2c39c0,6,
-0x2c39dc,1,
-0x2c3a00,6,
-0x2c3a1c,1,
-0x2c3a40,1,
-0x2c3a60,1,
-0x2c3a68,23,
+0x2c3900,24,
+0x2c3964,6,
+0x2c3980,8,
+0x2c3a00,17,
+0x2c3a48,6,
+0x2c3a80,17,
 0x2c3ac8,6,
-0x2c3b00,17,
-0x2c3b48,6,
-0x2c3b80,12,
+0x2c3b00,6,
+0x2c3b20,6,
+0x2c3b40,3,
+0x2c3b80,6,
+0x2c3ba0,6,
+0x2c3bc0,3,
 0x2c3c00,6,
 0x2c3c20,6,
-0x2c3c40,6,
-0x2c3c60,3,
-0x2c3d00,6,
-0x2c3d20,6,
-0x2c3d40,3,
-0x2c3d80,6,
-0x2c3da0,6,
-0x2c3dc0,3,
+0x2c3c40,3,
+0x2c3c80,6,
+0x2c3ca0,6,
+0x2c3cc0,3,
+0x2c3d10,2,
+0x2c3d1c,1,
+0x2c3d50,2,
+0x2c3d5c,1,
+0x2c3d80,1,
+0x2c3da0,1,
+0x2c3da8,7,
+0x2c3de0,1,
+0x2c3de8,19,
+0x2c3e40,6,
+0x2c3e60,6,
+0x2c3e80,6,
+0x2c3ea0,6,
+0x2c3ec0,7,
+0x2c3ee0,7,
+0x2c3f00,12,
+0x2c3f40,3,
+0x2c3f50,8,
 0x2c4000,29,
 0x2c4078,4,
 0x2c4090,2,
 0x2c5eac,1,
 0x2c5eb4,3,
 0x2c6000,14,
-0x2c6070,3,
+0x2c6040,6,
+0x2c6060,6,
 0x2c6080,6,
+0x2c60a0,3,
 0x2c6100,9,
 0x2c6204,1,
 0x2c620c,6,
 0x2c6c94,8,
 0x2c6cb8,9,
 0x2c6ce0,4,
-0x2c7000,6,
-0x2c7020,3,
-0x2c7040,7,
-0x2c7060,6,
-0x2c7100,5,
-0x2c7138,1,
-0x2c7144,1,
-0x2c7150,2,
+0x2c7000,1,
+0x2c7028,1,
+0x2c7050,1,
+0x2c7078,1,
+0x2c70a0,4,
+0x2c71ac,1,
+0x2c71d8,4,
+0x2c7200,6,
+0x2c7220,6,
+0x2c7240,3,
+0x2c7400,5,
+0x2c7438,1,
+0x2c7444,1,
+0x2c7450,4,
+0x2c7500,7,
+0x2c7520,6,
+0x2c7540,6,
+0x2c7560,3,
+0x2c7570,1,
 0x2c8000,6,
 0x2c8020,3,
-0x2c8030,1,
-0x2c8038,7,
+0x2c8030,3,
+0x2c8050,1,
 0x2c8100,6,
 0x2c8120,10,
 0x2c8150,10,
 0x2c89f4,3,
 0x2c9000,4,
 0x2c9020,4,
-0x2c9040,3,
-0x2c9050,3,
-0x2c9080,2,
-0x2c90b0,3,
-0x2c912c,1,
-0x2c9140,6,
-0x2c9200,20,
-0x2c925c,30,
-0x2c9300,24,
+0x2c9040,11,
+0x2c9070,3,
+0x2c9080,4,
+0x2c90b0,22,
+0x2c9110,2,
+0x2c9120,22,
+0x2c9180,1,
+0x2c91a0,6,
+0x2c9200,42,
+0x2c92c0,1,
+0x2c92c8,3,
+0x2c9300,25,
+0x2c936c,4,
 0x2c9380,2,
 0x2c93a0,1,
 0x2c93c0,11,
 0x2c9480,6,
 0x2c9500,6,
 0x2c9520,6,
+0x2c9540,3,
+0x2c9550,7,
+0x2c9570,4,
 0x2c9800,410,
 0x2ca000,4,
 0x2ca020,4,
-0x2ca040,3,
-0x2ca050,3,
-0x2ca080,2,
-0x2ca0b0,3,
-0x2ca12c,1,
-0x2ca140,6,
-0x2ca200,20,
-0x2ca25c,30,
-0x2ca300,24,
+0x2ca040,11,
+0x2ca070,3,
+0x2ca080,4,
+0x2ca0b0,22,
+0x2ca110,2,
+0x2ca120,22,
+0x2ca180,1,
+0x2ca1a0,6,
+0x2ca200,42,
+0x2ca2c0,1,
+0x2ca2c8,3,
+0x2ca300,25,
+0x2ca36c,4,
 0x2ca380,2,
 0x2ca3a0,1,
 0x2ca3c0,11,
 0x2ca480,6,
 0x2ca500,6,
 0x2ca520,6,
+0x2ca540,3,
+0x2ca550,7,
+0x2ca570,4,
 0x2ca800,410,
 0x2cb000,4,
 0x2cb020,4,
-0x2cb040,3,
-0x2cb050,3,
-0x2cb080,2,
-0x2cb0b0,3,
-0x2cb12c,1,
-0x2cb140,6,
-0x2cb200,20,
-0x2cb25c,30,
-0x2cb300,24,
+0x2cb040,11,
+0x2cb070,3,
+0x2cb080,4,
+0x2cb0b0,22,
+0x2cb110,2,
+0x2cb120,22,
+0x2cb180,1,
+0x2cb1a0,6,
+0x2cb200,42,
+0x2cb2c0,1,
+0x2cb2c8,3,
+0x2cb300,25,
+0x2cb36c,4,
 0x2cb380,2,
 0x2cb3a0,1,
 0x2cb3c0,11,
 0x2cb480,6,
 0x2cb500,6,
 0x2cb520,6,
+0x2cb540,3,
+0x2cb550,7,
+0x2cb570,4,
 0x2cb800,410,
 0x2cc000,4,
 0x2cc020,4,
-0x2cc040,3,
-0x2cc050,3,
-0x2cc080,2,
-0x2cc0b0,3,
-0x2cc12c,1,
-0x2cc140,6,
-0x2cc200,20,
-0x2cc25c,30,
-0x2cc300,24,
+0x2cc040,11,
+0x2cc070,3,
+0x2cc080,4,
+0x2cc0b0,22,
+0x2cc110,2,
+0x2cc120,22,
+0x2cc180,1,
+0x2cc1a0,6,
+0x2cc200,42,
+0x2cc2c0,1,
+0x2cc2c8,3,
+0x2cc300,25,
+0x2cc36c,4,
 0x2cc380,2,
 0x2cc3a0,1,
 0x2cc3c0,11,
 0x2cc480,6,
 0x2cc500,6,
 0x2cc520,6,
+0x2cc540,3,
+0x2cc550,7,
+0x2cc570,4,
 0x2cc800,410,
 0x2cf800,5,
 0x2cf818,1,
 0x2cfba4,1,
 0x2cfbac,2,
 0x2d4000,3,
-0x2d4018,3,
-0x2d4100,25,
+0x2d4018,4,
+0x2d4100,56,
+0x2d41f0,1,
 0x2d4400,3,
-0x2d4418,3,
-0x2d4500,25,
-0x2d4800,1,
+0x2d4418,4,
+0x2d4500,56,
+0x2d45f0,1,
+0x2d4800,5,
+0x2d4820,3,
 0x2d5000,3,
-0x2d5018,3,
-0x2d5100,25,
+0x2d5018,4,
+0x2d5100,56,
+0x2d51f0,1,
 0x2d5400,3,
-0x2d5418,3,
-0x2d5500,25,
-0x2d5800,1,
+0x2d5418,4,
+0x2d5500,56,
+0x2d55f0,1,
+0x2d5800,5,
+0x2d5820,3,
 0x2d6004,7,
-0x2d6024,3,
+0x2d6024,1,
+0x2d6034,3,
 0x2d6300,5,
-0x2d631c,3,
+0x2d631c,1,
 0x2d6600,10,
 0x2d6630,1,
 0x2d6680,10,
 0x2d6780,10,
 0x2d67b0,1,
 0x2d6800,47,
-0x2d6910,12,
-0x2d7000,64,
+0x2d6910,14,
+0x2d6e00,1,
+0x2d7000,65,
 0x2d8000,2,
-0x2d800c,9,
-0x2d8040,6,
-0x2d8060,6,
-0x2d8080,2,
-0x2d808c,5,
-0x2d80a4,3,
-0x2d80e0,1,
-0x2d8500,2,
-0x2d8518,5,
-0x2d8540,6,
+0x2d800c,3,
+0x2d8028,2,
+0x2d8038,47,
+0x2d8500,6,
+0x2d8520,6,
+0x2d8540,3,
 0x2d8580,10,
+0x2d85c0,15,
+0x2d8600,2,
+0x2d8618,5,
+0x2d8630,1,
 0x2d8800,2,
-0x2d880c,9,
-0x2d8840,6,
-0x2d8860,6,
-0x2d8880,2,
-0x2d888c,5,
-0x2d88a4,3,
-0x2d88e0,1,
-0x2d8d00,2,
-0x2d8d18,5,
-0x2d8d40,6,
+0x2d880c,3,
+0x2d8828,2,
+0x2d8838,47,
+0x2d8d00,6,
+0x2d8d20,6,
+0x2d8d40,3,
 0x2d8d80,10,
-0x2d9800,2,
-0x2d9828,2,
-0x2d9850,2,
-0x2d9878,2,
+0x2d8dc0,15,
+0x2d8e00,2,
+0x2d8e18,5,
+0x2d8e30,1,
+0x2d9800,3,
+0x2d9828,3,
+0x2d9850,3,
+0x2d9878,3,
 0x2d98a0,7,
 0x2d99ac,1,
 0x2d99d8,4,
 0x2d9a20,6,
 0x2d9a40,6,
 0x2d9a60,6,
-0x2d9a80,3,
+0x2d9a80,6,
+0x2d9aa0,6,
+0x2d9ac0,3,
 0x2d9c00,6,
 0x2d9c20,3,
 0x2d9c40,2,
 0x2d9c60,1,
-0x2e0000,5,
-0x2e0020,4,
-0x2e0034,17,
-0x2e0080,1,
+0x2e0000,4,
+0x2e0014,1,
+0x2e0020,3,
+0x2e0030,3,
+0x2e0040,8,
+0x2e007c,2,
 0x2e00a0,6,
-0x2e0100,5,
-0x2e0120,4,
-0x2e0134,17,
-0x2e0180,1,
+0x2e00c0,6,
+0x2e00e0,6,
+0x2e0100,4,
+0x2e0114,1,
+0x2e0120,3,
+0x2e0130,3,
+0x2e0140,8,
+0x2e017c,2,
 0x2e01a0,6,
-0x2e0200,5,
-0x2e0220,4,
-0x2e0234,17,
-0x2e0280,1,
+0x2e01c0,6,
+0x2e01e0,6,
+0x2e0200,4,
+0x2e0214,1,
+0x2e0220,3,
+0x2e0230,3,
+0x2e0240,8,
+0x2e027c,2,
 0x2e02a0,6,
-0x2e0300,5,
-0x2e0320,4,
-0x2e0334,17,
-0x2e0380,1,
+0x2e02c0,6,
+0x2e02e0,6,
+0x2e0300,4,
+0x2e0314,1,
+0x2e0320,3,
+0x2e0330,3,
+0x2e0340,8,
+0x2e037c,2,
 0x2e03a0,6,
+0x2e03c0,6,
+0x2e03e0,6,
 0x2e0400,6,
 0x2e0440,6,
 0x2e0480,3,
 0x2e04c0,3,
-0x2e0500,6,
-0x2e051c,7,
-0x2e0540,1,
+0x2e0500,2,
+0x2e050c,4,
+0x2e0520,2,
+0x2e052c,4,
+0x2e0540,2,
 0x2e0c00,13,
 0x2e0c40,12,
 0x2e0c80,13,
 0x2e0cc0,12,
-0x2e0d00,6,
-0x2e0d20,6,
+0x2e0d00,14,
+0x2e0d40,2,
 0x2e0d80,14,
 0x2e0dc0,2,
-0x2e0e40,11,
+0x2e0e00,11,
+0x2e0e40,6,
+0x2e0e60,6,
 0x2e0e80,6,
 0x2e0ea0,6,
 0x2e1000,2,
-0x2e1010,5,
+0x2e1014,4,
 0x2e1040,3,
 0x2e1050,3,
-0x2e1060,32,
-0x2e1100,8,
-0x2e1140,8,
+0x2e1080,42,
+0x2e1140,10,
 0x2e1180,3,
 0x2e1190,2,
-0x2e119c,9,
-0x2e1218,9,
-0x2e1240,3,
-0x2e1250,6,
-0x2e1280,1,
-0x2e1288,6,
-0x2e12a4,1,
-0x2e12c0,1,
-0x2e12c8,6,
-0x2e12e4,1,
-0x2e1400,8,
-0x2e1424,2,
+0x2e119c,15,
+0x2e1200,9,
+0x2e1300,1,
+0x2e1308,6,
+0x2e1324,10,
+0x2e1380,1,
+0x2e1388,6,
+0x2e13a4,10,
+0x2e1400,6,
+0x2e1420,6,
 0x2e1500,5,
 0x2e1520,4,
 0x2e1540,5,
 0x2e1560,4,
 0x2e1800,24,
-0x2e1864,5,
+0x2e1864,6,
 0x2e1880,8,
-0x2e1900,13,
-0x2e1980,4,
-0x2e19a0,6,
-0x2e19c0,6,
-0x2e19dc,1,
-0x2e1a00,6,
-0x2e1a1c,1,
-0x2e1a40,1,
-0x2e1a60,1,
-0x2e1a68,23,
+0x2e1900,24,
+0x2e1964,6,
+0x2e1980,8,
+0x2e1a00,17,
+0x2e1a48,6,
+0x2e1a80,17,
 0x2e1ac8,6,
-0x2e1b00,17,
-0x2e1b48,6,
-0x2e1b80,12,
+0x2e1b00,6,
+0x2e1b20,6,
+0x2e1b40,3,
+0x2e1b80,6,
+0x2e1ba0,6,
+0x2e1bc0,3,
 0x2e1c00,6,
 0x2e1c20,6,
-0x2e1c40,6,
-0x2e1c60,3,
-0x2e1d00,6,
-0x2e1d20,6,
-0x2e1d40,3,
-0x2e1d80,6,
-0x2e1da0,6,
-0x2e1dc0,3,
-0x2e2000,5,
-0x2e2020,4,
-0x2e2034,17,
-0x2e2080,1,
+0x2e1c40,3,
+0x2e1c80,6,
+0x2e1ca0,6,
+0x2e1cc0,3,
+0x2e1d10,2,
+0x2e1d1c,1,
+0x2e1d50,2,
+0x2e1d5c,1,
+0x2e1d80,1,
+0x2e1da0,1,
+0x2e1da8,7,
+0x2e1de0,1,
+0x2e1de8,19,
+0x2e1e40,6,
+0x2e1e60,6,
+0x2e1e80,6,
+0x2e1ea0,6,
+0x2e1ec0,7,
+0x2e1ee0,7,
+0x2e1f00,12,
+0x2e1f40,3,
+0x2e1f50,8,
+0x2e2000,4,
+0x2e2014,1,
+0x2e2020,3,
+0x2e2030,3,
+0x2e2040,8,
+0x2e207c,2,
 0x2e20a0,6,
-0x2e2100,5,
-0x2e2120,4,
-0x2e2134,17,
-0x2e2180,1,
+0x2e20c0,6,
+0x2e20e0,6,
+0x2e2100,4,
+0x2e2114,1,
+0x2e2120,3,
+0x2e2130,3,
+0x2e2140,8,
+0x2e217c,2,
 0x2e21a0,6,
-0x2e2200,5,
-0x2e2220,4,
-0x2e2234,17,
-0x2e2280,1,
+0x2e21c0,6,
+0x2e21e0,6,
+0x2e2200,4,
+0x2e2214,1,
+0x2e2220,3,
+0x2e2230,3,
+0x2e2240,8,
+0x2e227c,2,
 0x2e22a0,6,
-0x2e2300,5,
-0x2e2320,4,
-0x2e2334,17,
-0x2e2380,1,
+0x2e22c0,6,
+0x2e22e0,6,
+0x2e2300,4,
+0x2e2314,1,
+0x2e2320,3,
+0x2e2330,3,
+0x2e2340,8,
+0x2e237c,2,
 0x2e23a0,6,
+0x2e23c0,6,
+0x2e23e0,6,
 0x2e2400,6,
 0x2e2440,6,
 0x2e2480,3,
 0x2e24c0,3,
-0x2e2500,6,
-0x2e251c,7,
-0x2e2540,1,
+0x2e2500,2,
+0x2e250c,4,
+0x2e2520,2,
+0x2e252c,4,
+0x2e2540,2,
 0x2e2c00,13,
 0x2e2c40,12,
 0x2e2c80,13,
 0x2e2cc0,12,
-0x2e2d00,6,
-0x2e2d20,6,
+0x2e2d00,14,
+0x2e2d40,2,
 0x2e2d80,14,
 0x2e2dc0,2,
-0x2e2e40,11,
+0x2e2e00,11,
+0x2e2e40,6,
+0x2e2e60,6,
 0x2e2e80,6,
 0x2e2ea0,6,
 0x2e3000,2,
-0x2e3010,5,
+0x2e3014,4,
 0x2e3040,3,
 0x2e3050,3,
-0x2e3060,32,
-0x2e3100,8,
-0x2e3140,8,
+0x2e3080,42,
+0x2e3140,10,
 0x2e3180,3,
 0x2e3190,2,
-0x2e319c,9,
-0x2e3218,9,
-0x2e3240,3,
-0x2e3250,6,
-0x2e3280,1,
-0x2e3288,6,
-0x2e32a4,1,
-0x2e32c0,1,
-0x2e32c8,6,
-0x2e32e4,1,
-0x2e3400,8,
-0x2e3424,2,
+0x2e319c,15,
+0x2e3200,9,
+0x2e3300,1,
+0x2e3308,6,
+0x2e3324,10,
+0x2e3380,1,
+0x2e3388,6,
+0x2e33a4,10,
+0x2e3400,6,
+0x2e3420,6,
 0x2e3500,5,
 0x2e3520,4,
 0x2e3540,5,
 0x2e3560,4,
 0x2e3800,24,
-0x2e3864,5,
+0x2e3864,6,
 0x2e3880,8,
-0x2e3900,13,
-0x2e3980,4,
-0x2e39a0,6,
-0x2e39c0,6,
-0x2e39dc,1,
-0x2e3a00,6,
-0x2e3a1c,1,
-0x2e3a40,1,
-0x2e3a60,1,
-0x2e3a68,23,
+0x2e3900,24,
+0x2e3964,6,
+0x2e3980,8,
+0x2e3a00,17,
+0x2e3a48,6,
+0x2e3a80,17,
 0x2e3ac8,6,
-0x2e3b00,17,
-0x2e3b48,6,
-0x2e3b80,12,
+0x2e3b00,6,
+0x2e3b20,6,
+0x2e3b40,3,
+0x2e3b80,6,
+0x2e3ba0,6,
+0x2e3bc0,3,
 0x2e3c00,6,
 0x2e3c20,6,
-0x2e3c40,6,
-0x2e3c60,3,
-0x2e3d00,6,
-0x2e3d20,6,
-0x2e3d40,3,
-0x2e3d80,6,
-0x2e3da0,6,
-0x2e3dc0,3,
+0x2e3c40,3,
+0x2e3c80,6,
+0x2e3ca0,6,
+0x2e3cc0,3,
+0x2e3d10,2,
+0x2e3d1c,1,
+0x2e3d50,2,
+0x2e3d5c,1,
+0x2e3d80,1,
+0x2e3da0,1,
+0x2e3da8,7,
+0x2e3de0,1,
+0x2e3de8,19,
+0x2e3e40,6,
+0x2e3e60,6,
+0x2e3e80,6,
+0x2e3ea0,6,
+0x2e3ec0,7,
+0x2e3ee0,7,
+0x2e3f00,12,
+0x2e3f40,3,
+0x2e3f50,8,
 0x2e4000,29,
 0x2e4078,4,
 0x2e4090,2,
 0x2e5eac,1,
 0x2e5eb4,3,
 0x2e6000,14,
-0x2e6070,3,
+0x2e6040,6,
+0x2e6060,6,
 0x2e6080,6,
+0x2e60a0,3,
 0x2e6100,9,
 0x2e6204,1,
 0x2e620c,6,
 0x2e6c94,8,
 0x2e6cb8,9,
 0x2e6ce0,4,
-0x2e7000,6,
-0x2e7020,3,
-0x2e7040,7,
-0x2e7060,6,
-0x2e7100,5,
-0x2e7138,1,
-0x2e7144,1,
-0x2e7150,2,
+0x2e7000,1,
+0x2e7028,1,
+0x2e7050,1,
+0x2e7078,1,
+0x2e70a0,4,
+0x2e71ac,1,
+0x2e71d8,4,
+0x2e7200,6,
+0x2e7220,6,
+0x2e7240,3,
+0x2e7400,5,
+0x2e7438,1,
+0x2e7444,1,
+0x2e7450,4,
+0x2e7500,7,
+0x2e7520,6,
+0x2e7540,6,
+0x2e7560,3,
+0x2e7570,1,
 0x2e8000,6,
 0x2e8020,3,
-0x2e8030,1,
-0x2e8038,7,
+0x2e8030,3,
+0x2e8050,1,
 0x2e8100,6,
 0x2e8120,10,
 0x2e8150,10,
 0x2e89f4,3,
 0x2e9000,4,
 0x2e9020,4,
-0x2e9040,3,
-0x2e9050,3,
-0x2e9080,2,
-0x2e90b0,3,
-0x2e912c,1,
-0x2e9140,6,
-0x2e9200,20,
-0x2e925c,30,
-0x2e9300,24,
+0x2e9040,11,
+0x2e9070,3,
+0x2e9080,4,
+0x2e90b0,22,
+0x2e9110,2,
+0x2e9120,22,
+0x2e9180,1,
+0x2e91a0,6,
+0x2e9200,42,
+0x2e92c0,1,
+0x2e92c8,3,
+0x2e9300,25,
+0x2e936c,4,
 0x2e9380,2,
 0x2e93a0,1,
 0x2e93c0,11,
 0x2e9480,6,
 0x2e9500,6,
 0x2e9520,6,
+0x2e9540,3,
+0x2e9550,7,
+0x2e9570,4,
 0x2e9800,410,
 0x2ea000,4,
 0x2ea020,4,
-0x2ea040,3,
-0x2ea050,3,
-0x2ea080,2,
-0x2ea0b0,3,
-0x2ea12c,1,
-0x2ea140,6,
-0x2ea200,20,
-0x2ea25c,30,
-0x2ea300,24,
+0x2ea040,11,
+0x2ea070,3,
+0x2ea080,4,
+0x2ea0b0,22,
+0x2ea110,2,
+0x2ea120,22,
+0x2ea180,1,
+0x2ea1a0,6,
+0x2ea200,42,
+0x2ea2c0,1,
+0x2ea2c8,3,
+0x2ea300,25,
+0x2ea36c,4,
 0x2ea380,2,
 0x2ea3a0,1,
 0x2ea3c0,11,
 0x2ea480,6,
 0x2ea500,6,
 0x2ea520,6,
+0x2ea540,3,
+0x2ea550,7,
+0x2ea570,4,
 0x2ea800,410,
 0x2eb000,4,
 0x2eb020,4,
-0x2eb040,3,
-0x2eb050,3,
-0x2eb080,2,
-0x2eb0b0,3,
-0x2eb12c,1,
-0x2eb140,6,
-0x2eb200,20,
-0x2eb25c,30,
-0x2eb300,24,
+0x2eb040,11,
+0x2eb070,3,
+0x2eb080,4,
+0x2eb0b0,22,
+0x2eb110,2,
+0x2eb120,22,
+0x2eb180,1,
+0x2eb1a0,6,
+0x2eb200,42,
+0x2eb2c0,1,
+0x2eb2c8,3,
+0x2eb300,25,
+0x2eb36c,4,
 0x2eb380,2,
 0x2eb3a0,1,
 0x2eb3c0,11,
 0x2eb480,6,
 0x2eb500,6,
 0x2eb520,6,
+0x2eb540,3,
+0x2eb550,7,
+0x2eb570,4,
 0x2eb800,410,
 0x2ec000,4,
 0x2ec020,4,
-0x2ec040,3,
-0x2ec050,3,
-0x2ec080,2,
-0x2ec0b0,3,
-0x2ec12c,1,
-0x2ec140,6,
-0x2ec200,20,
-0x2ec25c,30,
-0x2ec300,24,
+0x2ec040,11,
+0x2ec070,3,
+0x2ec080,4,
+0x2ec0b0,22,
+0x2ec110,2,
+0x2ec120,22,
+0x2ec180,1,
+0x2ec1a0,6,
+0x2ec200,42,
+0x2ec2c0,1,
+0x2ec2c8,3,
+0x2ec300,25,
+0x2ec36c,4,
 0x2ec380,2,
 0x2ec3a0,1,
 0x2ec3c0,11,
 0x2ec480,6,
 0x2ec500,6,
 0x2ec520,6,
+0x2ec540,3,
+0x2ec550,7,
+0x2ec570,4,
 0x2ec800,410,
 0x2ef800,5,
 0x2ef818,1,
 0x2efba4,1,
 0x2efbac,2,
 0x2f4000,3,
-0x2f4018,3,
-0x2f4100,25,
+0x2f4018,4,
+0x2f4100,56,
+0x2f41f0,1,
 0x2f4400,3,
-0x2f4418,3,
-0x2f4500,25,
-0x2f4800,1,
+0x2f4418,4,
+0x2f4500,56,
+0x2f45f0,1,
+0x2f4800,5,
+0x2f4820,3,
 0x2f5000,3,
-0x2f5018,3,
-0x2f5100,25,
+0x2f5018,4,
+0x2f5100,56,
+0x2f51f0,1,
 0x2f5400,3,
-0x2f5418,3,
-0x2f5500,25,
-0x2f5800,1,
+0x2f5418,4,
+0x2f5500,56,
+0x2f55f0,1,
+0x2f5800,5,
+0x2f5820,3,
 0x2f6004,7,
-0x2f6024,3,
+0x2f6024,1,
+0x2f6034,3,
 0x2f6300,5,
-0x2f631c,3,
+0x2f631c,1,
 0x2f6600,10,
 0x2f6630,1,
 0x2f6680,10,
 0x2f6780,10,
 0x2f67b0,1,
 0x2f6800,47,
-0x2f6910,12,
-0x2f7000,64,
+0x2f6910,14,
+0x2f6e00,1,
+0x2f7000,65,
 0x2f8000,2,
-0x2f800c,9,
-0x2f8040,6,
-0x2f8060,6,
-0x2f8080,2,
-0x2f808c,5,
-0x2f80a4,3,
-0x2f80e0,1,
-0x2f8500,2,
-0x2f8518,5,
-0x2f8540,6,
+0x2f800c,3,
+0x2f8028,2,
+0x2f8038,47,
+0x2f8500,6,
+0x2f8520,6,
+0x2f8540,3,
 0x2f8580,10,
+0x2f85c0,15,
+0x2f8600,2,
+0x2f8618,5,
+0x2f8630,1,
 0x2f8800,2,
-0x2f880c,9,
-0x2f8840,6,
-0x2f8860,6,
-0x2f8880,2,
-0x2f888c,5,
-0x2f88a4,3,
-0x2f88e0,1,
-0x2f8d00,2,
-0x2f8d18,5,
-0x2f8d40,6,
+0x2f880c,3,
+0x2f8828,2,
+0x2f8838,47,
+0x2f8d00,6,
+0x2f8d20,6,
+0x2f8d40,3,
 0x2f8d80,10,
-0x2f9800,2,
-0x2f9828,2,
-0x2f9850,2,
-0x2f9878,2,
+0x2f8dc0,15,
+0x2f8e00,2,
+0x2f8e18,5,
+0x2f8e30,1,
+0x2f9800,3,
+0x2f9828,3,
+0x2f9850,3,
+0x2f9878,3,
 0x2f98a0,7,
 0x2f99ac,1,
 0x2f99d8,4,
 0x2f9a20,6,
 0x2f9a40,6,
 0x2f9a60,6,
-0x2f9a80,3,
+0x2f9a80,6,
+0x2f9aa0,6,
+0x2f9ac0,3,
 0x2f9c00,6,
 0x2f9c20,3,
 0x2f9c40,2,
 0x2f9c60,1,
-0x300000,5,
-0x300020,4,
-0x300034,17,
-0x300080,1,
+0x300000,4,
+0x300014,1,
+0x300020,3,
+0x300030,3,
+0x300040,8,
+0x30007c,2,
 0x3000a0,6,
-0x300100,5,
-0x300120,4,
-0x300134,17,
-0x300180,1,
+0x3000c0,6,
+0x3000e0,6,
+0x300100,4,
+0x300114,1,
+0x300120,3,
+0x300130,3,
+0x300140,8,
+0x30017c,2,
 0x3001a0,6,
-0x300200,5,
-0x300220,4,
-0x300234,17,
-0x300280,1,
+0x3001c0,6,
+0x3001e0,6,
+0x300200,4,
+0x300214,1,
+0x300220,3,
+0x300230,3,
+0x300240,8,
+0x30027c,2,
 0x3002a0,6,
-0x300300,5,
-0x300320,4,
-0x300334,17,
-0x300380,1,
+0x3002c0,6,
+0x3002e0,6,
+0x300300,4,
+0x300314,1,
+0x300320,3,
+0x300330,3,
+0x300340,8,
+0x30037c,2,
 0x3003a0,6,
+0x3003c0,6,
+0x3003e0,6,
 0x300400,6,
 0x300440,6,
 0x300480,3,
 0x3004c0,3,
-0x300500,6,
-0x30051c,7,
-0x300540,1,
+0x300500,2,
+0x30050c,4,
+0x300520,2,
+0x30052c,4,
+0x300540,2,
 0x300c00,13,
 0x300c40,12,
 0x300c80,13,
 0x300cc0,12,
-0x300d00,6,
-0x300d20,6,
+0x300d00,14,
+0x300d40,2,
 0x300d80,14,
 0x300dc0,2,
-0x300e40,11,
+0x300e00,11,
+0x300e40,6,
+0x300e60,6,
 0x300e80,6,
 0x300ea0,6,
 0x301000,2,
-0x301010,5,
+0x301014,4,
 0x301040,3,
 0x301050,3,
-0x301060,32,
-0x301100,8,
-0x301140,8,
+0x301080,42,
+0x301140,10,
 0x301180,3,
 0x301190,2,
-0x30119c,9,
-0x301218,9,
-0x301240,3,
-0x301250,6,
-0x301280,1,
-0x301288,6,
-0x3012a4,1,
-0x3012c0,1,
-0x3012c8,6,
-0x3012e4,1,
-0x301400,8,
-0x301424,2,
+0x30119c,15,
+0x301200,9,
+0x301300,1,
+0x301308,6,
+0x301324,10,
+0x301380,1,
+0x301388,6,
+0x3013a4,10,
+0x301400,6,
+0x301420,6,
 0x301500,5,
 0x301520,4,
 0x301540,5,
 0x301560,4,
 0x301800,24,
-0x301864,5,
+0x301864,6,
 0x301880,8,
-0x301900,13,
-0x301980,4,
-0x3019a0,6,
-0x3019c0,6,
-0x3019dc,1,
-0x301a00,6,
-0x301a1c,1,
-0x301a40,1,
-0x301a60,1,
-0x301a68,23,
+0x301900,24,
+0x301964,6,
+0x301980,8,
+0x301a00,17,
+0x301a48,6,
+0x301a80,17,
 0x301ac8,6,
-0x301b00,17,
-0x301b48,6,
-0x301b80,12,
+0x301b00,6,
+0x301b20,6,
+0x301b40,3,
+0x301b80,6,
+0x301ba0,6,
+0x301bc0,3,
 0x301c00,6,
 0x301c20,6,
-0x301c40,6,
-0x301c60,3,
-0x301d00,6,
-0x301d20,6,
-0x301d40,3,
-0x301d80,6,
-0x301da0,6,
-0x301dc0,3,
-0x302000,5,
-0x302020,4,
-0x302034,17,
-0x302080,1,
+0x301c40,3,
+0x301c80,6,
+0x301ca0,6,
+0x301cc0,3,
+0x301d10,2,
+0x301d1c,1,
+0x301d50,2,
+0x301d5c,1,
+0x301d80,1,
+0x301da0,1,
+0x301da8,7,
+0x301de0,1,
+0x301de8,19,
+0x301e40,6,
+0x301e60,6,
+0x301e80,6,
+0x301ea0,6,
+0x301ec0,7,
+0x301ee0,7,
+0x301f00,12,
+0x301f40,3,
+0x301f50,8,
+0x302000,4,
+0x302014,1,
+0x302020,3,
+0x302030,3,
+0x302040,8,
+0x30207c,2,
 0x3020a0,6,
-0x302100,5,
-0x302120,4,
-0x302134,17,
-0x302180,1,
+0x3020c0,6,
+0x3020e0,6,
+0x302100,4,
+0x302114,1,
+0x302120,3,
+0x302130,3,
+0x302140,8,
+0x30217c,2,
 0x3021a0,6,
-0x302200,5,
-0x302220,4,
-0x302234,17,
-0x302280,1,
+0x3021c0,6,
+0x3021e0,6,
+0x302200,4,
+0x302214,1,
+0x302220,3,
+0x302230,3,
+0x302240,8,
+0x30227c,2,
 0x3022a0,6,
-0x302300,5,
-0x302320,4,
-0x302334,17,
-0x302380,1,
+0x3022c0,6,
+0x3022e0,6,
+0x302300,4,
+0x302314,1,
+0x302320,3,
+0x302330,3,
+0x302340,8,
+0x30237c,2,
 0x3023a0,6,
+0x3023c0,6,
+0x3023e0,6,
 0x302400,6,
 0x302440,6,
 0x302480,3,
 0x3024c0,3,
-0x302500,6,
-0x30251c,7,
-0x302540,1,
+0x302500,2,
+0x30250c,4,
+0x302520,2,
+0x30252c,4,
+0x302540,2,
 0x302c00,13,
 0x302c40,12,
 0x302c80,13,
 0x302cc0,12,
-0x302d00,6,
-0x302d20,6,
+0x302d00,14,
+0x302d40,2,
 0x302d80,14,
 0x302dc0,2,
-0x302e40,11,
+0x302e00,11,
+0x302e40,6,
+0x302e60,6,
 0x302e80,6,
 0x302ea0,6,
 0x303000,2,
-0x303010,5,
+0x303014,4,
 0x303040,3,
 0x303050,3,
-0x303060,32,
-0x303100,8,
-0x303140,8,
+0x303080,42,
+0x303140,10,
 0x303180,3,
 0x303190,2,
-0x30319c,9,
-0x303218,9,
-0x303240,3,
-0x303250,6,
-0x303280,1,
-0x303288,6,
-0x3032a4,1,
-0x3032c0,1,
-0x3032c8,6,
-0x3032e4,1,
-0x303400,8,
-0x303424,2,
+0x30319c,15,
+0x303200,9,
+0x303300,1,
+0x303308,6,
+0x303324,10,
+0x303380,1,
+0x303388,6,
+0x3033a4,10,
+0x303400,6,
+0x303420,6,
 0x303500,5,
 0x303520,4,
 0x303540,5,
 0x303560,4,
 0x303800,24,
-0x303864,5,
+0x303864,6,
 0x303880,8,
-0x303900,13,
-0x303980,4,
-0x3039a0,6,
-0x3039c0,6,
-0x3039dc,1,
-0x303a00,6,
-0x303a1c,1,
-0x303a40,1,
-0x303a60,1,
-0x303a68,23,
+0x303900,24,
+0x303964,6,
+0x303980,8,
+0x303a00,17,
+0x303a48,6,
+0x303a80,17,
 0x303ac8,6,
-0x303b00,17,
-0x303b48,6,
-0x303b80,12,
+0x303b00,6,
+0x303b20,6,
+0x303b40,3,
+0x303b80,6,
+0x303ba0,6,
+0x303bc0,3,
 0x303c00,6,
 0x303c20,6,
-0x303c40,6,
-0x303c60,3,
-0x303d00,6,
-0x303d20,6,
-0x303d40,3,
-0x303d80,6,
-0x303da0,6,
-0x303dc0,3,
+0x303c40,3,
+0x303c80,6,
+0x303ca0,6,
+0x303cc0,3,
+0x303d10,2,
+0x303d1c,1,
+0x303d50,2,
+0x303d5c,1,
+0x303d80,1,
+0x303da0,1,
+0x303da8,7,
+0x303de0,1,
+0x303de8,19,
+0x303e40,6,
+0x303e60,6,
+0x303e80,6,
+0x303ea0,6,
+0x303ec0,7,
+0x303ee0,7,
+0x303f00,12,
+0x303f40,3,
+0x303f50,8,
 0x304000,29,
 0x304078,4,
 0x304090,2,
 0x305eac,1,
 0x305eb4,3,
 0x306000,14,
-0x306070,3,
+0x306040,6,
+0x306060,6,
 0x306080,6,
+0x3060a0,3,
 0x306100,9,
 0x306204,1,
 0x30620c,6,
 0x306c94,8,
 0x306cb8,9,
 0x306ce0,4,
-0x307000,6,
-0x307020,3,
-0x307040,7,
-0x307060,6,
-0x307100,5,
-0x307138,1,
-0x307144,1,
-0x307150,2,
+0x307000,1,
+0x307028,1,
+0x307050,1,
+0x307078,1,
+0x3070a0,4,
+0x3071ac,1,
+0x3071d8,4,
+0x307200,6,
+0x307220,6,
+0x307240,3,
+0x307400,5,
+0x307438,1,
+0x307444,1,
+0x307450,4,
+0x307500,7,
+0x307520,6,
+0x307540,6,
+0x307560,3,
+0x307570,1,
 0x308000,6,
 0x308020,3,
-0x308030,1,
-0x308038,7,
+0x308030,3,
+0x308050,1,
 0x308100,6,
 0x308120,10,
 0x308150,10,
 0x3089f4,3,
 0x309000,4,
 0x309020,4,
-0x309040,3,
-0x309050,3,
-0x309080,2,
-0x3090b0,3,
-0x30912c,1,
-0x309140,6,
-0x309200,20,
-0x30925c,30,
-0x309300,24,
+0x309040,11,
+0x309070,3,
+0x309080,4,
+0x3090b0,22,
+0x309110,2,
+0x309120,22,
+0x309180,1,
+0x3091a0,6,
+0x309200,42,
+0x3092c0,1,
+0x3092c8,3,
+0x309300,25,
+0x30936c,4,
 0x309380,2,
 0x3093a0,1,
 0x3093c0,11,
 0x309480,6,
 0x309500,6,
 0x309520,6,
+0x309540,3,
+0x309550,7,
+0x309570,4,
 0x309800,410,
 0x30a000,4,
 0x30a020,4,
-0x30a040,3,
-0x30a050,3,
-0x30a080,2,
-0x30a0b0,3,
-0x30a12c,1,
-0x30a140,6,
-0x30a200,20,
-0x30a25c,30,
-0x30a300,24,
+0x30a040,11,
+0x30a070,3,
+0x30a080,4,
+0x30a0b0,22,
+0x30a110,2,
+0x30a120,22,
+0x30a180,1,
+0x30a1a0,6,
+0x30a200,42,
+0x30a2c0,1,
+0x30a2c8,3,
+0x30a300,25,
+0x30a36c,4,
 0x30a380,2,
 0x30a3a0,1,
 0x30a3c0,11,
 0x30a480,6,
 0x30a500,6,
 0x30a520,6,
+0x30a540,3,
+0x30a550,7,
+0x30a570,4,
 0x30a800,410,
 0x30b000,4,
 0x30b020,4,
-0x30b040,3,
-0x30b050,3,
-0x30b080,2,
-0x30b0b0,3,
-0x30b12c,1,
-0x30b140,6,
-0x30b200,20,
-0x30b25c,30,
-0x30b300,24,
+0x30b040,11,
+0x30b070,3,
+0x30b080,4,
+0x30b0b0,22,
+0x30b110,2,
+0x30b120,22,
+0x30b180,1,
+0x30b1a0,6,
+0x30b200,42,
+0x30b2c0,1,
+0x30b2c8,3,
+0x30b300,25,
+0x30b36c,4,
 0x30b380,2,
 0x30b3a0,1,
 0x30b3c0,11,
 0x30b480,6,
 0x30b500,6,
 0x30b520,6,
+0x30b540,3,
+0x30b550,7,
+0x30b570,4,
 0x30b800,410,
 0x30c000,4,
 0x30c020,4,
-0x30c040,3,
-0x30c050,3,
-0x30c080,2,
-0x30c0b0,3,
-0x30c12c,1,
-0x30c140,6,
-0x30c200,20,
-0x30c25c,30,
-0x30c300,24,
+0x30c040,11,
+0x30c070,3,
+0x30c080,4,
+0x30c0b0,22,
+0x30c110,2,
+0x30c120,22,
+0x30c180,1,
+0x30c1a0,6,
+0x30c200,42,
+0x30c2c0,1,
+0x30c2c8,3,
+0x30c300,25,
+0x30c36c,4,
 0x30c380,2,
 0x30c3a0,1,
 0x30c3c0,11,
 0x30c480,6,
 0x30c500,6,
 0x30c520,6,
+0x30c540,3,
+0x30c550,7,
+0x30c570,4,
 0x30c800,410,
 0x30f800,5,
 0x30f818,1,
 0x30fba4,1,
 0x30fbac,2,
 0x314000,3,
-0x314018,3,
-0x314100,25,
+0x314018,4,
+0x314100,56,
+0x3141f0,1,
 0x314400,3,
-0x314418,3,
-0x314500,25,
-0x314800,1,
+0x314418,4,
+0x314500,56,
+0x3145f0,1,
+0x314800,5,
+0x314820,3,
 0x315000,3,
-0x315018,3,
-0x315100,25,
+0x315018,4,
+0x315100,56,
+0x3151f0,1,
 0x315400,3,
-0x315418,3,
-0x315500,25,
-0x315800,1,
+0x315418,4,
+0x315500,56,
+0x3155f0,1,
+0x315800,5,
+0x315820,3,
 0x316004,7,
-0x316024,3,
+0x316024,1,
+0x316034,3,
 0x316300,5,
-0x31631c,3,
+0x31631c,1,
 0x316600,10,
 0x316630,1,
 0x316680,10,
 0x316780,10,
 0x3167b0,1,
 0x316800,47,
-0x316910,12,
-0x317000,64,
+0x316910,14,
+0x316e00,1,
+0x317000,65,
 0x318000,2,
-0x31800c,9,
-0x318040,6,
-0x318060,6,
-0x318080,2,
-0x31808c,5,
-0x3180a4,3,
-0x3180e0,1,
-0x318500,2,
-0x318518,5,
-0x318540,6,
+0x31800c,3,
+0x318028,2,
+0x318038,47,
+0x318500,6,
+0x318520,6,
+0x318540,3,
 0x318580,10,
+0x3185c0,15,
+0x318600,2,
+0x318618,5,
+0x318630,1,
 0x318800,2,
-0x31880c,9,
-0x318840,6,
-0x318860,6,
-0x318880,2,
-0x31888c,5,
-0x3188a4,3,
-0x3188e0,1,
-0x318d00,2,
-0x318d18,5,
-0x318d40,6,
+0x31880c,3,
+0x318828,2,
+0x318838,47,
+0x318d00,6,
+0x318d20,6,
+0x318d40,3,
 0x318d80,10,
-0x319800,2,
-0x319828,2,
-0x319850,2,
-0x319878,2,
+0x318dc0,15,
+0x318e00,2,
+0x318e18,5,
+0x318e30,1,
+0x319800,3,
+0x319828,3,
+0x319850,3,
+0x319878,3,
 0x3198a0,7,
 0x3199ac,1,
 0x3199d8,4,
 0x319a20,6,
 0x319a40,6,
 0x319a60,6,
-0x319a80,3,
+0x319a80,6,
+0x319aa0,6,
+0x319ac0,3,
 0x319c00,6,
 0x319c20,3,
 0x319c40,2,
 0x319c60,1,
-0x320000,5,
-0x320020,4,
-0x320034,17,
-0x320080,1,
+0x320000,4,
+0x320014,1,
+0x320020,3,
+0x320030,3,
+0x320040,8,
+0x32007c,2,
 0x3200a0,6,
-0x320100,5,
-0x320120,4,
-0x320134,17,
-0x320180,1,
+0x3200c0,6,
+0x3200e0,6,
+0x320100,4,
+0x320114,1,
+0x320120,3,
+0x320130,3,
+0x320140,8,
+0x32017c,2,
 0x3201a0,6,
-0x320200,5,
-0x320220,4,
-0x320234,17,
-0x320280,1,
+0x3201c0,6,
+0x3201e0,6,
+0x320200,4,
+0x320214,1,
+0x320220,3,
+0x320230,3,
+0x320240,8,
+0x32027c,2,
 0x3202a0,6,
-0x320300,5,
-0x320320,4,
-0x320334,17,
-0x320380,1,
+0x3202c0,6,
+0x3202e0,6,
+0x320300,4,
+0x320314,1,
+0x320320,3,
+0x320330,3,
+0x320340,8,
+0x32037c,2,
 0x3203a0,6,
+0x3203c0,6,
+0x3203e0,6,
 0x320400,6,
 0x320440,6,
 0x320480,3,
 0x3204c0,3,
-0x320500,6,
-0x32051c,7,
-0x320540,1,
+0x320500,2,
+0x32050c,4,
+0x320520,2,
+0x32052c,4,
+0x320540,2,
 0x320c00,13,
 0x320c40,12,
 0x320c80,13,
 0x320cc0,12,
-0x320d00,6,
-0x320d20,6,
+0x320d00,14,
+0x320d40,2,
 0x320d80,14,
 0x320dc0,2,
-0x320e40,11,
+0x320e00,11,
+0x320e40,6,
+0x320e60,6,
 0x320e80,6,
 0x320ea0,6,
 0x321000,2,
-0x321010,5,
+0x321014,4,
 0x321040,3,
 0x321050,3,
-0x321060,32,
-0x321100,8,
-0x321140,8,
+0x321080,42,
+0x321140,10,
 0x321180,3,
 0x321190,2,
-0x32119c,9,
-0x321218,9,
-0x321240,3,
-0x321250,6,
-0x321280,1,
-0x321288,6,
-0x3212a4,1,
-0x3212c0,1,
-0x3212c8,6,
-0x3212e4,1,
-0x321400,8,
-0x321424,2,
+0x32119c,15,
+0x321200,9,
+0x321300,1,
+0x321308,6,
+0x321324,10,
+0x321380,1,
+0x321388,6,
+0x3213a4,10,
+0x321400,6,
+0x321420,6,
 0x321500,5,
 0x321520,4,
 0x321540,5,
 0x321560,4,
 0x321800,24,
-0x321864,5,
+0x321864,6,
 0x321880,8,
-0x321900,13,
-0x321980,4,
-0x3219a0,6,
-0x3219c0,6,
-0x3219dc,1,
-0x321a00,6,
-0x321a1c,1,
-0x321a40,1,
-0x321a60,1,
-0x321a68,23,
+0x321900,24,
+0x321964,6,
+0x321980,8,
+0x321a00,17,
+0x321a48,6,
+0x321a80,17,
 0x321ac8,6,
-0x321b00,17,
-0x321b48,6,
-0x321b80,12,
+0x321b00,6,
+0x321b20,6,
+0x321b40,3,
+0x321b80,6,
+0x321ba0,6,
+0x321bc0,3,
 0x321c00,6,
 0x321c20,6,
-0x321c40,6,
-0x321c60,3,
-0x321d00,6,
-0x321d20,6,
-0x321d40,3,
-0x321d80,6,
-0x321da0,6,
-0x321dc0,3,
-0x322000,5,
-0x322020,4,
-0x322034,17,
-0x322080,1,
+0x321c40,3,
+0x321c80,6,
+0x321ca0,6,
+0x321cc0,3,
+0x321d10,2,
+0x321d1c,1,
+0x321d50,2,
+0x321d5c,1,
+0x321d80,1,
+0x321da0,1,
+0x321da8,7,
+0x321de0,1,
+0x321de8,19,
+0x321e40,6,
+0x321e60,6,
+0x321e80,6,
+0x321ea0,6,
+0x321ec0,7,
+0x321ee0,7,
+0x321f00,12,
+0x321f40,3,
+0x321f50,8,
+0x322000,4,
+0x322014,1,
+0x322020,3,
+0x322030,3,
+0x322040,8,
+0x32207c,2,
 0x3220a0,6,
-0x322100,5,
-0x322120,4,
-0x322134,17,
-0x322180,1,
+0x3220c0,6,
+0x3220e0,6,
+0x322100,4,
+0x322114,1,
+0x322120,3,
+0x322130,3,
+0x322140,8,
+0x32217c,2,
 0x3221a0,6,
-0x322200,5,
-0x322220,4,
-0x322234,17,
-0x322280,1,
+0x3221c0,6,
+0x3221e0,6,
+0x322200,4,
+0x322214,1,
+0x322220,3,
+0x322230,3,
+0x322240,8,
+0x32227c,2,
 0x3222a0,6,
-0x322300,5,
-0x322320,4,
-0x322334,17,
-0x322380,1,
+0x3222c0,6,
+0x3222e0,6,
+0x322300,4,
+0x322314,1,
+0x322320,3,
+0x322330,3,
+0x322340,8,
+0x32237c,2,
 0x3223a0,6,
+0x3223c0,6,
+0x3223e0,6,
 0x322400,6,
 0x322440,6,
 0x322480,3,
 0x3224c0,3,
-0x322500,6,
-0x32251c,7,
-0x322540,1,
+0x322500,2,
+0x32250c,4,
+0x322520,2,
+0x32252c,4,
+0x322540,2,
 0x322c00,13,
 0x322c40,12,
 0x322c80,13,
 0x322cc0,12,
-0x322d00,6,
-0x322d20,6,
+0x322d00,14,
+0x322d40,2,
 0x322d80,14,
 0x322dc0,2,
-0x322e40,11,
+0x322e00,11,
+0x322e40,6,
+0x322e60,6,
 0x322e80,6,
 0x322ea0,6,
 0x323000,2,
-0x323010,5,
+0x323014,4,
 0x323040,3,
 0x323050,3,
-0x323060,32,
-0x323100,8,
-0x323140,8,
+0x323080,42,
+0x323140,10,
 0x323180,3,
 0x323190,2,
-0x32319c,9,
-0x323218,9,
-0x323240,3,
-0x323250,6,
-0x323280,1,
-0x323288,6,
-0x3232a4,1,
-0x3232c0,1,
-0x3232c8,6,
-0x3232e4,1,
-0x323400,8,
-0x323424,2,
+0x32319c,15,
+0x323200,9,
+0x323300,1,
+0x323308,6,
+0x323324,10,
+0x323380,1,
+0x323388,6,
+0x3233a4,10,
+0x323400,6,
+0x323420,6,
 0x323500,5,
 0x323520,4,
 0x323540,5,
 0x323560,4,
 0x323800,24,
-0x323864,5,
+0x323864,6,
 0x323880,8,
-0x323900,13,
-0x323980,4,
-0x3239a0,6,
-0x3239c0,6,
-0x3239dc,1,
-0x323a00,6,
-0x323a1c,1,
-0x323a40,1,
-0x323a60,1,
-0x323a68,23,
+0x323900,24,
+0x323964,6,
+0x323980,8,
+0x323a00,17,
+0x323a48,6,
+0x323a80,17,
 0x323ac8,6,
-0x323b00,17,
-0x323b48,6,
-0x323b80,12,
+0x323b00,6,
+0x323b20,6,
+0x323b40,3,
+0x323b80,6,
+0x323ba0,6,
+0x323bc0,3,
 0x323c00,6,
 0x323c20,6,
-0x323c40,6,
-0x323c60,3,
-0x323d00,6,
-0x323d20,6,
-0x323d40,3,
-0x323d80,6,
-0x323da0,6,
-0x323dc0,3,
+0x323c40,3,
+0x323c80,6,
+0x323ca0,6,
+0x323cc0,3,
+0x323d10,2,
+0x323d1c,1,
+0x323d50,2,
+0x323d5c,1,
+0x323d80,1,
+0x323da0,1,
+0x323da8,7,
+0x323de0,1,
+0x323de8,19,
+0x323e40,6,
+0x323e60,6,
+0x323e80,6,
+0x323ea0,6,
+0x323ec0,7,
+0x323ee0,7,
+0x323f00,12,
+0x323f40,3,
+0x323f50,8,
 0x324000,29,
 0x324078,4,
 0x324090,2,
 0x325eac,1,
 0x325eb4,3,
 0x326000,14,
-0x326070,3,
+0x326040,6,
+0x326060,6,
 0x326080,6,
+0x3260a0,3,
 0x326100,9,
 0x326204,1,
 0x32620c,6,
 0x326c94,8,
 0x326cb8,9,
 0x326ce0,4,
-0x327000,6,
-0x327020,3,
-0x327040,7,
-0x327060,6,
-0x327100,5,
-0x327138,1,
-0x327144,1,
-0x327150,2,
+0x327000,1,
+0x327028,1,
+0x327050,1,
+0x327078,1,
+0x3270a0,4,
+0x3271ac,1,
+0x3271d8,4,
+0x327200,6,
+0x327220,6,
+0x327240,3,
+0x327400,5,
+0x327438,1,
+0x327444,1,
+0x327450,4,
+0x327500,7,
+0x327520,6,
+0x327540,6,
+0x327560,3,
+0x327570,1,
 0x328000,6,
 0x328020,3,
-0x328030,1,
-0x328038,7,
+0x328030,3,
+0x328050,1,
 0x328100,6,
 0x328120,10,
 0x328150,10,
 0x3289f4,3,
 0x329000,4,
 0x329020,4,
-0x329040,3,
-0x329050,3,
-0x329080,2,
-0x3290b0,3,
-0x32912c,1,
-0x329140,6,
-0x329200,20,
-0x32925c,30,
-0x329300,24,
+0x329040,11,
+0x329070,3,
+0x329080,4,
+0x3290b0,22,
+0x329110,2,
+0x329120,22,
+0x329180,1,
+0x3291a0,6,
+0x329200,42,
+0x3292c0,1,
+0x3292c8,3,
+0x329300,25,
+0x32936c,4,
 0x329380,2,
 0x3293a0,1,
 0x3293c0,11,
 0x329480,6,
 0x329500,6,
 0x329520,6,
+0x329540,3,
+0x329550,7,
+0x329570,4,
 0x329800,410,
 0x32a000,4,
 0x32a020,4,
-0x32a040,3,
-0x32a050,3,
-0x32a080,2,
-0x32a0b0,3,
-0x32a12c,1,
-0x32a140,6,
-0x32a200,20,
-0x32a25c,30,
-0x32a300,24,
+0x32a040,11,
+0x32a070,3,
+0x32a080,4,
+0x32a0b0,22,
+0x32a110,2,
+0x32a120,22,
+0x32a180,1,
+0x32a1a0,6,
+0x32a200,42,
+0x32a2c0,1,
+0x32a2c8,3,
+0x32a300,25,
+0x32a36c,4,
 0x32a380,2,
 0x32a3a0,1,
 0x32a3c0,11,
 0x32a480,6,
 0x32a500,6,
 0x32a520,6,
+0x32a540,3,
+0x32a550,7,
+0x32a570,4,
 0x32a800,410,
 0x32b000,4,
 0x32b020,4,
-0x32b040,3,
-0x32b050,3,
-0x32b080,2,
-0x32b0b0,3,
-0x32b12c,1,
-0x32b140,6,
-0x32b200,20,
-0x32b25c,30,
-0x32b300,24,
+0x32b040,11,
+0x32b070,3,
+0x32b080,4,
+0x32b0b0,22,
+0x32b110,2,
+0x32b120,22,
+0x32b180,1,
+0x32b1a0,6,
+0x32b200,42,
+0x32b2c0,1,
+0x32b2c8,3,
+0x32b300,25,
+0x32b36c,4,
 0x32b380,2,
 0x32b3a0,1,
 0x32b3c0,11,
 0x32b480,6,
 0x32b500,6,
 0x32b520,6,
+0x32b540,3,
+0x32b550,7,
+0x32b570,4,
 0x32b800,410,
 0x32c000,4,
 0x32c020,4,
-0x32c040,3,
-0x32c050,3,
-0x32c080,2,
-0x32c0b0,3,
-0x32c12c,1,
-0x32c140,6,
-0x32c200,20,
-0x32c25c,30,
-0x32c300,24,
+0x32c040,11,
+0x32c070,3,
+0x32c080,4,
+0x32c0b0,22,
+0x32c110,2,
+0x32c120,22,
+0x32c180,1,
+0x32c1a0,6,
+0x32c200,42,
+0x32c2c0,1,
+0x32c2c8,3,
+0x32c300,25,
+0x32c36c,4,
 0x32c380,2,
 0x32c3a0,1,
 0x32c3c0,11,
 0x32c480,6,
 0x32c500,6,
 0x32c520,6,
+0x32c540,3,
+0x32c550,7,
+0x32c570,4,
 0x32c800,410,
 0x32f800,5,
 0x32f818,1,
 0x32fba4,1,
 0x32fbac,2,
 0x334000,3,
-0x334018,3,
-0x334100,25,
+0x334018,4,
+0x334100,56,
+0x3341f0,1,
 0x334400,3,
-0x334418,3,
-0x334500,25,
-0x334800,1,
+0x334418,4,
+0x334500,56,
+0x3345f0,1,
+0x334800,5,
+0x334820,3,
 0x335000,3,
-0x335018,3,
-0x335100,25,
+0x335018,4,
+0x335100,56,
+0x3351f0,1,
 0x335400,3,
-0x335418,3,
-0x335500,25,
-0x335800,1,
+0x335418,4,
+0x335500,56,
+0x3355f0,1,
+0x335800,5,
+0x335820,3,
 0x336004,7,
-0x336024,3,
+0x336024,1,
+0x336034,3,
 0x336300,5,
-0x33631c,3,
+0x33631c,1,
 0x336600,10,
 0x336630,1,
 0x336680,10,
 0x336780,10,
 0x3367b0,1,
 0x336800,47,
-0x336910,12,
-0x337000,64,
+0x336910,14,
+0x336e00,1,
+0x337000,65,
 0x338000,2,
-0x33800c,9,
-0x338040,6,
-0x338060,6,
-0x338080,2,
-0x33808c,5,
-0x3380a4,3,
-0x3380e0,1,
-0x338500,2,
-0x338518,5,
-0x338540,6,
+0x33800c,3,
+0x338028,2,
+0x338038,47,
+0x338500,6,
+0x338520,6,
+0x338540,3,
 0x338580,10,
+0x3385c0,15,
+0x338600,2,
+0x338618,5,
+0x338630,1,
 0x338800,2,
-0x33880c,9,
-0x338840,6,
-0x338860,6,
-0x338880,2,
-0x33888c,5,
-0x3388a4,3,
-0x3388e0,1,
-0x338d00,2,
-0x338d18,5,
-0x338d40,6,
+0x33880c,3,
+0x338828,2,
+0x338838,47,
+0x338d00,6,
+0x338d20,6,
+0x338d40,3,
 0x338d80,10,
-0x339800,2,
-0x339828,2,
-0x339850,2,
-0x339878,2,
+0x338dc0,15,
+0x338e00,2,
+0x338e18,5,
+0x338e30,1,
+0x339800,3,
+0x339828,3,
+0x339850,3,
+0x339878,3,
 0x3398a0,7,
 0x3399ac,1,
 0x3399d8,4,
 0x339a20,6,
 0x339a40,6,
 0x339a60,6,
-0x339a80,3,
+0x339a80,6,
+0x339aa0,6,
+0x339ac0,3,
 0x339c00,6,
 0x339c20,3,
 0x339c40,2,
 0x339c60,1,
-0x340000,5,
-0x340020,4,
-0x340034,17,
-0x340080,1,
+0x340000,4,
+0x340014,1,
+0x340020,3,
+0x340030,3,
+0x340040,8,
+0x34007c,2,
 0x3400a0,6,
-0x340100,5,
-0x340120,4,
-0x340134,17,
-0x340180,1,
+0x3400c0,6,
+0x3400e0,6,
+0x340100,4,
+0x340114,1,
+0x340120,3,
+0x340130,3,
+0x340140,8,
+0x34017c,2,
 0x3401a0,6,
-0x340200,5,
-0x340220,4,
-0x340234,17,
-0x340280,1,
+0x3401c0,6,
+0x3401e0,6,
+0x340200,4,
+0x340214,1,
+0x340220,3,
+0x340230,3,
+0x340240,8,
+0x34027c,2,
 0x3402a0,6,
-0x340300,5,
-0x340320,4,
-0x340334,17,
-0x340380,1,
+0x3402c0,6,
+0x3402e0,6,
+0x340300,4,
+0x340314,1,
+0x340320,3,
+0x340330,3,
+0x340340,8,
+0x34037c,2,
 0x3403a0,6,
+0x3403c0,6,
+0x3403e0,6,
 0x340400,6,
 0x340440,6,
 0x340480,3,
 0x3404c0,3,
-0x340500,6,
-0x34051c,7,
-0x340540,1,
+0x340500,2,
+0x34050c,4,
+0x340520,2,
+0x34052c,4,
+0x340540,2,
 0x340c00,13,
 0x340c40,12,
 0x340c80,13,
 0x340cc0,12,
-0x340d00,6,
-0x340d20,6,
+0x340d00,14,
+0x340d40,2,
 0x340d80,14,
 0x340dc0,2,
-0x340e40,11,
+0x340e00,11,
+0x340e40,6,
+0x340e60,6,
 0x340e80,6,
 0x340ea0,6,
 0x341000,2,
-0x341010,5,
+0x341014,4,
 0x341040,3,
 0x341050,3,
-0x341060,32,
-0x341100,8,
-0x341140,8,
+0x341080,42,
+0x341140,10,
 0x341180,3,
 0x341190,2,
-0x34119c,9,
-0x341218,9,
-0x341240,3,
-0x341250,6,
-0x341280,1,
-0x341288,6,
-0x3412a4,1,
-0x3412c0,1,
-0x3412c8,6,
-0x3412e4,1,
-0x341400,8,
-0x341424,2,
+0x34119c,15,
+0x341200,9,
+0x341300,1,
+0x341308,6,
+0x341324,10,
+0x341380,1,
+0x341388,6,
+0x3413a4,10,
+0x341400,6,
+0x341420,6,
 0x341500,5,
 0x341520,4,
 0x341540,5,
 0x341560,4,
 0x341800,24,
-0x341864,5,
+0x341864,6,
 0x341880,8,
-0x341900,13,
-0x341980,4,
-0x3419a0,6,
-0x3419c0,6,
-0x3419dc,1,
-0x341a00,6,
-0x341a1c,1,
-0x341a40,1,
-0x341a60,1,
-0x341a68,23,
+0x341900,24,
+0x341964,6,
+0x341980,8,
+0x341a00,17,
+0x341a48,6,
+0x341a80,17,
 0x341ac8,6,
-0x341b00,17,
-0x341b48,6,
-0x341b80,12,
+0x341b00,6,
+0x341b20,6,
+0x341b40,3,
+0x341b80,6,
+0x341ba0,6,
+0x341bc0,3,
 0x341c00,6,
 0x341c20,6,
-0x341c40,6,
-0x341c60,3,
-0x341d00,6,
-0x341d20,6,
-0x341d40,3,
-0x341d80,6,
-0x341da0,6,
-0x341dc0,3,
-0x342000,5,
-0x342020,4,
-0x342034,17,
-0x342080,1,
+0x341c40,3,
+0x341c80,6,
+0x341ca0,6,
+0x341cc0,3,
+0x341d10,2,
+0x341d1c,1,
+0x341d50,2,
+0x341d5c,1,
+0x341d80,1,
+0x341da0,1,
+0x341da8,7,
+0x341de0,1,
+0x341de8,19,
+0x341e40,6,
+0x341e60,6,
+0x341e80,6,
+0x341ea0,6,
+0x341ec0,7,
+0x341ee0,7,
+0x341f00,12,
+0x341f40,3,
+0x341f50,8,
+0x342000,4,
+0x342014,1,
+0x342020,3,
+0x342030,3,
+0x342040,8,
+0x34207c,2,
 0x3420a0,6,
-0x342100,5,
-0x342120,4,
-0x342134,17,
-0x342180,1,
+0x3420c0,6,
+0x3420e0,6,
+0x342100,4,
+0x342114,1,
+0x342120,3,
+0x342130,3,
+0x342140,8,
+0x34217c,2,
 0x3421a0,6,
-0x342200,5,
-0x342220,4,
-0x342234,17,
-0x342280,1,
+0x3421c0,6,
+0x3421e0,6,
+0x342200,4,
+0x342214,1,
+0x342220,3,
+0x342230,3,
+0x342240,8,
+0x34227c,2,
 0x3422a0,6,
-0x342300,5,
-0x342320,4,
-0x342334,17,
-0x342380,1,
+0x3422c0,6,
+0x3422e0,6,
+0x342300,4,
+0x342314,1,
+0x342320,3,
+0x342330,3,
+0x342340,8,
+0x34237c,2,
 0x3423a0,6,
+0x3423c0,6,
+0x3423e0,6,
 0x342400,6,
 0x342440,6,
 0x342480,3,
 0x3424c0,3,
-0x342500,6,
-0x34251c,7,
-0x342540,1,
+0x342500,2,
+0x34250c,4,
+0x342520,2,
+0x34252c,4,
+0x342540,2,
 0x342c00,13,
 0x342c40,12,
 0x342c80,13,
 0x342cc0,12,
-0x342d00,6,
-0x342d20,6,
+0x342d00,14,
+0x342d40,2,
 0x342d80,14,
 0x342dc0,2,
-0x342e40,11,
+0x342e00,11,
+0x342e40,6,
+0x342e60,6,
 0x342e80,6,
 0x342ea0,6,
 0x343000,2,
-0x343010,5,
+0x343014,4,
 0x343040,3,
 0x343050,3,
-0x343060,32,
-0x343100,8,
-0x343140,8,
+0x343080,42,
+0x343140,10,
 0x343180,3,
 0x343190,2,
-0x34319c,9,
-0x343218,9,
-0x343240,3,
-0x343250,6,
-0x343280,1,
-0x343288,6,
-0x3432a4,1,
-0x3432c0,1,
-0x3432c8,6,
-0x3432e4,1,
-0x343400,8,
-0x343424,2,
+0x34319c,15,
+0x343200,9,
+0x343300,1,
+0x343308,6,
+0x343324,10,
+0x343380,1,
+0x343388,6,
+0x3433a4,10,
+0x343400,6,
+0x343420,6,
 0x343500,5,
 0x343520,4,
 0x343540,5,
 0x343560,4,
 0x343800,24,
-0x343864,5,
+0x343864,6,
 0x343880,8,
-0x343900,13,
-0x343980,4,
-0x3439a0,6,
-0x3439c0,6,
-0x3439dc,1,
-0x343a00,6,
-0x343a1c,1,
-0x343a40,1,
-0x343a60,1,
-0x343a68,23,
+0x343900,24,
+0x343964,6,
+0x343980,8,
+0x343a00,17,
+0x343a48,6,
+0x343a80,17,
 0x343ac8,6,
-0x343b00,17,
-0x343b48,6,
-0x343b80,12,
+0x343b00,6,
+0x343b20,6,
+0x343b40,3,
+0x343b80,6,
+0x343ba0,6,
+0x343bc0,3,
 0x343c00,6,
 0x343c20,6,
-0x343c40,6,
-0x343c60,3,
-0x343d00,6,
-0x343d20,6,
-0x343d40,3,
-0x343d80,6,
-0x343da0,6,
-0x343dc0,3,
+0x343c40,3,
+0x343c80,6,
+0x343ca0,6,
+0x343cc0,3,
+0x343d10,2,
+0x343d1c,1,
+0x343d50,2,
+0x343d5c,1,
+0x343d80,1,
+0x343da0,1,
+0x343da8,7,
+0x343de0,1,
+0x343de8,19,
+0x343e40,6,
+0x343e60,6,
+0x343e80,6,
+0x343ea0,6,
+0x343ec0,7,
+0x343ee0,7,
+0x343f00,12,
+0x343f40,3,
+0x343f50,8,
 0x344000,29,
 0x344078,4,
 0x344090,2,
 0x345eac,1,
 0x345eb4,3,
 0x346000,14,
-0x346070,3,
+0x346040,6,
+0x346060,6,
 0x346080,6,
+0x3460a0,3,
 0x346100,9,
 0x346204,1,
 0x34620c,6,
 0x346c94,8,
 0x346cb8,9,
 0x346ce0,4,
-0x347000,6,
-0x347020,3,
-0x347040,7,
-0x347060,6,
-0x347100,5,
-0x347138,1,
-0x347144,1,
-0x347150,2,
+0x347000,1,
+0x347028,1,
+0x347050,1,
+0x347078,1,
+0x3470a0,4,
+0x3471ac,1,
+0x3471d8,4,
+0x347200,6,
+0x347220,6,
+0x347240,3,
+0x347400,5,
+0x347438,1,
+0x347444,1,
+0x347450,4,
+0x347500,7,
+0x347520,6,
+0x347540,6,
+0x347560,3,
+0x347570,1,
 0x348000,6,
 0x348020,3,
-0x348030,1,
-0x348038,7,
+0x348030,3,
+0x348050,1,
 0x348100,6,
 0x348120,10,
 0x348150,10,
 0x3489f4,3,
 0x349000,4,
 0x349020,4,
-0x349040,3,
-0x349050,3,
-0x349080,2,
-0x3490b0,3,
-0x34912c,1,
-0x349140,6,
-0x349200,20,
-0x34925c,30,
-0x349300,24,
+0x349040,11,
+0x349070,3,
+0x349080,4,
+0x3490b0,22,
+0x349110,2,
+0x349120,22,
+0x349180,1,
+0x3491a0,6,
+0x349200,42,
+0x3492c0,1,
+0x3492c8,3,
+0x349300,25,
+0x34936c,4,
 0x349380,2,
 0x3493a0,1,
 0x3493c0,11,
 0x349480,6,
 0x349500,6,
 0x349520,6,
+0x349540,3,
+0x349550,7,
+0x349570,4,
 0x349800,410,
 0x34a000,4,
 0x34a020,4,
-0x34a040,3,
-0x34a050,3,
-0x34a080,2,
-0x34a0b0,3,
-0x34a12c,1,
-0x34a140,6,
-0x34a200,20,
-0x34a25c,30,
-0x34a300,24,
+0x34a040,11,
+0x34a070,3,
+0x34a080,4,
+0x34a0b0,22,
+0x34a110,2,
+0x34a120,22,
+0x34a180,1,
+0x34a1a0,6,
+0x34a200,42,
+0x34a2c0,1,
+0x34a2c8,3,
+0x34a300,25,
+0x34a36c,4,
 0x34a380,2,
 0x34a3a0,1,
 0x34a3c0,11,
 0x34a480,6,
 0x34a500,6,
 0x34a520,6,
+0x34a540,3,
+0x34a550,7,
+0x34a570,4,
 0x34a800,410,
 0x34b000,4,
 0x34b020,4,
-0x34b040,3,
-0x34b050,3,
-0x34b080,2,
-0x34b0b0,3,
-0x34b12c,1,
-0x34b140,6,
-0x34b200,20,
-0x34b25c,30,
-0x34b300,24,
+0x34b040,11,
+0x34b070,3,
+0x34b080,4,
+0x34b0b0,22,
+0x34b110,2,
+0x34b120,22,
+0x34b180,1,
+0x34b1a0,6,
+0x34b200,42,
+0x34b2c0,1,
+0x34b2c8,3,
+0x34b300,25,
+0x34b36c,4,
 0x34b380,2,
 0x34b3a0,1,
 0x34b3c0,11,
 0x34b480,6,
 0x34b500,6,
 0x34b520,6,
+0x34b540,3,
+0x34b550,7,
+0x34b570,4,
 0x34b800,410,
 0x34c000,4,
 0x34c020,4,
-0x34c040,3,
-0x34c050,3,
-0x34c080,2,
-0x34c0b0,3,
-0x34c12c,1,
-0x34c140,6,
-0x34c200,20,
-0x34c25c,30,
-0x34c300,24,
+0x34c040,11,
+0x34c070,3,
+0x34c080,4,
+0x34c0b0,22,
+0x34c110,2,
+0x34c120,22,
+0x34c180,1,
+0x34c1a0,6,
+0x34c200,42,
+0x34c2c0,1,
+0x34c2c8,3,
+0x34c300,25,
+0x34c36c,4,
 0x34c380,2,
 0x34c3a0,1,
 0x34c3c0,11,
 0x34c480,6,
 0x34c500,6,
 0x34c520,6,
+0x34c540,3,
+0x34c550,7,
+0x34c570,4,
 0x34c800,410,
 0x34f800,5,
 0x34f818,1,
 0x34fba4,1,
 0x34fbac,2,
 0x354000,3,
-0x354018,3,
-0x354100,25,
+0x354018,4,
+0x354100,56,
+0x3541f0,1,
 0x354400,3,
-0x354418,3,
-0x354500,25,
-0x354800,1,
+0x354418,4,
+0x354500,56,
+0x3545f0,1,
+0x354800,5,
+0x354820,3,
 0x355000,3,
-0x355018,3,
-0x355100,25,
+0x355018,4,
+0x355100,56,
+0x3551f0,1,
 0x355400,3,
-0x355418,3,
-0x355500,25,
-0x355800,1,
+0x355418,4,
+0x355500,56,
+0x3555f0,1,
+0x355800,5,
+0x355820,3,
 0x356004,7,
-0x356024,3,
+0x356024,1,
+0x356034,3,
 0x356300,5,
-0x35631c,3,
+0x35631c,1,
 0x356600,10,
 0x356630,1,
 0x356680,10,
 0x356780,10,
 0x3567b0,1,
 0x356800,47,
-0x356910,12,
-0x357000,64,
+0x356910,14,
+0x356e00,1,
+0x357000,65,
 0x358000,2,
-0x35800c,9,
-0x358040,6,
-0x358060,6,
-0x358080,2,
-0x35808c,5,
-0x3580a4,3,
-0x3580e0,1,
-0x358500,2,
-0x358518,5,
-0x358540,6,
+0x35800c,3,
+0x358028,2,
+0x358038,47,
+0x358500,6,
+0x358520,6,
+0x358540,3,
 0x358580,10,
+0x3585c0,15,
+0x358600,2,
+0x358618,5,
+0x358630,1,
 0x358800,2,
-0x35880c,9,
-0x358840,6,
-0x358860,6,
-0x358880,2,
-0x35888c,5,
-0x3588a4,3,
-0x3588e0,1,
-0x358d00,2,
-0x358d18,5,
-0x358d40,6,
+0x35880c,3,
+0x358828,2,
+0x358838,47,
+0x358d00,6,
+0x358d20,6,
+0x358d40,3,
 0x358d80,10,
-0x359800,2,
-0x359828,2,
-0x359850,2,
-0x359878,2,
+0x358dc0,15,
+0x358e00,2,
+0x358e18,5,
+0x358e30,1,
+0x359800,3,
+0x359828,3,
+0x359850,3,
+0x359878,3,
 0x3598a0,7,
 0x3599ac,1,
 0x3599d8,4,
 0x359a20,6,
 0x359a40,6,
 0x359a60,6,
-0x359a80,3,
+0x359a80,6,
+0x359aa0,6,
+0x359ac0,3,
 0x359c00,6,
 0x359c20,3,
 0x359c40,2,
 0x359c60,1,
-0x360000,5,
-0x360020,4,
-0x360034,17,
-0x360080,1,
+0x360000,4,
+0x360014,1,
+0x360020,3,
+0x360030,3,
+0x360040,8,
+0x36007c,2,
 0x3600a0,6,
-0x360100,5,
-0x360120,4,
-0x360134,17,
-0x360180,1,
+0x3600c0,6,
+0x3600e0,6,
+0x360100,4,
+0x360114,1,
+0x360120,3,
+0x360130,3,
+0x360140,8,
+0x36017c,2,
 0x3601a0,6,
-0x360200,5,
-0x360220,4,
-0x360234,17,
-0x360280,1,
+0x3601c0,6,
+0x3601e0,6,
+0x360200,4,
+0x360214,1,
+0x360220,3,
+0x360230,3,
+0x360240,8,
+0x36027c,2,
 0x3602a0,6,
-0x360300,5,
-0x360320,4,
-0x360334,17,
-0x360380,1,
+0x3602c0,6,
+0x3602e0,6,
+0x360300,4,
+0x360314,1,
+0x360320,3,
+0x360330,3,
+0x360340,8,
+0x36037c,2,
 0x3603a0,6,
+0x3603c0,6,
+0x3603e0,6,
 0x360400,6,
 0x360440,6,
 0x360480,3,
 0x3604c0,3,
-0x360500,6,
-0x36051c,7,
-0x360540,1,
+0x360500,2,
+0x36050c,4,
+0x360520,2,
+0x36052c,4,
+0x360540,2,
 0x360c00,13,
 0x360c40,12,
 0x360c80,13,
 0x360cc0,12,
-0x360d00,6,
-0x360d20,6,
+0x360d00,14,
+0x360d40,2,
 0x360d80,14,
 0x360dc0,2,
-0x360e40,11,
+0x360e00,11,
+0x360e40,6,
+0x360e60,6,
 0x360e80,6,
 0x360ea0,6,
 0x361000,2,
-0x361010,5,
+0x361014,4,
 0x361040,3,
 0x361050,3,
-0x361060,32,
-0x361100,8,
-0x361140,8,
+0x361080,42,
+0x361140,10,
 0x361180,3,
 0x361190,2,
-0x36119c,9,
-0x361218,9,
-0x361240,3,
-0x361250,6,
-0x361280,1,
-0x361288,6,
-0x3612a4,1,
-0x3612c0,1,
-0x3612c8,6,
-0x3612e4,1,
-0x361400,8,
-0x361424,2,
+0x36119c,15,
+0x361200,9,
+0x361300,1,
+0x361308,6,
+0x361324,10,
+0x361380,1,
+0x361388,6,
+0x3613a4,10,
+0x361400,6,
+0x361420,6,
 0x361500,5,
 0x361520,4,
 0x361540,5,
 0x361560,4,
 0x361800,24,
-0x361864,5,
+0x361864,6,
 0x361880,8,
-0x361900,13,
-0x361980,4,
-0x3619a0,6,
-0x3619c0,6,
-0x3619dc,1,
-0x361a00,6,
-0x361a1c,1,
-0x361a40,1,
-0x361a60,1,
-0x361a68,23,
+0x361900,24,
+0x361964,6,
+0x361980,8,
+0x361a00,17,
+0x361a48,6,
+0x361a80,17,
 0x361ac8,6,
-0x361b00,17,
-0x361b48,6,
-0x361b80,12,
+0x361b00,6,
+0x361b20,6,
+0x361b40,3,
+0x361b80,6,
+0x361ba0,6,
+0x361bc0,3,
 0x361c00,6,
 0x361c20,6,
-0x361c40,6,
-0x361c60,3,
-0x361d00,6,
-0x361d20,6,
-0x361d40,3,
-0x361d80,6,
-0x361da0,6,
-0x361dc0,3,
-0x362000,5,
-0x362020,4,
-0x362034,17,
-0x362080,1,
+0x361c40,3,
+0x361c80,6,
+0x361ca0,6,
+0x361cc0,3,
+0x361d10,2,
+0x361d1c,1,
+0x361d50,2,
+0x361d5c,1,
+0x361d80,1,
+0x361da0,1,
+0x361da8,7,
+0x361de0,1,
+0x361de8,19,
+0x361e40,6,
+0x361e60,6,
+0x361e80,6,
+0x361ea0,6,
+0x361ec0,7,
+0x361ee0,7,
+0x361f00,12,
+0x361f40,3,
+0x361f50,8,
+0x362000,4,
+0x362014,1,
+0x362020,3,
+0x362030,3,
+0x362040,8,
+0x36207c,2,
 0x3620a0,6,
-0x362100,5,
-0x362120,4,
-0x362134,17,
-0x362180,1,
+0x3620c0,6,
+0x3620e0,6,
+0x362100,4,
+0x362114,1,
+0x362120,3,
+0x362130,3,
+0x362140,8,
+0x36217c,2,
 0x3621a0,6,
-0x362200,5,
-0x362220,4,
-0x362234,17,
-0x362280,1,
+0x3621c0,6,
+0x3621e0,6,
+0x362200,4,
+0x362214,1,
+0x362220,3,
+0x362230,3,
+0x362240,8,
+0x36227c,2,
 0x3622a0,6,
-0x362300,5,
-0x362320,4,
-0x362334,17,
-0x362380,1,
+0x3622c0,6,
+0x3622e0,6,
+0x362300,4,
+0x362314,1,
+0x362320,3,
+0x362330,3,
+0x362340,8,
+0x36237c,2,
 0x3623a0,6,
+0x3623c0,6,
+0x3623e0,6,
 0x362400,6,
 0x362440,6,
 0x362480,3,
 0x3624c0,3,
-0x362500,6,
-0x36251c,7,
-0x362540,1,
+0x362500,2,
+0x36250c,4,
+0x362520,2,
+0x36252c,4,
+0x362540,2,
 0x362c00,13,
 0x362c40,12,
 0x362c80,13,
 0x362cc0,12,
-0x362d00,6,
-0x362d20,6,
+0x362d00,14,
+0x362d40,2,
 0x362d80,14,
 0x362dc0,2,
-0x362e40,11,
+0x362e00,11,
+0x362e40,6,
+0x362e60,6,
 0x362e80,6,
 0x362ea0,6,
 0x363000,2,
-0x363010,5,
+0x363014,4,
 0x363040,3,
 0x363050,3,
-0x363060,32,
-0x363100,8,
-0x363140,8,
+0x363080,42,
+0x363140,10,
 0x363180,3,
 0x363190,2,
-0x36319c,9,
-0x363218,9,
-0x363240,3,
-0x363250,6,
-0x363280,1,
-0x363288,6,
-0x3632a4,1,
-0x3632c0,1,
-0x3632c8,6,
-0x3632e4,1,
-0x363400,8,
-0x363424,2,
+0x36319c,15,
+0x363200,9,
+0x363300,1,
+0x363308,6,
+0x363324,10,
+0x363380,1,
+0x363388,6,
+0x3633a4,10,
+0x363400,6,
+0x363420,6,
 0x363500,5,
 0x363520,4,
 0x363540,5,
 0x363560,4,
 0x363800,24,
-0x363864,5,
+0x363864,6,
 0x363880,8,
-0x363900,13,
-0x363980,4,
-0x3639a0,6,
-0x3639c0,6,
-0x3639dc,1,
-0x363a00,6,
-0x363a1c,1,
-0x363a40,1,
-0x363a60,1,
-0x363a68,23,
+0x363900,24,
+0x363964,6,
+0x363980,8,
+0x363a00,17,
+0x363a48,6,
+0x363a80,17,
 0x363ac8,6,
-0x363b00,17,
-0x363b48,6,
-0x363b80,12,
+0x363b00,6,
+0x363b20,6,
+0x363b40,3,
+0x363b80,6,
+0x363ba0,6,
+0x363bc0,3,
 0x363c00,6,
 0x363c20,6,
-0x363c40,6,
-0x363c60,3,
-0x363d00,6,
-0x363d20,6,
-0x363d40,3,
-0x363d80,6,
-0x363da0,6,
-0x363dc0,3,
+0x363c40,3,
+0x363c80,6,
+0x363ca0,6,
+0x363cc0,3,
+0x363d10,2,
+0x363d1c,1,
+0x363d50,2,
+0x363d5c,1,
+0x363d80,1,
+0x363da0,1,
+0x363da8,7,
+0x363de0,1,
+0x363de8,19,
+0x363e40,6,
+0x363e60,6,
+0x363e80,6,
+0x363ea0,6,
+0x363ec0,7,
+0x363ee0,7,
+0x363f00,12,
+0x363f40,3,
+0x363f50,8,
 0x364000,29,
 0x364078,4,
 0x364090,2,
 0x365eac,1,
 0x365eb4,3,
 0x366000,14,
-0x366070,3,
+0x366040,6,
+0x366060,6,
 0x366080,6,
+0x3660a0,3,
 0x366100,9,
 0x366204,1,
 0x36620c,6,
 0x366c94,8,
 0x366cb8,9,
 0x366ce0,4,
-0x367000,6,
-0x367020,3,
-0x367040,7,
-0x367060,6,
-0x367100,5,
-0x367138,1,
-0x367144,1,
-0x367150,2,
+0x367000,1,
+0x367028,1,
+0x367050,1,
+0x367078,1,
+0x3670a0,4,
+0x3671ac,1,
+0x3671d8,4,
+0x367200,6,
+0x367220,6,
+0x367240,3,
+0x367400,5,
+0x367438,1,
+0x367444,1,
+0x367450,4,
+0x367500,7,
+0x367520,6,
+0x367540,6,
+0x367560,3,
+0x367570,1,
 0x368000,6,
 0x368020,3,
-0x368030,1,
-0x368038,7,
+0x368030,3,
+0x368050,1,
 0x368100,6,
 0x368120,10,
 0x368150,10,
 0x3689f4,3,
 0x369000,4,
 0x369020,4,
-0x369040,3,
-0x369050,3,
-0x369080,2,
-0x3690b0,3,
-0x36912c,1,
-0x369140,6,
-0x369200,20,
-0x36925c,30,
-0x369300,24,
+0x369040,11,
+0x369070,3,
+0x369080,4,
+0x3690b0,22,
+0x369110,2,
+0x369120,22,
+0x369180,1,
+0x3691a0,6,
+0x369200,42,
+0x3692c0,1,
+0x3692c8,3,
+0x369300,25,
+0x36936c,4,
 0x369380,2,
 0x3693a0,1,
 0x3693c0,11,
 0x369480,6,
 0x369500,6,
 0x369520,6,
+0x369540,3,
+0x369550,7,
+0x369570,4,
 0x369800,410,
 0x36a000,4,
 0x36a020,4,
-0x36a040,3,
-0x36a050,3,
-0x36a080,2,
-0x36a0b0,3,
-0x36a12c,1,
-0x36a140,6,
-0x36a200,20,
-0x36a25c,30,
-0x36a300,24,
+0x36a040,11,
+0x36a070,3,
+0x36a080,4,
+0x36a0b0,22,
+0x36a110,2,
+0x36a120,22,
+0x36a180,1,
+0x36a1a0,6,
+0x36a200,42,
+0x36a2c0,1,
+0x36a2c8,3,
+0x36a300,25,
+0x36a36c,4,
 0x36a380,2,
 0x36a3a0,1,
 0x36a3c0,11,
 0x36a480,6,
 0x36a500,6,
 0x36a520,6,
+0x36a540,3,
+0x36a550,7,
+0x36a570,4,
 0x36a800,410,
 0x36b000,4,
 0x36b020,4,
-0x36b040,3,
-0x36b050,3,
-0x36b080,2,
-0x36b0b0,3,
-0x36b12c,1,
-0x36b140,6,
-0x36b200,20,
-0x36b25c,30,
-0x36b300,24,
+0x36b040,11,
+0x36b070,3,
+0x36b080,4,
+0x36b0b0,22,
+0x36b110,2,
+0x36b120,22,
+0x36b180,1,
+0x36b1a0,6,
+0x36b200,42,
+0x36b2c0,1,
+0x36b2c8,3,
+0x36b300,25,
+0x36b36c,4,
 0x36b380,2,
 0x36b3a0,1,
 0x36b3c0,11,
 0x36b480,6,
 0x36b500,6,
 0x36b520,6,
+0x36b540,3,
+0x36b550,7,
+0x36b570,4,
 0x36b800,410,
 0x36c000,4,
 0x36c020,4,
-0x36c040,3,
-0x36c050,3,
-0x36c080,2,
-0x36c0b0,3,
-0x36c12c,1,
-0x36c140,6,
-0x36c200,20,
-0x36c25c,30,
-0x36c300,24,
+0x36c040,11,
+0x36c070,3,
+0x36c080,4,
+0x36c0b0,22,
+0x36c110,2,
+0x36c120,22,
+0x36c180,1,
+0x36c1a0,6,
+0x36c200,42,
+0x36c2c0,1,
+0x36c2c8,3,
+0x36c300,25,
+0x36c36c,4,
 0x36c380,2,
 0x36c3a0,1,
 0x36c3c0,11,
 0x36c480,6,
 0x36c500,6,
 0x36c520,6,
+0x36c540,3,
+0x36c550,7,
+0x36c570,4,
 0x36c800,410,
 0x36f800,5,
 0x36f818,1,
 0x36fba4,1,
 0x36fbac,2,
 0x374000,3,
-0x374018,3,
-0x374100,25,
+0x374018,4,
+0x374100,56,
+0x3741f0,1,
 0x374400,3,
-0x374418,3,
-0x374500,25,
-0x374800,1,
+0x374418,4,
+0x374500,56,
+0x3745f0,1,
+0x374800,5,
+0x374820,3,
 0x375000,3,
-0x375018,3,
-0x375100,25,
+0x375018,4,
+0x375100,56,
+0x3751f0,1,
 0x375400,3,
-0x375418,3,
-0x375500,25,
-0x375800,1,
+0x375418,4,
+0x375500,56,
+0x3755f0,1,
+0x375800,5,
+0x375820,3,
 0x376004,7,
-0x376024,3,
+0x376024,1,
+0x376034,3,
 0x376300,5,
-0x37631c,3,
+0x37631c,1,
 0x376600,10,
 0x376630,1,
 0x376680,10,
 0x376780,10,
 0x3767b0,1,
 0x376800,47,
-0x376910,12,
-0x377000,64,
+0x376910,14,
+0x376e00,1,
+0x377000,65,
 0x378000,2,
-0x37800c,9,
-0x378040,6,
-0x378060,6,
-0x378080,2,
-0x37808c,5,
-0x3780a4,3,
-0x3780e0,1,
-0x378500,2,
-0x378518,5,
-0x378540,6,
+0x37800c,3,
+0x378028,2,
+0x378038,47,
+0x378500,6,
+0x378520,6,
+0x378540,3,
 0x378580,10,
+0x3785c0,15,
+0x378600,2,
+0x378618,5,
+0x378630,1,
 0x378800,2,
-0x37880c,9,
-0x378840,6,
-0x378860,6,
-0x378880,2,
-0x37888c,5,
-0x3788a4,3,
-0x3788e0,1,
-0x378d00,2,
-0x378d18,5,
-0x378d40,6,
+0x37880c,3,
+0x378828,2,
+0x378838,47,
+0x378d00,6,
+0x378d20,6,
+0x378d40,3,
 0x378d80,10,
-0x379800,2,
-0x379828,2,
-0x379850,2,
-0x379878,2,
+0x378dc0,15,
+0x378e00,2,
+0x378e18,5,
+0x378e30,1,
+0x379800,3,
+0x379828,3,
+0x379850,3,
+0x379878,3,
 0x3798a0,7,
 0x3799ac,1,
 0x3799d8,4,
 0x379a20,6,
 0x379a40,6,
 0x379a60,6,
-0x379a80,3,
+0x379a80,6,
+0x379aa0,6,
+0x379ac0,3,
 0x379c00,6,
 0x379c20,3,
 0x379c40,2,
 0x379c60,1,
-0x380000,5,
-0x380020,4,
-0x380034,17,
-0x380080,1,
+0x380000,4,
+0x380014,1,
+0x380020,3,
+0x380030,3,
+0x380040,8,
+0x38007c,2,
 0x3800a0,6,
-0x380100,5,
-0x380120,4,
-0x380134,17,
-0x380180,1,
+0x3800c0,6,
+0x3800e0,6,
+0x380100,4,
+0x380114,1,
+0x380120,3,
+0x380130,3,
+0x380140,8,
+0x38017c,2,
 0x3801a0,6,
-0x380200,5,
-0x380220,4,
-0x380234,17,
-0x380280,1,
+0x3801c0,6,
+0x3801e0,6,
+0x380200,4,
+0x380214,1,
+0x380220,3,
+0x380230,3,
+0x380240,8,
+0x38027c,2,
 0x3802a0,6,
-0x380300,5,
-0x380320,4,
-0x380334,17,
-0x380380,1,
+0x3802c0,6,
+0x3802e0,6,
+0x380300,4,
+0x380314,1,
+0x380320,3,
+0x380330,3,
+0x380340,8,
+0x38037c,2,
 0x3803a0,6,
+0x3803c0,6,
+0x3803e0,6,
 0x380400,6,
 0x380440,6,
 0x380480,3,
 0x3804c0,3,
-0x380500,6,
-0x38051c,7,
-0x380540,1,
+0x380500,2,
+0x38050c,4,
+0x380520,2,
+0x38052c,4,
+0x380540,2,
 0x380c00,13,
 0x380c40,12,
 0x380c80,13,
 0x380cc0,12,
-0x380d00,6,
-0x380d20,6,
+0x380d00,14,
+0x380d40,2,
 0x380d80,14,
 0x380dc0,2,
-0x380e40,11,
+0x380e00,11,
+0x380e40,6,
+0x380e60,6,
 0x380e80,6,
 0x380ea0,6,
 0x381000,2,
-0x381010,5,
+0x381014,4,
 0x381040,3,
 0x381050,3,
-0x381060,32,
-0x381100,8,
-0x381140,8,
+0x381080,42,
+0x381140,10,
 0x381180,3,
 0x381190,2,
-0x38119c,9,
-0x381218,9,
-0x381240,3,
-0x381250,6,
-0x381280,1,
-0x381288,6,
-0x3812a4,1,
-0x3812c0,1,
-0x3812c8,6,
-0x3812e4,1,
-0x381400,8,
-0x381424,2,
+0x38119c,15,
+0x381200,9,
+0x381300,1,
+0x381308,6,
+0x381324,10,
+0x381380,1,
+0x381388,6,
+0x3813a4,10,
+0x381400,6,
+0x381420,6,
 0x381500,5,
 0x381520,4,
 0x381540,5,
 0x381560,4,
 0x381800,24,
-0x381864,5,
+0x381864,6,
 0x381880,8,
-0x381900,13,
-0x381980,4,
-0x3819a0,6,
-0x3819c0,6,
-0x3819dc,1,
-0x381a00,6,
-0x381a1c,1,
-0x381a40,1,
-0x381a60,1,
-0x381a68,23,
+0x381900,24,
+0x381964,6,
+0x381980,8,
+0x381a00,17,
+0x381a48,6,
+0x381a80,17,
 0x381ac8,6,
-0x381b00,17,
-0x381b48,6,
-0x381b80,12,
+0x381b00,6,
+0x381b20,6,
+0x381b40,3,
+0x381b80,6,
+0x381ba0,6,
+0x381bc0,3,
 0x381c00,6,
 0x381c20,6,
-0x381c40,6,
-0x381c60,3,
-0x381d00,6,
-0x381d20,6,
-0x381d40,3,
-0x381d80,6,
-0x381da0,6,
-0x381dc0,3,
-0x382000,5,
-0x382020,4,
-0x382034,17,
-0x382080,1,
+0x381c40,3,
+0x381c80,6,
+0x381ca0,6,
+0x381cc0,3,
+0x381d10,2,
+0x381d1c,1,
+0x381d50,2,
+0x381d5c,1,
+0x381d80,1,
+0x381da0,1,
+0x381da8,7,
+0x381de0,1,
+0x381de8,19,
+0x381e40,6,
+0x381e60,6,
+0x381e80,6,
+0x381ea0,6,
+0x381ec0,7,
+0x381ee0,7,
+0x381f00,12,
+0x381f40,3,
+0x381f50,8,
+0x382000,4,
+0x382014,1,
+0x382020,3,
+0x382030,3,
+0x382040,8,
+0x38207c,2,
 0x3820a0,6,
-0x382100,5,
-0x382120,4,
-0x382134,17,
-0x382180,1,
+0x3820c0,6,
+0x3820e0,6,
+0x382100,4,
+0x382114,1,
+0x382120,3,
+0x382130,3,
+0x382140,8,
+0x38217c,2,
 0x3821a0,6,
-0x382200,5,
-0x382220,4,
-0x382234,17,
-0x382280,1,
+0x3821c0,6,
+0x3821e0,6,
+0x382200,4,
+0x382214,1,
+0x382220,3,
+0x382230,3,
+0x382240,8,
+0x38227c,2,
 0x3822a0,6,
-0x382300,5,
-0x382320,4,
-0x382334,17,
-0x382380,1,
+0x3822c0,6,
+0x3822e0,6,
+0x382300,4,
+0x382314,1,
+0x382320,3,
+0x382330,3,
+0x382340,8,
+0x38237c,2,
 0x3823a0,6,
+0x3823c0,6,
+0x3823e0,6,
 0x382400,6,
 0x382440,6,
 0x382480,3,
 0x3824c0,3,
-0x382500,6,
-0x38251c,7,
-0x382540,1,
+0x382500,2,
+0x38250c,4,
+0x382520,2,
+0x38252c,4,
+0x382540,2,
 0x382c00,13,
 0x382c40,12,
 0x382c80,13,
 0x382cc0,12,
-0x382d00,6,
-0x382d20,6,
+0x382d00,14,
+0x382d40,2,
 0x382d80,14,
 0x382dc0,2,
-0x382e40,11,
+0x382e00,11,
+0x382e40,6,
+0x382e60,6,
 0x382e80,6,
 0x382ea0,6,
 0x383000,2,
-0x383010,5,
+0x383014,4,
 0x383040,3,
 0x383050,3,
-0x383060,32,
-0x383100,8,
-0x383140,8,
+0x383080,42,
+0x383140,10,
 0x383180,3,
 0x383190,2,
-0x38319c,9,
-0x383218,9,
-0x383240,3,
-0x383250,6,
-0x383280,1,
-0x383288,6,
-0x3832a4,1,
-0x3832c0,1,
-0x3832c8,6,
-0x3832e4,1,
-0x383400,8,
-0x383424,2,
+0x38319c,15,
+0x383200,9,
+0x383300,1,
+0x383308,6,
+0x383324,10,
+0x383380,1,
+0x383388,6,
+0x3833a4,10,
+0x383400,6,
+0x383420,6,
 0x383500,5,
 0x383520,4,
 0x383540,5,
 0x383560,4,
 0x383800,24,
-0x383864,5,
+0x383864,6,
 0x383880,8,
-0x383900,13,
-0x383980,4,
-0x3839a0,6,
-0x3839c0,6,
-0x3839dc,1,
-0x383a00,6,
-0x383a1c,1,
-0x383a40,1,
-0x383a60,1,
-0x383a68,23,
+0x383900,24,
+0x383964,6,
+0x383980,8,
+0x383a00,17,
+0x383a48,6,
+0x383a80,17,
 0x383ac8,6,
-0x383b00,17,
-0x383b48,6,
-0x383b80,12,
+0x383b00,6,
+0x383b20,6,
+0x383b40,3,
+0x383b80,6,
+0x383ba0,6,
+0x383bc0,3,
 0x383c00,6,
 0x383c20,6,
-0x383c40,6,
-0x383c60,3,
-0x383d00,6,
-0x383d20,6,
-0x383d40,3,
-0x383d80,6,
-0x383da0,6,
-0x383dc0,3,
+0x383c40,3,
+0x383c80,6,
+0x383ca0,6,
+0x383cc0,3,
+0x383d10,2,
+0x383d1c,1,
+0x383d50,2,
+0x383d5c,1,
+0x383d80,1,
+0x383da0,1,
+0x383da8,7,
+0x383de0,1,
+0x383de8,19,
+0x383e40,6,
+0x383e60,6,
+0x383e80,6,
+0x383ea0,6,
+0x383ec0,7,
+0x383ee0,7,
+0x383f00,12,
+0x383f40,3,
+0x383f50,8,
 0x384000,29,
 0x384078,4,
 0x384090,2,
 0x385eac,1,
 0x385eb4,3,
 0x386000,14,
-0x386070,3,
+0x386040,6,
+0x386060,6,
 0x386080,6,
+0x3860a0,3,
 0x386100,9,
 0x386204,1,
 0x38620c,6,
 0x386c94,8,
 0x386cb8,9,
 0x386ce0,4,
-0x387000,6,
-0x387020,3,
-0x387040,7,
-0x387060,6,
-0x387100,5,
-0x387138,1,
-0x387144,1,
-0x387150,2,
+0x387000,1,
+0x387028,1,
+0x387050,1,
+0x387078,1,
+0x3870a0,4,
+0x3871ac,1,
+0x3871d8,4,
+0x387200,6,
+0x387220,6,
+0x387240,3,
+0x387400,5,
+0x387438,1,
+0x387444,1,
+0x387450,4,
+0x387500,7,
+0x387520,6,
+0x387540,6,
+0x387560,3,
+0x387570,1,
 0x388000,6,
 0x388020,3,
-0x388030,1,
-0x388038,7,
+0x388030,3,
+0x388050,1,
 0x388100,6,
 0x388120,10,
 0x388150,10,
 0x3889f4,3,
 0x389000,4,
 0x389020,4,
-0x389040,3,
-0x389050,3,
-0x389080,2,
-0x3890b0,3,
-0x38912c,1,
-0x389140,6,
-0x389200,20,
-0x38925c,30,
-0x389300,24,
+0x389040,11,
+0x389070,3,
+0x389080,4,
+0x3890b0,22,
+0x389110,2,
+0x389120,22,
+0x389180,1,
+0x3891a0,6,
+0x389200,42,
+0x3892c0,1,
+0x3892c8,3,
+0x389300,25,
+0x38936c,4,
 0x389380,2,
 0x3893a0,1,
 0x3893c0,11,
 0x389480,6,
 0x389500,6,
 0x389520,6,
+0x389540,3,
+0x389550,7,
+0x389570,4,
 0x389800,410,
 0x38a000,4,
 0x38a020,4,
-0x38a040,3,
-0x38a050,3,
-0x38a080,2,
-0x38a0b0,3,
-0x38a12c,1,
-0x38a140,6,
-0x38a200,20,
-0x38a25c,30,
-0x38a300,24,
+0x38a040,11,
+0x38a070,3,
+0x38a080,4,
+0x38a0b0,22,
+0x38a110,2,
+0x38a120,22,
+0x38a180,1,
+0x38a1a0,6,
+0x38a200,42,
+0x38a2c0,1,
+0x38a2c8,3,
+0x38a300,25,
+0x38a36c,4,
 0x38a380,2,
 0x38a3a0,1,
 0x38a3c0,11,
 0x38a480,6,
 0x38a500,6,
 0x38a520,6,
+0x38a540,3,
+0x38a550,7,
+0x38a570,4,
 0x38a800,410,
 0x38b000,4,
 0x38b020,4,
-0x38b040,3,
-0x38b050,3,
-0x38b080,2,
-0x38b0b0,3,
-0x38b12c,1,
-0x38b140,6,
-0x38b200,20,
-0x38b25c,30,
-0x38b300,24,
+0x38b040,11,
+0x38b070,3,
+0x38b080,4,
+0x38b0b0,22,
+0x38b110,2,
+0x38b120,22,
+0x38b180,1,
+0x38b1a0,6,
+0x38b200,42,
+0x38b2c0,1,
+0x38b2c8,3,
+0x38b300,25,
+0x38b36c,4,
 0x38b380,2,
 0x38b3a0,1,
 0x38b3c0,11,
 0x38b480,6,
 0x38b500,6,
 0x38b520,6,
+0x38b540,3,
+0x38b550,7,
+0x38b570,4,
 0x38b800,410,
 0x38c000,4,
 0x38c020,4,
-0x38c040,3,
-0x38c050,3,
-0x38c080,2,
-0x38c0b0,3,
-0x38c12c,1,
-0x38c140,6,
-0x38c200,20,
-0x38c25c,30,
-0x38c300,24,
+0x38c040,11,
+0x38c070,3,
+0x38c080,4,
+0x38c0b0,22,
+0x38c110,2,
+0x38c120,22,
+0x38c180,1,
+0x38c1a0,6,
+0x38c200,42,
+0x38c2c0,1,
+0x38c2c8,3,
+0x38c300,25,
+0x38c36c,4,
 0x38c380,2,
 0x38c3a0,1,
 0x38c3c0,11,
 0x38c480,6,
 0x38c500,6,
 0x38c520,6,
+0x38c540,3,
+0x38c550,7,
+0x38c570,4,
 0x38c800,410,
 0x38f800,5,
 0x38f818,1,
 0x38fba4,1,
 0x38fbac,2,
 0x394000,3,
-0x394018,3,
-0x394100,25,
+0x394018,4,
+0x394100,56,
+0x3941f0,1,
 0x394400,3,
-0x394418,3,
-0x394500,25,
-0x394800,1,
+0x394418,4,
+0x394500,56,
+0x3945f0,1,
+0x394800,5,
+0x394820,3,
 0x395000,3,
-0x395018,3,
-0x395100,25,
+0x395018,4,
+0x395100,56,
+0x3951f0,1,
 0x395400,3,
-0x395418,3,
-0x395500,25,
-0x395800,1,
+0x395418,4,
+0x395500,56,
+0x3955f0,1,
+0x395800,5,
+0x395820,3,
 0x396004,7,
-0x396024,3,
+0x396024,1,
+0x396034,3,
 0x396300,5,
-0x39631c,3,
+0x39631c,1,
 0x396600,10,
 0x396630,1,
 0x396680,10,
 0x396780,10,
 0x3967b0,1,
 0x396800,47,
-0x396910,12,
-0x397000,64,
+0x396910,14,
+0x396e00,1,
+0x397000,65,
 0x398000,2,
-0x39800c,9,
-0x398040,6,
-0x398060,6,
-0x398080,2,
-0x39808c,5,
-0x3980a4,3,
-0x3980e0,1,
-0x398500,2,
-0x398518,5,
-0x398540,6,
+0x39800c,3,
+0x398028,2,
+0x398038,47,
+0x398500,6,
+0x398520,6,
+0x398540,3,
 0x398580,10,
+0x3985c0,15,
+0x398600,2,
+0x398618,5,
+0x398630,1,
 0x398800,2,
-0x39880c,9,
-0x398840,6,
-0x398860,6,
-0x398880,2,
-0x39888c,5,
-0x3988a4,3,
-0x3988e0,1,
-0x398d00,2,
-0x398d18,5,
-0x398d40,6,
+0x39880c,3,
+0x398828,2,
+0x398838,47,
+0x398d00,6,
+0x398d20,6,
+0x398d40,3,
 0x398d80,10,
-0x399800,2,
-0x399828,2,
-0x399850,2,
-0x399878,2,
+0x398dc0,15,
+0x398e00,2,
+0x398e18,5,
+0x398e30,1,
+0x399800,3,
+0x399828,3,
+0x399850,3,
+0x399878,3,
 0x3998a0,7,
 0x3999ac,1,
 0x3999d8,4,
 0x399a20,6,
 0x399a40,6,
 0x399a60,6,
-0x399a80,3,
+0x399a80,6,
+0x399aa0,6,
+0x399ac0,3,
 0x399c00,6,
 0x399c20,3,
 0x399c40,2,
 0x399c60,1,
-0x3a0000,5,
-0x3a0020,4,
-0x3a0034,17,
-0x3a0080,1,
+0x3a0000,4,
+0x3a0014,1,
+0x3a0020,3,
+0x3a0030,3,
+0x3a0040,8,
+0x3a007c,2,
 0x3a00a0,6,
-0x3a0100,5,
-0x3a0120,4,
-0x3a0134,17,
-0x3a0180,1,
+0x3a00c0,6,
+0x3a00e0,6,
+0x3a0100,4,
+0x3a0114,1,
+0x3a0120,3,
+0x3a0130,3,
+0x3a0140,8,
+0x3a017c,2,
 0x3a01a0,6,
-0x3a0200,5,
-0x3a0220,4,
-0x3a0234,17,
-0x3a0280,1,
+0x3a01c0,6,
+0x3a01e0,6,
+0x3a0200,4,
+0x3a0214,1,
+0x3a0220,3,
+0x3a0230,3,
+0x3a0240,8,
+0x3a027c,2,
 0x3a02a0,6,
-0x3a0300,5,
-0x3a0320,4,
-0x3a0334,17,
-0x3a0380,1,
+0x3a02c0,6,
+0x3a02e0,6,
+0x3a0300,4,
+0x3a0314,1,
+0x3a0320,3,
+0x3a0330,3,
+0x3a0340,8,
+0x3a037c,2,
 0x3a03a0,6,
+0x3a03c0,6,
+0x3a03e0,6,
 0x3a0400,6,
 0x3a0440,6,
 0x3a0480,3,
 0x3a04c0,3,
-0x3a0500,6,
-0x3a051c,7,
-0x3a0540,1,
+0x3a0500,2,
+0x3a050c,4,
+0x3a0520,2,
+0x3a052c,4,
+0x3a0540,2,
 0x3a0c00,13,
 0x3a0c40,12,
 0x3a0c80,13,
 0x3a0cc0,12,
-0x3a0d00,6,
-0x3a0d20,6,
+0x3a0d00,14,
+0x3a0d40,2,
 0x3a0d80,14,
 0x3a0dc0,2,
-0x3a0e40,11,
+0x3a0e00,11,
+0x3a0e40,6,
+0x3a0e60,6,
 0x3a0e80,6,
 0x3a0ea0,6,
 0x3a1000,2,
-0x3a1010,5,
+0x3a1014,4,
 0x3a1040,3,
 0x3a1050,3,
-0x3a1060,32,
-0x3a1100,8,
-0x3a1140,8,
+0x3a1080,42,
+0x3a1140,10,
 0x3a1180,3,
 0x3a1190,2,
-0x3a119c,9,
-0x3a1218,9,
-0x3a1240,3,
-0x3a1250,6,
-0x3a1280,1,
-0x3a1288,6,
-0x3a12a4,1,
-0x3a12c0,1,
-0x3a12c8,6,
-0x3a12e4,1,
-0x3a1400,8,
-0x3a1424,2,
+0x3a119c,15,
+0x3a1200,9,
+0x3a1300,1,
+0x3a1308,6,
+0x3a1324,10,
+0x3a1380,1,
+0x3a1388,6,
+0x3a13a4,10,
+0x3a1400,6,
+0x3a1420,6,
 0x3a1500,5,
 0x3a1520,4,
 0x3a1540,5,
 0x3a1560,4,
 0x3a1800,24,
-0x3a1864,5,
+0x3a1864,6,
 0x3a1880,8,
-0x3a1900,13,
-0x3a1980,4,
-0x3a19a0,6,
-0x3a19c0,6,
-0x3a19dc,1,
-0x3a1a00,6,
-0x3a1a1c,1,
-0x3a1a40,1,
-0x3a1a60,1,
-0x3a1a68,23,
+0x3a1900,24,
+0x3a1964,6,
+0x3a1980,8,
+0x3a1a00,17,
+0x3a1a48,6,
+0x3a1a80,17,
 0x3a1ac8,6,
-0x3a1b00,17,
-0x3a1b48,6,
-0x3a1b80,12,
+0x3a1b00,6,
+0x3a1b20,6,
+0x3a1b40,3,
+0x3a1b80,6,
+0x3a1ba0,6,
+0x3a1bc0,3,
 0x3a1c00,6,
 0x3a1c20,6,
-0x3a1c40,6,
-0x3a1c60,3,
-0x3a1d00,6,
-0x3a1d20,6,
-0x3a1d40,3,
-0x3a1d80,6,
-0x3a1da0,6,
-0x3a1dc0,3,
-0x3a2000,5,
-0x3a2020,4,
-0x3a2034,17,
-0x3a2080,1,
+0x3a1c40,3,
+0x3a1c80,6,
+0x3a1ca0,6,
+0x3a1cc0,3,
+0x3a1d10,2,
+0x3a1d1c,1,
+0x3a1d50,2,
+0x3a1d5c,1,
+0x3a1d80,1,
+0x3a1da0,1,
+0x3a1da8,7,
+0x3a1de0,1,
+0x3a1de8,19,
+0x3a1e40,6,
+0x3a1e60,6,
+0x3a1e80,6,
+0x3a1ea0,6,
+0x3a1ec0,7,
+0x3a1ee0,7,
+0x3a1f00,12,
+0x3a1f40,3,
+0x3a1f50,8,
+0x3a2000,4,
+0x3a2014,1,
+0x3a2020,3,
+0x3a2030,3,
+0x3a2040,8,
+0x3a207c,2,
 0x3a20a0,6,
-0x3a2100,5,
-0x3a2120,4,
-0x3a2134,17,
-0x3a2180,1,
+0x3a20c0,6,
+0x3a20e0,6,
+0x3a2100,4,
+0x3a2114,1,
+0x3a2120,3,
+0x3a2130,3,
+0x3a2140,8,
+0x3a217c,2,
 0x3a21a0,6,
-0x3a2200,5,
-0x3a2220,4,
-0x3a2234,17,
-0x3a2280,1,
+0x3a21c0,6,
+0x3a21e0,6,
+0x3a2200,4,
+0x3a2214,1,
+0x3a2220,3,
+0x3a2230,3,
+0x3a2240,8,
+0x3a227c,2,
 0x3a22a0,6,
-0x3a2300,5,
-0x3a2320,4,
-0x3a2334,17,
-0x3a2380,1,
+0x3a22c0,6,
+0x3a22e0,6,
+0x3a2300,4,
+0x3a2314,1,
+0x3a2320,3,
+0x3a2330,3,
+0x3a2340,8,
+0x3a237c,2,
 0x3a23a0,6,
+0x3a23c0,6,
+0x3a23e0,6,
 0x3a2400,6,
 0x3a2440,6,
 0x3a2480,3,
 0x3a24c0,3,
-0x3a2500,6,
-0x3a251c,7,
-0x3a2540,1,
+0x3a2500,2,
+0x3a250c,4,
+0x3a2520,2,
+0x3a252c,4,
+0x3a2540,2,
 0x3a2c00,13,
 0x3a2c40,12,
 0x3a2c80,13,
 0x3a2cc0,12,
-0x3a2d00,6,
-0x3a2d20,6,
+0x3a2d00,14,
+0x3a2d40,2,
 0x3a2d80,14,
 0x3a2dc0,2,
-0x3a2e40,11,
+0x3a2e00,11,
+0x3a2e40,6,
+0x3a2e60,6,
 0x3a2e80,6,
 0x3a2ea0,6,
 0x3a3000,2,
-0x3a3010,5,
+0x3a3014,4,
 0x3a3040,3,
 0x3a3050,3,
-0x3a3060,32,
-0x3a3100,8,
-0x3a3140,8,
+0x3a3080,42,
+0x3a3140,10,
 0x3a3180,3,
 0x3a3190,2,
-0x3a319c,9,
-0x3a3218,9,
-0x3a3240,3,
-0x3a3250,6,
-0x3a3280,1,
-0x3a3288,6,
-0x3a32a4,1,
-0x3a32c0,1,
-0x3a32c8,6,
-0x3a32e4,1,
-0x3a3400,8,
-0x3a3424,2,
+0x3a319c,15,
+0x3a3200,9,
+0x3a3300,1,
+0x3a3308,6,
+0x3a3324,10,
+0x3a3380,1,
+0x3a3388,6,
+0x3a33a4,10,
+0x3a3400,6,
+0x3a3420,6,
 0x3a3500,5,
 0x3a3520,4,
 0x3a3540,5,
 0x3a3560,4,
 0x3a3800,24,
-0x3a3864,5,
+0x3a3864,6,
 0x3a3880,8,
-0x3a3900,13,
-0x3a3980,4,
-0x3a39a0,6,
-0x3a39c0,6,
-0x3a39dc,1,
-0x3a3a00,6,
-0x3a3a1c,1,
-0x3a3a40,1,
-0x3a3a60,1,
-0x3a3a68,23,
+0x3a3900,24,
+0x3a3964,6,
+0x3a3980,8,
+0x3a3a00,17,
+0x3a3a48,6,
+0x3a3a80,17,
 0x3a3ac8,6,
-0x3a3b00,17,
-0x3a3b48,6,
-0x3a3b80,12,
+0x3a3b00,6,
+0x3a3b20,6,
+0x3a3b40,3,
+0x3a3b80,6,
+0x3a3ba0,6,
+0x3a3bc0,3,
 0x3a3c00,6,
 0x3a3c20,6,
-0x3a3c40,6,
-0x3a3c60,3,
-0x3a3d00,6,
-0x3a3d20,6,
-0x3a3d40,3,
-0x3a3d80,6,
-0x3a3da0,6,
-0x3a3dc0,3,
+0x3a3c40,3,
+0x3a3c80,6,
+0x3a3ca0,6,
+0x3a3cc0,3,
+0x3a3d10,2,
+0x3a3d1c,1,
+0x3a3d50,2,
+0x3a3d5c,1,
+0x3a3d80,1,
+0x3a3da0,1,
+0x3a3da8,7,
+0x3a3de0,1,
+0x3a3de8,19,
+0x3a3e40,6,
+0x3a3e60,6,
+0x3a3e80,6,
+0x3a3ea0,6,
+0x3a3ec0,7,
+0x3a3ee0,7,
+0x3a3f00,12,
+0x3a3f40,3,
+0x3a3f50,8,
 0x3a4000,29,
 0x3a4078,4,
 0x3a4090,2,
 0x3a5eac,1,
 0x3a5eb4,3,
 0x3a6000,14,
-0x3a6070,3,
+0x3a6040,6,
+0x3a6060,6,
 0x3a6080,6,
+0x3a60a0,3,
 0x3a6100,9,
 0x3a6204,1,
 0x3a620c,6,
 0x3a6c94,8,
 0x3a6cb8,9,
 0x3a6ce0,4,
-0x3a7000,6,
-0x3a7020,3,
-0x3a7040,7,
-0x3a7060,6,
-0x3a7100,5,
-0x3a7138,1,
-0x3a7144,1,
-0x3a7150,2,
+0x3a7000,1,
+0x3a7028,1,
+0x3a7050,1,
+0x3a7078,1,
+0x3a70a0,4,
+0x3a71ac,1,
+0x3a71d8,4,
+0x3a7200,6,
+0x3a7220,6,
+0x3a7240,3,
+0x3a7400,5,
+0x3a7438,1,
+0x3a7444,1,
+0x3a7450,4,
+0x3a7500,7,
+0x3a7520,6,
+0x3a7540,6,
+0x3a7560,3,
+0x3a7570,1,
 0x3a8000,6,
 0x3a8020,3,
-0x3a8030,1,
-0x3a8038,7,
+0x3a8030,3,
+0x3a8050,1,
 0x3a8100,6,
 0x3a8120,10,
 0x3a8150,10,
 0x3a89f4,3,
 0x3a9000,4,
 0x3a9020,4,
-0x3a9040,3,
-0x3a9050,3,
-0x3a9080,2,
-0x3a90b0,3,
-0x3a912c,1,
-0x3a9140,6,
-0x3a9200,20,
-0x3a925c,30,
-0x3a9300,24,
+0x3a9040,11,
+0x3a9070,3,
+0x3a9080,4,
+0x3a90b0,22,
+0x3a9110,2,
+0x3a9120,22,
+0x3a9180,1,
+0x3a91a0,6,
+0x3a9200,42,
+0x3a92c0,1,
+0x3a92c8,3,
+0x3a9300,25,
+0x3a936c,4,
 0x3a9380,2,
 0x3a93a0,1,
 0x3a93c0,11,
 0x3a9480,6,
 0x3a9500,6,
 0x3a9520,6,
+0x3a9540,3,
+0x3a9550,7,
+0x3a9570,4,
 0x3a9800,410,
 0x3aa000,4,
 0x3aa020,4,
-0x3aa040,3,
-0x3aa050,3,
-0x3aa080,2,
-0x3aa0b0,3,
-0x3aa12c,1,
-0x3aa140,6,
-0x3aa200,20,
-0x3aa25c,30,
-0x3aa300,24,
+0x3aa040,11,
+0x3aa070,3,
+0x3aa080,4,
+0x3aa0b0,22,
+0x3aa110,2,
+0x3aa120,22,
+0x3aa180,1,
+0x3aa1a0,6,
+0x3aa200,42,
+0x3aa2c0,1,
+0x3aa2c8,3,
+0x3aa300,25,
+0x3aa36c,4,
 0x3aa380,2,
 0x3aa3a0,1,
 0x3aa3c0,11,
 0x3aa480,6,
 0x3aa500,6,
 0x3aa520,6,
+0x3aa540,3,
+0x3aa550,7,
+0x3aa570,4,
 0x3aa800,410,
 0x3ab000,4,
 0x3ab020,4,
-0x3ab040,3,
-0x3ab050,3,
-0x3ab080,2,
-0x3ab0b0,3,
-0x3ab12c,1,
-0x3ab140,6,
-0x3ab200,20,
-0x3ab25c,30,
-0x3ab300,24,
+0x3ab040,11,
+0x3ab070,3,
+0x3ab080,4,
+0x3ab0b0,22,
+0x3ab110,2,
+0x3ab120,22,
+0x3ab180,1,
+0x3ab1a0,6,
+0x3ab200,42,
+0x3ab2c0,1,
+0x3ab2c8,3,
+0x3ab300,25,
+0x3ab36c,4,
 0x3ab380,2,
 0x3ab3a0,1,
 0x3ab3c0,11,
 0x3ab480,6,
 0x3ab500,6,
 0x3ab520,6,
+0x3ab540,3,
+0x3ab550,7,
+0x3ab570,4,
 0x3ab800,410,
 0x3ac000,4,
 0x3ac020,4,
-0x3ac040,3,
-0x3ac050,3,
-0x3ac080,2,
-0x3ac0b0,3,
-0x3ac12c,1,
-0x3ac140,6,
-0x3ac200,20,
-0x3ac25c,30,
-0x3ac300,24,
+0x3ac040,11,
+0x3ac070,3,
+0x3ac080,4,
+0x3ac0b0,22,
+0x3ac110,2,
+0x3ac120,22,
+0x3ac180,1,
+0x3ac1a0,6,
+0x3ac200,42,
+0x3ac2c0,1,
+0x3ac2c8,3,
+0x3ac300,25,
+0x3ac36c,4,
 0x3ac380,2,
 0x3ac3a0,1,
 0x3ac3c0,11,
 0x3ac480,6,
 0x3ac500,6,
 0x3ac520,6,
+0x3ac540,3,
+0x3ac550,7,
+0x3ac570,4,
 0x3ac800,410,
 0x3af800,5,
 0x3af818,1,
 0x3afba4,1,
 0x3afbac,2,
 0x3b4000,3,
-0x3b4018,3,
-0x3b4100,25,
+0x3b4018,4,
+0x3b4100,56,
+0x3b41f0,1,
 0x3b4400,3,
-0x3b4418,3,
-0x3b4500,25,
-0x3b4800,1,
+0x3b4418,4,
+0x3b4500,56,
+0x3b45f0,1,
+0x3b4800,5,
+0x3b4820,3,
 0x3b5000,3,
-0x3b5018,3,
-0x3b5100,25,
+0x3b5018,4,
+0x3b5100,56,
+0x3b51f0,1,
 0x3b5400,3,
-0x3b5418,3,
-0x3b5500,25,
-0x3b5800,1,
+0x3b5418,4,
+0x3b5500,56,
+0x3b55f0,1,
+0x3b5800,5,
+0x3b5820,3,
 0x3b6004,7,
-0x3b6024,3,
+0x3b6024,1,
+0x3b6034,3,
 0x3b6300,5,
-0x3b631c,3,
+0x3b631c,1,
 0x3b6600,10,
 0x3b6630,1,
 0x3b6680,10,
 0x3b6780,10,
 0x3b67b0,1,
 0x3b6800,47,
-0x3b6910,12,
-0x3b7000,64,
+0x3b6910,14,
+0x3b6e00,1,
+0x3b7000,65,
 0x3b8000,2,
-0x3b800c,9,
-0x3b8040,6,
-0x3b8060,6,
-0x3b8080,2,
-0x3b808c,5,
-0x3b80a4,3,
-0x3b80e0,1,
-0x3b8500,2,
-0x3b8518,5,
-0x3b8540,6,
+0x3b800c,3,
+0x3b8028,2,
+0x3b8038,47,
+0x3b8500,6,
+0x3b8520,6,
+0x3b8540,3,
 0x3b8580,10,
+0x3b85c0,15,
+0x3b8600,2,
+0x3b8618,5,
+0x3b8630,1,
 0x3b8800,2,
-0x3b880c,9,
-0x3b8840,6,
-0x3b8860,6,
-0x3b8880,2,
-0x3b888c,5,
-0x3b88a4,3,
-0x3b88e0,1,
-0x3b8d00,2,
-0x3b8d18,5,
-0x3b8d40,6,
+0x3b880c,3,
+0x3b8828,2,
+0x3b8838,47,
+0x3b8d00,6,
+0x3b8d20,6,
+0x3b8d40,3,
 0x3b8d80,10,
-0x3b9800,2,
-0x3b9828,2,
-0x3b9850,2,
-0x3b9878,2,
+0x3b8dc0,15,
+0x3b8e00,2,
+0x3b8e18,5,
+0x3b8e30,1,
+0x3b9800,3,
+0x3b9828,3,
+0x3b9850,3,
+0x3b9878,3,
 0x3b98a0,7,
 0x3b99ac,1,
 0x3b99d8,4,
 0x3b9a20,6,
 0x3b9a40,6,
 0x3b9a60,6,
-0x3b9a80,3,
+0x3b9a80,6,
+0x3b9aa0,6,
+0x3b9ac0,3,
 0x3b9c00,6,
 0x3b9c20,3,
 0x3b9c40,2,
 0x3b9c60,1,
-0x3c0000,5,
-0x3c0020,4,
-0x3c0034,17,
-0x3c0080,1,
+0x3c0000,4,
+0x3c0014,1,
+0x3c0020,3,
+0x3c0030,3,
+0x3c0040,8,
+0x3c007c,2,
 0x3c00a0,6,
-0x3c0100,5,
-0x3c0120,4,
-0x3c0134,17,
-0x3c0180,1,
+0x3c00c0,6,
+0x3c00e0,6,
+0x3c0100,4,
+0x3c0114,1,
+0x3c0120,3,
+0x3c0130,3,
+0x3c0140,8,
+0x3c017c,2,
 0x3c01a0,6,
-0x3c0200,5,
-0x3c0220,4,
-0x3c0234,17,
-0x3c0280,1,
+0x3c01c0,6,
+0x3c01e0,6,
+0x3c0200,4,
+0x3c0214,1,
+0x3c0220,3,
+0x3c0230,3,
+0x3c0240,8,
+0x3c027c,2,
 0x3c02a0,6,
-0x3c0300,5,
-0x3c0320,4,
-0x3c0334,17,
-0x3c0380,1,
+0x3c02c0,6,
+0x3c02e0,6,
+0x3c0300,4,
+0x3c0314,1,
+0x3c0320,3,
+0x3c0330,3,
+0x3c0340,8,
+0x3c037c,2,
 0x3c03a0,6,
+0x3c03c0,6,
+0x3c03e0,6,
 0x3c0400,6,
 0x3c0440,6,
 0x3c0480,3,
 0x3c04c0,3,
-0x3c0500,6,
-0x3c051c,7,
-0x3c0540,1,
+0x3c0500,2,
+0x3c050c,4,
+0x3c0520,2,
+0x3c052c,4,
+0x3c0540,2,
 0x3c0c00,13,
 0x3c0c40,12,
 0x3c0c80,13,
 0x3c0cc0,12,
-0x3c0d00,6,
-0x3c0d20,6,
+0x3c0d00,14,
+0x3c0d40,2,
 0x3c0d80,14,
 0x3c0dc0,2,
-0x3c0e40,11,
+0x3c0e00,11,
+0x3c0e40,6,
+0x3c0e60,6,
 0x3c0e80,6,
 0x3c0ea0,6,
 0x3c1000,2,
-0x3c1010,5,
+0x3c1014,4,
 0x3c1040,3,
 0x3c1050,3,
-0x3c1060,32,
-0x3c1100,8,
-0x3c1140,8,
+0x3c1080,42,
+0x3c1140,10,
 0x3c1180,3,
 0x3c1190,2,
-0x3c119c,9,
-0x3c1218,9,
-0x3c1240,3,
-0x3c1250,6,
-0x3c1280,1,
-0x3c1288,6,
-0x3c12a4,1,
-0x3c12c0,1,
-0x3c12c8,6,
-0x3c12e4,1,
-0x3c1400,8,
-0x3c1424,2,
+0x3c119c,15,
+0x3c1200,9,
+0x3c1300,1,
+0x3c1308,6,
+0x3c1324,10,
+0x3c1380,1,
+0x3c1388,6,
+0x3c13a4,10,
+0x3c1400,6,
+0x3c1420,6,
 0x3c1500,5,
 0x3c1520,4,
 0x3c1540,5,
 0x3c1560,4,
 0x3c1800,24,
-0x3c1864,5,
+0x3c1864,6,
 0x3c1880,8,
-0x3c1900,13,
-0x3c1980,4,
-0x3c19a0,6,
-0x3c19c0,6,
-0x3c19dc,1,
-0x3c1a00,6,
-0x3c1a1c,1,
-0x3c1a40,1,
-0x3c1a60,1,
-0x3c1a68,23,
+0x3c1900,24,
+0x3c1964,6,
+0x3c1980,8,
+0x3c1a00,17,
+0x3c1a48,6,
+0x3c1a80,17,
 0x3c1ac8,6,
-0x3c1b00,17,
-0x3c1b48,6,
-0x3c1b80,12,
+0x3c1b00,6,
+0x3c1b20,6,
+0x3c1b40,3,
+0x3c1b80,6,
+0x3c1ba0,6,
+0x3c1bc0,3,
 0x3c1c00,6,
 0x3c1c20,6,
-0x3c1c40,6,
-0x3c1c60,3,
-0x3c1d00,6,
-0x3c1d20,6,
-0x3c1d40,3,
-0x3c1d80,6,
-0x3c1da0,6,
-0x3c1dc0,3,
-0x3c2000,5,
-0x3c2020,4,
-0x3c2034,17,
-0x3c2080,1,
+0x3c1c40,3,
+0x3c1c80,6,
+0x3c1ca0,6,
+0x3c1cc0,3,
+0x3c1d10,2,
+0x3c1d1c,1,
+0x3c1d50,2,
+0x3c1d5c,1,
+0x3c1d80,1,
+0x3c1da0,1,
+0x3c1da8,7,
+0x3c1de0,1,
+0x3c1de8,19,
+0x3c1e40,6,
+0x3c1e60,6,
+0x3c1e80,6,
+0x3c1ea0,6,
+0x3c1ec0,7,
+0x3c1ee0,7,
+0x3c1f00,12,
+0x3c1f40,3,
+0x3c1f50,8,
+0x3c2000,4,
+0x3c2014,1,
+0x3c2020,3,
+0x3c2030,3,
+0x3c2040,8,
+0x3c207c,2,
 0x3c20a0,6,
-0x3c2100,5,
-0x3c2120,4,
-0x3c2134,17,
-0x3c2180,1,
+0x3c20c0,6,
+0x3c20e0,6,
+0x3c2100,4,
+0x3c2114,1,
+0x3c2120,3,
+0x3c2130,3,
+0x3c2140,8,
+0x3c217c,2,
 0x3c21a0,6,
-0x3c2200,5,
-0x3c2220,4,
-0x3c2234,17,
-0x3c2280,1,
+0x3c21c0,6,
+0x3c21e0,6,
+0x3c2200,4,
+0x3c2214,1,
+0x3c2220,3,
+0x3c2230,3,
+0x3c2240,8,
+0x3c227c,2,
 0x3c22a0,6,
-0x3c2300,5,
-0x3c2320,4,
-0x3c2334,17,
-0x3c2380,1,
+0x3c22c0,6,
+0x3c22e0,6,
+0x3c2300,4,
+0x3c2314,1,
+0x3c2320,3,
+0x3c2330,3,
+0x3c2340,8,
+0x3c237c,2,
 0x3c23a0,6,
+0x3c23c0,6,
+0x3c23e0,6,
 0x3c2400,6,
 0x3c2440,6,
 0x3c2480,3,
 0x3c24c0,3,
-0x3c2500,6,
-0x3c251c,7,
-0x3c2540,1,
+0x3c2500,2,
+0x3c250c,4,
+0x3c2520,2,
+0x3c252c,4,
+0x3c2540,2,
 0x3c2c00,13,
 0x3c2c40,12,
 0x3c2c80,13,
 0x3c2cc0,12,
-0x3c2d00,6,
-0x3c2d20,6,
+0x3c2d00,14,
+0x3c2d40,2,
 0x3c2d80,14,
 0x3c2dc0,2,
-0x3c2e40,11,
+0x3c2e00,11,
+0x3c2e40,6,
+0x3c2e60,6,
 0x3c2e80,6,
 0x3c2ea0,6,
 0x3c3000,2,
-0x3c3010,5,
+0x3c3014,4,
 0x3c3040,3,
 0x3c3050,3,
-0x3c3060,32,
-0x3c3100,8,
-0x3c3140,8,
+0x3c3080,42,
+0x3c3140,10,
 0x3c3180,3,
 0x3c3190,2,
-0x3c319c,9,
-0x3c3218,9,
-0x3c3240,3,
-0x3c3250,6,
-0x3c3280,1,
-0x3c3288,6,
-0x3c32a4,1,
-0x3c32c0,1,
-0x3c32c8,6,
-0x3c32e4,1,
-0x3c3400,8,
-0x3c3424,2,
+0x3c319c,15,
+0x3c3200,9,
+0x3c3300,1,
+0x3c3308,6,
+0x3c3324,10,
+0x3c3380,1,
+0x3c3388,6,
+0x3c33a4,10,
+0x3c3400,6,
+0x3c3420,6,
 0x3c3500,5,
 0x3c3520,4,
 0x3c3540,5,
 0x3c3560,4,
 0x3c3800,24,
-0x3c3864,5,
+0x3c3864,6,
 0x3c3880,8,
-0x3c3900,13,
-0x3c3980,4,
-0x3c39a0,6,
-0x3c39c0,6,
-0x3c39dc,1,
-0x3c3a00,6,
-0x3c3a1c,1,
-0x3c3a40,1,
-0x3c3a60,1,
-0x3c3a68,23,
+0x3c3900,24,
+0x3c3964,6,
+0x3c3980,8,
+0x3c3a00,17,
+0x3c3a48,6,
+0x3c3a80,17,
 0x3c3ac8,6,
-0x3c3b00,17,
-0x3c3b48,6,
-0x3c3b80,12,
+0x3c3b00,6,
+0x3c3b20,6,
+0x3c3b40,3,
+0x3c3b80,6,
+0x3c3ba0,6,
+0x3c3bc0,3,
 0x3c3c00,6,
 0x3c3c20,6,
-0x3c3c40,6,
-0x3c3c60,3,
-0x3c3d00,6,
-0x3c3d20,6,
-0x3c3d40,3,
-0x3c3d80,6,
-0x3c3da0,6,
-0x3c3dc0,3,
+0x3c3c40,3,
+0x3c3c80,6,
+0x3c3ca0,6,
+0x3c3cc0,3,
+0x3c3d10,2,
+0x3c3d1c,1,
+0x3c3d50,2,
+0x3c3d5c,1,
+0x3c3d80,1,
+0x3c3da0,1,
+0x3c3da8,7,
+0x3c3de0,1,
+0x3c3de8,19,
+0x3c3e40,6,
+0x3c3e60,6,
+0x3c3e80,6,
+0x3c3ea0,6,
+0x3c3ec0,7,
+0x3c3ee0,7,
+0x3c3f00,12,
+0x3c3f40,3,
+0x3c3f50,8,
 0x3c4000,29,
 0x3c4078,4,
 0x3c4090,2,
 0x3c5eac,1,
 0x3c5eb4,3,
 0x3c6000,14,
-0x3c6070,3,
+0x3c6040,6,
+0x3c6060,6,
 0x3c6080,6,
+0x3c60a0,3,
 0x3c6100,9,
 0x3c6204,1,
 0x3c620c,6,
 0x3c6c94,8,
 0x3c6cb8,9,
 0x3c6ce0,4,
-0x3c7000,6,
-0x3c7020,3,
-0x3c7040,7,
-0x3c7060,6,
-0x3c7100,5,
-0x3c7138,1,
-0x3c7144,1,
-0x3c7150,2,
+0x3c7000,1,
+0x3c7028,1,
+0x3c7050,1,
+0x3c7078,1,
+0x3c70a0,4,
+0x3c71ac,1,
+0x3c71d8,4,
+0x3c7200,6,
+0x3c7220,6,
+0x3c7240,3,
+0x3c7400,5,
+0x3c7438,1,
+0x3c7444,1,
+0x3c7450,4,
+0x3c7500,7,
+0x3c7520,6,
+0x3c7540,6,
+0x3c7560,3,
+0x3c7570,1,
 0x3c8000,6,
 0x3c8020,3,
-0x3c8030,1,
-0x3c8038,7,
+0x3c8030,3,
+0x3c8050,1,
 0x3c8100,6,
 0x3c8120,10,
 0x3c8150,10,
 0x3c89f4,3,
 0x3c9000,4,
 0x3c9020,4,
-0x3c9040,3,
-0x3c9050,3,
-0x3c9080,2,
-0x3c90b0,3,
-0x3c912c,1,
-0x3c9140,6,
-0x3c9200,20,
-0x3c925c,30,
-0x3c9300,24,
+0x3c9040,11,
+0x3c9070,3,
+0x3c9080,4,
+0x3c90b0,22,
+0x3c9110,2,
+0x3c9120,22,
+0x3c9180,1,
+0x3c91a0,6,
+0x3c9200,42,
+0x3c92c0,1,
+0x3c92c8,3,
+0x3c9300,25,
+0x3c936c,4,
 0x3c9380,2,
 0x3c93a0,1,
 0x3c93c0,11,
 0x3c9480,6,
 0x3c9500,6,
 0x3c9520,6,
+0x3c9540,3,
+0x3c9550,7,
+0x3c9570,4,
 0x3c9800,410,
 0x3ca000,4,
 0x3ca020,4,
-0x3ca040,3,
-0x3ca050,3,
-0x3ca080,2,
-0x3ca0b0,3,
-0x3ca12c,1,
-0x3ca140,6,
-0x3ca200,20,
-0x3ca25c,30,
-0x3ca300,24,
+0x3ca040,11,
+0x3ca070,3,
+0x3ca080,4,
+0x3ca0b0,22,
+0x3ca110,2,
+0x3ca120,22,
+0x3ca180,1,
+0x3ca1a0,6,
+0x3ca200,42,
+0x3ca2c0,1,
+0x3ca2c8,3,
+0x3ca300,25,
+0x3ca36c,4,
 0x3ca380,2,
 0x3ca3a0,1,
 0x3ca3c0,11,
 0x3ca480,6,
 0x3ca500,6,
 0x3ca520,6,
+0x3ca540,3,
+0x3ca550,7,
+0x3ca570,4,
 0x3ca800,410,
 0x3cb000,4,
 0x3cb020,4,
-0x3cb040,3,
-0x3cb050,3,
-0x3cb080,2,
-0x3cb0b0,3,
-0x3cb12c,1,
-0x3cb140,6,
-0x3cb200,20,
-0x3cb25c,30,
-0x3cb300,24,
+0x3cb040,11,
+0x3cb070,3,
+0x3cb080,4,
+0x3cb0b0,22,
+0x3cb110,2,
+0x3cb120,22,
+0x3cb180,1,
+0x3cb1a0,6,
+0x3cb200,42,
+0x3cb2c0,1,
+0x3cb2c8,3,
+0x3cb300,25,
+0x3cb36c,4,
 0x3cb380,2,
 0x3cb3a0,1,
 0x3cb3c0,11,
 0x3cb480,6,
 0x3cb500,6,
 0x3cb520,6,
+0x3cb540,3,
+0x3cb550,7,
+0x3cb570,4,
 0x3cb800,410,
 0x3cc000,4,
 0x3cc020,4,
-0x3cc040,3,
-0x3cc050,3,
-0x3cc080,2,
-0x3cc0b0,3,
-0x3cc12c,1,
-0x3cc140,6,
-0x3cc200,20,
-0x3cc25c,30,
-0x3cc300,24,
+0x3cc040,11,
+0x3cc070,3,
+0x3cc080,4,
+0x3cc0b0,22,
+0x3cc110,2,
+0x3cc120,22,
+0x3cc180,1,
+0x3cc1a0,6,
+0x3cc200,42,
+0x3cc2c0,1,
+0x3cc2c8,3,
+0x3cc300,25,
+0x3cc36c,4,
 0x3cc380,2,
 0x3cc3a0,1,
 0x3cc3c0,11,
 0x3cc480,6,
 0x3cc500,6,
 0x3cc520,6,
+0x3cc540,3,
+0x3cc550,7,
+0x3cc570,4,
 0x3cc800,410,
 0x3cf800,5,
 0x3cf818,1,
 0x3cfba4,1,
 0x3cfbac,2,
 0x3d4000,3,
-0x3d4018,3,
-0x3d4100,25,
+0x3d4018,4,
+0x3d4100,56,
+0x3d41f0,1,
 0x3d4400,3,
-0x3d4418,3,
-0x3d4500,25,
-0x3d4800,1,
+0x3d4418,4,
+0x3d4500,56,
+0x3d45f0,1,
+0x3d4800,5,
+0x3d4820,3,
 0x3d5000,3,
-0x3d5018,3,
-0x3d5100,25,
+0x3d5018,4,
+0x3d5100,56,
+0x3d51f0,1,
 0x3d5400,3,
-0x3d5418,3,
-0x3d5500,25,
-0x3d5800,1,
+0x3d5418,4,
+0x3d5500,56,
+0x3d55f0,1,
+0x3d5800,5,
+0x3d5820,3,
 0x3d6004,7,
-0x3d6024,3,
+0x3d6024,1,
+0x3d6034,3,
 0x3d6300,5,
-0x3d631c,3,
+0x3d631c,1,
 0x3d6600,10,
 0x3d6630,1,
 0x3d6680,10,
 0x3d6780,10,
 0x3d67b0,1,
 0x3d6800,47,
-0x3d6910,12,
-0x3d7000,64,
+0x3d6910,14,
+0x3d6e00,1,
+0x3d7000,65,
 0x3d8000,2,
-0x3d800c,9,
-0x3d8040,6,
-0x3d8060,6,
-0x3d8080,2,
-0x3d808c,5,
-0x3d80a4,3,
-0x3d80e0,1,
-0x3d8500,2,
-0x3d8518,5,
-0x3d8540,6,
+0x3d800c,3,
+0x3d8028,2,
+0x3d8038,47,
+0x3d8500,6,
+0x3d8520,6,
+0x3d8540,3,
 0x3d8580,10,
+0x3d85c0,15,
+0x3d8600,2,
+0x3d8618,5,
+0x3d8630,1,
 0x3d8800,2,
-0x3d880c,9,
-0x3d8840,6,
-0x3d8860,6,
-0x3d8880,2,
-0x3d888c,5,
-0x3d88a4,3,
-0x3d88e0,1,
-0x3d8d00,2,
-0x3d8d18,5,
-0x3d8d40,6,
+0x3d880c,3,
+0x3d8828,2,
+0x3d8838,47,
+0x3d8d00,6,
+0x3d8d20,6,
+0x3d8d40,3,
 0x3d8d80,10,
-0x3d9800,2,
-0x3d9828,2,
-0x3d9850,2,
-0x3d9878,2,
+0x3d8dc0,15,
+0x3d8e00,2,
+0x3d8e18,5,
+0x3d8e30,1,
+0x3d9800,3,
+0x3d9828,3,
+0x3d9850,3,
+0x3d9878,3,
 0x3d98a0,7,
 0x3d99ac,1,
 0x3d99d8,4,
 0x3d9a20,6,
 0x3d9a40,6,
 0x3d9a60,6,
-0x3d9a80,3,
+0x3d9a80,6,
+0x3d9aa0,6,
+0x3d9ac0,3,
 0x3d9c00,6,
 0x3d9c20,3,
 0x3d9c40,2,
 0x3d9c60,1,
-0x3e0000,5,
-0x3e0020,4,
-0x3e0034,17,
-0x3e0080,1,
+0x3e0000,4,
+0x3e0014,1,
+0x3e0020,3,
+0x3e0030,3,
+0x3e0040,8,
+0x3e007c,2,
 0x3e00a0,6,
-0x3e0100,5,
-0x3e0120,4,
-0x3e0134,17,
-0x3e0180,1,
+0x3e00c0,6,
+0x3e00e0,6,
+0x3e0100,4,
+0x3e0114,1,
+0x3e0120,3,
+0x3e0130,3,
+0x3e0140,8,
+0x3e017c,2,
 0x3e01a0,6,
-0x3e0200,5,
-0x3e0220,4,
-0x3e0234,17,
-0x3e0280,1,
+0x3e01c0,6,
+0x3e01e0,6,
+0x3e0200,4,
+0x3e0214,1,
+0x3e0220,3,
+0x3e0230,3,
+0x3e0240,8,
+0x3e027c,2,
 0x3e02a0,6,
-0x3e0300,5,
-0x3e0320,4,
-0x3e0334,17,
-0x3e0380,1,
+0x3e02c0,6,
+0x3e02e0,6,
+0x3e0300,4,
+0x3e0314,1,
+0x3e0320,3,
+0x3e0330,3,
+0x3e0340,8,
+0x3e037c,2,
 0x3e03a0,6,
+0x3e03c0,6,
+0x3e03e0,6,
 0x3e0400,6,
 0x3e0440,6,
 0x3e0480,3,
 0x3e04c0,3,
-0x3e0500,6,
-0x3e051c,7,
-0x3e0540,1,
+0x3e0500,2,
+0x3e050c,4,
+0x3e0520,2,
+0x3e052c,4,
+0x3e0540,2,
 0x3e0c00,13,
 0x3e0c40,12,
 0x3e0c80,13,
 0x3e0cc0,12,
-0x3e0d00,6,
-0x3e0d20,6,
+0x3e0d00,14,
+0x3e0d40,2,
 0x3e0d80,14,
 0x3e0dc0,2,
-0x3e0e40,11,
+0x3e0e00,11,
+0x3e0e40,6,
+0x3e0e60,6,
 0x3e0e80,6,
 0x3e0ea0,6,
 0x3e1000,2,
-0x3e1010,5,
+0x3e1014,4,
 0x3e1040,3,
 0x3e1050,3,
-0x3e1060,32,
-0x3e1100,8,
-0x3e1140,8,
+0x3e1080,42,
+0x3e1140,10,
 0x3e1180,3,
 0x3e1190,2,
-0x3e119c,9,
-0x3e1218,9,
-0x3e1240,3,
-0x3e1250,6,
-0x3e1280,1,
-0x3e1288,6,
-0x3e12a4,1,
-0x3e12c0,1,
-0x3e12c8,6,
-0x3e12e4,1,
-0x3e1400,8,
-0x3e1424,2,
+0x3e119c,15,
+0x3e1200,9,
+0x3e1300,1,
+0x3e1308,6,
+0x3e1324,10,
+0x3e1380,1,
+0x3e1388,6,
+0x3e13a4,10,
+0x3e1400,6,
+0x3e1420,6,
 0x3e1500,5,
 0x3e1520,4,
 0x3e1540,5,
 0x3e1560,4,
 0x3e1800,24,
-0x3e1864,5,
+0x3e1864,6,
 0x3e1880,8,
-0x3e1900,13,
-0x3e1980,4,
-0x3e19a0,6,
-0x3e19c0,6,
-0x3e19dc,1,
-0x3e1a00,6,
-0x3e1a1c,1,
-0x3e1a40,1,
-0x3e1a60,1,
-0x3e1a68,23,
+0x3e1900,24,
+0x3e1964,6,
+0x3e1980,8,
+0x3e1a00,17,
+0x3e1a48,6,
+0x3e1a80,17,
 0x3e1ac8,6,
-0x3e1b00,17,
-0x3e1b48,6,
-0x3e1b80,12,
+0x3e1b00,6,
+0x3e1b20,6,
+0x3e1b40,3,
+0x3e1b80,6,
+0x3e1ba0,6,
+0x3e1bc0,3,
 0x3e1c00,6,
 0x3e1c20,6,
-0x3e1c40,6,
-0x3e1c60,3,
-0x3e1d00,6,
-0x3e1d20,6,
-0x3e1d40,3,
-0x3e1d80,6,
-0x3e1da0,6,
-0x3e1dc0,3,
-0x3e2000,5,
-0x3e2020,4,
-0x3e2034,17,
-0x3e2080,1,
+0x3e1c40,3,
+0x3e1c80,6,
+0x3e1ca0,6,
+0x3e1cc0,3,
+0x3e1d10,2,
+0x3e1d1c,1,
+0x3e1d50,2,
+0x3e1d5c,1,
+0x3e1d80,1,
+0x3e1da0,1,
+0x3e1da8,7,
+0x3e1de0,1,
+0x3e1de8,19,
+0x3e1e40,6,
+0x3e1e60,6,
+0x3e1e80,6,
+0x3e1ea0,6,
+0x3e1ec0,7,
+0x3e1ee0,7,
+0x3e1f00,12,
+0x3e1f40,3,
+0x3e1f50,8,
+0x3e2000,4,
+0x3e2014,1,
+0x3e2020,3,
+0x3e2030,3,
+0x3e2040,8,
+0x3e207c,2,
 0x3e20a0,6,
-0x3e2100,5,
-0x3e2120,4,
-0x3e2134,17,
-0x3e2180,1,
+0x3e20c0,6,
+0x3e20e0,6,
+0x3e2100,4,
+0x3e2114,1,
+0x3e2120,3,
+0x3e2130,3,
+0x3e2140,8,
+0x3e217c,2,
 0x3e21a0,6,
-0x3e2200,5,
-0x3e2220,4,
-0x3e2234,17,
-0x3e2280,1,
+0x3e21c0,6,
+0x3e21e0,6,
+0x3e2200,4,
+0x3e2214,1,
+0x3e2220,3,
+0x3e2230,3,
+0x3e2240,8,
+0x3e227c,2,
 0x3e22a0,6,
-0x3e2300,5,
-0x3e2320,4,
-0x3e2334,17,
-0x3e2380,1,
+0x3e22c0,6,
+0x3e22e0,6,
+0x3e2300,4,
+0x3e2314,1,
+0x3e2320,3,
+0x3e2330,3,
+0x3e2340,8,
+0x3e237c,2,
 0x3e23a0,6,
+0x3e23c0,6,
+0x3e23e0,6,
 0x3e2400,6,
 0x3e2440,6,
 0x3e2480,3,
 0x3e24c0,3,
-0x3e2500,6,
-0x3e251c,7,
-0x3e2540,1,
+0x3e2500,2,
+0x3e250c,4,
+0x3e2520,2,
+0x3e252c,4,
+0x3e2540,2,
 0x3e2c00,13,
 0x3e2c40,12,
 0x3e2c80,13,
 0x3e2cc0,12,
-0x3e2d00,6,
-0x3e2d20,6,
+0x3e2d00,14,
+0x3e2d40,2,
 0x3e2d80,14,
 0x3e2dc0,2,
-0x3e2e40,11,
+0x3e2e00,11,
+0x3e2e40,6,
+0x3e2e60,6,
 0x3e2e80,6,
 0x3e2ea0,6,
 0x3e3000,2,
-0x3e3010,5,
+0x3e3014,4,
 0x3e3040,3,
 0x3e3050,3,
-0x3e3060,32,
-0x3e3100,8,
-0x3e3140,8,
+0x3e3080,42,
+0x3e3140,10,
 0x3e3180,3,
 0x3e3190,2,
-0x3e319c,9,
-0x3e3218,9,
-0x3e3240,3,
-0x3e3250,6,
-0x3e3280,1,
-0x3e3288,6,
-0x3e32a4,1,
-0x3e32c0,1,
-0x3e32c8,6,
-0x3e32e4,1,
-0x3e3400,8,
-0x3e3424,2,
+0x3e319c,15,
+0x3e3200,9,
+0x3e3300,1,
+0x3e3308,6,
+0x3e3324,10,
+0x3e3380,1,
+0x3e3388,6,
+0x3e33a4,10,
+0x3e3400,6,
+0x3e3420,6,
 0x3e3500,5,
 0x3e3520,4,
 0x3e3540,5,
 0x3e3560,4,
 0x3e3800,24,
-0x3e3864,5,
+0x3e3864,6,
 0x3e3880,8,
-0x3e3900,13,
-0x3e3980,4,
-0x3e39a0,6,
-0x3e39c0,6,
-0x3e39dc,1,
-0x3e3a00,6,
-0x3e3a1c,1,
-0x3e3a40,1,
-0x3e3a60,1,
-0x3e3a68,23,
+0x3e3900,24,
+0x3e3964,6,
+0x3e3980,8,
+0x3e3a00,17,
+0x3e3a48,6,
+0x3e3a80,17,
 0x3e3ac8,6,
-0x3e3b00,17,
-0x3e3b48,6,
-0x3e3b80,12,
+0x3e3b00,6,
+0x3e3b20,6,
+0x3e3b40,3,
+0x3e3b80,6,
+0x3e3ba0,6,
+0x3e3bc0,3,
 0x3e3c00,6,
 0x3e3c20,6,
-0x3e3c40,6,
-0x3e3c60,3,
-0x3e3d00,6,
-0x3e3d20,6,
-0x3e3d40,3,
-0x3e3d80,6,
-0x3e3da0,6,
-0x3e3dc0,3,
+0x3e3c40,3,
+0x3e3c80,6,
+0x3e3ca0,6,
+0x3e3cc0,3,
+0x3e3d10,2,
+0x3e3d1c,1,
+0x3e3d50,2,
+0x3e3d5c,1,
+0x3e3d80,1,
+0x3e3da0,1,
+0x3e3da8,7,
+0x3e3de0,1,
+0x3e3de8,19,
+0x3e3e40,6,
+0x3e3e60,6,
+0x3e3e80,6,
+0x3e3ea0,6,
+0x3e3ec0,7,
+0x3e3ee0,7,
+0x3e3f00,12,
+0x3e3f40,3,
+0x3e3f50,8,
 0x3e4000,29,
 0x3e4078,4,
 0x3e4090,2,
 0x3e5eac,1,
 0x3e5eb4,3,
 0x3e6000,14,
-0x3e6070,3,
+0x3e6040,6,
+0x3e6060,6,
 0x3e6080,6,
+0x3e60a0,3,
 0x3e6100,9,
 0x3e6204,1,
 0x3e620c,6,
 0x3e6c94,8,
 0x3e6cb8,9,
 0x3e6ce0,4,
-0x3e7000,6,
-0x3e7020,3,
-0x3e7040,7,
-0x3e7060,6,
-0x3e7100,5,
-0x3e7138,1,
-0x3e7144,1,
-0x3e7150,2,
+0x3e7000,1,
+0x3e7028,1,
+0x3e7050,1,
+0x3e7078,1,
+0x3e70a0,4,
+0x3e71ac,1,
+0x3e71d8,4,
+0x3e7200,6,
+0x3e7220,6,
+0x3e7240,3,
+0x3e7400,5,
+0x3e7438,1,
+0x3e7444,1,
+0x3e7450,4,
+0x3e7500,7,
+0x3e7520,6,
+0x3e7540,6,
+0x3e7560,3,
+0x3e7570,1,
 0x3e8000,6,
 0x3e8020,3,
-0x3e8030,1,
-0x3e8038,7,
+0x3e8030,3,
+0x3e8050,1,
 0x3e8100,6,
 0x3e8120,10,
 0x3e8150,10,
 0x3e89f4,3,
 0x3e9000,4,
 0x3e9020,4,
-0x3e9040,3,
-0x3e9050,3,
-0x3e9080,2,
-0x3e90b0,3,
-0x3e912c,1,
-0x3e9140,6,
-0x3e9200,20,
-0x3e925c,30,
-0x3e9300,24,
+0x3e9040,11,
+0x3e9070,3,
+0x3e9080,4,
+0x3e90b0,22,
+0x3e9110,2,
+0x3e9120,22,
+0x3e9180,1,
+0x3e91a0,6,
+0x3e9200,42,
+0x3e92c0,1,
+0x3e92c8,3,
+0x3e9300,25,
+0x3e936c,4,
 0x3e9380,2,
 0x3e93a0,1,
 0x3e93c0,11,
 0x3e9480,6,
 0x3e9500,6,
 0x3e9520,6,
+0x3e9540,3,
+0x3e9550,7,
+0x3e9570,4,
 0x3e9800,410,
 0x3ea000,4,
 0x3ea020,4,
-0x3ea040,3,
-0x3ea050,3,
-0x3ea080,2,
-0x3ea0b0,3,
-0x3ea12c,1,
-0x3ea140,6,
-0x3ea200,20,
-0x3ea25c,30,
-0x3ea300,24,
+0x3ea040,11,
+0x3ea070,3,
+0x3ea080,4,
+0x3ea0b0,22,
+0x3ea110,2,
+0x3ea120,22,
+0x3ea180,1,
+0x3ea1a0,6,
+0x3ea200,42,
+0x3ea2c0,1,
+0x3ea2c8,3,
+0x3ea300,25,
+0x3ea36c,4,
 0x3ea380,2,
 0x3ea3a0,1,
 0x3ea3c0,11,
 0x3ea480,6,
 0x3ea500,6,
 0x3ea520,6,
+0x3ea540,3,
+0x3ea550,7,
+0x3ea570,4,
 0x3ea800,410,
 0x3eb000,4,
 0x3eb020,4,
-0x3eb040,3,
-0x3eb050,3,
-0x3eb080,2,
-0x3eb0b0,3,
-0x3eb12c,1,
-0x3eb140,6,
-0x3eb200,20,
-0x3eb25c,30,
-0x3eb300,24,
+0x3eb040,11,
+0x3eb070,3,
+0x3eb080,4,
+0x3eb0b0,22,
+0x3eb110,2,
+0x3eb120,22,
+0x3eb180,1,
+0x3eb1a0,6,
+0x3eb200,42,
+0x3eb2c0,1,
+0x3eb2c8,3,
+0x3eb300,25,
+0x3eb36c,4,
 0x3eb380,2,
 0x3eb3a0,1,
 0x3eb3c0,11,
 0x3eb480,6,
 0x3eb500,6,
 0x3eb520,6,
+0x3eb540,3,
+0x3eb550,7,
+0x3eb570,4,
 0x3eb800,410,
 0x3ec000,4,
 0x3ec020,4,
-0x3ec040,3,
-0x3ec050,3,
-0x3ec080,2,
-0x3ec0b0,3,
-0x3ec12c,1,
-0x3ec140,6,
-0x3ec200,20,
-0x3ec25c,30,
-0x3ec300,24,
+0x3ec040,11,
+0x3ec070,3,
+0x3ec080,4,
+0x3ec0b0,22,
+0x3ec110,2,
+0x3ec120,22,
+0x3ec180,1,
+0x3ec1a0,6,
+0x3ec200,42,
+0x3ec2c0,1,
+0x3ec2c8,3,
+0x3ec300,25,
+0x3ec36c,4,
 0x3ec380,2,
 0x3ec3a0,1,
 0x3ec3c0,11,
 0x3ec480,6,
 0x3ec500,6,
 0x3ec520,6,
+0x3ec540,3,
+0x3ec550,7,
+0x3ec570,4,
 0x3ec800,410,
 0x3ef800,5,
 0x3ef818,1,
 0x3efba4,1,
 0x3efbac,2,
 0x3f4000,3,
-0x3f4018,3,
-0x3f4100,25,
+0x3f4018,4,
+0x3f4100,56,
+0x3f41f0,1,
 0x3f4400,3,
-0x3f4418,3,
-0x3f4500,25,
-0x3f4800,1,
+0x3f4418,4,
+0x3f4500,56,
+0x3f45f0,1,
+0x3f4800,5,
+0x3f4820,3,
 0x3f5000,3,
-0x3f5018,3,
-0x3f5100,25,
+0x3f5018,4,
+0x3f5100,56,
+0x3f51f0,1,
 0x3f5400,3,
-0x3f5418,3,
-0x3f5500,25,
-0x3f5800,1,
+0x3f5418,4,
+0x3f5500,56,
+0x3f55f0,1,
+0x3f5800,5,
+0x3f5820,3,
 0x3f6004,7,
-0x3f6024,3,
+0x3f6024,1,
+0x3f6034,3,
 0x3f6300,5,
-0x3f631c,3,
+0x3f631c,1,
 0x3f6600,10,
 0x3f6630,1,
 0x3f6680,10,
 0x3f6780,10,
 0x3f67b0,1,
 0x3f6800,47,
-0x3f6910,12,
-0x3f7000,64,
+0x3f6910,14,
+0x3f6e00,1,
+0x3f7000,65,
 0x3f8000,2,
-0x3f800c,9,
-0x3f8040,6,
-0x3f8060,6,
-0x3f8080,2,
-0x3f808c,5,
-0x3f80a4,3,
-0x3f80e0,1,
-0x3f8500,2,
-0x3f8518,5,
-0x3f8540,6,
+0x3f800c,3,
+0x3f8028,2,
+0x3f8038,47,
+0x3f8500,6,
+0x3f8520,6,
+0x3f8540,3,
 0x3f8580,10,
+0x3f85c0,15,
+0x3f8600,2,
+0x3f8618,5,
+0x3f8630,1,
 0x3f8800,2,
-0x3f880c,9,
-0x3f8840,6,
-0x3f8860,6,
-0x3f8880,2,
-0x3f888c,5,
-0x3f88a4,3,
-0x3f88e0,1,
-0x3f8d00,2,
-0x3f8d18,5,
-0x3f8d40,6,
+0x3f880c,3,
+0x3f8828,2,
+0x3f8838,47,
+0x3f8d00,6,
+0x3f8d20,6,
+0x3f8d40,3,
 0x3f8d80,10,
-0x3f9800,2,
-0x3f9828,2,
-0x3f9850,2,
-0x3f9878,2,
+0x3f8dc0,15,
+0x3f8e00,2,
+0x3f8e18,5,
+0x3f8e30,1,
+0x3f9800,3,
+0x3f9828,3,
+0x3f9850,3,
+0x3f9878,3,
 0x3f98a0,7,
 0x3f99ac,1,
 0x3f99d8,4,
 0x3f9a20,6,
 0x3f9a40,6,
 0x3f9a60,6,
-0x3f9a80,3,
+0x3f9a80,6,
+0x3f9aa0,6,
+0x3f9ac0,3,
 0x3f9c00,6,
 0x3f9c20,3,
 0x3f9c40,2,
index 0d9281bcb6b2b34f3dc1a2d4f622a87f5147473e..e415566bb189e27764569421c8dde160742f1afb 100644 (file)
@@ -1,6 +1,6 @@
 %{!?ibmadlib: %define ibmadlib libibmad-devel}
 %{!?name: %define name mstflint}
-%{!?version: %define version 3.8.0}
+%{!?version: %define version 4.0.0}
 %{!?release: %define release 1}
 %{!?buildtype: %define buildtype "native"}
 %{!?noinband: %define noinband 0}
@@ -84,6 +84,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/*
 
 %changelog
+* Thu Feb 05 2015 Adrian Chiris <adrianc@dev.mellanox.co.il>
+   MFT 4.0.0 Updates
+
 * Sun Dec 07 2014 Tomer Cohen <tomerc@mellanox.com>
    Added support for multiple architectures
 
index 76ce06a16e073b2d88787c71f34eb696b1e8ba7d..cad90457374edd180dffc90d155cfdd43bd39d89 100644 (file)
@@ -43,12 +43,6 @@ typedef int (*f_mwrite4_block) (mfile *mf, unsigned int offset, u_int32_t* data,
 typedef int (*f_maccess_reg)   (mfile *mf, u_int8_t *data);
 typedef int (*f_mclose)        (mfile* mf);
 
-typedef enum {
-    AD_ICMD = 1,
-    AD_CR_SPACE = 2,
-    AD_SEMAPHORE = 0xa
-} address_domain_t;
-
 
 typedef struct icmd_params_t {
     int icmd_opened;
@@ -61,17 +55,18 @@ typedef struct icmd_params_t {
     int static_cfg_not_done_offs;
 }icmd_params;
 
+typedef enum {
+    AS_ICMD = 1,
+    AS_CR_SPACE = 2,
+    AS_SEMAPHORE = 0xa
+} address_space_t;
+
 struct mfile_t {
     char*            dev_name;
     void            *ctx; // Access method context
     int              access_type;
     int              fdlock;
 
-    // relevant for devices with pci capability: 0x9
-    int              supp_fw_ifc; // pciconf - supports 0x9 capability
-    int              cap9_pci_offs; // capability offset withing the pci configuration spce
-    address_domain_t address_domain; // determines on which address domain reads/writes will be performed
-
     f_mread4         mread4;
     f_mwrite4        mwrite4;
     f_mread4_block   mread4_block;
@@ -91,8 +86,10 @@ struct mfile_t {
 
     //for ICMD access
     icmd_params icmd;
+    int vsec_supp;
+    u_int32_t vsec_addr;
+    int address_space;
 };
-
 #endif
 
 
index a387e796a571ac097bd667fc3c058b6553fe4e9b..70d6cbbca82d6efc9783636a0f1e0cad69559777 100644 (file)
@@ -31,7 +31,6 @@
  *
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -410,8 +409,8 @@ int tools_cmdif_send_mbox_command_int(mfile* mf,
     mpci_change(mf);
     //take semaphore
     if (tools_cmdif_flash_lock(mf, 1)) {
-        rc = ME_SEM_LOCKED;
-        goto exitrc;
+        mpci_change(mf);
+        return ME_SEM_LOCKED;
     }
 
     // write to mailbox if needed
@@ -473,7 +472,6 @@ int tools_cmdif_send_mbox_command_int(mfile* mf,
 cleanup:
     tools_cmdif_flash_lock(mf, 0);
     //printf("-D- rc in cmdif: 0x%x\n", rc);
-exitrc:
     mpci_change(mf);
     return rc;
 }
index 54a2deddb9b12134fd95d9d3843d8eb7e17dc603..76de97019978f7d651125ce647781d4a196e9814 100644 (file)
@@ -311,35 +311,19 @@ int mtcr_check_signature(mfile *mf)
         return 1;
     }
 
-    switch (signature & 0xffff) {
-    case 0x190 : /* 400 */
-    case 0x1f5 :
-    case 0x1f7 :
-        if (connectx_flush == NULL || strcmp(connectx_flush, "0")) {
-            if ((signature == 0xa00190         ||
-                        (signature & 0xffff) == 0x1f5  ||
-                        (signature & 0xffff) == 0x1f7)    && mf->access_type == MTCR_ACCESS_MEMORY) {
-                struct pcicr_context* ctx = mf->ctx;
-                ctx->connectx_flush = 1;
-                if (mtcr_connectx_flush(ctx->ptr, mf->fdlock)) {
-                    return -1;
-                }
+    if (connectx_flush == NULL || strcmp(connectx_flush, "0")) {
+        if ((signature == 0xa00190         ||
+            (signature & 0xffff) == 0x1f5  ||
+            (signature & 0xffff) == 0x1f7) && mf->access_type == MTCR_ACCESS_MEMORY) {
+            struct pcicr_context* ctx = mf->ctx;
+            ctx->connectx_flush = 1;
+            if (mtcr_connectx_flush(ctx->ptr, mf->fdlock)) {
+                return -1;
             }
         }
-    case 0x5a44: /* 23108 */
-    case 0x6278: /* 25208 */
-    case 0x5e8c: /* 24204 */
-    case 0x6274: /* 25204 */
-    case 0x1b3:  /*   435 */
-    case 6100:   /*  6100 */
-    case 0x245:
-    case 0x1ff:
-        return 0;
-    default:
-        fprintf(stderr, "-W- Unknown dev id: 0x%x\n", signature);
-        errno = ENOTTY;
-        return -1;
     }
+
+    return 0;
 }
 
 #if CONFIG_ENABLE_MMAP
@@ -596,6 +580,7 @@ int mtcr_pcicr_open(mfile *mf, const char *name, char* conf_name, off_t off, int
 {
     int rc;
     struct pcicr_context *ctx;
+
     mf->access_type   = MTCR_ACCESS_MEMORY;
 
     mf->mread4        = mtcr_pcicr_mread4;
@@ -625,16 +610,15 @@ int mtcr_pcicr_open(mfile *mf, const char *name, char* conf_name, off_t off, int
 end:
     if (rc) {
         mtcr_pcicr_mclose(mf);
-        return rc;
-    }
-    if (conf_name != NULL) {
+    } else if (conf_name != NULL) {
         mfile* conf_mf = mopen(conf_name);
         if (conf_mf != NULL) {
             mf->res_ctx = conf_mf->ctx;
             mf->res_access_type = conf_mf->access_type;
+            mf->vsec_addr = conf_mf->vsec_addr;
+            mf->vsec_supp = conf_mf->vsec_supp;
+            mf->address_space = conf_mf->address_space;
             mf->res_fdlock = conf_mf->fdlock;
-            mf->supp_fw_ifc = conf_mf->supp_fw_ifc;
-            mf->address_domain = conf_mf->address_domain;
             mf->res_mread4 = conf_mf->mread4;
             mf->res_mwrite4 = conf_mf->mwrite4;
             mf->res_mread4_block = conf_mf->mread4_block;
@@ -642,6 +626,7 @@ end:
             free(conf_mf);
         }
     }
+
     return rc;
 }
 
@@ -652,7 +637,6 @@ end:
 
 
 #if CONFIG_ENABLE_PCICONF
-
 /* PCI address space related enum*/
 enum {
     PCI_CAP_PTR = 0x34,
@@ -808,25 +792,25 @@ int mtcr_pciconf_cap9_sem(mfile* mf, int state)
     u_int32_t counter = 0;
     int retries = 0;
     if (!state) {// unlock
-        WRITE4_PCI(mf, 0, mf->cap9_pci_offs + PCI_SEMAPHORE_OFFSET, "unlock semaphore", return ME_PCI_WRITE_ERROR);
+        WRITE4_PCI(mf, 0, mf->vsec_addr + PCI_SEMAPHORE_OFFSET, "unlock semaphore", return ME_PCI_WRITE_ERROR);
     } else { // lock
         do {
             if (retries > IFC_MAX_RETRIES) {
                 return ME_SEM_LOCKED;
             }
             // read semaphore untill 0x0
-            READ4_PCI(mf, &lock_val, mf->cap9_pci_offs + PCI_SEMAPHORE_OFFSET, "read counter", return ME_PCI_READ_ERROR);
+            READ4_PCI(mf, &lock_val, mf->vsec_addr + PCI_SEMAPHORE_OFFSET, "read counter", return ME_PCI_READ_ERROR);
             if (lock_val) { //semaphore is taken
                 retries++;
                 msleep(1); // wait for current op to end
                 continue;
             }
             //read ticket
-            READ4_PCI(mf, &counter, mf->cap9_pci_offs + PCI_COUNTER_OFFSET, "read counter", return ME_PCI_READ_ERROR);
+            READ4_PCI(mf, &counter, mf->vsec_addr + PCI_COUNTER_OFFSET, "read counter", return ME_PCI_READ_ERROR);
             //write ticket to semaphore dword
-            WRITE4_PCI(mf, counter, mf->cap9_pci_offs + PCI_SEMAPHORE_OFFSET, "write counter to semaphore", return ME_PCI_WRITE_ERROR);
+            WRITE4_PCI(mf, counter, mf->vsec_addr + PCI_SEMAPHORE_OFFSET, "write counter to semaphore", return ME_PCI_WRITE_ERROR);
             // read back semaphore make sure ticket == semaphore else repeat
-            READ4_PCI(mf, &lock_val, mf->cap9_pci_offs + PCI_SEMAPHORE_OFFSET, "read counter", return ME_PCI_READ_ERROR);
+            READ4_PCI(mf, &lock_val, mf->vsec_addr + PCI_SEMAPHORE_OFFSET, "read counter", return ME_PCI_READ_ERROR);
             retries++;
         } while (counter != lock_val);
     }
@@ -841,7 +825,7 @@ int mtcr_pciconf_wait_on_flag(mfile* mf, u_int8_t expected_val)
          if (retries > IFC_MAX_RETRIES) {
              return ME_PCI_IFC_TOUT;
          }
-         READ4_PCI(mf, &flag, mf->cap9_pci_offs + PCI_ADDR_OFFSET, "read flag", return ME_PCI_READ_ERROR);
+         READ4_PCI(mf, &flag, mf->vsec_addr + PCI_ADDR_OFFSET, "read flag", return ME_PCI_READ_ERROR);
          flag = EXTRACT(flag, PCI_FLAG_BIT_OFFS, 1);
          retries++;
          if ((retries & 0xf) == 0) {// dont sleep always
@@ -855,11 +839,11 @@ int mtcr_pciconf_set_addr_space(mfile* mf, u_int16_t space)
 {
     // read modify write
     u_int32_t val;
-    READ4_PCI(mf, &val, mf->cap9_pci_offs + PCI_CTRL_OFFSET, "read domain", return ME_PCI_READ_ERROR);
+    READ4_PCI(mf, &val, mf->vsec_addr + PCI_CTRL_OFFSET, "read domain", return ME_PCI_READ_ERROR);
     val = MERGE(val, space, PCI_SPACE_BIT_OFFS, PCI_SPACE_BIT_LEN);
-    WRITE4_PCI(mf, val, mf->cap9_pci_offs + PCI_CTRL_OFFSET, "write domain", return ME_PCI_WRITE_ERROR);
+    WRITE4_PCI(mf, val, mf->vsec_addr + PCI_CTRL_OFFSET, "write domain", return ME_PCI_WRITE_ERROR);
     // read status and make sure space is supported
-    READ4_PCI(mf, &val, mf->cap9_pci_offs + PCI_CTRL_OFFSET, "read status", return ME_PCI_READ_ERROR);
+    READ4_PCI(mf, &val, mf->vsec_addr + PCI_CTRL_OFFSET, "read status", return ME_PCI_READ_ERROR);
     if (EXTRACT(val, PCI_STATUS_BIT_OFFS, PCI_STATUS_BIT_LEN) == 0) {
         return ME_PCI_SPACE_NOT_SUPPORTED;
     }
@@ -879,18 +863,18 @@ int mtcr_pciconf_rw(mfile *mf, unsigned int offset, u_int32_t* data, int rw)
     address = MERGE(address,(rw ? 1 : 0), PCI_FLAG_BIT_OFFS, 1);
     if (rw == WRITE_OP) {
         // write data
-        WRITE4_PCI(mf, *data, mf->cap9_pci_offs + PCI_DATA_OFFSET, "write value", return ME_PCI_WRITE_ERROR);
+        WRITE4_PCI(mf, *data, mf->vsec_addr + PCI_DATA_OFFSET, "write value", return ME_PCI_WRITE_ERROR);
         // write address
-        WRITE4_PCI(mf, address, mf->cap9_pci_offs + PCI_ADDR_OFFSET, "write offset", return ME_PCI_WRITE_ERROR);
+        WRITE4_PCI(mf, address, mf->vsec_addr + PCI_ADDR_OFFSET, "write offset", return ME_PCI_WRITE_ERROR);
         // wait on flag
         rc = mtcr_pciconf_wait_on_flag(mf, 0);
     } else {
         // write address
-        WRITE4_PCI(mf, address, mf->cap9_pci_offs + PCI_ADDR_OFFSET, "write offset", return ME_PCI_WRITE_ERROR);
+        WRITE4_PCI(mf, address, mf->vsec_addr + PCI_ADDR_OFFSET, "write offset", return ME_PCI_WRITE_ERROR);
         // wait on flag
         rc = mtcr_pciconf_wait_on_flag(mf, 1);
         // read data
-        READ4_PCI(mf, data, mf->cap9_pci_offs + PCI_DATA_OFFSET, "read value", return ME_PCI_READ_ERROR);
+        READ4_PCI(mf, data, mf->vsec_addr + PCI_DATA_OFFSET, "read value", return ME_PCI_READ_ERROR);
     }
     return rc;
 }
@@ -923,7 +907,7 @@ cleanup:
 int mtcr_pciconf_mread4(mfile *mf, unsigned int offset, u_int32_t *value)
 {
     int rc;
-    rc = mtcr_pciconf_send_pci_cmd_int(mf, mf->address_domain, offset, value, READ_OP);
+    rc = mtcr_pciconf_send_pci_cmd_int(mf, mf->address_space, offset, value, READ_OP);
     if (rc) {
         return -1;
     }
@@ -932,7 +916,7 @@ int mtcr_pciconf_mread4(mfile *mf, unsigned int offset, u_int32_t *value)
 int mtcr_pciconf_mwrite4(mfile *mf, unsigned int offset, u_int32_t value)
 {
     int rc;
-    rc = mtcr_pciconf_send_pci_cmd_int(mf, mf->address_domain, offset, &value, WRITE_OP);
+    rc = mtcr_pciconf_send_pci_cmd_int(mf, mf->address_space, offset, &value, WRITE_OP);
     if (rc) {
         return -1;
     }
@@ -953,7 +937,7 @@ static int block_op_pciconf(mfile *mf, unsigned int offset, u_int32_t* data, int
          return -1;
     }
     // set address space
-    rc = mtcr_pciconf_set_addr_space(mf, mf->address_domain);
+    rc = mtcr_pciconf_set_addr_space(mf, mf->address_space);
     if (rc) {
         wrote_or_read = -1;
         goto cleanup;
@@ -1083,12 +1067,12 @@ int mtcr_pciconf_open(mfile *mf, const char *name)
 
     mf->access_type   = MTCR_ACCESS_CONFIG;
 
-    if ((mf->cap9_pci_offs = pci_find_capability(mf, CAP_ID))) {
-        mf->supp_fw_ifc = 1;
+    if ((mf->vsec_addr = pci_find_capability(mf, CAP_ID))) {
+        mf->vsec_supp = 1;
     }
 
-    if (mf->supp_fw_ifc) {
-        mf->address_domain = CR_SPACE_DOMAIN;
+    if (mf->vsec_supp) {
+        mf->address_space = CR_SPACE_DOMAIN;
         mf->mread4        = mtcr_pciconf_mread4;
         mf->mwrite4       = mtcr_pciconf_mwrite4;
         mf->mread4_block  = mread4_block_pciconf;
@@ -1332,9 +1316,17 @@ int mdevices(char *buf, int len, int mask)
             continue;
         }
         sz = strlen(dir->d_name);
-        if (sz > 4 && strcmp(dir->d_name + sz - 4, "00.0")) {
-        // Skip virtual functions
+        if (sz > 2 && strcmp(dir->d_name + sz - 2, ".0")) {
             continue;
+        } else if (sz > 4 && strcmp(dir->d_name + sz - 4, "00.0")) {
+            // Skip virtual functions
+            char physfn[64];
+            DIR* physfndir;
+            sprintf(physfn, "/sys/bus/pci/devices/%s/physfn", dir->d_name);
+            if ((physfndir = opendir(physfn)) != NULL) {
+                closedir(physfndir);
+                continue;
+            }
         }
         sprintf(fname, "/sys/bus/pci/devices/%s/vendor", dir->d_name);
         f = fopen(fname, "r");
@@ -1477,7 +1469,6 @@ void mdevices_info_destroy(dev_info* dev_info, int len)
         free(dev_info);
 }
 
-
 mfile *mopen(const char *name)
 {
     mfile *mf;
@@ -1522,8 +1513,10 @@ mfile *mopen(const char *name)
             goto open_failed;
         }
     }
+
     sprintf(cbuf, "/sys/bus/pci/devices/%4.4x:%2.2x:%2.2x.%1.1x/config",
         domain, bus, dev, func);
+
     if (force) {
         switch (access) {
         case MTCR_ACCESS_CONFIG:
@@ -1746,7 +1739,7 @@ int mget_mdevs_type(mfile *mf, u_int32_t *mtype)
 #define IBDR_MAX_NAME_SIZE 128
 #define BDF_NAME_SIZE 12
 #define DEV_DIR_MAX_SIZE 128
-
+static
 int get_inband_dev_from_pci(char* inband_dev, char* pci_dev)
 {
     unsigned domain = 0, bus = 0, dev = 0, func = 0;
@@ -1921,34 +1914,33 @@ int maccess_reg(mfile     *mf,
                 u_int32_t      w_size_reg,
                 int       *reg_status)
 {
-
     int rc;
     if (mf == NULL || reg_data == NULL || reg_status == NULL || reg_size <= 0) {
         return ME_BAD_PARAMS;
     }
     // check register size
-    int max_size = mget_max_reg_size(mf);
-    if (reg_size > (unsigned int)max_size) {
+    unsigned int max_size = (unsigned int)mget_max_reg_size(mf);
+    if ( reg_size > (unsigned int)max_size) {
        //reg too big
        return ME_REG_ACCESS_SIZE_EXCCEEDS_LIMIT;
     }
-    // TODO: add specific checks for each FW access method where needed
 #ifndef MST_UL
+    // TODO: add specific checks for each FW access method where needed
     if (mf->flags & MDEVS_MLNX_OS){
        rc = mos_reg_access_raw(mf, reg_id, reg_method, reg_data, reg_size, reg_status);
     } else if ((mf->flags & (MDEVS_IB | MDEVS_FWCTX)) || (mf->flags != MDEVS_IB && (supports_icmd(mf) || supports_tools_cmdif_reg(mf)))) {
        rc = mreg_send_raw(mf, reg_id, reg_method, reg_data, reg_size, r_size_reg, w_size_reg, reg_status);
-    } else {
+    }else {
         return ME_REG_ACCESS_NOT_SUPPORTED;
     }
 #else
-    if (mf->access_type == MTCR_ACCESS_INBAND || supports_icmd(mf) || supports_tools_cmdif_reg(mf)) {
-        rc = mreg_send_raw(mf, reg_id, reg_method, reg_data, reg_size, r_size_reg, w_size_reg, reg_status);
-    else {
-        return ME_REG_ACCESS_NOT_SUPPORTED;
-    }
+    if (mf->access_type == MTCR_ACCESS_INBAND || (supports_icmd(mf) || supports_tools_cmdif_reg(mf)) ) {
+               rc = mreg_send_raw(mf, reg_id, reg_method, reg_data, reg_size, r_size_reg, w_size_reg, reg_status);
+        }else {
+            return ME_REG_ACCESS_NOT_SUPPORTED;
+        }
 #endif
-    //printf("-D- reg_id:0x%x, reg_size 0x%x, reg_status=0x%x, rc=0x%x\n", reg_id, reg_size, (unsigned int)*reg_status, (unsigned int)rc);
+
     if (rc ) {
          return rc;
     } else if (*reg_status) {
@@ -2012,7 +2004,8 @@ static int mreg_send_wrapper(mfile* mf, u_int8_t *data, int r_icmd_size, int w_i
                 return ME_MAD_SEND_FAILED;
             }
     } else if (supports_icmd(mf)) {
-        if (mf->supp_fw_ifc) { // we support accessing fw via icmd space
+    #if defined(MST_UL) && !defined(MST_UL_ICMD)
+        if (mf->vsec_supp) { // we support accessing fw via icmd space
             rc = icmd_send_command_int(mf, FLASH_REG_ACCESS, data, w_icmd_size, r_icmd_size, 0);
             if (rc) {
                 return rc;
@@ -2024,6 +2017,12 @@ static int mreg_send_wrapper(mfile* mf, u_int8_t *data, int r_icmd_size, int w_i
                 return ME_MAD_SEND_FAILED;
             }
         }
+    #else
+        rc = icmd_send_command_int(mf, FLASH_REG_ACCESS, data, w_icmd_size, r_icmd_size, 0);
+         if (rc) {
+             return rc;
+         }
+    #endif
     } else if (supports_tools_cmdif_reg(mf)) {
        rc = tools_cmdif_reg_access(mf, data, w_icmd_size, r_icmd_size);
        if (rc) {
@@ -2058,6 +2057,7 @@ static int mreg_send_raw(mfile *mf, u_int16_t reg_id, maccess_reg_method_t metho
     //put the reg itself into the buffer
     memcpy(buffer + OP_TLV_SIZE + REG_TLV_HEADER_LEN, reg_data, reg_size);
     cmdif_size += reg_size;
+
 #ifdef _ENABLE_DEBUG_
        fprintf(stdout, "-I-Tlv's of Data Sent:\n");
         fprintf(stdout, "\tOperation Tlv\n");
@@ -2103,18 +2103,18 @@ static int mreg_send_raw(mfile *mf, u_int16_t reg_id, maccess_reg_method_t metho
 #define HW_ID_ADDR 0xf0014
 
 static int supports_icmd(mfile* mf) {
-       u_int32_t dev_id;
-       if (mread4(mf,HW_ID_ADDR, &dev_id) !=4) { // cr might be locked and retured 0xbad0cafe but we dont care we search for device that supports icmd
-           return 1;
-       }
-       switch (dev_id & 0xffff) { // that the hw device id
-               case CIB_HW_ID :
-               case CX4_HW_ID :
-               case SW_IB_HW_ID :
-                       return 1;
-               default:
-                       break;
-       }
+    u_int32_t dev_id;
+    if (mread4(mf,HW_ID_ADDR, &dev_id) !=4) { // cr might be locked and retured 0xbad0cafe but we dont care we search for device that supports icmd
+        return 1;
+    }
+    switch (dev_id & 0xffff) { // that the hw device id
+        case CIB_HW_ID :
+        case CX4_HW_ID :
+        case SW_IB_HW_ID :
+            return 1;
+        default:
+            break;
+    }
    return 0;
 }
 
@@ -2142,7 +2142,7 @@ int mget_max_reg_size(mfile *mf) {
         return INBAND_MAX_REG_SIZE;
     }
     if (supports_icmd(mf)){ // we support icmd and we dont use IB interface -> we use icmd for reg access
-        if (mf->supp_fw_ifc) {
+        if (mf->vsec_supp) {
             return ICMD_MAX_REG_SIZE;
         } else {
             // we send via inband
@@ -2155,10 +2155,6 @@ int mget_max_reg_size(mfile *mf) {
     return 0;
 }
 
-int msupp_fw_ifc_cap(mfile* mf) {
-    return mf->supp_fw_ifc;
-}
-
 /************************************
  * Function: m_err2str
  ************************************/
@@ -2262,10 +2258,10 @@ const char* m_err2str(MError status)
        return "ME_ICMD_ICM_NOT_AVAIL";
    case ME_ICMD_WRITE_PROTECT:
        return "ME_ICMD_WRITE_PROTECT";
-   case ME_ICMD_UNKNOWN_STATUS:
-       return "ME_ICMD_UNKNOWN_STATUS";
    case ME_ICMD_SIZE_EXCEEDS_LIMIT:
        return "ME_ICMD_SIZE_EXCEEDS_LIMIT";
+   case ME_ICMD_UNKNOWN_STATUS:
+       return "ME_ICMD_UNKNOWN_STATUS";
 
        // TOOLS HCR access errors
    case ME_CMDIF_BUSY:
index b5df6087d18d44b0f9c5b9599a4636531f952d81..5f351d6a7750b0ecb3f027f8609a081fceb6aeb0 100644 (file)
  *
  */
 
-
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 #include <bit_slice.h>
 #include <common/tools_utils.h>
 #include "mtcr_icmd_cif.h"
 
-#ifdef __WIN__
-#include <process.h>
-#define getpid() _getpid()
-#else
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-
 //#define _DEBUG_MODE   // un-comment this to enable debug prints
 
 #define IN
 #define OPCODE_BITLEN       16
 #define STATUS_BITOFF       8
 #define STATUS_BITLEN       8
-
-/*
- * Virtual CR-Space ICMD addresses
- */
+#define ICMD_MAX_CMD_SIZE   256
 
 #define VCR_CTRL_ADDR       0x0
 #define VCR_SEMAPHORE62     0x0 // semaphore Domain
@@ -77,7 +67,7 @@
 #define VCR_CMD_SIZE_ADDR   0x1000 // mailbox size
 
 /*
- * Macros for accessing cr-space
+ * Macros for accessing CR-Space
  */
 #define MWRITE_BUF(mf, offset, data, byte_len)                                             \
     (((unsigned)(mwrite_buffer((mf), (offset), (data), (byte_len))) != (unsigned)(byte_len))  \
     (((unsigned)(mread4((mf), (offset), (ptr))) != 4U)         \
         ? ME_ICMD_STATUS_CR_FAIL : ME_OK)
 
-//TODO: adrianc: the macros below can be derrived from one common macro SPACE_ACCESS(mf, address_space, access_func, args, exp_rc, action_on_fail)
 /*
- * Macros for accessing Icmd space
+ * Macros for accessing Icmd Space
  */
 #define SET_SPACE_FOR_ICMD_ACCESS(mf)   \
-    if (mf->sup_fw_ifc) {               \
-        mf->address_domain = AD_ICMD;   \
+    if (mf->vsec_supp) {               \
+        mf->address_space = AS_ICMD;   \
+    }
+#define SET_SPACE_FOR_SEMAPHORE_ACCESS(mf)   \
+    if (mf->vsec_supp) {               \
+        mf->address_space = AS_SEMAPHORE;   \
     }
-#define RESTORE_SPACE(mf) mf->address_domain = AD_CR_SPACE
+#define RESTORE_SPACE(mf) mf->address_space = AS_CR_SPACE
 
 #define MWRITE4_ICMD(mf, offset, value, action_on_fail)\
     do {\
-        mf->address_domain = AD_ICMD;\
+        SET_SPACE_FOR_ICMD_ACCESS(mf);\
         if (mwrite4(mf, offset, value) != 4) {\
-            mf->address_domain = AD_CR_SPACE;\
+            mf->address_space = AS_CR_SPACE;\
             action_on_fail;\
         }\
-        mf->address_domain = AD_CR_SPACE;\
+        RESTORE_SPACE(mf);\
     }while(0)
 
 #define MREAD4_ICMD(mf, offset, ptr, action_on_fail)\
     do {\
-        mf->address_domain = AD_ICMD;\
+        SET_SPACE_FOR_ICMD_ACCESS(mf);\
         if (mread4(mf, offset, ptr) != 4) {\
-            mf->address_domain = AD_CR_SPACE;\
+            RESTORE_SPACE(mf);\
             action_on_fail;\
         }\
-        mf->address_domain = AD_CR_SPACE;\
+        RESTORE_SPACE(mf);\
     }while(0)
 
 #define MWRITE_BUF_ICMD(mf, offset, data, byte_len, action_on_fail)\
     do {\
-        mf->address_domain = AD_ICMD;\
+        SET_SPACE_FOR_ICMD_ACCESS(mf);\
         if ((unsigned)mwrite_buffer(mf, offset, data, byte_len) != (unsigned)byte_len) {\
-            mf->address_domain = AD_CR_SPACE;\
+            RESTORE_SPACE(mf);\
             action_on_fail;\
         }\
-        mf->address_domain = AD_CR_SPACE;\
+        RESTORE_SPACE(mf);\
     }while(0)
 
 #define MREAD_BUF_ICMD(mf, offset, data, byte_len, action_on_fail)\
     do {\
-        mf->address_domain = AD_ICMD;\
+        SET_SPACE_FOR_ICMD_ACCESS(mf);\
         if ((unsigned)mread_buffer(mf, offset, data, byte_len) != (unsigned)byte_len) {\
-            mf->address_domain = AD_CR_SPACE;\
+            RESTORE_SPACE(mf);\
             action_on_fail;\
         }\
-        mf->address_domain = AD_CR_SPACE;\
+        RESTORE_SPACE(mf);\
     }while(0)
 
 /*
  */
 #define MWRITE4_SEMAPHORE(mf, offset, value, action_on_fail)\
         do {\
-        mf->address_domain = AD_SEMAPHORE;\
+        SET_SPACE_FOR_SEMAPHORE_ACCESS(mf);\
         if (mwrite4(mf, offset, value) != 4) {\
-            mf->address_domain = AD_CR_SPACE;\
+           RESTORE_SPACE(mf);\
             action_on_fail;\
         }\
-        mf->address_domain = AD_CR_SPACE;\
+        RESTORE_SPACE(mf);\
     }while(0)
 
 
 #define MREAD4_SEMAPHORE(mf, offset, ptr, action_on_fail)\
     do {\
-        mf->address_domain = AD_SEMAPHORE;\
+        SET_SPACE_FOR_SEMAPHORE_ACCESS(mf);\
         if (mread4(mf, offset, ptr) != 4) {\
-            mf->address_domain = AD_CR_SPACE;\
+            RESTORE_SPACE(mf);\
             action_on_fail;\
         }\
-        mf->address_domain = AD_CR_SPACE;\
+        RESTORE_SPACE(mf);\
     }while(0)
 
-//#define _DEBUG_MODE
+
+
 #ifdef _DEBUG_MODE
 #define DBG_PRINTF(...) fprintf(stderr, __VA_ARGS__)
 #else
@@ -209,8 +203,6 @@ enum {
         }\
        } while(0)
 
-/*************************************************************************************/
-
 /*
  * go - Sets the busy bit to 1, wait untill it is 0 again.
  */
@@ -260,7 +252,7 @@ static int go(mfile *mf) {
  */
 static int set_opcode(mfile *mf, u_int16_t opcode) {
     u_int32_t reg;
-    DBG_PRINTF("-D- in set_opcode\n");
+
     MREAD4_ICMD(mf, mf->icmd.ctrl_addr, &reg, return ME_ICMD_STATUS_CR_FAIL);
     reg = MERGE(reg, opcode, OPCODE_BITOFF, OPCODE_BITLEN);
     MWRITE4_ICMD(mf, mf->icmd.ctrl_addr, reg, return ME_ICMD_STATUS_CR_FAIL);
@@ -296,7 +288,7 @@ static int translate_status(int status) {
 }
 static int get_status(mfile *mf) {
     u_int32_t reg;
-    DBG_PRINTF("-D- int get_status()");
+
     MREAD4_ICMD(mf, mf->icmd.ctrl_addr, &reg, return ME_ICMD_STATUS_CR_FAIL);
     return translate_status(EXTRACT(reg, STATUS_BITOFF, STATUS_BITLEN));
 }
@@ -306,7 +298,6 @@ static int get_status(mfile *mf) {
  */
 static int icmd_is_cmd_ifc_ready(mfile *mf) {
     u_int32_t reg;
-    DBG_PRINTF("-D- in icmd_is_cmd_ifc_ready()\n");
     if (MREAD4(mf, mf->icmd.static_cfg_not_done_addr, &reg)) return ME_ICMD_STATUS_CR_FAIL;
     u_int32_t bit_val = EXTRACT(reg, mf->icmd.static_cfg_not_done_offs, 1);
     /* adrianc: for SWITCHIB the polarity of this bit is opposite than CONNECTIB/CONNECTX4
@@ -334,11 +325,15 @@ int icmd_clear_semaphore(mfile *mf) {
        if ((ret = icmd_open(mf))) {
                return ret;
        }
+
     MWRITE4_SEMAPHORE(mf, mf->icmd.semaphore_addr, 0, return ME_ICMD_STATUS_CR_FAIL);
     mf->icmd.took_semaphore = 0;
     return ME_OK;
 }
 
+/*
+ * icmd_take_semaphore
+ */
 /*
  * icmd_take_semaphore
  */
@@ -353,7 +348,7 @@ static int icmd_take_semaphore_com(mfile *mf, u_int32_t expected_read_val)
          if (++retries > 256) {
              return ME_ICMD_STATUS_SEMAPHORE_TO;
          }
-         if (mf->supp_fw_ifc) {
+         if (mf->vsec_supp) {
              //write expected val before reading it
              MWRITE4_SEMAPHORE(mf, mf->icmd.semaphore_addr, expected_read_val, return ME_ICMD_STATUS_CR_FAIL);
          }
@@ -373,18 +368,19 @@ int icmd_take_semaphore(mfile *mf)
 {
     // open icmd interface by demand
     int ret;
+    static u_int32_t pid = 0;
     if ((ret = icmd_open(mf))) {
         return ret;
     }
-    if (!mf->supp_fw_ifc) {
-        return icmd_take_semaphore_com(mf, 0);
-    }
 
-    static u_int32_t pid = 0;
-    if (!pid) {
-        pid = getpid();
+    if (mf->vsec_supp) {
+        if (!pid) {
+            pid = getpid();
+        }
+        return icmd_take_semaphore_com(mf, pid);
+    } else {
+        return icmd_take_semaphore_com(mf, 0);
     }
-    return icmd_take_semaphore_com(mf, pid);
 }
 
 int icmd_send_command(mfile    *mf,
@@ -453,6 +449,13 @@ cleanup:
     return ret;
 }
 
+
+static int icmd_init_cr(mfile *mf)
+{
+    (void)mf;
+    return ME_NOT_IMPLEMENTED;
+}
+
 static int icmd_init_vcr(mfile* mf)
 {
      mf->icmd.cmd_addr = VCR_CMD_ADDR;
@@ -474,23 +477,34 @@ static int icmd_init_vcr(mfile* mf)
      return ME_OK;
 }
 
+
 int icmd_open(mfile *mf)
 {
     if (mf->icmd.icmd_opened) {
         return ME_OK;
     }
+
     mf->icmd.took_semaphore = 0;
-    // check if we support icmd in virtual CR-Space
-    if (mf->supp_fw_ifc) {
+    // attempt to open via CR-Space
+#if defined(MST_UL) && !defined(MST_UL_ICMD)
+    if (mf->vsec_supp) {
         return icmd_init_vcr(mf);
     }
+    // ugly hack avoid compiler warrnings
+    if (0) icmd_init_cr(mf);
     return ME_ICMD_NOT_SUPPORTED;
+#else
+    if (mf->vsec_supp) {
+        return icmd_init_vcr(mf);
+    } else {
+        return icmd_init_cr(mf);
+    }
+#endif
 }
 
 /*
  * icmd_close
  */
-
 void icmd_close(mfile *mf) {
     if (mf) {
         if (mf->icmd.took_semaphore)
index 17bdf6cb480a60ada593d1973741fe1661ad0c9c..f085849c4c5508595a8efd7ebf9da5ca2e3814a6 100644 (file)
@@ -35,7 +35,9 @@ INCLUDES = -I$(top_srcdir)/mtcr_ul -I$(top_srcdir)/common
 AM_CFLAGS = -Wall -W -g -MP -MD -pipe $(COMPILER_FPIC)
 noinst_LIBRARIES = libtools_layouts.a
 
-libtools_layouts_a_SOURCES = cibfw_layouts.c adb_to_c_utils.c adb_to_c_utils.h cibfw_layouts.h \
-                                                               register_access_open_layouts.h register_access_open_layouts.c \
-                                                               tools_open_layouts.c tools_open_layouts.h\
-                                                               register_access_sib_layouts.h register_access_sib_layouts.c
+libtools_layouts_a_SOURCES = adb_to_c_utils.c adb_to_c_utils.h \
+                               cibfw_layouts.c cibfw_layouts.h \
+                               register_access_open_layouts.h register_access_open_layouts.c \
+                               tools_open_layouts.c tools_open_layouts.h\
+                               register_access_sib_layouts.h register_access_sib_layouts.c \
+                               cx4fw_layouts.c cx4fw_layouts.h
index 0762404456606b534c5d812ffac7efbe026fdb38..d529bbb51ebdd0770c798f86b6e972cf8eb72d46 100644 (file)
@@ -1,38 +1,20 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
 
 /***
- *** This file was generated at "2014-11-12 13:19:17"
+ *** This file was generated at "2015-01-22 18:18:54"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/cibfw/cibfw.adb --file-prefix cibfw --prefix cibfw_
  ***/
@@ -785,6 +767,12 @@ void cibfw_mfg_info_pack(const struct cibfw_mfg_info *ptr_struct, u_int8_t* ptr_
        offset=255;
        adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->guids_override_en);
 
+       offset=232;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->minor_version);
+
+       offset=224;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->major_version);
+
        offset=256;
        cibfw_guids_pack(&(ptr_struct->guids), ptr_buff + offset/8);
 
@@ -807,6 +795,12 @@ void cibfw_mfg_info_unpack(struct cibfw_mfg_info *ptr_struct, const u_int8_t* pt
        offset=255;
        ptr_struct->guids_override_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
 
+       offset=232;
+       ptr_struct->minor_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=224;
+       ptr_struct->major_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
        offset=256;
        cibfw_guids_unpack(&(ptr_struct->guids), ptr_buff + offset/8);
 
@@ -824,6 +818,12 @@ void cibfw_mfg_info_print(const struct cibfw_mfg_info *ptr_struct, FILE* file, i
        adb2c_add_indentation(file, indent_level);
        fprintf(file, "guids_override_en    : "UH_FMT"\n", ptr_struct->guids_override_en);
 
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "minor_version        : "UH_FMT"\n", ptr_struct->minor_version);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "major_version        : "UH_FMT"\n", ptr_struct->major_version);
+
        adb2c_add_indentation(file, indent_level);
        fprintf(file, "guids:\n");
        cibfw_guids_print(&(ptr_struct->guids), file, indent_level + 1);
index d7b4ad1eb16d5be8ac22a6463c84697692c49a73..d1683dc290996801f4450a25e6efacedc1ba0ea4 100644 (file)
@@ -1,38 +1,20 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
 
 /***
- *** This file was generated at "2014-11-12 13:19:17"
+ *** This file was generated at "2015-01-22 18:18:54"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/cibfw/cibfw.adb --file-prefix cibfw --prefix cibfw_
  ***/
@@ -263,10 +245,16 @@ struct cibfw_mfg_info {
        /* 0.24 - 16.23 */
         char psid[17];
 /*---------------- DWORD[7] (Offset 0x1c) ----------------*/
-       /* Description - When this bit is set, the GUIDs should eb taken from the device_info node.
+       /* Description - When this bit is set, the GUIDs should be taken from the device_info node.
 When this bit is cleared, the GUIDs should be taken from the mfg_info node. */
        /* 28.0 - 28.0 */
         u_int8_t guids_override_en;
+       /* Description - MFG_INFO section minor version */
+       /* 28.16 - 28.23 */
+        u_int8_t minor_version;
+       /* Description - MFG_INFO section major version */
+       /* 28.24 - 32.31 */
+        u_int8_t major_version;
 /*---------------- DWORD[8] (Offset 0x20) ----------------*/
        /* Description -  */
        /* 32.0 - 96.31 */
diff --git a/tools_layouts/cx4fw_layouts.c b/tools_layouts/cx4fw_layouts.c
new file mode 100644 (file)
index 0000000..e801fab
--- /dev/null
@@ -0,0 +1,535 @@
+
+/*                  - Mellanox Confidential and Proprietary -
+ *
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
+ *
+ */
+
+/***
+ *** This file was generated at "2015-02-05 17:00:26"
+ *** by:
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/connectx4/connectx4.adb --file-prefix cx4fw --prefix cx4fw_
+ ***/
+#include "cx4fw_layouts.h"
+
+void cx4fw_uint64_pack(const struct cx4fw_uint64 *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->hi);
+
+       offset=32;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->lo);
+
+}
+
+void cx4fw_uint64_unpack(struct cx4fw_uint64 *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       u_int8_t val=0;
+       (void)val;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       ptr_struct->hi = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=32;
+       ptr_struct->lo = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void cx4fw_uint64_print(const struct cx4fw_uint64 *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_uint64 ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "hi                   : "U32H_FMT"\n", ptr_struct->hi);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "lo                   : "U32H_FMT"\n", ptr_struct->lo);
+
+}
+
+int cx4fw_uint64_size(void){
+        return 8;
+}
+
+void cx4fw_uint64_dump(const struct cx4fw_uint64 *ptr_struct, FILE* file) {
+       cx4fw_uint64_print(ptr_struct, file, 0);
+}
+
+void cx4fw_uid_entry_pack(const struct cx4fw_uid_entry *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=24;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->num_allocated);
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->step);
+
+       offset=64;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 8, ptr_struct->uid);
+
+}
+
+void cx4fw_uid_entry_unpack(struct cx4fw_uid_entry *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       u_int8_t val=0;
+       (void)val;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=24;
+       ptr_struct->num_allocated = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=16;
+       ptr_struct->step = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=64;
+       ptr_struct->uid = adb2c_pop_integer_from_buff(ptr_buff, offset, 8);
+
+}
+
+void cx4fw_uid_entry_print(const struct cx4fw_uid_entry *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_uid_entry ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "num_allocated        : "UH_FMT"\n", ptr_struct->num_allocated);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "step                 : "UH_FMT"\n", ptr_struct->step);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "uid                  : "U64H_FMT"\n", ptr_struct->uid);
+
+}
+
+int cx4fw_uid_entry_size(void){
+        return 16;
+}
+
+void cx4fw_uid_entry_dump(const struct cx4fw_uid_entry *ptr_struct, FILE* file) {
+       cx4fw_uid_entry_print(ptr_struct, file, 0);
+}
+
+void cx4fw_guids_pack(const struct cx4fw_guids *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       cx4fw_uid_entry_pack(&(ptr_struct->guids), ptr_buff + offset/8);
+
+       offset=128;
+       cx4fw_uid_entry_pack(&(ptr_struct->macs), ptr_buff + offset/8);
+
+}
+
+void cx4fw_guids_unpack(struct cx4fw_guids *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       u_int8_t val=0;
+       (void)val;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       cx4fw_uid_entry_unpack(&(ptr_struct->guids), ptr_buff + offset/8);
+
+       offset=128;
+       cx4fw_uid_entry_unpack(&(ptr_struct->macs), ptr_buff + offset/8);
+
+}
+
+void cx4fw_guids_print(const struct cx4fw_guids *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_guids ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "guids:\n");
+       cx4fw_uid_entry_print(&(ptr_struct->guids), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "macs:\n");
+       cx4fw_uid_entry_print(&(ptr_struct->macs), file, indent_level + 1);
+
+}
+
+int cx4fw_guids_size(void){
+        return 64;
+}
+
+void cx4fw_guids_dump(const struct cx4fw_guids *ptr_struct, FILE* file) {
+       cx4fw_guids_print(ptr_struct, file, 0);
+}
+
+void cx4fw_operation_key_pack(const struct cx4fw_operation_key *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->key_modifier);
+
+       offset=64;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 8, ptr_struct->key);
+
+}
+
+void cx4fw_operation_key_unpack(struct cx4fw_operation_key *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       u_int8_t val=0;
+       (void)val;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       ptr_struct->key_modifier = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=64;
+       ptr_struct->key = adb2c_pop_integer_from_buff(ptr_buff, offset, 8);
+
+}
+
+void cx4fw_operation_key_print(const struct cx4fw_operation_key *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_operation_key ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "key_modifier         : "UH_FMT"\n", ptr_struct->key_modifier);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "key                  : "U64H_FMT"\n", ptr_struct->key);
+
+}
+
+int cx4fw_operation_key_size(void){
+        return 16;
+}
+
+void cx4fw_operation_key_dump(const struct cx4fw_operation_key *ptr_struct, FILE* file) {
+       cx4fw_operation_key_print(ptr_struct, file, 0);
+}
+
+void cx4fw_mfg_info_pack(const struct cx4fw_mfg_info *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       for (i=0; i < 16; i++) {
+       offset=adb2c_calc_array_field_address(24, 8, i, 2560, 1);
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->psid[i]);
+       }
+
+       offset=255;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->guids_override_en);
+
+       offset=232;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->minor_version);
+
+       offset=224;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->major_version);
+
+       offset=256;
+       cx4fw_guids_pack(&(ptr_struct->guids), ptr_buff + offset/8);
+
+}
+
+void cx4fw_mfg_info_unpack(struct cx4fw_mfg_info *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       u_int8_t val=0;
+       (void)val;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       for (i=0; i < 16; i++) {
+       offset=adb2c_calc_array_field_address(24, 8, i, 2560, 1);
+       ptr_struct->psid[i] = (char)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+       }
+
+       ptr_struct->psid[16] = '\0';
+       offset=255;
+       ptr_struct->guids_override_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=232;
+       ptr_struct->minor_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=224;
+       ptr_struct->major_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=256;
+       cx4fw_guids_unpack(&(ptr_struct->guids), ptr_buff + offset/8);
+
+}
+
+void cx4fw_mfg_info_print(const struct cx4fw_mfg_info *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_mfg_info ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       fprintf(file, "psid                 : \"%s\"\n", ptr_struct->psid);
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "guids_override_en    : "UH_FMT"\n", ptr_struct->guids_override_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "minor_version        : "UH_FMT"\n", ptr_struct->minor_version);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "major_version        : "UH_FMT"\n", ptr_struct->major_version);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "guids:\n");
+       cx4fw_guids_print(&(ptr_struct->guids), file, indent_level + 1);
+
+}
+
+int cx4fw_mfg_info_size(void){
+        return 320;
+}
+
+void cx4fw_mfg_info_dump(const struct cx4fw_mfg_info *ptr_struct, FILE* file) {
+       cx4fw_mfg_info_print(ptr_struct, file, 0);
+}
+
+void cx4fw_device_info_pack(const struct cx4fw_device_info *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->signature0);
+
+       offset=32;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->signature1);
+
+       offset=64;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->signature2);
+
+       offset=96;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->signature3);
+
+       offset=152;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->minor_version);
+
+       offset=143;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 9, (u_int32_t)ptr_struct->major_version);
+
+       offset=256;
+       cx4fw_guids_pack(&(ptr_struct->guids), ptr_buff + offset/8);
+
+       offset=880;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->vsd_vendor_id);
+
+       for (i=0; i < 208; i++) {
+       offset=adb2c_calc_array_field_address(920, 8, i, 4096, 1);
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->vsd[i]);
+       }
+
+       for (i=0; i < 4; i++) {
+       offset=adb2c_calc_array_field_address(2816, 128, i, 4096, 1);
+       cx4fw_operation_key_pack(&(ptr_struct->keys[i]), ptr_buff + offset/8);
+       }
+
+}
+
+void cx4fw_device_info_unpack(struct cx4fw_device_info *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       u_int8_t val=0;
+       (void)val;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=0;
+       ptr_struct->signature0 = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=32;
+       ptr_struct->signature1 = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=64;
+       ptr_struct->signature2 = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=96;
+       ptr_struct->signature3 = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=152;
+       ptr_struct->minor_version = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=143;
+       ptr_struct->major_version = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 9);
+
+       offset=256;
+       cx4fw_guids_unpack(&(ptr_struct->guids), ptr_buff + offset/8);
+
+       offset=880;
+       ptr_struct->vsd_vendor_id = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       for (i=0; i < 208; i++) {
+       offset=adb2c_calc_array_field_address(920, 8, i, 4096, 1);
+       ptr_struct->vsd[i] = (char)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+       }
+
+       ptr_struct->vsd[208] = '\0';
+       for (i=0; i < 4; i++) {
+       offset=adb2c_calc_array_field_address(2816, 128, i, 4096, 1);
+       cx4fw_operation_key_unpack(&(ptr_struct->keys[i]), ptr_buff + offset/8);
+       }
+
+}
+
+void cx4fw_device_info_print(const struct cx4fw_device_info *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_device_info ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "signature0           : "U32H_FMT"\n", ptr_struct->signature0);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "signature1           : "U32H_FMT"\n", ptr_struct->signature1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "signature2           : "U32H_FMT"\n", ptr_struct->signature2);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "signature3           : "U32H_FMT"\n", ptr_struct->signature3);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "minor_version        : "UH_FMT"\n", ptr_struct->minor_version);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "major_version        : "UH_FMT"\n", ptr_struct->major_version);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "guids:\n");
+       cx4fw_guids_print(&(ptr_struct->guids), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "vsd_vendor_id        : "UH_FMT"\n", ptr_struct->vsd_vendor_id);
+
+       fprintf(file, "vsd                  : \"%s\"\n", ptr_struct->vsd);
+       for (i=0; i < 4; i++) {
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "keys_%03d:\n", i);
+       cx4fw_operation_key_print(&(ptr_struct->keys[i]), file, indent_level + 1);
+       }
+
+}
+
+int cx4fw_device_info_size(void){
+        return 512;
+}
+
+void cx4fw_device_info_dump(const struct cx4fw_device_info *ptr_struct, FILE* file) {
+       cx4fw_device_info_print(ptr_struct, file, 0);
+}
+
+void cx4fw_cx4fw_Nodes_pack(const union cx4fw_cx4fw_Nodes *ptr_struct, u_int8_t* ptr_buff)
+{
+       cx4fw_guids_pack(&(ptr_struct->guids), ptr_buff);
+}
+
+void cx4fw_cx4fw_Nodes_unpack(union cx4fw_cx4fw_Nodes *ptr_struct, const u_int8_t* ptr_buff)
+{
+       cx4fw_guids_unpack(&(ptr_struct->guids), ptr_buff);
+}
+
+void cx4fw_cx4fw_Nodes_print(const union cx4fw_cx4fw_Nodes *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== cx4fw_cx4fw_Nodes ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "device_info:\n");
+       cx4fw_device_info_print(&(ptr_struct->device_info), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mfg_info:\n");
+       cx4fw_mfg_info_print(&(ptr_struct->mfg_info), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "guids:\n");
+       cx4fw_guids_print(&(ptr_struct->guids), file, indent_level + 1);
+
+}
+
+int cx4fw_cx4fw_Nodes_size(void){
+        return 512;
+}
+
+void cx4fw_cx4fw_Nodes_dump(const union cx4fw_cx4fw_Nodes *ptr_struct, FILE* file) {
+       cx4fw_cx4fw_Nodes_print(ptr_struct, file, 0);
+}
+
diff --git a/tools_layouts/cx4fw_layouts.h b/tools_layouts/cx4fw_layouts.h
new file mode 100644 (file)
index 0000000..4758938
--- /dev/null
@@ -0,0 +1,233 @@
+
+/*                  - Mellanox Confidential and Proprietary -
+ *
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
+ *
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
+ *
+ */
+
+/***
+ *** This file was generated at "2015-02-05 17:00:26"
+ *** by:
+ ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/connectx4/connectx4.adb --file-prefix cx4fw --prefix cx4fw_
+ ***/
+#ifndef CX4FW_LAYOUTS_H
+#define CX4FW_LAYOUTS_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "adb_to_c_utils.h"/* Description -   */
+/* Size in bytes - 8 */
+struct cx4fw_uint64 {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        u_int32_t hi;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description -  */
+       /* 4.0 - 8.31 */
+        u_int32_t lo;
+};
+
+/* Description -   */
+/* Size in bytes - 16 */
+struct cx4fw_uid_entry {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Number of allocated UIDs in this entry */
+       /* 0.0 - 0.7 */
+        u_int8_t num_allocated;
+       /* Description - Step size by which to derive the UIDs for this entry
+See struct description */
+       /* 0.8 - 0.15 */
+        u_int8_t step;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - For MACs, the upper 16 bits in the 'hi' dword are reserved */
+       /* 8.0 - 16.31 */
+        u_int64_t uid;
+};
+
+/* Description -   */
+/* Size in bytes - 64 */
+struct cx4fw_guids {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - UIDs (MACs and GUIDs) Allocation Entry.
+guids, is used for system GUID, node GUID and port GUID of port 0. ;/Multiple UIDs can be assigned to a single port, to be used for multiple virtual guests, multi host and managment */
+       /* 0.0 - 16.31 */
+        struct cx4fw_uid_entry guids;
+/*---------------- DWORD[4] (Offset 0x10) ----------------*/
+       /* Description -  */
+       /* 16.0 - 32.31 */
+        struct cx4fw_uid_entry macs;
+};
+
+/* Description -   */
+/* Size in bytes - 16 */
+struct cx4fw_operation_key {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 0.15 */
+        u_int16_t key_modifier;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description -  */
+       /* 8.0 - 16.31 */
+        u_int64_t key;
+};
+
+/* Description -   */
+/* Size in bytes - 320 */
+struct cx4fw_mfg_info {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.24 - 16.23 */
+        char psid[17];
+/*---------------- DWORD[7] (Offset 0x1c) ----------------*/
+       /* Description - When this bit is set, the GUIDs should be taken from the device_info node.
+When this bit is cleared, the GUIDs should be taken from the mfg_info node. */
+       /* 28.0 - 28.0 */
+        u_int8_t guids_override_en;
+       /* Description - MFG_INFO section minor version */
+       /* 28.16 - 28.23 */
+        u_int8_t minor_version;
+       /* Description - MFG_INFO section major version */
+       /* 28.24 - 32.31 */
+        u_int8_t major_version;
+/*---------------- DWORD[8] (Offset 0x20) ----------------*/
+       /* Description -  */
+       /* 32.0 - 96.31 */
+        struct cx4fw_guids guids;
+};
+
+/* Description -   */
+/* Size in bytes - 512 */
+struct cx4fw_device_info {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        u_int32_t signature0;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description -  */
+       /* 4.0 - 8.31 */
+        u_int32_t signature1;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description -  */
+       /* 8.0 - 12.31 */
+        u_int32_t signature2;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+       /* Description -  */
+       /* 12.0 - 16.31 */
+        u_int32_t signature3;
+/*---------------- DWORD[4] (Offset 0x10) ----------------*/
+       /* Description - Format version for this struct */
+       /* 16.0 - 16.7 */
+        u_int8_t minor_version;
+       /* Description - Format version for this struct */
+       /* 16.8 - 16.16 */
+        u_int16_t major_version;
+/*---------------- DWORD[8] (Offset 0x20) ----------------*/
+       /* Description -  */
+       /* 32.0 - 96.31 */
+        struct cx4fw_guids guids;
+/*---------------- DWORD[27] (Offset 0x6c) ----------------*/
+       /* Description -  */
+       /* 108.0 - 108.15 */
+        u_int16_t vsd_vendor_id;
+/*---------------- DWORD[28] (Offset 0x70) ----------------*/
+       /* Description -  */
+       /* 112.24 - 320.23 */
+        char vsd[209];
+/*---------------- DWORD[88] (Offset 0x160) ----------------*/
+       /* Description -  */
+       /* 352.0 - 416.31 */
+        struct cx4fw_operation_key keys[4];
+};
+
+/* Description -   */
+/* Size in bytes - 512 */
+union cx4fw_cx4fw_Nodes {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 512.31 */
+        struct cx4fw_device_info device_info;
+       /* Description -  */
+       /* 0.0 - 320.31 */
+        struct cx4fw_mfg_info mfg_info;
+       /* Description -  */
+       /* 0.0 - 64.31 */
+        struct cx4fw_guids guids;
+};
+
+
+/*================= PACK/UNPACK/PRINT FUNCTIONS ======================*/
+/* uint64 */
+void cx4fw_uint64_pack(const struct cx4fw_uint64 *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_uint64_unpack(struct cx4fw_uint64 *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_uint64_print(const struct cx4fw_uint64 *ptr_struct, FILE* file, int indent_level);
+int cx4fw_uint64_size(void);
+#define CX4FW_UINT64_SIZE    (0x8)
+void cx4fw_uint64_dump(const struct cx4fw_uint64 *ptr_struct, FILE* file);
+;
+/* uid_entry */
+void cx4fw_uid_entry_pack(const struct cx4fw_uid_entry *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_uid_entry_unpack(struct cx4fw_uid_entry *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_uid_entry_print(const struct cx4fw_uid_entry *ptr_struct, FILE* file, int indent_level);
+int cx4fw_uid_entry_size(void);
+#define CX4FW_UID_ENTRY_SIZE    (0x10)
+void cx4fw_uid_entry_dump(const struct cx4fw_uid_entry *ptr_struct, FILE* file);
+;
+/* guids */
+void cx4fw_guids_pack(const struct cx4fw_guids *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_guids_unpack(struct cx4fw_guids *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_guids_print(const struct cx4fw_guids *ptr_struct, FILE* file, int indent_level);
+int cx4fw_guids_size(void);
+#define CX4FW_GUIDS_SIZE    (0x40)
+void cx4fw_guids_dump(const struct cx4fw_guids *ptr_struct, FILE* file);
+;
+/* operation_key */
+void cx4fw_operation_key_pack(const struct cx4fw_operation_key *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_operation_key_unpack(struct cx4fw_operation_key *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_operation_key_print(const struct cx4fw_operation_key *ptr_struct, FILE* file, int indent_level);
+int cx4fw_operation_key_size(void);
+#define CX4FW_OPERATION_KEY_SIZE    (0x10)
+void cx4fw_operation_key_dump(const struct cx4fw_operation_key *ptr_struct, FILE* file);
+;
+/* mfg_info */
+void cx4fw_mfg_info_pack(const struct cx4fw_mfg_info *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_mfg_info_unpack(struct cx4fw_mfg_info *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_mfg_info_print(const struct cx4fw_mfg_info *ptr_struct, FILE* file, int indent_level);
+int cx4fw_mfg_info_size(void);
+#define CX4FW_MFG_INFO_SIZE    (0x140)
+void cx4fw_mfg_info_dump(const struct cx4fw_mfg_info *ptr_struct, FILE* file);
+;
+/* device_info */
+void cx4fw_device_info_pack(const struct cx4fw_device_info *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_device_info_unpack(struct cx4fw_device_info *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_device_info_print(const struct cx4fw_device_info *ptr_struct, FILE* file, int indent_level);
+int cx4fw_device_info_size(void);
+#define CX4FW_DEVICE_INFO_SIZE    (0x200)
+void cx4fw_device_info_dump(const struct cx4fw_device_info *ptr_struct, FILE* file);
+;
+/* cx4fw_Nodes */
+void cx4fw_cx4fw_Nodes_pack(const union cx4fw_cx4fw_Nodes *ptr_struct, u_int8_t* ptr_buff);
+void cx4fw_cx4fw_Nodes_unpack(union cx4fw_cx4fw_Nodes *ptr_struct, const u_int8_t* ptr_buff);
+void cx4fw_cx4fw_Nodes_print(const union cx4fw_cx4fw_Nodes *ptr_struct, FILE* file, int indent_level);
+int cx4fw_cx4fw_Nodes_size(void);
+#define CX4FW_CX4FW_NODES_SIZE    (0x200)
+void cx4fw_cx4fw_Nodes_dump(const union cx4fw_cx4fw_Nodes *ptr_struct, FILE* file);
+;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // CX4FW_LAYOUTS_H
index bc742e3a23b6ca4529979f72955a69f8c2974e6a..05dcc9273bd3af20bc57deafd61163f0b7de7074 100644 (file)
@@ -1,37 +1,20 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
+
 /***
- *** This file was generated at "2014-11-12 13:18:59"
+ *** This file was generated at "2015-01-22 18:18:34"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access/register_access_sib.adb --file-prefix register_access_sib --prefix register_access_sib_
  ***/
@@ -462,3 +445,176 @@ void register_access_sib_mgir_dump(const struct register_access_sib_mgir *ptr_st
        register_access_sib_mgir_print(ptr_struct, file, 0);
 }
 
+void register_access_sib_mtmp_pack(const struct register_access_sib_mtmp *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=25;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 7, (u_int32_t)ptr_struct->sensor_index);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->internal_diodes_query);
+
+       offset=48;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->temperature);
+
+       offset=80;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->max_temperture);
+
+       offset=65;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->mtr);
+
+       offset=64;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->mte);
+
+       offset=112;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->temperature_threshold_hi);
+
+       offset=96;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->tee);
+
+       offset=144;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->temperature_threshold_lo);
+
+       offset=160;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->name_lo);
+
+       offset=192;
+       adb2c_push_integer_to_buff(ptr_buff, offset, 4, (u_int64_t)ptr_struct->name_hi);
+
+}
+
+void register_access_sib_mtmp_unpack(struct register_access_sib_mtmp *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=25;
+       ptr_struct->sensor_index = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 7);
+
+       offset=0;
+       ptr_struct->internal_diodes_query = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=48;
+       ptr_struct->temperature = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=80;
+       ptr_struct->max_temperture = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=65;
+       ptr_struct->mtr = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=64;
+       ptr_struct->mte = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=112;
+       ptr_struct->temperature_threshold_hi = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=96;
+       ptr_struct->tee = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=144;
+       ptr_struct->temperature_threshold_lo = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+       offset=160;
+       ptr_struct->name_lo = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+       offset=192;
+       ptr_struct->name_hi = (u_int32_t)adb2c_pop_integer_from_buff(ptr_buff, offset, 4);
+
+}
+
+void register_access_sib_mtmp_print(const struct register_access_sib_mtmp *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== mtmp ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "sensor_index         : "UH_FMT"\n", ptr_struct->sensor_index);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "internal_diodes_query : "UH_FMT"\n", ptr_struct->internal_diodes_query);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "temperature          : "UH_FMT"\n", ptr_struct->temperature);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "max_temperture       : "UH_FMT"\n", ptr_struct->max_temperture);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mtr                  : "UH_FMT"\n", ptr_struct->mtr);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mte                  : "UH_FMT"\n", ptr_struct->mte);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "temperature_threshold_hi : "UH_FMT"\n", ptr_struct->temperature_threshold_hi);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "tee                  : "UH_FMT"\n", ptr_struct->tee);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "temperature_threshold_lo : "UH_FMT"\n", ptr_struct->temperature_threshold_lo);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "name_lo              : "U32H_FMT"\n", ptr_struct->name_lo);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "name_hi              : "U32H_FMT"\n", ptr_struct->name_hi);
+
+}
+
+int register_access_sib_mtmp_size(){
+        return 28;
+}
+
+void register_access_sib_mtmp_dump(const struct register_access_sib_mtmp *ptr_struct, FILE* file) {
+       register_access_sib_mtmp_print(ptr_struct, file, 0);
+}
+
+void register_access_sib_register_access_sib_Nodes_pack(const union register_access_sib_register_access_sib_Nodes *ptr_struct, u_int8_t* ptr_buff)
+{
+       memcpy(ptr_buff, ptr_struct, 128);
+}
+
+void register_access_sib_register_access_sib_Nodes_unpack(union register_access_sib_register_access_sib_Nodes *ptr_struct, const u_int8_t* ptr_buff)
+{
+       memcpy(ptr_struct, ptr_buff, 128);
+}
+
+void register_access_sib_register_access_sib_Nodes_print(const union register_access_sib_register_access_sib_Nodes *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== register_access_sib_Nodes ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mtmp:\n");
+       register_access_sib_mtmp_print(&(ptr_struct->mtmp), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "mgir:\n");
+       register_access_sib_mgir_print(&(ptr_struct->mgir), file, indent_level + 1);
+
+}
+
+int register_access_sib_register_access_sib_Nodes_size(){
+        return 128;
+}
+
+void register_access_sib_register_access_sib_Nodes_dump(const union register_access_sib_register_access_sib_Nodes *ptr_struct, FILE* file) {
+       register_access_sib_register_access_sib_Nodes_print(ptr_struct, file, 0);
+}
+
index e926b5a3bf9bb9c74d6553303a47332dcd2a5b90..5a9c1f82363e4c69c4e780790b53ca9e96822a20 100644 (file)
@@ -1,38 +1,20 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
 
 /***
- *** This file was generated at "2014-11-12 13:18:59"
+ *** This file was generated at "2015-01-22 18:18:34"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/register_access/register_access_sib.adb --file-prefix register_access_sib --prefix register_access_sib_
  ***/
@@ -162,6 +144,68 @@ struct register_access_sib_mgir {
         struct register_access_sib_IB_SWInfo_ SWInfo;
 };
 
+/* Description -   */
+/* Size in bytes - 28 */
+struct register_access_sib_mtmp {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Sensors index to access */
+       /* 0.0 - 0.6 */
+        u_int8_t sensor_index;
+       /* Description - query the internal diodes */
+       /* 0.31 - 4.31 */
+        u_int8_t internal_diodes_query;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - Temperature reading from the sensor. Reading in 0.125 Celsius degrees. */
+       /* 4.0 - 4.15 */
+        u_int16_t temperature;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - The highest measured temperature from the sensor. */
+       /* 8.0 - 8.15 */
+        u_int16_t max_temperture;
+       /* Description - Max Temperature Reset - clears the value of the max temperature register */
+       /* 8.30 - 8.30 */
+        u_int8_t mtr;
+       /* Description - Max Temperature Enable - enables measuring the max temperature on a sensor */
+       /* 8.31 - 12.31 */
+        u_int8_t mte;
+/*---------------- DWORD[3] (Offset 0xc) ----------------*/
+       /* Description - If the sensor temperature measurement is above the threshold (and events are enabled), an event
+will be generated */
+       /* 12.0 - 12.15 */
+        u_int16_t temperature_threshold_hi;
+       /* Description - Temperature Event Enable
+00 - Do not generate event
+01 - Generate Event
+10 - Generate single event */
+       /* 12.30 - 16.31 */
+        u_int8_t tee;
+/*---------------- DWORD[4] (Offset 0x10) ----------------*/
+       /* Description -  */
+       /* 16.0 - 16.15 */
+        u_int16_t temperature_threshold_lo;
+/*---------------- DWORD[5] (Offset 0x14) ----------------*/
+       /* Description -  */
+       /* 20.0 - 24.31 */
+        u_int32_t name_lo;
+/*---------------- DWORD[6] (Offset 0x18) ----------------*/
+       /* Description -  */
+       /* 24.0 - 28.31 */
+        u_int32_t name_hi;
+};
+
+/* Description -   */
+/* Size in bytes - 128 */
+union register_access_sib_register_access_sib_Nodes {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description -  */
+       /* 0.0 - 28.31 */
+        struct register_access_sib_mtmp mtmp;
+       /* Description -  */
+       /* 0.0 - 128.31 */
+        struct register_access_sib_mgir mgir;
+};
+
+
 /*================= PACK/UNPACK/PRINT FUNCTIONS ======================*/
 /* IB_PSID_ */
 void register_access_sib_IB_PSID__pack(const struct register_access_sib_IB_PSID_ *ptr_struct, u_int8_t* ptr_buff);
@@ -198,6 +242,21 @@ void register_access_sib_mgir_print(const struct register_access_sib_mgir *ptr_s
 int register_access_sib_mgir_size();
 #define REGISTER_ACCESS_SIB_MGIR_SIZE    (0x80)
 void register_access_sib_mgir_dump(const struct register_access_sib_mgir *ptr_struct, FILE* file);
+/* mtmp */
+void register_access_sib_mtmp_pack(const struct register_access_sib_mtmp *ptr_struct, u_int8_t* ptr_buff);
+void register_access_sib_mtmp_unpack(struct register_access_sib_mtmp *ptr_struct, const u_int8_t* ptr_buff);
+void register_access_sib_mtmp_print(const struct register_access_sib_mtmp *ptr_struct, FILE* file, int indent_level);
+int register_access_sib_mtmp_size();
+#define REGISTER_ACCESS_SIB_MTMP_SIZE    (0x1c)
+void register_access_sib_mtmp_dump(const struct register_access_sib_mtmp *ptr_struct, FILE* file);
+/* register_access_sib_Nodes */
+void register_access_sib_register_access_sib_Nodes_pack(const union register_access_sib_register_access_sib_Nodes *ptr_struct, u_int8_t* ptr_buff);
+void register_access_sib_register_access_sib_Nodes_unpack(union register_access_sib_register_access_sib_Nodes *ptr_struct, const u_int8_t* ptr_buff);
+void register_access_sib_register_access_sib_Nodes_print(const union register_access_sib_register_access_sib_Nodes *ptr_struct, FILE* file, int indent_level);
+int register_access_sib_register_access_sib_Nodes_size();
+#define REGISTER_ACCESS_SIB_REGISTER_ACCESS_SIB_NODES_SIZE    (0x80)
+void register_access_sib_register_access_sib_Nodes_dump(const union register_access_sib_register_access_sib_Nodes *ptr_struct, FILE* file);
+
 
 #ifdef __cplusplus
 }
index 16a938cdb4ac3b607396b41cc659043fb922a39a..25b4b46500b57a7d44e00f64410f58354d0bc902 100644 (file)
@@ -1,38 +1,20 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
 
 /***
- *** This file was generated at "2014-11-12 13:19:54"
+ *** This file was generated at "2015-01-22 18:19:26"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
  ***/
@@ -825,13 +807,13 @@ void tools_open_query_def_params_global_print(const struct tools_open_query_def_
        fprintf(file, "fw_default_config_payload_version : "UH_FMT"\n", ptr_struct->fw_default_config_payload_version);
 
        adb2c_add_indentation(file, indent_level);
-       fprintf(file, "num_vfs             : "UH_FMT"\n", ptr_struct->num_vfs);
+       fprintf(file, "num_vfs              : "UH_FMT"\n", ptr_struct->num_vfs);
 
        adb2c_add_indentation(file, indent_level);
-       fprintf(file, "uar_bar_size        : "UH_FMT"\n", ptr_struct->uar_bar_size);
+       fprintf(file, "uar_bar_size         : "UH_FMT"\n", ptr_struct->uar_bar_size);
 
        adb2c_add_indentation(file, indent_level);
-       fprintf(file, "max_uar_bar_size    : "UH_FMT"\n", ptr_struct->max_uar_bar_size);
+       fprintf(file, "max_uar_bar_size     : "UH_FMT"\n", ptr_struct->max_uar_bar_size);
 
        adb2c_add_indentation(file, indent_level);
        fprintf(file, "sriov_en             : "UH_FMT"\n", ptr_struct->sriov_en);
@@ -1072,6 +1054,365 @@ void tools_open_sriov_dump(const struct tools_open_sriov *ptr_struct, FILE* file
        tools_open_sriov_print(ptr_struct, file, 0);
 }
 
+void tools_open_preboot_flow_ctrl_pack(const struct tools_open_preboot_flow_ctrl *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=24;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->pfcrx);
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->pfctx);
+
+       offset=2;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->pfc_willing);
+
+       offset=1;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->pprx);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->pptx);
+
+}
+
+void tools_open_preboot_flow_ctrl_unpack(struct tools_open_preboot_flow_ctrl *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=24;
+       ptr_struct->pfcrx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=16;
+       ptr_struct->pfctx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=2;
+       ptr_struct->pfc_willing = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=1;
+       ptr_struct->pprx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=0;
+       ptr_struct->pptx = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+}
+
+void tools_open_preboot_flow_ctrl_print(const struct tools_open_preboot_flow_ctrl *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== preboot_flow_ctrl ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pfcrx                : "UH_FMT"\n", ptr_struct->pfcrx);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pfctx                : "UH_FMT"\n", ptr_struct->pfctx);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pfc_willing          : "UH_FMT"\n", ptr_struct->pfc_willing);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pprx                 : "UH_FMT"\n", ptr_struct->pprx);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "pptx                 : "UH_FMT"\n", ptr_struct->pptx);
+
+}
+
+int tools_open_preboot_flow_ctrl_size(){
+        return 4;
+}
+
+void tools_open_preboot_flow_ctrl_dump(const struct tools_open_preboot_flow_ctrl *ptr_struct, FILE* file) {
+       tools_open_preboot_flow_ctrl_print(ptr_struct, file, 0);
+}
+
+void tools_open_boot_settings_pack(const struct tools_open_boot_settings *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=20;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->boot_vlan);
+
+       offset=8;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->legacy_boot_protocol);
+
+       offset=5;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 3, (u_int32_t)ptr_struct->boot_retry_conut);
+
+       offset=1;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->boot_vlan_en);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->boot_option_rom_en);
+
+}
+
+void tools_open_boot_settings_unpack(struct tools_open_boot_settings *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=20;
+       ptr_struct->boot_vlan = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+
+       offset=8;
+       ptr_struct->legacy_boot_protocol = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=5;
+       ptr_struct->boot_retry_conut = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 3);
+
+       offset=1;
+       ptr_struct->boot_vlan_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=0;
+       ptr_struct->boot_option_rom_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+}
+
+void tools_open_boot_settings_print(const struct tools_open_boot_settings *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== boot_settings ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_vlan            : "UH_FMT"\n", ptr_struct->boot_vlan);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "legacy_boot_protocol : "UH_FMT"\n", ptr_struct->legacy_boot_protocol);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_retry_conut     : "UH_FMT"\n", ptr_struct->boot_retry_conut);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_vlan_en         : "UH_FMT"\n", ptr_struct->boot_vlan_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_option_rom_en   : "UH_FMT"\n", ptr_struct->boot_option_rom_en);
+
+}
+
+int tools_open_boot_settings_size(){
+        return 4;
+}
+
+void tools_open_boot_settings_dump(const struct tools_open_boot_settings *ptr_struct, FILE* file) {
+       tools_open_boot_settings_print(ptr_struct, file, 0);
+}
+
+void tools_open_infiniband_boot_settings_pack(const struct tools_open_infiniband_boot_settings *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 16, (u_int32_t)ptr_struct->boot_pkey);
+
+}
+
+void tools_open_infiniband_boot_settings_unpack(struct tools_open_infiniband_boot_settings *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=16;
+       ptr_struct->boot_pkey = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 16);
+
+}
+
+void tools_open_infiniband_boot_settings_print(const struct tools_open_infiniband_boot_settings *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== infiniband_boot_settings ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_pkey            : "UH_FMT"\n", ptr_struct->boot_pkey);
+
+}
+
+int tools_open_infiniband_boot_settings_size(){
+        return 4;
+}
+
+void tools_open_infiniband_boot_settings_dump(const struct tools_open_infiniband_boot_settings *ptr_struct, FILE* file) {
+       tools_open_infiniband_boot_settings_print(ptr_struct, file, 0);
+}
+
+void tools_open_iscsi_settings_pack(const struct tools_open_iscsi_settings *ptr_struct, u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=10;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->target_as_first_hdd_en);
+
+       offset=8;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 2, (u_int32_t)ptr_struct->boot_to_target);
+
+       offset=7;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->ipv6_auto_config_en);
+
+       offset=5;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->vlan_en);
+
+       offset=4;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->tcp_timestamps_en);
+
+       offset=3;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->chap_mutual_auth_en);
+
+       offset=2;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->chap_auth_en);
+
+       offset=1;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->dhcp_iscsi_en);
+
+       offset=0;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 1, (u_int32_t)ptr_struct->ipv4_dhcp_en);
+
+       offset=52;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 12, (u_int32_t)ptr_struct->vlan);
+
+       offset=88;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->lun_busy_retry_count);
+
+       offset=80;
+       adb2c_push_bits_to_buff(ptr_buff, offset, 8, (u_int32_t)ptr_struct->link_up_delay_time);
+
+}
+
+void tools_open_iscsi_settings_unpack(struct tools_open_iscsi_settings *ptr_struct, const u_int8_t* ptr_buff){
+       u_int32_t offset;
+       int i=0;
+       (void)offset;
+       (void)i;
+       (void)ptr_struct;
+       (void)ptr_buff;
+
+       offset=10;
+       ptr_struct->target_as_first_hdd_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=8;
+       ptr_struct->boot_to_target = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 2);
+
+       offset=7;
+       ptr_struct->ipv6_auto_config_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=5;
+       ptr_struct->vlan_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=4;
+       ptr_struct->tcp_timestamps_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=3;
+       ptr_struct->chap_mutual_auth_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=2;
+       ptr_struct->chap_auth_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=1;
+       ptr_struct->dhcp_iscsi_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=0;
+       ptr_struct->ipv4_dhcp_en = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 1);
+
+       offset=52;
+       ptr_struct->vlan = (u_int16_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 12);
+
+       offset=88;
+       ptr_struct->lun_busy_retry_count = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+       offset=80;
+       ptr_struct->link_up_delay_time = (u_int8_t)adb2c_pop_bits_from_buff(ptr_buff, offset, 8);
+
+}
+
+void tools_open_iscsi_settings_print(const struct tools_open_iscsi_settings *ptr_struct, FILE* file, int indent_level){
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "======== iscsi_settings ========\n");
+       int i=0;
+       (void)i;(void)ptr_struct;
+       (void)file;
+       (void)indent_level;
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "target_as_first_hdd_en : "UH_FMT"\n", ptr_struct->target_as_first_hdd_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_to_target       : "UH_FMT"\n", ptr_struct->boot_to_target);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "ipv6_auto_config_en  : "UH_FMT"\n", ptr_struct->ipv6_auto_config_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "vlan_en              : "UH_FMT"\n", ptr_struct->vlan_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "tcp_timestamps_en    : "UH_FMT"\n", ptr_struct->tcp_timestamps_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "chap_mutual_auth_en  : "UH_FMT"\n", ptr_struct->chap_mutual_auth_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "chap_auth_en         : "UH_FMT"\n", ptr_struct->chap_auth_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "dhcp_iscsi_en        : "UH_FMT"\n", ptr_struct->dhcp_iscsi_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "ipv4_dhcp_en         : "UH_FMT"\n", ptr_struct->ipv4_dhcp_en);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "vlan                 : "UH_FMT"\n", ptr_struct->vlan);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "lun_busy_retry_count : "UH_FMT"\n", ptr_struct->lun_busy_retry_count);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "link_up_delay_time   : "UH_FMT"\n", ptr_struct->link_up_delay_time);
+
+}
+
+int tools_open_iscsi_settings_size(){
+        return 12;
+}
+
+void tools_open_iscsi_settings_dump(const struct tools_open_iscsi_settings *ptr_struct, FILE* file) {
+       tools_open_iscsi_settings_print(ptr_struct, file, 0);
+}
+
 void tools_open_wol_pack(const struct tools_open_wol *ptr_struct, u_int8_t* ptr_buff){
        u_int32_t offset;
        int i=0;
@@ -1267,6 +1608,22 @@ void tools_open_nv_cfg_print(const union tools_open_nv_cfg *ptr_struct, FILE* fi
        fprintf(file, "wol:\n");
        tools_open_wol_print(&(ptr_struct->wol), file, indent_level + 1);
 
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "iscsi_settings:\n");
+       tools_open_iscsi_settings_print(&(ptr_struct->iscsi_settings), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "infiniband_boot_settings:\n");
+       tools_open_infiniband_boot_settings_print(&(ptr_struct->infiniband_boot_settings), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "boot_settings:\n");
+       tools_open_boot_settings_print(&(ptr_struct->boot_settings), file, indent_level + 1);
+
+       adb2c_add_indentation(file, indent_level);
+       fprintf(file, "preboot_flow_ctrl:\n");
+       tools_open_preboot_flow_ctrl_print(&(ptr_struct->preboot_flow_ctrl), file, indent_level + 1);
+
        adb2c_add_indentation(file, indent_level);
        fprintf(file, "sriov:\n");
        tools_open_sriov_print(&(ptr_struct->sriov), file, indent_level + 1);
index 53bfd41ac207fd1b933c4598767e5d2e8ca1ea99..0d5b818a4534e2021326450ccfe92a8d9bb22abb 100644 (file)
@@ -1,38 +1,20 @@
-/*
- * Copyright (C) Jan 2013 Mellanox Technologies Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses.  You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
+
+/*                  - Mellanox Confidential and Proprietary -
  *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
+ *  Copyright (C) 2010-2011, Mellanox Technologies Ltd.  ALL RIGHTS RESERVED.
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ *  Except as specifically permitted herein, no portion of the information,
+ *  including but not limited to object code and source code, may be reproduced,
+ *  modified, distributed, republished or otherwise exploited in any form or by
+ *  any means for any purpose without the prior written permission of Mellanox
+ *  Technologies Ltd. Use of software subject to the terms and conditions
+ *  detailed in the file "LICENSE.txt".
  *
  */
 
 /***
- *** This file was generated at "2014-11-12 13:19:54"
+ *** This file was generated at "2015-01-22 18:19:26"
  *** by:
  ***    > /mswg/release/eat_me/last_release/adabe_plugins/adb2c/adb2pack.py --input adb/tools_open/tools_open.adb --file-prefix tools_open --prefix tools_open_
  ***/
@@ -354,6 +336,128 @@ struct tools_open_sriov {
         u_int8_t sriov_en;
 };
 
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_preboot_flow_ctrl {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Per priority bit mask. For each priority:
+0 \96 ignore incoming PFC frames regarding this priority.
+1 \96 respect incoming PFC frames on this priority.
+ */
+       /* 0.0 - 0.7 */
+        u_int8_t pfcrx;
+       /* Description - Per priority bit mask. For each priority:
+
+0 \96 no PFC pause frames generation for this priority.
+1 \96 generate PFC pause frames for this priority.
+PFC and global pauses are mutually exclusive.
+ */
+       /* 0.8 - 0.15 */
+        u_int8_t pfctx;
+       /* Description - For future DCBX support. */
+       /* 0.29 - 0.29 */
+        u_int8_t pfc_willing;
+       /* Description - 0 \96 ignore received pause frames
+1 \96 respect received pause frames
+ */
+       /* 0.30 - 0.30 */
+        u_int8_t pprx;
+       /* Description - 0 \96 no pause frame generation.
+1 \96 generate pause frames.
+PFC and global pauses are mutually exclusive.
+ */
+       /* 0.31 - 4.31 */
+        u_int8_t pptx;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_boot_settings {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - VLAN ID for network boot. */
+       /* 0.0 - 0.11 */
+        u_int16_t boot_vlan;
+       /* Description - 0 \96 None \96 disable legacy boot.
+1 \96 PXE (DHCP/TFTP boot).
+2 \96 iSCSI
+3 \96 PXE + iSCSI
+4-255 \96 Reserved
+ */
+       /* 0.16 - 0.23 */
+        u_int8_t legacy_boot_protocol;
+       /* Description - Number of retries to attempt in case of boot failure.
+7 indicate indefinite retries.
+ */
+       /* 0.24 - 0.26 */
+        u_int8_t boot_retry_conut;
+       /* Description - 1 \96 Enable VLAN mode for network boot. */
+       /* 0.30 - 0.30 */
+        u_int8_t boot_vlan_en;
+       /* Description - 0 \96 disable boot option ROM: disables installation of the UNDI/16 driver. The option ROM is still required to expose CLP, UEFI and so on.
+1 \96 enable boot option ROM
+ */
+       /* 0.31 - 4.31 */
+        u_int8_t boot_option_rom_en;
+};
+
+/* Description -   */
+/* Size in bytes - 4 */
+struct tools_open_infiniband_boot_settings {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - P_Key to be used by PXE boot. */
+       /* 0.0 - 0.15 */
+        u_int16_t boot_pkey;
+};
+
+/* Description -   */
+/* Size in bytes - 12 */
+struct tools_open_iscsi_settings {
+/*---------------- DWORD[0] (Offset 0x0) ----------------*/
+       /* Description - Enable or disable whether the iSCSI target will appear as the first hard disk drive in the system. Currently not supported. */
+       /* 0.21 - 0.21 */
+        u_int8_t target_as_first_hdd_en;
+       /* Description - Boot to iSCSI target after connection. 
+\95 0 \96 Enabled
+\95 1 \96 Disabled
+\95 2 - One time disabled
+\95 3 - Invalid setting
+ */
+       /* 0.22 - 0.23 */
+        u_int8_t boot_to_target;
+       /* Description - Enable IPv6 auto-configuration through DHCP. Currently not supported. */
+       /* 0.24 - 0.24 */
+        u_int8_t ipv6_auto_config_en;
+       /* Description - Enable VLAN mode for iSCSI. */
+       /* 0.26 - 0.26 */
+        u_int8_t vlan_en;
+       /* Description - Enable the TCP timestamps option for iSCSI TCP connections. */
+       /* 0.27 - 0.27 */
+        u_int8_t tcp_timestamps_en;
+       /* Description - Authenticate the target to the initiator using CHAP. */
+       /* 0.28 - 0.28 */
+        u_int8_t chap_mutual_auth_en;
+       /* Description - Authenticate the initiator to the target using CHAP. */
+       /* 0.29 - 0.29 */
+        u_int8_t chap_auth_en;
+       /* Description - Retrieve iSCSI parameters through DHCP. */
+       /* 0.30 - 0.30 */
+        u_int8_t dhcp_iscsi_en;
+       /* Description - Retrieve IPv4 configuration for iSCSI through DHCP. */
+       /* 0.31 - 4.31 */
+        u_int8_t ipv4_dhcp_en;
+/*---------------- DWORD[1] (Offset 0x4) ----------------*/
+       /* Description - VLAN number. Only valid when vlan_en is 1 */
+       /* 4.0 - 4.11 */
+        u_int16_t vlan;
+/*---------------- DWORD[2] (Offset 0x8) ----------------*/
+       /* Description - Number of connection attempts to make if the iSCSI target is busy. Valid values are between 0 and 60. */
+       /* 8.0 - 8.7 */
+        u_int8_t lun_busy_retry_count;
+       /* Description - Number of seconds to wait after the link comes up before sending packets over the network. */
+       /* 8.8 - 8.15 */
+        u_int8_t link_up_delay_time;
+};
+
 /* Description -   */
 /* Size in bytes - 8 */
 struct tools_open_wol {
@@ -413,6 +517,18 @@ union tools_open_nv_cfg {
        /* 0.0 - 8.31 */
         struct tools_open_wol wol;
        /* Description -  */
+       /* 0.0 - 12.31 */
+        struct tools_open_iscsi_settings iscsi_settings;
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        struct tools_open_infiniband_boot_settings infiniband_boot_settings;
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        struct tools_open_boot_settings boot_settings;
+       /* Description -  */
+       /* 0.0 - 4.31 */
+        struct tools_open_preboot_flow_ctrl preboot_flow_ctrl;
+       /* Description -  */
        /* 0.0 - 4.31 */
         struct tools_open_sriov sriov;
        /* Description -  */
@@ -551,6 +667,34 @@ void tools_open_sriov_print(const struct tools_open_sriov *ptr_struct, FILE* fil
 int tools_open_sriov_size();
 #define TOOLS_OPEN_SRIOV_SIZE    (0x4)
 void tools_open_sriov_dump(const struct tools_open_sriov *ptr_struct, FILE* file);
+/* preboot_flow_ctrl */
+void tools_open_preboot_flow_ctrl_pack(const struct tools_open_preboot_flow_ctrl *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_preboot_flow_ctrl_unpack(struct tools_open_preboot_flow_ctrl *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_preboot_flow_ctrl_print(const struct tools_open_preboot_flow_ctrl *ptr_struct, FILE* file, int indent_level);
+int tools_open_preboot_flow_ctrl_size();
+#define TOOLS_OPEN_PREBOOT_FLOW_CTRL_SIZE    (0x4)
+void tools_open_preboot_flow_ctrl_dump(const struct tools_open_preboot_flow_ctrl *ptr_struct, FILE* file);
+/* boot_settings */
+void tools_open_boot_settings_pack(const struct tools_open_boot_settings *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_boot_settings_unpack(struct tools_open_boot_settings *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_boot_settings_print(const struct tools_open_boot_settings *ptr_struct, FILE* file, int indent_level);
+int tools_open_boot_settings_size();
+#define TOOLS_OPEN_BOOT_SETTINGS_SIZE    (0x4)
+void tools_open_boot_settings_dump(const struct tools_open_boot_settings *ptr_struct, FILE* file);
+/* infiniband_boot_settings */
+void tools_open_infiniband_boot_settings_pack(const struct tools_open_infiniband_boot_settings *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_infiniband_boot_settings_unpack(struct tools_open_infiniband_boot_settings *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_infiniband_boot_settings_print(const struct tools_open_infiniband_boot_settings *ptr_struct, FILE* file, int indent_level);
+int tools_open_infiniband_boot_settings_size();
+#define TOOLS_OPEN_INFINIBAND_BOOT_SETTINGS_SIZE    (0x4)
+void tools_open_infiniband_boot_settings_dump(const struct tools_open_infiniband_boot_settings *ptr_struct, FILE* file);
+/* iscsi_settings */
+void tools_open_iscsi_settings_pack(const struct tools_open_iscsi_settings *ptr_struct, u_int8_t* ptr_buff);
+void tools_open_iscsi_settings_unpack(struct tools_open_iscsi_settings *ptr_struct, const u_int8_t* ptr_buff);
+void tools_open_iscsi_settings_print(const struct tools_open_iscsi_settings *ptr_struct, FILE* file, int indent_level);
+int tools_open_iscsi_settings_size();
+#define TOOLS_OPEN_ISCSI_SETTINGS_SIZE    (0xc)
+void tools_open_iscsi_settings_dump(const struct tools_open_iscsi_settings *ptr_struct, FILE* file);
 /* wol */
 void tools_open_wol_pack(const struct tools_open_wol *ptr_struct, u_int8_t* ptr_buff);
 void tools_open_wol_unpack(struct tools_open_wol *ptr_struct, const u_int8_t* ptr_buff);