From 1060604377e270c332cef66c33d60ad4cb7b7128 Mon Sep 17 00:00:00 2001 From: 3DSGuy <3dsguy.dev@gmail.com> Date: Tue, 6 May 2014 07:23:00 +0800 Subject: [PATCH] makerom v0.8 --- Makefile | 6 +- accessdesc.c | 360 +++++++++++++++++--------------- certs.c | 18 +- cia.c | 152 +++++++------- cia.h | 19 +- crypto.c | 49 ++--- desc_dev_sigdata.h | 106 +++++++--- desc_presets.h | 146 +++++++------ desc_prod_sigdata.h | 94 +++++++-- dpki.h | 10 +- exheader.c | 56 +++-- exheader.h | 21 +- keyset.c | 284 +++++++++---------------- keyset.h | 24 ++- makerom.c | 32 ++- ncch.c | 34 ++- ncch.h | 1 + ncsd.c | 394 +++++++++++++++++++--------------- ncsd.h | 102 +++++---- ppki.h | 2 +- romfs.c | 13 +- romfs.h | 66 +++++- romfs_binary.c | 499 +++++++++++++++++++++++++++++++++++++++++++- romfs_binary.h | 2 +- romfs_import.c | 11 + tik.c | 4 + titleid.c | 24 +-- tmd.c | 23 +- tpki.h | 66 +----- usersettings.c | 277 ++++++++++++------------ usersettings.h | 29 ++- utils.c | 28 ++- utils.h | 9 +- yaml_ctr.c | 196 +++++++++++++---- yaml_ctr.h | 4 +- yamlsettings.c | 35 ++-- 36 files changed, 2019 insertions(+), 1177 deletions(-) diff --git a/Makefile b/Makefile index 381db3f..7af92e7 100644 --- a/Makefile +++ b/Makefile @@ -15,13 +15,13 @@ YAML_OBJS = libyaml/api.o libyaml/dumper.o libyaml/emitter.o libyaml/loader.o li # Compiler Settings LIBS = -static-libgcc -static-libstdc++ CXXFLAGS = -I. -CFLAGS = --std=c99 -Wall -I. -DMAKEROM_VER_MAJOR=$(VER_MAJOR) -DMAKEROM_VER_MINOR=$(VER_MINOR) $(MAKEROM_BUILD_FLAGS) -m64 +CFLAGS = --std=c99 -Wall -I. -DMAKEROM_VER_MAJOR=$(VER_MAJOR) -DMAKEROM_VER_MINOR=$(VER_MINOR) $(MAKEROM_BUILD_FLAGS) CC = gcc # MAKEROM Build Settings MAKEROM_BUILD_FLAGS = #-DDEBUG #-DPUBLIC_BUILD VER_MAJOR = 0 -VER_MINOR = 7 +VER_MINOR = 8 OUTPUT = makerom main: build @@ -29,7 +29,7 @@ main: build rebuild: clean build build: $(OBJS) $(POLAR_OBJS) $(YAML_OBJS) - g++ -o $(OUTPUT) $(LIBS) $(OBJS) $(POLAR_OBJS) $(YAML_OBJS) -m64 + g++ -o $(OUTPUT) $(LIBS) $(OBJS) $(POLAR_OBJS) $(YAML_OBJS) clean: rm -rf $(OUTPUT) $(OBJS) $(POLAR_OBJS) $(YAML_OBJS) *.cci *.cia *.cxi *.cfa diff --git a/accessdesc.c b/accessdesc.c index 98b4f84..c3eba41 100644 --- a/accessdesc.c +++ b/accessdesc.c @@ -29,17 +29,16 @@ void b64_strcpy(char *dst, char *src); int set_AccessDesc(exheader_settings *exhdrset, ncch_settings *ncchset) { - if(ncchset->keys->accessDescSign.presetType == not_preset){ - if(ncchset->rsfSet->CommonHeaderKey.Found) // Keydata exists in RSF - return accessdesc_GetSignFromRsf(exhdrset,ncchset); - else if(!ncchset->keys->rsa.requiresPresignedDesc) // Else if The AccessDesc can be signed with key - return accessdesc_SignWithKey(exhdrset,ncchset); - else{ // No way the access desc signature can be 'obtained' - fprintf(stderr,"[EXHEADER ERROR] Current keyset cannot sign AccessDesc, please appropriatly setup RSF, or specify a preset with -accessdesc\n"); - return CANNOT_SIGN_ACCESSDESC; - } + if(exhdrset->useAccessDescPreset) + return accessdesc_GetSignFromPreset(exhdrset,ncchset); + else if(ncchset->rsfSet->CommonHeaderKey.Found) // Keydata exists in RSF + return accessdesc_GetSignFromRsf(exhdrset,ncchset); + else if(!ncchset->keys->rsa.requiresPresignedDesc) // Else if The AccessDesc can be signed with key + return accessdesc_SignWithKey(exhdrset,ncchset); + else{ // No way the access desc signature can be 'obtained' + fprintf(stderr,"[EXHEADER ERROR] Current keyset cannot sign AccessDesc, please appropriatly setup RSF, or specify a preset with -accessdesc\n"); + return CANNOT_SIGN_ACCESSDESC; } - return accessdesc_GetSignFromPreset(exhdrset,ncchset); } int accessdesc_SignWithKey(exheader_settings *exhdrset, ncch_settings *ncchset) @@ -48,17 +47,20 @@ int accessdesc_SignWithKey(exheader_settings *exhdrset, ncch_settings *ncchset) memcpy(exhdrset->keys->rsa.cxiHdrPvt,exhdrset->keys->rsa.cciCfaPvt,0x100); memcpy(exhdrset->keys->rsa.cxiHdrPub,exhdrset->keys->rsa.cciCfaPub,0x100); memcpy(&exhdrset->exHdr->accessDescriptor.ncchRsaPubKey,exhdrset->keys->rsa.cxiHdrPub,0x100); + /* Copy Data From ExHeader */ memcpy(&exhdrset->exHdr->accessDescriptor.arm11SystemLocalCapabilities,&exhdrset->exHdr->arm11SystemLocalCapabilities,sizeof(exhdr_ARM11SystemLocalCapabilities)); + memcpy(&exhdrset->exHdr->accessDescriptor.arm11KernelCapabilities,&exhdrset->exHdr->arm11KernelCapabilities,sizeof(exhdr_ARM11KernelCapabilities)); + memcpy(&exhdrset->exHdr->accessDescriptor.arm9AccessControlInfo,&exhdrset->exHdr->arm9AccessControlInfo,sizeof(exhdr_ARM9AccessControlInfo)); + + /* Adjust Data */ u8 *flag = &exhdrset->exHdr->accessDescriptor.arm11SystemLocalCapabilities.flag; u8 SystemMode = (*flag>>4)&0xF; u8 AffinityMask = (*flag>>2)&0x3; u8 IdealProcessor = 1<<((*flag>>0)&0x3); *flag = (u8)(SystemMode << 4 | AffinityMask << 2 | IdealProcessor); exhdrset->exHdr->accessDescriptor.arm11SystemLocalCapabilities.priority /= 2; - - memcpy(&exhdrset->exHdr->accessDescriptor.arm11KernelCapabilities,&exhdrset->exHdr->arm11KernelCapabilities,sizeof(exhdr_ARM11KernelCapabilities)); - memcpy(&exhdrset->exHdr->accessDescriptor.arm9AccessControlInfo,&exhdrset->exHdr->arm9AccessControlInfo,sizeof(exhdr_ARM9AccessControlInfo)); + /* Sign AccessDesc */ return SignAccessDesc(exhdrset->exHdr,exhdrset->keys); } @@ -156,12 +158,12 @@ int accessdesc_GetSignFromPreset(exheader_settings *exhdrset, ncch_settings *ncc #endif // Error Checking - if(!accessDesc || !depList){ + if(!desc || !depList){ fprintf(stderr,"[EXHEADER ERROR] AccessDesc preset is unavailable, please configure RSF file\n"); return CANNOT_SIGN_ACCESSDESC; } - if((!cxiPubk || !cxiPvtk || !accessDescSig) && ncchset->keys->rsa.requiresPresignedDesc){ + if((!cxiPubk || !cxiPvtk || !accessDesc || !accessDescSig) && ncchset->keys->rsa.requiresPresignedDesc){ fprintf(stderr,"[EXHEADER ERROR] This AccessDesc preset needs to be signed, the current keyset is incapable of doing so. Please configure RSF file with the appropriate signature data.\n"); return CANNOT_SIGN_ACCESSDESC; } @@ -170,36 +172,22 @@ int accessdesc_GetSignFromPreset(exheader_settings *exhdrset, ncch_settings *ncc // Dependency List memcpy(exhdrset->exHdr->dependencyList,depList,0x180); - // ARM11 Local Capabilities - exhdr_ARM11SystemLocalCapabilities *arm11local = (exhdr_ARM11SystemLocalCapabilities*)(accessDesc); - // Backing Up Non Preset Details + // Backing Up Non Preset Data u8 ProgramID[8]; exhdr_StorageInfo StorageInfoBackup; + exhdr_ARM9AccessControlInfo Arm9Desc; memcpy(ProgramID,exhdrset->exHdr->arm11SystemLocalCapabilities.programId,8); memcpy(&StorageInfoBackup,&exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo,sizeof(exhdr_StorageInfo)); + memcpy(&Arm9Desc,&exhdrset->exHdr->arm9AccessControlInfo,sizeof(exhdr_ARM9AccessControlInfo)); // Setting Preset Data - memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities,arm11local,sizeof(exhdr_ARM11SystemLocalCapabilities)); + memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities,desc,0x200); // Restoring Non Preset Data memcpy(exhdrset->exHdr->arm11SystemLocalCapabilities.programId,ProgramID,8); memcpy(&exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo,&StorageInfoBackup,sizeof(exhdr_StorageInfo)); + memcpy(&exhdrset->exHdr->arm9AccessControlInfo,&Arm9Desc,sizeof(exhdr_ARM9AccessControlInfo)); - // Adjusting flags to prevent errors - u8 *flag = &exhdrset->exHdr->arm11SystemLocalCapabilities.flag; - u8 SystemMode = (*flag>>4)&0xF; - u8 AffinityMask = (*flag>>2)&0x3; - u8 IdealProcessor = ((*flag>>0)&0x3)>>1; - *flag = (u8)(SystemMode << 4 | AffinityMask << 2 | IdealProcessor); - exhdrset->exHdr->arm11SystemLocalCapabilities.priority *= 2; - - // ARM11 Kernel Capabilities - exhdr_ARM11KernelCapabilities *arm11kernel = (exhdr_ARM11KernelCapabilities*)(accessDesc+sizeof(exhdr_ARM11SystemLocalCapabilities)); - memcpy(&exhdrset->exHdr->arm11KernelCapabilities,arm11kernel,(sizeof(exhdr_ARM11KernelCapabilities))); - - // ARM9 Access Control - exhdr_ARM9AccessControlInfo *arm9 = (exhdr_ARM9AccessControlInfo*)(accessDesc+sizeof(exhdr_ARM11SystemLocalCapabilities)+sizeof(exhdr_ARM11KernelCapabilities)); - memcpy(&exhdrset->exHdr->arm9AccessControlInfo,arm9,(sizeof(exhdr_ARM9AccessControlInfo))); // Setting AccessDesc Area // Signing normally if possible @@ -218,85 +206,101 @@ int accessdesc_GetSignFromPreset(exheader_settings *exhdrset, ncch_settings *ncc void accessdesc_GetPresetData(u8 **desc, u8 **accessDesc, u8 **depList, ncch_settings *ncchset) { - if(ncchset->keys->accessDescSign.presetType == app){ + if(ncchset->keys->accessDescSign.presetType == desc_preset_APP){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 1: - *desc = (u8*)app_1_desc_data; - *accessDesc = (u8*)app_1_acex_data; - *depList = (u8*)sdk1_dep_list; + case 0x1B: + case 0x1C: + *desc = (u8*)app_fw1B_desc_data; + *accessDesc = (u8*)app_fw1B_acex_data; + *depList = (u8*)fw1B_dep_list; break; - case 2: - *desc = (u8*)app_2_desc_data; - *accessDesc = (u8*)app_2_acex_data; - *depList = (u8*)sdk2_dep_list; + case 0x1D: + *desc = (u8*)app_fw1D_desc_data; + *accessDesc = (u8*)app_fw1D_acex_data; + *depList = (u8*)fw1D_dep_list; break; - case 3: - *desc = (u8*)app_3_desc_data; - *accessDesc = (u8*)app_3_acex_data; - *depList = (u8*)sdk3_dep_list; + case 0x1E: + *desc = (u8*)app_fw1E_desc_data; + *accessDesc = (u8*)app_fw1E_acex_data; + *depList = (u8*)fw1D_dep_list; break; - case 4: - *desc = (u8*)app_4_desc_data; - *accessDesc = (u8*)app_4_acex_data; - *depList = (u8*)sdk4_dep_list; + case 0x20: + *desc = (u8*)app_fw20_desc_data; + *accessDesc = (u8*)app_fw20_acex_data; + *depList = (u8*)fw20_dep_list; break; - case 5: - *desc = (u8*)app_5_desc_data; - *accessDesc = (u8*)app_5_acex_data; - *depList = (u8*)sdk5_dep_list; + case 0x21: + *desc = (u8*)app_fw21_desc_data; + *accessDesc = (u8*)app_fw21_acex_data; + *depList = (u8*)fw21_dep_list; break; - case 7: - *desc = (u8*)app_7_desc_data; - *accessDesc = (u8*)app_7_acex_data; - *depList = (u8*)sdk7_dep_list; + case 0x23: + *desc = (u8*)app_fw23_desc_data; + *accessDesc = (u8*)app_fw23_acex_data; + *depList = (u8*)fw23_dep_list; + break; + case 0x27: + *desc = (u8*)app_fw27_desc_data; + *accessDesc = (u8*)app_fw27_acex_data; + *depList = (u8*)fw27_dep_list; break; } } - else if(ncchset->keys->accessDescSign.presetType == ec_app){ + else if(ncchset->keys->accessDescSign.presetType == desc_preset_EC_APP){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 4: - *desc = (u8*)ecapp_4_desc_data; - *accessDesc = (u8*)ecapp_4_acex_data; - *depList = (u8*)sdk4_dep_list; + case 0x20: + *desc = (u8*)ecapp_fw20_desc_data; + *accessDesc = (u8*)ecapp_fw20_acex_data; + *depList = (u8*)fw20_dep_list; break; - case 5: - *desc = (u8*)ecapp_5_desc_data; - *accessDesc = (u8*)ecapp_5_acex_data; - *depList = (u8*)sdk5_dep_list; + case 0x23: + *desc = (u8*)ecapp_fw23_desc_data; + *accessDesc = (u8*)ecapp_fw23_acex_data; + *depList = (u8*)fw23_dep_list; break; } } - else if(ncchset->keys->accessDescSign.presetType == dlp){ + else if(ncchset->keys->accessDescSign.presetType == desc_preset_DLP){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 1: - *desc = (u8*)dlp_1_desc_data; - *accessDesc = (u8*)dlp_1_acex_data; - *depList = (u8*)sdk1_dep_list; + case 0x1B: + case 0x1C: + *desc = (u8*)dlp_fw1B_desc_data; + *accessDesc = (u8*)dlp_fw1B_acex_data; + *depList = (u8*)fw1B_dep_list; break; - case 2: - *desc = (u8*)dlp_2_desc_data; - *accessDesc = (u8*)dlp_2_acex_data; - *depList = (u8*)sdk2_dep_list; + case 0x1D: + *desc = (u8*)dlp_fw1D_desc_data; + *accessDesc = (u8*)dlp_fw1D_acex_data; + *depList = (u8*)fw1D_dep_list; break; - case 4: - *desc = (u8*)dlp_4_desc_data; - *accessDesc = (u8*)dlp_4_acex_data; - *depList = (u8*)sdk4_dep_list; + case 0x21: + *desc = (u8*)dlp_fw21_desc_data; + *accessDesc = (u8*)dlp_fw21_acex_data; + *depList = (u8*)fw21_dep_list; break; } } - else if(ncchset->keys->accessDescSign.presetType == demo){ + else if(ncchset->keys->accessDescSign.presetType == desc_preset_DEMO){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 2: - *desc = (u8*)demo_2_desc_data; - *accessDesc = (u8*)demo_2_acex_data; - *depList = (u8*)sdk2_dep_list; + case 0x1E: + *desc = (u8*)demo_fw1E_desc_data; + *accessDesc = (u8*)demo_fw1E_acex_data; + *depList = (u8*)fw1D_dep_list; break; - case 4: - *desc = (u8*)demo_4_desc_data; - *accessDesc = (u8*)demo_4_acex_data; - *depList = (u8*)sdk4_dep_list; + case 0x21: + *desc = (u8*)demo_fw21_desc_data; + *accessDesc = (u8*)demo_fw21_acex_data; + *depList = (u8*)fw21_dep_list; + break; + } + } + else if(ncchset->keys->accessDescSign.presetType == desc_preset_FIRM){ + switch(ncchset->keys->accessDescSign.targetFirmware){ + default: + *desc = (u8*)firm_fw26_desc_data; + *accessDesc = (u8*)firm_fw26_acex_data; + *depList = (u8*)firm_fwXX_dep_list; break; } } @@ -305,130 +309,150 @@ void accessdesc_GetPresetData(u8 **desc, u8 **accessDesc, u8 **depList, ncch_set #ifndef PUBLIC_BUILD void accessdesc_GetPresetSigData(u8 **accessDescSig, u8 **cxiPubk, u8 **cxiPvtk, ncch_settings *ncchset) { - if(ncchset->keys->accessDescSign.presetType == app){ + if(ncchset->keys->accessDescSign.presetType == desc_preset_APP){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 1: + case 0x1B: + case 0x1C: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)app_1_dev_acexsig; - *cxiPubk = (u8*)app_1_dev_hdrpub; - *cxiPvtk = (u8*)app_1_dev_hdrpvt; + *accessDescSig = (u8*)app_fw1B_dev_acexsig; + *cxiPubk = (u8*)app_fw1B_dev_hdrpub; + *cxiPvtk = (u8*)app_fw1B_dev_hdrpvt; } break; - case 2: + case 0x1D: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)app_2_dev_acexsig; - *cxiPubk = (u8*)app_2_dev_hdrpub; - *cxiPvtk = (u8*)app_2_dev_hdrpvt; + *accessDescSig = (u8*)app_fw1D_dev_acexsig; + *cxiPubk = (u8*)app_fw1D_dev_hdrpub; + *cxiPvtk = (u8*)app_fw1D_dev_hdrpvt; } if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)app_2_prod_acexsig; - *cxiPubk = (u8*)app_2_prod_hdrpub; + *accessDescSig = (u8*)app_fw1D_prod_acexsig; + *cxiPubk = (u8*)app_fw1D_prod_hdrpub; *cxiPvtk = NULL; } break; - case 3: - if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)app_3_dev_acexsig; - *cxiPubk = (u8*)app_3_dev_hdrpub; - *cxiPvtk = NULL; - } - else if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)app_3_prod_acexsig; - *cxiPubk = (u8*)app_3_prod_hdrpub; - *cxiPvtk = NULL; - } - break; - case 4: - if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)app_4_dev_acexsig; - *cxiPubk = (u8*)app_4_dev_hdrpub; - *cxiPvtk = (u8*)app_4_dev_hdrpvt; - } - else if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)app_4_prod_acexsig; - *cxiPubk = (u8*)app_4_prod_hdrpub; - *cxiPvtk = NULL; - } - break; - case 5: - if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)app_5_dev_acexsig; - *cxiPubk = (u8*)app_5_dev_hdrpub; - *cxiPvtk = NULL; - } - else if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)app_5_prod_acexsig; - *cxiPubk = (u8*)app_5_prod_hdrpub; - *cxiPvtk = NULL; - } - break; - case 7: + case 0x1E: if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)app_7_prod_acexsig; - *cxiPubk = (u8*)app_7_prod_hdrpub; + *accessDescSig = (u8*)app_fw1E_prod_acexsig; + *cxiPubk = (u8*)app_fw1E_prod_hdrpub; + *cxiPvtk = NULL; + } + break; + case 0x20: + if(ncchset->keys->keyset == pki_DEVELOPMENT){ + *accessDescSig = (u8*)app_fw20_dev_acexsig; + *cxiPubk = (u8*)app_fw20_dev_hdrpub; + *cxiPvtk = NULL; + } + else if(ncchset->keys->keyset == pki_PRODUCTION){ + *accessDescSig = (u8*)app_fw20_prod_acexsig; + *cxiPubk = (u8*)app_fw20_prod_hdrpub; + *cxiPvtk = NULL; + } + break; + case 0x21: + if(ncchset->keys->keyset == pki_DEVELOPMENT){ + *accessDescSig = (u8*)app_fw21_dev_acexsig; + *cxiPubk = (u8*)app_fw21_dev_hdrpub; + *cxiPvtk = (u8*)app_fw21_dev_hdrpvt; + } + else if(ncchset->keys->keyset == pki_PRODUCTION){ + *accessDescSig = (u8*)app_fw21_prod_acexsig; + *cxiPubk = (u8*)app_fw21_prod_hdrpub; + *cxiPvtk = NULL; + } + break; + case 0x23: + if(ncchset->keys->keyset == pki_DEVELOPMENT){ + *accessDescSig = (u8*)app_fw23_dev_acexsig; + *cxiPubk = (u8*)app_fw23_dev_hdrpub; + *cxiPvtk = NULL; + } + else if(ncchset->keys->keyset == pki_PRODUCTION){ + *accessDescSig = (u8*)app_fw23_prod_acexsig; + *cxiPubk = (u8*)app_fw23_prod_hdrpub; + *cxiPvtk = NULL; + } + break; + case 0x27: + if(ncchset->keys->keyset == pki_PRODUCTION){ + *accessDescSig = (u8*)app_fw27_prod_acexsig; + *cxiPubk = (u8*)app_fw27_prod_hdrpub; *cxiPvtk = NULL; } break; } } - else if(ncchset->keys->accessDescSign.presetType == ec_app){ + else if(ncchset->keys->accessDescSign.presetType == desc_preset_EC_APP){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 4: + case 0x20: if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)ecapp_4_prod_acexsig; - *cxiPubk = (u8*)ecapp_4_prod_hdrpub; + *accessDescSig = (u8*)ecapp_fw20_prod_acexsig; + *cxiPubk = (u8*)ecapp_fw20_prod_hdrpub; *cxiPvtk = NULL; } break; - case 5: + case 0x23: if(ncchset->keys->keyset == pki_PRODUCTION){ - *accessDescSig = (u8*)ecapp_5_prod_acexsig; - *cxiPubk = (u8*)ecapp_5_prod_hdrpub; + *accessDescSig = (u8*)ecapp_fw23_prod_acexsig; + *cxiPubk = (u8*)ecapp_fw23_prod_hdrpub; *cxiPvtk = NULL; } break; } } - else if(ncchset->keys->accessDescSign.presetType == dlp){ + else if(ncchset->keys->accessDescSign.presetType == desc_preset_DLP){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 1: + case 0x1B: + case 0x1C: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)dlp_1_dev_acexsig; - *cxiPubk = (u8*)dlp_1_dev_hdrpub; - *cxiPvtk = (u8*)dlp_1_dev_hdrpvt; + *accessDescSig = (u8*)dlp_fw1B_dev_acexsig; + *cxiPubk = (u8*)dlp_fw1B_dev_hdrpub; + *cxiPvtk = (u8*)dlp_fw1B_dev_hdrpvt; } break; - case 2: + case 0x1D: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)dlp_2_dev_acexsig; - *cxiPubk = (u8*)dlp_2_dev_hdrpub; - *cxiPvtk = (u8*)dlp_2_dev_hdrpvt; + *accessDescSig = (u8*)dlp_fw1D_dev_acexsig; + *cxiPubk = (u8*)dlp_fw1D_dev_hdrpub; + *cxiPvtk = (u8*)dlp_fw1D_dev_hdrpvt; } break; - case 4: + case 0x21: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)dlp_4_dev_acexsig; - *cxiPubk = (u8*)dlp_4_dev_hdrpub; - *cxiPvtk = (u8*)dlp_4_dev_hdrpvt; + *accessDescSig = (u8*)dlp_fw21_dev_acexsig; + *cxiPubk = (u8*)dlp_fw21_dev_hdrpub; + *cxiPvtk = (u8*)dlp_fw21_dev_hdrpvt; } break; } } - else if(ncchset->keys->accessDescSign.presetType == demo){ + else if(ncchset->keys->accessDescSign.presetType == desc_preset_DEMO){ switch(ncchset->keys->accessDescSign.targetFirmware){ - case 2: + case 0x1E: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)demo_2_dev_acexsig; - *cxiPubk = (u8*)demo_2_dev_hdrpub; + *accessDescSig = (u8*)demo_fw1E_dev_acexsig; + *cxiPubk = (u8*)demo_fw1E_dev_hdrpub; *cxiPvtk = NULL; } break; - case 4: + case 0x21: if(ncchset->keys->keyset == pki_DEVELOPMENT){ - *accessDescSig = (u8*)demo_4_dev_acexsig; - *cxiPubk = (u8*)demo_4_dev_hdrpub; - *cxiPvtk = (u8*)demo_4_dev_hdrpvt; + *accessDescSig = (u8*)demo_fw21_dev_acexsig; + *cxiPubk = (u8*)demo_fw21_dev_hdrpub; + *cxiPvtk = (u8*)demo_fw21_dev_hdrpvt; + } + break; + } + } + else if(ncchset->keys->accessDescSign.presetType == desc_preset_FIRM){ + switch(ncchset->keys->accessDescSign.targetFirmware){ + case 0x26: + if(ncchset->keys->keyset == pki_DEVELOPMENT){ + *accessDescSig = (u8*)firm_fw26_dev_acexsig; + *cxiPubk = (u8*)firm_fw26_dev_hdrpub; + *cxiPvtk = NULL; } break; } diff --git a/certs.c b/certs.c index 5cec50a..809959a 100644 --- a/certs.c +++ b/certs.c @@ -87,15 +87,21 @@ u8 *GetCertName(u8 *cert) int GenCertChildIssuer(u8 *dest, u8 *cert) { - u8 *Issuer = GetCertIssuer(cert); - u8 *Name = GetCertName(cert); + u8 *issuer = GetCertIssuer(cert); + u8 *name = GetCertName(cert); - u32 out_size = strlen((char*)Issuer) + strlen((char*)Name) + 1; + /* + u32 out_size = strlen((char*)issuer) + strlen((char*)name) + 1; if(out_size > 0x40) return MEM_ERROR; + */ - memcpy(dest,Issuer,strlen((char*)Issuer)); - dest[strlen((char*)Issuer)] = '-'; - memcpy((dest+strlen((char*)Issuer)+1),Name,strlen((char*)Name)); + snprintf((char*)dest,0x40,"%s-%s",issuer,name); + + /* + strcat((char*)dest,(char*)issuer); + strcat((char*)dest,"-"); + strcat((char*)dest,(char*)name); + */ return 0; } diff --git a/cia.c b/cia.c index e8bb539..30df01d 100644 --- a/cia.c +++ b/cia.c @@ -100,11 +100,11 @@ void init_CIASettings(cia_settings *set) void free_CIASettings(cia_settings *set) { - if(set->content.contentFilePtrs){ - for(u32 i = 1; i < set->content.contentCount; i++){ - fclose(set->content.contentFilePtrs[i]); + if(set->content.filePtrs){ + for(u32 i = 1; i < set->content.count; i++){ + fclose(set->content.filePtrs[i]); } - free(set->content.contentFilePtrs); + free(set->content.filePtrs); } free(set->ciaSections.certChain.buffer); free(set->ciaSections.tik.buffer); @@ -166,7 +166,7 @@ int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset) ciaset->ciaSections.content.size = 0; u32_to_u8(ciaset->tmd.titleType,TYPE_CTR,BE); - ciaset->content.encryptCia = usrset->cia.encryptCia; + ciaset->content.encryptCia = usrset->common.rsfSet.Option.EnableCrypt; ciaset->content.IsDlc = usrset->cia.DlcContent; if(ciaset->keys->aes.commonKey[ciaset->keys->aes.currentCommonKey] == NULL && ciaset->content.encryptCia){ fprintf(stderr,"[CIA WARNING] Common Key could not be loaded, CIA will not be encrypted\n"); @@ -182,17 +182,13 @@ int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset) ciaset->content.overrideSaveDataSize = usrset->cia.overideSaveDataSize; - // Random Number generator - u8 hash[0x20]; - if(usrset->common.rsfPath) - ctr_sha(usrset->common.rsfPath,strlen(usrset->common.rsfPath),hash,CTR_SHA_256); - else - ctr_sha(ciaset->ciaSections.content.buffer,(rand() % 0x200),hash,CTR_SHA_256); - // Ticket Data - memcpy(ciaset->tik.ticketId,(hash+0x8),8); + u64_to_u8(ciaset->tik.ticketId,u64GetRand(),BE); if(usrset->cia.randomTitleKey) - memcpy(ciaset->common.titleKey,(hash+0x10),16); + { + u64_to_u8(ciaset->common.titleKey,u64GetRand(),BE); + u64_to_u8((ciaset->common.titleKey+8),u64GetRand(),BE); + } else memset(ciaset->common.titleKey,0,16); @@ -202,11 +198,11 @@ int GetSettingsFromUsrset(cia_settings *ciaset, user_settings *usrset) if(result) return result; // Tmd Stuff - if(usrset->cia.contentId[0] > 0xffffffff){ - ciaset->content.contentId[0] = u8_to_u32(hash,BE); - } + if(usrset->cia.contentId[0] > 0xffffffff) + ciaset->content.id[0] = u32GetRand(); else - ciaset->content.contentId[0] = usrset->cia.contentId[0]; + ciaset->content.id[0] = usrset->cia.contentId[0]; + ciaset->tmd.formatVersion = 1; result = GenCertChildIssuer(ciaset->tmd.issuer,ciaset->keys->certs.cpCert); return 0; @@ -232,9 +228,9 @@ int GetSettingsFromNcch0(cia_settings *ciaset, u32 ncch0_offset) ciaset->content.IsCfa = true; } - ciaset->content.contentOffset[0] = 0; - ciaset->content.contentSize[0] = GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr); - ciaset->content.totalContentSize = ciaset->content.contentSize[0]; + ciaset->content.offset[0] = 0; + ciaset->content.size[0] = align(GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr),0x10); + ciaset->content.totalSize = ciaset->content.size[0]; /* Get Ncch0 Import Context */ ncch_struct *ncch_ctx = malloc(sizeof(ncch_struct)); @@ -297,7 +293,7 @@ int GetCIADataFromNcch(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8 else u32_to_u8(ciaset->tmd.savedataSize,(u32)GetSaveDataSize_frm_exhdr(exhdr),LE); if(ciaset->content.overrideSaveDataSize){ u64 size = 0; - GetSaveDataSizeFromString(&size,ciaset->content.overrideSaveDataSize); + GetSaveDataSizeFromString(&size,ciaset->content.overrideSaveDataSize,"CIA"); u32_to_u8(ciaset->tmd.savedataSize,(u32)size,LE); } @@ -377,38 +373,44 @@ int GetMetaRegion(cia_settings *ciaset, u8 *ncch, ncch_struct *ncch_ctx, u8 *key int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset) { - ciaset->content.contentFilePtrs = malloc(sizeof(FILE*)*CIA_MAX_CONTENT); - if(!ciaset->content.contentFilePtrs){ + ciaset->content.filePtrs = malloc(sizeof(FILE*)*CIA_MAX_CONTENT); + if(!ciaset->content.filePtrs){ fprintf(stderr,"[CIA ERROR] Not enough memory\n"); return MEM_ERROR; } - memset(ciaset->content.contentFilePtrs,0,sizeof(FILE*)*CIA_MAX_CONTENT); + memset(ciaset->content.filePtrs,0,sizeof(FILE*)*CIA_MAX_CONTENT); int j = 1; ncch_hdr *hdr = malloc(sizeof(ncch_hdr)); for(int i = 1; i < CIA_MAX_CONTENT; i++){ if(usrset->common.contentPath[i]){ - ciaset->content.contentFilePtrs[j] = fopen(usrset->common.contentPath[i],"rb"); - if(!ciaset->content.contentFilePtrs[j]){ + if(!AssertFile(usrset->common.contentPath[i])){ fprintf(stderr,"[CIA ERROR] Failed to open \"%s\"\n",usrset->common.contentPath[i]); return FAILED_TO_OPEN_FILE; } - if(usrset->cia.contentId[i] == 0x100000000){ - u8 hash[0x20]; - ctr_sha(usrset->common.contentPath[i],strlen(usrset->common.contentPath[i]),hash,CTR_SHA_256); - ciaset->content.contentId[j] = u8_to_u32(hash,BE); - } + ciaset->content.fileSize[j] = GetFileSize_u64(usrset->common.contentPath[i]); + ciaset->content.filePtrs[j] = fopen(usrset->common.contentPath[i],"rb"); + + if(usrset->cia.contentId[i] == 0x100000000) + ciaset->content.id[j] = u32GetRand(); else - ciaset->content.contentId[j] = (u32)usrset->cia.contentId[i]; - ciaset->content.contentIndex[j] = (u16)i; + ciaset->content.id[j] = (u32)usrset->cia.contentId[i]; + + ciaset->content.index[j] = (u16)i; // Get Data from ncch HDR - GetNCCH_CommonHDR(hdr,ciaset->content.contentFilePtrs[j],NULL); + GetNCCH_CommonHDR(hdr,ciaset->content.filePtrs[j],NULL); // Get Size - ciaset->content.contentSize[j] = GetNCCH_MediaSize(hdr)*GetNCCH_MediaUnitSize(hdr); - ciaset->content.contentOffset[j] = ciaset->content.totalContentSize,0x40; + u64 calcSize = (u64)GetNCCH_MediaSize(hdr) * (u64)GetNCCH_MediaUnitSize(hdr); + if(calcSize != ciaset->content.fileSize[j]){ + fprintf(stderr,"[CIA ERROR] \"%s\" is corrupt\n",usrset->common.contentPath[i]); + return FAILED_TO_OPEN_FILE; + } + + ciaset->content.size[j] = align(calcSize,0x10); + ciaset->content.offset[j] = ciaset->content.totalSize; - ciaset->content.totalContentSize += ciaset->content.contentSize[j]; + ciaset->content.totalSize += ciaset->content.size[j]; // Finish get next content @@ -416,13 +418,13 @@ int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset) } } free(hdr); - ciaset->content.contentCount = j; + ciaset->content.count = j; // Check Conflicting IDs - for(int i = 0; i < ciaset->content.contentCount; i++){ - for(j = i+1; j < ciaset->content.contentCount; j++){ - if(ciaset->content.contentId[j] == ciaset->content.contentId[i]){ - fprintf(stderr,"[CIA ERROR] CIA Content %d and %d, have conflicting IDs\n",ciaset->content.contentIndex[j],ciaset->content.contentIndex[i]); + for(int i = 0; i < ciaset->content.count; i++){ + for(j = i+1; j < ciaset->content.count; j++){ + if(ciaset->content.id[j] == ciaset->content.id[i]){ + fprintf(stderr,"[CIA ERROR] CIA Content %d and %d, have conflicting IDs\n",ciaset->content.index[j],ciaset->content.index[i]); return CIA_CONFILCTING_CONTENT_IDS; } } @@ -432,30 +434,30 @@ int GetContentFilePtrs(cia_settings *ciaset, user_settings *usrset) int ImportNcchContent(cia_settings *ciaset) { - ciaset->ciaSections.content.buffer = realloc(ciaset->ciaSections.content.buffer,ciaset->content.totalContentSize); + ciaset->ciaSections.content.buffer = realloc(ciaset->ciaSections.content.buffer,ciaset->content.totalSize); if(!ciaset->ciaSections.content.buffer){ fprintf(stderr,"[CIA ERROR] Not enough memory\n"); return MEM_ERROR; } ncch_hdr *ncch0hdr = (ncch_hdr*)(ciaset->ciaSections.content.buffer+0x100); - for(int i = 1; i < ciaset->content.contentCount; i++){ + for(int i = 1; i < ciaset->content.count; i++){ // Import - u8 *ncchpos = (u8*)(ciaset->ciaSections.content.buffer+ciaset->content.contentOffset[i]); + u8 *ncchpos = (u8*)(ciaset->ciaSections.content.buffer+ciaset->content.offset[i]); - ReadFile_64(ncchpos, ciaset->content.contentSize[i], 0, ciaset->content.contentFilePtrs[i]); + ReadFile_64(ncchpos, ciaset->content.fileSize[i], 0, ciaset->content.filePtrs[i]); if(ModifyNcchIds(ncchpos, NULL, ncch0hdr->programId, ciaset->keys) != 0) return -1; // Set Additional Flags if(ciaset->content.IsDlc) - ciaset->content.contentFlags[i] |= content_Optional; + ciaset->content.flags[i] |= content_Optional; //if(unknown condition) - // ciaset->content.contentFlags[i] |= content_Shared; + // ciaset->content.flags[i] |= content_Shared; } - ciaset->ciaSections.content.size = ciaset->content.totalContentSize; + ciaset->ciaSections.content.size = ciaset->content.totalSize; return 0; } @@ -490,10 +492,10 @@ int GetSettingsFromSrl(cia_settings *ciaset) memcpy(ciaset->tmd.privSavedataSize,hdr->privSaveDataSize,4); // Setting CIA Content Settings - ciaset->content.contentCount = 1; - ciaset->content.contentOffset[0] = 0; - ciaset->content.contentSize[0] = ciaset->ciaSections.content.size; - ciaset->content.totalContentSize = ciaset->ciaSections.content.size; + ciaset->content.count = 1; + ciaset->content.offset[0] = 0; + ciaset->content.size[0] = ciaset->ciaSections.content.size; + ciaset->content.totalSize = ciaset->ciaSections.content.size; return 0; } @@ -532,31 +534,31 @@ int GetSettingsFromCci(cia_settings *ciaset) hdr = (ncch_hdr*)(ciaset->ciaSections.content.buffer + cciContentOffsets[j] + 0x100); // Get Size - ciaset->content.contentSize[j] = GetPartitionSize(ciaset->ciaSections.content.buffer,i); - ciaset->content.contentOffset[j] = ciaset->content.totalContentSize; + ciaset->content.size[j] = GetPartitionSize(ciaset->ciaSections.content.buffer,i); + ciaset->content.offset[j] = ciaset->content.totalSize; - ciaset->content.totalContentSize += ciaset->content.contentSize[j]; + ciaset->content.totalSize += ciaset->content.size[j]; // Get ID u8 hash[0x20]; ctr_sha((u8*)hdr,0x200,hash,CTR_SHA_256); - ciaset->content.contentId[j] = u8_to_u32(hash,BE); + ciaset->content.id[j] = u8_to_u32(hash,BE); // Get Index - ciaset->content.contentIndex[j] = i; + ciaset->content.index[j] = i; // Increment Content Count j++; } } - ciaset->content.contentCount = j; + ciaset->content.count = j; - for(int i = 0; i < ciaset->content.contentCount; i++){ // Re-organising content positions in memory + for(int i = 0; i < ciaset->content.count; i++){ // Re-organising content positions in memory u8 *cci_pos = (ciaset->ciaSections.content.buffer + cciContentOffsets[i]); - u8 *cia_pos = (ciaset->ciaSections.content.buffer + ciaset->content.contentOffset[i]); - memcpy(cia_pos,cci_pos,ciaset->content.contentSize[i]); + u8 *cia_pos = (ciaset->ciaSections.content.buffer + ciaset->content.offset[i]); + memcpy(cia_pos,cci_pos,ciaset->content.size[i]); } - ciaset->ciaSections.content.size = ciaset->content.totalContentSize; + ciaset->ciaSections.content.size = ciaset->content.totalSize; return 0; } @@ -567,16 +569,16 @@ u16 SetupVersion(u16 Major, u16 Minor, u16 Micro) void GetContentHashes(cia_settings *ciaset) { - for(int i = 0; i < ciaset->content.contentCount; i++) - ctr_sha(ciaset->ciaSections.content.buffer+ciaset->content.contentOffset[i],ciaset->content.contentSize[i],ciaset->content.contentHash[i],CTR_SHA_256); + for(int i = 0; i < ciaset->content.count; i++) + ctr_sha(ciaset->ciaSections.content.buffer+ciaset->content.offset[i],ciaset->content.size[i],ciaset->content.hash[i],CTR_SHA_256); } void EncryptContent(cia_settings *ciaset) { - for(int i = 0; i < ciaset->content.contentCount; i++){ - ciaset->content.contentFlags[i] |= content_Encrypted; - u8 *content = ciaset->ciaSections.content.buffer+ciaset->content.contentOffset[i]; - CryptContent(content, content, ciaset->content.contentSize[i], ciaset->common.titleKey, i, ENC); + for(int i = 0; i < ciaset->content.count; i++){ + ciaset->content.flags[i] |= content_Encrypted; + u8 *content = ciaset->ciaSections.content.buffer+ciaset->content.offset[i]; + CryptContent(content, content, ciaset->content.size[i], ciaset->common.titleKey, i, ENC); } } @@ -617,23 +619,23 @@ int BuildCIA_Header(cia_settings *ciaset) u32_to_u8(hdr->tikSize,ciaset->ciaSections.tik.size,LE); u32_to_u8(hdr->tmdSize,ciaset->ciaSections.tmd.size,LE); u32_to_u8(hdr->metaSize,ciaset->ciaSections.meta.size,LE); - u64_to_u8(hdr->contentSize,ciaset->content.totalContentSize,LE); + u64_to_u8(hdr->contentSize,ciaset->content.totalSize,LE); // Recording Offsets ciaset->ciaSections.certChainOffset = align(sizeof(cia_hdr),0x40); ciaset->ciaSections.tikOffset = align(ciaset->ciaSections.certChainOffset+ciaset->ciaSections.certChain.size,0x40); ciaset->ciaSections.tmdOffset = align(ciaset->ciaSections.tikOffset+ciaset->ciaSections.tik.size,0x40); ciaset->ciaSections.contentOffset = align(ciaset->ciaSections.tmdOffset+ciaset->ciaSections.tmd.size,0x40); - ciaset->ciaSections.metaOffset = align(ciaset->ciaSections.contentOffset+ciaset->content.totalContentSize,0x40); + ciaset->ciaSections.metaOffset = align(ciaset->ciaSections.contentOffset+ciaset->content.totalSize,0x40); - for(int i = 0; i < ciaset->content.contentCount; i++){ + for(int i = 0; i < ciaset->content.count; i++){ // This works by treating the 0x2000 byte index array as an array of 2048 u32 values // Used for determining which u32 chunk to write the value to - u16 section = ciaset->content.contentIndex[i]/32; + u16 section = ciaset->content.index[i]/32; // Calculating the value added to the u32 - u32 value = 1 << (0x1F-ciaset->content.contentIndex[i]); + u32 value = 1 << (0x1F-ciaset->content.index[i]); // Retrieving current u32 block u32 cur_content_index_section = u8_to_u32(hdr->contentIndex+(sizeof(u32)*section),BE); diff --git a/cia.h b/cia.h index aac718b..8328705 100644 --- a/cia.h +++ b/cia.h @@ -87,19 +87,20 @@ typedef struct bool keyNotFound; - FILE **contentFilePtrs; + FILE **filePtrs; + u64 fileSize[CIA_MAX_CONTENT]; /* Misc Records */ - u16 contentCount; - u64 contentOffset[CIA_MAX_CONTENT]; - u64 totalContentSize; + u16 count; + u64 offset[CIA_MAX_CONTENT]; + u64 totalSize; /* Content Chunk Records */ - u64 contentSize[CIA_MAX_CONTENT]; - u16 contentIndex[CIA_MAX_CONTENT]; - u16 contentFlags[CIA_MAX_CONTENT]; - u32 contentId[CIA_MAX_CONTENT]; - u8 contentHash[CIA_MAX_CONTENT][0x20]; + u64 size[CIA_MAX_CONTENT]; + u16 index[CIA_MAX_CONTENT]; + u16 flags[CIA_MAX_CONTENT]; + u32 id[CIA_MAX_CONTENT]; + u8 hash[CIA_MAX_CONTENT][0x20]; } content; struct{ diff --git a/crypto.c b/crypto.c index 8fcd352..c8f6e87 100644 --- a/crypto.c +++ b/crypto.c @@ -1,7 +1,6 @@ #include "lib.h" #include "crypto.h" -// API for polarssl adapted/copied from CTRTOOL by neimod void ctr_sha(void *data, u64 size, u8 *hash, int mode) { switch(mode){ @@ -11,40 +10,20 @@ void ctr_sha(void *data, u64 size, u8 *hash, int mode) } u8* AesKeyScrambler(u8 *Key, u8 *KeyX, u8 *KeyY) -{ - u32 *KeyX_u32 = (u32*) KeyX; - u32 *KeyY_u32 = (u32*) KeyY; - u32 *Key_u32 = (u32*) Key; - - for(int i = 0,j; i < 4; i++) - { - switch(i) - { - ///* Type 1 - case 0 : j = 2; break; - case 1 : j = 3; break; - case 2 : j = 0; break; - case 3 : j = 1; break; - //*/ - /* Type 2 - case 0 : j = 3; break; - case 1 : j = 2; break; - case 2 : j = 1; break; - case 3 : j = 0; break; - //*/ - /* Type 3 - case 0 : j = 1; break; - case 1 : j = 0; break; - case 2 : j = 3; break; - case 3 : j = 2; break; - //*/ - } - - Key_u32[j] = KeyX_u32[i] ^ KeyY_u32[i]; - } - - // Done Stuff - return (u8*)Key_u32; +{ + // Process KeyX/KeyY to get raw normal key + for(int i = 0; i < 16; i++) + Key[i] = KeyX[i] ^ ((KeyY[i] >> 2) | ((KeyY[i < 15 ? i+1 : 0] & 3) << 6)); + +#ifndef PUBLIC_BUILD + const u8 SCRAMBLE_SECRET[16] = {0x51, 0xD7, 0x5D, 0xBE, 0xFD, 0x07, 0x57, 0x6A, 0x1C, 0xFC, 0x2A, 0xF0, 0x94, 0x4B, 0xD5, 0x6C}; + + // Apply Secret to get final normal key + for(int i = 0; i < 16; i++) + Key[i] = Key[i] ^ SCRAMBLE_SECRET[i]; +#endif + + return Key; } void ctr_add_counter(ctr_aes_context* ctx, u32 carry) diff --git a/desc_dev_sigdata.h b/desc_dev_sigdata.h index 0e948a3..20822be 100644 --- a/desc_dev_sigdata.h +++ b/desc_dev_sigdata.h @@ -2,150 +2,202 @@ /* CTR_SDK 1 (1.2.0) */ // APP -static const unsigned char app_1_dev_hdrpub[0x100] = +static const unsigned char app_fw1B_dev_hdrpub[0x100] = { 0x9B, 0x82, 0x9C, 0x19, 0x01, 0x73, 0x23, 0x50, 0x89, 0xE3, 0x0B, 0xC8, 0x8F, 0xFB, 0xA5, 0xE4, 0xFD, 0x44, 0xAE, 0x49, 0x32, 0xC7, 0xEF, 0x0A, 0x7E, 0x93, 0x95, 0xBA, 0xA2, 0x48, 0x4D, 0x8E, 0x18, 0x82, 0x34, 0x66, 0xFE, 0xDA, 0x7A, 0x45, 0x4A, 0x7D, 0xD5, 0x3C, 0xC6, 0x5C, 0xE0, 0x71, 0xFC, 0xD0, 0x82, 0xCC, 0xB2, 0xCF, 0x77, 0x0E, 0xAD, 0xCD, 0xD2, 0xAC, 0x1D, 0x66, 0x1B, 0xC1, 0xEA, 0xAC, 0x39, 0x96, 0x2C, 0x52, 0xDE, 0xFF, 0xF2, 0x74, 0xF6, 0xC5, 0xCA, 0x99, 0x31, 0x95, 0x13, 0xBB, 0x3F, 0xED, 0x30, 0xAE, 0x0A, 0xD3, 0x86, 0x0D, 0x0B, 0xF5, 0x56, 0x7D, 0x33, 0xBA, 0xA1, 0x39, 0xA2, 0xF5, 0xB6, 0x47, 0x78, 0x1F, 0xFD, 0x04, 0xA3, 0x49, 0xA9, 0x10, 0xD3, 0x41, 0x2E, 0x92, 0x7D, 0xE1, 0xA4, 0xA8, 0x02, 0x18, 0x01, 0x2C, 0xC2, 0x61, 0xB1, 0xAC, 0xCB, 0xB3, 0x7A, 0x64, 0xB1, 0xC3, 0xE6, 0x3B, 0x50, 0xAD, 0xDD, 0x55, 0xAB, 0x28, 0xDA, 0x59, 0xE7, 0x57, 0x6A, 0x76, 0x4F, 0x6B, 0x08, 0xD1, 0x61, 0x7D, 0x28, 0xD5, 0x88, 0x7B, 0x8E, 0x80, 0x78, 0xF3, 0xFF, 0x50, 0x00, 0xBD, 0x73, 0xFB, 0x62, 0xB3, 0xCA, 0xA8, 0x05, 0x48, 0xE6, 0xE6, 0x71, 0xB5, 0xAC, 0xDA, 0xE9, 0xC6, 0x1F, 0x9B, 0x72, 0x98, 0x2E, 0xFF, 0xB2, 0x9C, 0x36, 0x9F, 0x7E, 0x7D, 0x25, 0x65, 0x6F, 0xB0, 0x60, 0xB1, 0xB5, 0x5F, 0xCF, 0x74, 0x29, 0x91, 0x9D, 0xAB, 0x84, 0x97, 0x1A, 0x27, 0x5D, 0x69, 0x49, 0x16, 0xF8, 0x77, 0x31, 0x26, 0x3E, 0x6F, 0x97, 0x41, 0x4A, 0x26, 0xFD, 0x5B, 0xAB, 0x65, 0x77, 0x45, 0x1C, 0x76, 0x15, 0xDC, 0x1A, 0x63, 0x0F, 0x51, 0x2D, 0xA0, 0x07, 0x6E, 0xE5, 0x29, 0xD3, 0x37, 0x4B, 0xE5, 0x7F, 0xBB, 0x23, 0xD0, 0x2B, 0xB9, 0x76, 0x1F }; -static const unsigned char app_1_dev_hdrpvt[0x100] = +static const unsigned char app_fw1B_dev_hdrpvt[0x100] = { 0x66, 0x9F, 0xB5, 0xC5, 0xA6, 0xB8, 0x45, 0xD8, 0xD3, 0x75, 0xFB, 0x03, 0xBB, 0x48, 0xF5, 0x7C, 0x7D, 0x4B, 0x02, 0xBD, 0x19, 0x7E, 0xE9, 0x98, 0x02, 0x5A, 0x00, 0xD8, 0x6E, 0x59, 0xCA, 0x9C, 0x78, 0x3E, 0x0C, 0xB8, 0xDF, 0x7C, 0x6C, 0x6E, 0x27, 0xAF, 0x8C, 0xB6, 0x13, 0xAD, 0x9D, 0x0C, 0x7C, 0x2B, 0x59, 0xF6, 0x1E, 0x16, 0x5D, 0x5A, 0x59, 0x86, 0x57, 0x7D, 0xEF, 0xD4, 0xBF, 0x82, 0xA4, 0x0C, 0x4D, 0xE0, 0x75, 0x95, 0xA6, 0xC6, 0x3F, 0x49, 0xC2, 0xC4, 0x5A, 0x63, 0xE8, 0x5D, 0x99, 0xEC, 0xDB, 0x4D, 0xFA, 0xEF, 0x10, 0x03, 0xF1, 0x15, 0xD1, 0x0B, 0x71, 0xAD, 0x24, 0x23, 0x08, 0x5C, 0x91, 0xD7, 0x17, 0x18, 0x69, 0x04, 0xAB, 0x23, 0x91, 0x62, 0x7D, 0xE8, 0xB5, 0x90, 0xF1, 0x5C, 0x09, 0x28, 0x8C, 0x51, 0xB7, 0x38, 0x02, 0x26, 0x78, 0x8C, 0xA2, 0x05, 0x07, 0x53, 0x7D, 0x99, 0x46, 0xFD, 0x12, 0x77, 0x32, 0x0E, 0xA8, 0x54, 0xE3, 0x32, 0x0E, 0x93, 0x05, 0x10, 0xFA, 0x59, 0x7A, 0x5D, 0x2E, 0xDE, 0x32, 0xE8, 0xE9, 0xF0, 0x27, 0x4E, 0x08, 0x83, 0x08, 0xD4, 0x92, 0x58, 0x4D, 0x6D, 0x34, 0x9F, 0xD9, 0xAF, 0xA9, 0x01, 0x62, 0xB5, 0x1A, 0x1D, 0x7E, 0x8D, 0xBB, 0x8A, 0x58, 0xBA, 0xFF, 0xB4, 0xD3, 0x75, 0xF3, 0x44, 0xE7, 0x13, 0x05, 0xC6, 0xC5, 0xA4, 0xD2, 0x6B, 0x18, 0x31, 0x9F, 0xBE, 0x42, 0x45, 0x82, 0x2E, 0x47, 0x9B, 0x26, 0x73, 0x28, 0xD7, 0x9A, 0x64, 0xA6, 0x3D, 0x38, 0x9C, 0x11, 0x36, 0x01, 0x5B, 0x82, 0x2F, 0x7E, 0xA8, 0xC4, 0x82, 0x15, 0x6C, 0x0B, 0xBA, 0x1C, 0x58, 0xF5, 0x81, 0xF9, 0x45, 0xA9, 0xC6, 0x05, 0x6A, 0x2C, 0xA6, 0xCF, 0xF5, 0xDF, 0xEB, 0xBB, 0xC0, 0x92, 0xE3, 0xA6, 0x9D, 0x23, 0x09, 0x09, 0x0E, 0x98, 0x39 }; -static const unsigned char app_1_dev_acexsig[0x100] = +static const unsigned char app_fw1B_dev_acexsig[0x100] = { 0x05, 0x90, 0xAF, 0x65, 0x16, 0x9F, 0x18, 0x2C, 0x17, 0x78, 0x9F, 0xDF, 0xB6, 0x37, 0xCF, 0x26, 0x9B, 0x1B, 0x75, 0x51, 0xB8, 0x57, 0xA3, 0x8F, 0xD7, 0x93, 0x19, 0x61, 0x81, 0x0D, 0x3D, 0xBC, 0x36, 0x50, 0x53, 0xDA, 0x7D, 0xA9, 0x7F, 0xAA, 0x3E, 0x51, 0x2C, 0x75, 0xA1, 0xB9, 0xB1, 0x56, 0xEB, 0x2A, 0x46, 0x21, 0xEC, 0x4F, 0xA7, 0x0C, 0xA1, 0xA8, 0xFD, 0xEE, 0xA3, 0x4A, 0xFD, 0x54, 0xB0, 0x3A, 0x49, 0x5C, 0x8F, 0x8D, 0xB2, 0xBC, 0x32, 0x50, 0x7E, 0x2C, 0x50, 0xD2, 0x1A, 0x6B, 0x61, 0xCB, 0x2A, 0xC9, 0x7E, 0x6E, 0x6A, 0xC8, 0xD6, 0x9B, 0x21, 0xE7, 0x3B, 0xB8, 0x39, 0x1C, 0xD7, 0xEB, 0x69, 0x35, 0xF5, 0xBC, 0xB5, 0x23, 0x54, 0x81, 0x4F, 0x73, 0xAB, 0x9C, 0x55, 0xF0, 0x04, 0x0B, 0x4A, 0xEA, 0x54, 0x08, 0xBF, 0x36, 0x28, 0x12, 0x5E, 0x44, 0x41, 0xF5, 0x3D, 0xFE, 0xA7, 0x6B, 0x35, 0xF2, 0x9A, 0xF2, 0x88, 0xCD, 0xD6, 0x2E, 0x7B, 0xF3, 0xF5, 0x0D, 0x06, 0x2E, 0x13, 0x4F, 0x78, 0xEE, 0x27, 0xAB, 0x31, 0x06, 0x62, 0xE9, 0xB2, 0x3E, 0xC6, 0x99, 0xD7, 0xA9, 0xCC, 0x21, 0x70, 0xD7, 0xCD, 0x9F, 0x03, 0x66, 0x91, 0x7E, 0xBD, 0x3E, 0x83, 0xC4, 0xFF, 0xC9, 0xAA, 0x7E, 0x27, 0xAE, 0x5C, 0x37, 0x7D, 0x93, 0x57, 0x60, 0xB9, 0x0B, 0x71, 0x43, 0x8A, 0x2F, 0x43, 0x50, 0x94, 0xF8, 0x0D, 0x40, 0xCC, 0x64, 0x16, 0x09, 0x70, 0xCD, 0x03, 0xCA, 0x95, 0x30, 0x20, 0xE2, 0x85, 0x2F, 0x2A, 0xCF, 0x65, 0xAA, 0xE9, 0xCF, 0x1F, 0x57, 0xC1, 0x8F, 0xD5, 0x46, 0x51, 0x5A, 0x99, 0x60, 0x65, 0x93, 0xA9, 0xBB, 0xEA, 0x5F, 0xA0, 0x47, 0xD7, 0x11, 0x04, 0xC7, 0xB4, 0x82, 0x66, 0x24, 0x17, 0x17, 0x5E, 0x9D, 0xC8, 0x50, 0x80, 0x63, 0x28, 0xB3, 0xF8, 0xE3 }; // DLP -static const unsigned char dlp_1_dev_hdrpub[0x100] = +static const unsigned char dlp_fw1B_dev_hdrpub[0x100] = { 0xD9, 0xF0, 0xC9, 0x35, 0x1E, 0x55, 0xD8, 0x7E, 0x96, 0x53, 0x33, 0x34, 0xBB, 0x8A, 0xAE, 0x03, 0x92, 0x35, 0xE2, 0x05, 0x58, 0x7C, 0xCC, 0x08, 0xB2, 0xDF, 0x43, 0x41, 0xB7, 0x7A, 0xB5, 0x29, 0xEE, 0x4E, 0xF3, 0xC7, 0x35, 0x3B, 0x7E, 0xC5, 0xEE, 0x74, 0xF0, 0xAA, 0x7E, 0x60, 0xF1, 0x28, 0x35, 0x17, 0xD6, 0xC9, 0x9A, 0xF2, 0x84, 0xFE, 0xC8, 0x93, 0x86, 0xF7, 0xA7, 0x36, 0xA6, 0xB0, 0x28, 0xDC, 0xE8, 0x38, 0x0B, 0x54, 0x42, 0x8D, 0x4E, 0x4B, 0x55, 0x0F, 0x4A, 0x0D, 0x72, 0xA0, 0x23, 0xC9, 0x68, 0x22, 0x37, 0x31, 0x88, 0x2C, 0x05, 0x49, 0x86, 0x80, 0x9A, 0xFC, 0x1D, 0x02, 0xE3, 0x20, 0x15, 0x0C, 0x7E, 0x28, 0x40, 0x57, 0xEF, 0xA7, 0xBC, 0xAA, 0xC5, 0xD6, 0xD7, 0x6F, 0xF9, 0x26, 0x9A, 0x32, 0xB2, 0x9E, 0x10, 0x5F, 0x93, 0xE6, 0xB2, 0xC6, 0xB2, 0x62, 0x34, 0x6A, 0xB0, 0xD9, 0x71, 0x3B, 0x0F, 0x34, 0x6C, 0xB1, 0xFE, 0x3A, 0x39, 0xDE, 0x3D, 0x6A, 0xCB, 0x32, 0x95, 0xFA, 0x18, 0x4F, 0xF4, 0xEB, 0x5F, 0x20, 0xE4, 0xEF, 0x64, 0xC5, 0x06, 0x27, 0xC3, 0x44, 0x2A, 0x39, 0x35, 0xD8, 0x00, 0xDF, 0x00, 0xAD, 0xC4, 0x98, 0x06, 0x52, 0xD8, 0x4A, 0xC5, 0x2A, 0x7F, 0x77, 0x50, 0x62, 0x7E, 0x05, 0x3E, 0x8C, 0x28, 0x0A, 0x26, 0xD2, 0x6C, 0x9B, 0x27, 0x65, 0xE9, 0x77, 0x68, 0xE9, 0xE6, 0xAA, 0xBA, 0xF5, 0x85, 0xFC, 0x75, 0x07, 0x84, 0xB2, 0xCA, 0x35, 0x85, 0x52, 0x10, 0x08, 0xEF, 0x85, 0xD3, 0x70, 0x17, 0x31, 0xE1, 0x44, 0xF6, 0x34, 0xDF, 0x7C, 0x42, 0xF7, 0x74, 0xAA, 0xFC, 0xC3, 0xE4, 0x84, 0x2D, 0xBF, 0x15, 0x1E, 0x84, 0x00, 0xE3, 0x80, 0xD7, 0x89, 0x56, 0xEE, 0x60, 0x09, 0x1F, 0xD3, 0xBF, 0xBF, 0x50, 0x8F, 0xA3, 0x0C, 0x72, 0x3F }; -static const unsigned char dlp_1_dev_hdrpvt[0x100] = +static const unsigned char dlp_fw1B_dev_hdrpvt[0x100] = { 0x10, 0x19, 0x3A, 0x33, 0xA3, 0x47, 0x02, 0x13, 0xEF, 0xB4, 0xBB, 0x9E, 0x94, 0x8F, 0xDC, 0xE4, 0xC4, 0xA3, 0x18, 0x4B, 0xFE, 0xCA, 0x51, 0x23, 0xFF, 0x5A, 0x80, 0x94, 0x55, 0x22, 0x4A, 0x49, 0x8B, 0xA1, 0xE7, 0x5D, 0xFA, 0xAF, 0xA7, 0x60, 0xA5, 0x89, 0x9B, 0xD1, 0x6C, 0x3E, 0x6A, 0xF1, 0xE6, 0x62, 0x19, 0x6A, 0x90, 0xF8, 0x83, 0x1C, 0x72, 0xE2, 0x7A, 0xE0, 0xC6, 0x48, 0x42, 0x2D, 0xD7, 0x06, 0xE2, 0x5C, 0x69, 0x71, 0xD2, 0xEC, 0xAF, 0x30, 0xDF, 0x5A, 0x9E, 0xC4, 0xB9, 0x87, 0xDC, 0xBC, 0xDE, 0xE5, 0x50, 0x20, 0x67, 0x87, 0xA0, 0xE8, 0x5A, 0x78, 0x1B, 0x7A, 0xAE, 0x05, 0xED, 0x93, 0x0C, 0x1A, 0xFD, 0x22, 0xAA, 0x06, 0x14, 0xDC, 0xD6, 0x11, 0xE3, 0x45, 0x48, 0x6A, 0xAC, 0x03, 0xCE, 0xF6, 0x19, 0xBD, 0x95, 0x46, 0x0A, 0x1D, 0xCB, 0x6C, 0xE3, 0xF6, 0x5F, 0x1A, 0xB3, 0x81, 0xC7, 0xE2, 0xAB, 0xFE, 0xEF, 0xFB, 0xEC, 0xFE, 0x88, 0x36, 0x26, 0x60, 0x47, 0x43, 0x78, 0x36, 0xA7, 0xC8, 0xC9, 0x40, 0x98, 0x2E, 0xF2, 0x7E, 0xE4, 0x0D, 0x6C, 0x45, 0x88, 0x2A, 0x32, 0x9B, 0xA2, 0x7C, 0x39, 0x20, 0xAA, 0x6B, 0x64, 0x35, 0xC6, 0xA9, 0x20, 0x71, 0x4A, 0x78, 0x6E, 0x55, 0x3C, 0x9B, 0xEA, 0x10, 0x73, 0xBB, 0xA7, 0xD8, 0xFE, 0x69, 0x42, 0xB8, 0xE7, 0xA1, 0xE5, 0xDF, 0x8A, 0xDE, 0x4C, 0x2B, 0x3A, 0x92, 0xB8, 0x3E, 0x5E, 0x2C, 0x29, 0x0D, 0xC1, 0x3D, 0x10, 0x65, 0x1E, 0xF1, 0x95, 0xE5, 0xF6, 0x45, 0x15, 0xBF, 0xE2, 0x30, 0xA6, 0x70, 0x19, 0xA4, 0x11, 0x57, 0x12, 0x1C, 0x81, 0x4B, 0x54, 0x04, 0xBE, 0x67, 0xF5, 0x00, 0x22, 0x06, 0xDA, 0x6B, 0xCE, 0x23, 0x3F, 0x86, 0xE4, 0x70, 0x6A, 0xD1, 0x3E, 0xE5, 0x74, 0x44, 0x86, 0xDA, 0xBE, 0x79 }; -static const unsigned char dlp_1_dev_acexsig[0x100] = +static const unsigned char dlp_fw1B_dev_acexsig[0x100] = { 0x13, 0xB2, 0xF4, 0x89, 0xBB, 0xB4, 0xFF, 0x55, 0x7E, 0x3E, 0x9B, 0x90, 0x44, 0x45, 0xC6, 0x8A, 0x17, 0x32, 0x91, 0x77, 0x7D, 0xCB, 0x4A, 0x26, 0x3D, 0xCA, 0xD8, 0x6E, 0x72, 0x27, 0x93, 0x9C, 0xE4, 0x27, 0xFE, 0x54, 0xDC, 0xE7, 0xDC, 0x02, 0x17, 0x9C, 0x82, 0xA8, 0xB0, 0xE8, 0x69, 0x07, 0xE3, 0x34, 0x0E, 0xBF, 0x17, 0x05, 0x58, 0x23, 0x5F, 0x6D, 0xDA, 0xE8, 0xC6, 0xEE, 0x49, 0x29, 0xEF, 0xD7, 0x48, 0x48, 0x41, 0xE2, 0x2A, 0x57, 0x2B, 0x21, 0x13, 0x64, 0xD4, 0x79, 0x5A, 0xE3, 0x84, 0xDA, 0x63, 0x9A, 0x07, 0x39, 0xE2, 0x7E, 0xA7, 0x56, 0x34, 0x1C, 0xE2, 0xAF, 0xCD, 0x65, 0xD1, 0xC0, 0x1B, 0x72, 0xB1, 0x1D, 0xFC, 0xE2, 0x6E, 0x0F, 0xC7, 0xB0, 0xF5, 0x84, 0x0F, 0xA5, 0x2B, 0xDF, 0x3A, 0xCF, 0x43, 0xE8, 0xE4, 0x07, 0x29, 0xC6, 0x41, 0x0E, 0x7B, 0xEE, 0x35, 0xF9, 0xFC, 0xE7, 0x15, 0xF3, 0x8C, 0x3A, 0xB4, 0x77, 0xBD, 0x88, 0x70, 0x83, 0x4A, 0x03, 0x9E, 0x01, 0x9B, 0xBB, 0xD2, 0xE4, 0xA5, 0xBE, 0xF7, 0x80, 0x92, 0x5A, 0x9F, 0x14, 0x9B, 0x49, 0x5D, 0x3D, 0xDC, 0x32, 0x34, 0x7E, 0xC0, 0xD4, 0xAC, 0xDA, 0x8C, 0xF7, 0xA1, 0xE1, 0xCA, 0x29, 0xF5, 0x58, 0x5E, 0xEB, 0x02, 0xB6, 0x67, 0x42, 0x89, 0x46, 0x4C, 0xA6, 0xA8, 0xBD, 0xEB, 0xEB, 0xDD, 0x8F, 0x2E, 0x72, 0x26, 0x49, 0x70, 0x01, 0x7D, 0x5B, 0x03, 0x06, 0x2C, 0x92, 0x1E, 0x55, 0xB2, 0xDA, 0xD7, 0x0D, 0x70, 0x74, 0x42, 0xD5, 0x62, 0x42, 0x3C, 0xC1, 0x70, 0x8E, 0x67, 0xB1, 0xD9, 0xF3, 0x7E, 0xB2, 0xBA, 0x6D, 0x0F, 0x42, 0x65, 0x24, 0x79, 0xE8, 0x8F, 0xB4, 0x4B, 0x32, 0x35, 0xCA, 0x39, 0x70, 0xFE, 0x8E, 0x81, 0x49, 0x73, 0x8D, 0x3C, 0xCD, 0x60, 0xAF, 0xA3, 0x52, 0x45, 0xEE }; /* CTR_SDK 2 (2.3.4) */ // APP -static const unsigned char app_2_dev_hdrpub[0x100] = +static const unsigned char app_fw1D_dev_hdrpub[0x100] = { 0xE9, 0x45, 0xF0, 0xC6, 0x96, 0xD5, 0x6F, 0x7E, 0xAE, 0x03, 0x92, 0x2E, 0xEA, 0xCB, 0xFD, 0xEA, 0xA4, 0x7A, 0x9F, 0x12, 0xDA, 0x4C, 0x10, 0x0A, 0xBE, 0x08, 0x9D, 0x87, 0xE0, 0x14, 0xAC, 0x7F, 0x39, 0xD2, 0xFE, 0x9D, 0x88, 0xB2, 0x81, 0xF6, 0x1A, 0x9E, 0x15, 0x57, 0xD4, 0xE2, 0x31, 0x08, 0x07, 0xEC, 0x4F, 0x10, 0x00, 0xDE, 0xEF, 0x8B, 0x6F, 0xCF, 0x84, 0xE7, 0x3B, 0x41, 0x08, 0x64, 0x3B, 0x1C, 0x00, 0x7C, 0x73, 0xBB, 0x59, 0x4D, 0xD8, 0xD6, 0xE7, 0x7B, 0xBE, 0xDD, 0x50, 0x98, 0xA1, 0x1A, 0xD5, 0xAA, 0x37, 0x69, 0xB8, 0x25, 0xCB, 0x7B, 0x03, 0x00, 0x90, 0x25, 0xF3, 0x7E, 0x9A, 0x0F, 0xA3, 0xAA, 0xC4, 0xB9, 0x3B, 0x3A, 0x18, 0x2B, 0xBC, 0x9C, 0x11, 0x04, 0x92, 0x16, 0x6E, 0xC3, 0xFA, 0x01, 0xD3, 0x00, 0x02, 0xF3, 0x2E, 0xD5, 0x60, 0xA8, 0xAF, 0xAB, 0xEE, 0x2F, 0x9D, 0x30, 0x3E, 0x0E, 0xDC, 0xB8, 0xEC, 0x87, 0x9E, 0x4A, 0xA9, 0x01, 0x34, 0x69, 0x2C, 0x4C, 0x34, 0xB7, 0x7D, 0xB9, 0x7A, 0x17, 0x74, 0x31, 0xB0, 0x29, 0xC4, 0x7D, 0x27, 0x1F, 0xBA, 0xBA, 0x3F, 0x5B, 0x62, 0xF6, 0x90, 0xB8, 0x37, 0x33, 0xFC, 0x73, 0xD6, 0x19, 0x11, 0xCA, 0x83, 0x2A, 0x58, 0x62, 0x9C, 0xB1, 0x83, 0x43, 0x1D, 0x2C, 0x00, 0xA2, 0xE5, 0x87, 0x97, 0x12, 0x63, 0x31, 0x83, 0x0E, 0xB1, 0x1E, 0x69, 0x99, 0x02, 0xAF, 0xDF, 0xFF, 0x0F, 0xA9, 0x7C, 0x1B, 0x33, 0x9E, 0xFF, 0x9C, 0x14, 0x19, 0xA6, 0xCA, 0xFD, 0xB9, 0x17, 0xE0, 0x22, 0xCF, 0xB5, 0x00, 0x77, 0x2E, 0x31, 0xAD, 0xF7, 0xE5, 0xAD, 0x98, 0x14, 0xDF, 0x19, 0xF0, 0xC9, 0xBE, 0x37, 0xF6, 0xF0, 0x23, 0x66, 0xCF, 0x34, 0xE3, 0xD5, 0x8F, 0xD4, 0x07, 0xBA, 0x06, 0x56, 0x00, 0x66, 0x9A, 0xEB, 0x93 }; -static const unsigned char app_2_dev_hdrpvt[0x100] = +static const unsigned char app_fw1D_dev_hdrpvt[0x100] = { 0xBC, 0x49, 0x29, 0xB9, 0x01, 0x52, 0x31, 0x76, 0x4C, 0xBA, 0xB1, 0x29, 0x91, 0x77, 0x29, 0xF2, 0x54, 0xE4, 0x6C, 0xB5, 0x68, 0xE1, 0xF0, 0x28, 0xDB, 0x8E, 0x54, 0xA8, 0xB1, 0xA3, 0xBE, 0x3F, 0xCA, 0xCA, 0x95, 0x9D, 0x4E, 0x12, 0xD7, 0x77, 0x6F, 0xB0, 0x9D, 0x85, 0x91, 0x5D, 0x29, 0x3A, 0x54, 0x3A, 0xD6, 0xEE, 0x11, 0xE5, 0xDF, 0xEF, 0xEA, 0x45, 0xD3, 0xFE, 0x58, 0x03, 0x7B, 0xE4, 0x7B, 0x19, 0x75, 0x02, 0xFE, 0xDE, 0xFF, 0x8C, 0x28, 0x33, 0xFE, 0x10, 0x11, 0xD4, 0xCD, 0x13, 0x05, 0x26, 0x85, 0xC3, 0xA8, 0x8A, 0x7A, 0x8A, 0x77, 0x1D, 0x49, 0x25, 0x11, 0x34, 0xB0, 0xBF, 0x45, 0x56, 0xCE, 0x42, 0x2E, 0x1B, 0x5C, 0xC4, 0xDD, 0x71, 0xA0, 0x01, 0x50, 0x73, 0x21, 0xFF, 0x5D, 0x54, 0x6D, 0xDD, 0x3F, 0x14, 0x49, 0x4D, 0x44, 0x46, 0x12, 0x88, 0xD5, 0x92, 0xAE, 0xE2, 0xD0, 0xF6, 0x2C, 0x10, 0xD5, 0x67, 0x61, 0x87, 0x7F, 0x2A, 0x17, 0x9D, 0x4F, 0xC6, 0x79, 0xC3, 0xAF, 0x4D, 0x6F, 0xFB, 0x0F, 0x3B, 0x48, 0x5D, 0x46, 0x9A, 0xE8, 0x53, 0xB7, 0xC5, 0x69, 0xEC, 0x31, 0x25, 0xD1, 0xDC, 0x93, 0xAB, 0x2E, 0x53, 0x3B, 0x8E, 0x96, 0x27, 0x59, 0xD4, 0xF7, 0xB3, 0xAB, 0x51, 0x59, 0xAE, 0x6E, 0x26, 0x4F, 0xC2, 0x95, 0xCE, 0x42, 0xC6, 0xAF, 0x46, 0xC6, 0x2E, 0x32, 0x09, 0x7B, 0xAF, 0x67, 0x4E, 0x57, 0xC8, 0x93, 0x5F, 0x8C, 0xD5, 0x66, 0x7B, 0xCC, 0xE9, 0xBE, 0x86, 0xB9, 0xBB, 0xD0, 0xC8, 0xD2, 0xDC, 0x5F, 0x95, 0x83, 0x28, 0x55, 0x21, 0x1E, 0xEE, 0xCF, 0x23, 0xB7, 0x6D, 0xE0, 0x9A, 0x87, 0x99, 0xFB, 0x82, 0x50, 0xD0, 0x2D, 0xC4, 0xFB, 0xA0, 0x11, 0x2F, 0xDD, 0x05, 0x7E, 0x1C, 0xE3, 0xFB, 0x98, 0x69, 0xD4, 0x49, 0x2F, 0x0D, 0xF6, 0x61 }; -static const unsigned char app_2_dev_acexsig[0x100] = +static const unsigned char app_fw1D_dev_acexsig[0x100] = { 0x62, 0xFE, 0xD9, 0x12, 0x3D, 0x99, 0x53, 0xC4, 0x20, 0x25, 0xDE, 0x59, 0xEA, 0x6E, 0xF3, 0x16, 0x5B, 0x36, 0xBA, 0x1C, 0xB3, 0xB5, 0x48, 0x37, 0xD2, 0xA4, 0x04, 0xE5, 0x14, 0xC6, 0xE7, 0x22, 0x14, 0x40, 0x6F, 0x92, 0x6A, 0x9B, 0xDF, 0xDE, 0xFA, 0xCE, 0x3C, 0xBB, 0x4B, 0xC4, 0x66, 0xA8, 0x86, 0x58, 0xAC, 0xEB, 0x2F, 0xB7, 0xA3, 0xEC, 0xEA, 0x31, 0x23, 0x61, 0xF6, 0x72, 0x1E, 0x26, 0x8A, 0x1D, 0x68, 0x2A, 0x2A, 0x21, 0x5A, 0xA2, 0x6A, 0xBD, 0xCE, 0xC0, 0x19, 0x08, 0x61, 0x64, 0xB3, 0xF6, 0x90, 0xB1, 0x34, 0xF8, 0x50, 0x6F, 0x83, 0xB6, 0x8D, 0x35, 0x12, 0x7F, 0x9C, 0x7B, 0x6E, 0x3C, 0x4E, 0xD1, 0xFD, 0xC3, 0x30, 0xD2, 0xE8, 0x7E, 0x15, 0x1F, 0xAD, 0xDB, 0x1D, 0x92, 0xDA, 0x8C, 0x4E, 0xE9, 0x84, 0x83, 0xFF, 0x1A, 0x09, 0x77, 0x05, 0x5A, 0xCF, 0x5C, 0x8B, 0x4F, 0x68, 0x36, 0xC8, 0xDA, 0x5B, 0x1A, 0x5A, 0x49, 0xF9, 0xA1, 0xF2, 0xC8, 0x02, 0xFD, 0x69, 0x1F, 0x1D, 0xB3, 0xE8, 0xF8, 0xE1, 0x6B, 0x15, 0x9A, 0x5E, 0x41, 0x84, 0x06, 0x1F, 0x2A, 0xB3, 0xB2, 0xA1, 0xDC, 0x63, 0x81, 0xB3, 0x6B, 0x4B, 0x21, 0x67, 0x19, 0x82, 0x52, 0xFE, 0x75, 0x96, 0xA1, 0xDF, 0x02, 0xD4, 0x07, 0x1F, 0x1B, 0x88, 0x12, 0x5A, 0x76, 0x54, 0xC4, 0x06, 0x2D, 0xB1, 0xAA, 0x41, 0x3C, 0x9F, 0x43, 0xA2, 0x75, 0x20, 0x39, 0xB6, 0x06, 0xF9, 0x9C, 0xFC, 0x00, 0xC5, 0xBC, 0x84, 0x13, 0x80, 0xE4, 0x10, 0x1A, 0xCD, 0x95, 0xBB, 0xF2, 0xDC, 0x57, 0x7B, 0xBA, 0x87, 0x05, 0x0B, 0x96, 0xC1, 0xCD, 0x60, 0xC7, 0x10, 0x44, 0x78, 0x0E, 0x0F, 0x2F, 0x91, 0x54, 0x6C, 0xDE, 0xB8, 0x14, 0x46, 0xF3, 0x9C, 0xAC, 0x7B, 0xAA, 0xE7, 0x1B, 0x52, 0xD6, 0xBE, 0x71, 0x97, 0x22 }; // DLP -static const unsigned char dlp_2_dev_hdrpub[0x100] = +static const unsigned char dlp_fw1D_dev_hdrpub[0x100] = { 0xB9, 0xDE, 0x3D, 0xC0, 0x55, 0xB9, 0xCC, 0x3F, 0x55, 0xE0, 0x61, 0x1D, 0x6F, 0xCF, 0x3E, 0x7F, 0xE2, 0xF7, 0xF5, 0xAD, 0x5C, 0x02, 0x7F, 0x17, 0x5B, 0x44, 0x2F, 0x2D, 0xDC, 0xD4, 0xA6, 0x63, 0xD2, 0xA7, 0x82, 0xD3, 0x00, 0x77, 0xC8, 0x0B, 0x28, 0x09, 0x3D, 0x81, 0x86, 0x93, 0xF5, 0xF6, 0xE4, 0x69, 0x3B, 0x60, 0x4C, 0x7F, 0x8D, 0x72, 0xA3, 0x22, 0x42, 0x86, 0x87, 0x06, 0xD8, 0x29, 0x89, 0x8A, 0x9F, 0x5F, 0x6C, 0x06, 0x0C, 0x96, 0x84, 0x00, 0x24, 0x5D, 0x0B, 0xEA, 0x15, 0xEC, 0xAD, 0x90, 0xA4, 0x0C, 0x7B, 0xAE, 0x0E, 0x85, 0x3E, 0xA2, 0x20, 0x04, 0xE8, 0xD9, 0x59, 0x0F, 0x31, 0x0E, 0xD4, 0x5D, 0xC1, 0x18, 0xED, 0x0E, 0xB4, 0xD2, 0x5E, 0x65, 0xA2, 0x78, 0x0C, 0x76, 0x03, 0x3A, 0x71, 0x18, 0xE4, 0x38, 0x44, 0x14, 0xE0, 0x93, 0x84, 0xFE, 0x34, 0x82, 0xCA, 0x0B, 0xB8, 0xF2, 0x41, 0xAB, 0x63, 0xF3, 0xDE, 0xAE, 0xF4, 0x36, 0x81, 0xA4, 0x78, 0x7B, 0xF9, 0xA8, 0xFB, 0xC9, 0xA7, 0x6E, 0xA4, 0xD5, 0xE2, 0xA9, 0xD8, 0xD9, 0xE8, 0x98, 0x1B, 0x25, 0x75, 0x00, 0x11, 0x51, 0x97, 0x62, 0x0D, 0xF0, 0x0C, 0xE9, 0x6B, 0x0C, 0xEE, 0xCE, 0x25, 0x2C, 0x3F, 0xDF, 0xBE, 0x54, 0xD5, 0xD6, 0x5E, 0xEE, 0x1F, 0x73, 0xFC, 0xE8, 0xEC, 0xB3, 0x8A, 0x48, 0x9F, 0x6A, 0xC1, 0x63, 0x85, 0xE4, 0x94, 0x85, 0x8F, 0x3D, 0x9D, 0x43, 0xB4, 0xA7, 0x4C, 0x82, 0xA3, 0x0B, 0x67, 0x43, 0x12, 0x31, 0x77, 0x89, 0xB0, 0xD5, 0x00, 0x1B, 0x52, 0x29, 0xCE, 0x54, 0xC7, 0xC4, 0x7D, 0xB6, 0x69, 0x7B, 0xFE, 0xDC, 0xDB, 0x4E, 0xD8, 0x58, 0x42, 0x14, 0x34, 0x72, 0x64, 0xBC, 0x09, 0x6D, 0xAC, 0xD3, 0xC4, 0x1B, 0x5C, 0x8E, 0xF9, 0xBE, 0x84, 0xCD, 0x9A, 0x86, 0x4B, 0x17 }; -static const unsigned char dlp_2_dev_hdrpvt[0x100] = +static const unsigned char dlp_fw1D_dev_hdrpvt[0x100] = { 0xAA, 0x51, 0x62, 0x58, 0x9A, 0xB5, 0x74, 0xDA, 0x1C, 0xC1, 0x4D, 0x7C, 0x81, 0xF6, 0x70, 0x99, 0x13, 0xCC, 0x90, 0x0D, 0xD9, 0xA0, 0x58, 0x01, 0x79, 0x1A, 0x53, 0xF9, 0x3C, 0xC0, 0x87, 0xF0, 0x35, 0x1A, 0x56, 0xA1, 0x2F, 0x6E, 0x93, 0x9A, 0xD5, 0x87, 0x12, 0x1B, 0x5C, 0xCC, 0xBC, 0xB9, 0x0E, 0xB8, 0xF7, 0x35, 0xD9, 0x23, 0x90, 0xE4, 0x19, 0x64, 0xCD, 0x7D, 0x24, 0xC2, 0x3A, 0xD6, 0x65, 0x38, 0xE7, 0xAD, 0xB2, 0xF9, 0x20, 0x13, 0xD4, 0xC5, 0xA4, 0x8C, 0xB6, 0xDC, 0x3C, 0x56, 0xF2, 0xFC, 0xF5, 0xB6, 0x92, 0xA6, 0xFE, 0x9B, 0x4E, 0xB7, 0x95, 0x8B, 0xAA, 0x2B, 0x70, 0x96, 0xA1, 0x27, 0xAB, 0xA6, 0x75, 0xC9, 0x77, 0x80, 0xE0, 0x65, 0x5D, 0x26, 0xD8, 0xE8, 0x14, 0xD3, 0x17, 0x46, 0x38, 0x58, 0xCC, 0xD8, 0x5A, 0x5A, 0x9F, 0x27, 0xCE, 0xD8, 0x7A, 0x19, 0xD7, 0x35, 0xB2, 0x32, 0xAF, 0x47, 0x2E, 0x9F, 0x4B, 0x64, 0xEC, 0x1F, 0xC6, 0x40, 0xD0, 0x2C, 0x47, 0xD1, 0xEA, 0x33, 0xE5, 0x0E, 0x80, 0xFC, 0x68, 0xEC, 0x8C, 0x12, 0x33, 0xCE, 0x34, 0x28, 0x79, 0xFA, 0x05, 0x5D, 0x70, 0x15, 0xDE, 0xB1, 0x22, 0x85, 0x18, 0x63, 0x15, 0x35, 0x57, 0x04, 0x17, 0x64, 0x20, 0xC8, 0x52, 0x44, 0x64, 0x5E, 0x47, 0x4E, 0x5F, 0x80, 0x21, 0x16, 0x94, 0x4B, 0x18, 0x11, 0x36, 0x67, 0x3B, 0x6C, 0x69, 0x19, 0xCF, 0xC9, 0x05, 0x85, 0x9B, 0x3A, 0xDE, 0x12, 0x1E, 0x0A, 0xC6, 0x22, 0xA8, 0xC7, 0x9A, 0x34, 0x14, 0x98, 0xFD, 0xD9, 0x0F, 0xE8, 0x64, 0xE6, 0x89, 0x63, 0x6E, 0x17, 0x76, 0xD7, 0x1B, 0x6F, 0x92, 0x00, 0xD8, 0xBB, 0xF6, 0xA0, 0x65, 0x9D, 0xAA, 0x7A, 0x0E, 0x4B, 0x56, 0xA5, 0x33, 0xDA, 0x3F, 0x5D, 0xFE, 0xD3, 0xAD, 0x6E, 0x0E, 0xB3, 0xD4, 0x41 }; -static const unsigned char dlp_2_dev_acexsig[0x100] = +static const unsigned char dlp_fw1D_dev_acexsig[0x100] = { 0x97, 0x84, 0x97, 0xEE, 0x4F, 0x35, 0xCC, 0xBE, 0x08, 0xB4, 0x5D, 0x7E, 0x17, 0xC3, 0x94, 0x2B, 0x4D, 0x3A, 0xA5, 0xB5, 0x01, 0xD4, 0xAE, 0x2A, 0x90, 0x26, 0x21, 0x8F, 0x56, 0x05, 0xB9, 0xA2, 0x5E, 0xCE, 0x73, 0xC7, 0x42, 0xDC, 0x99, 0xD2, 0x7C, 0x08, 0x62, 0xBF, 0x10, 0x7A, 0xC1, 0x5D, 0x22, 0x53, 0x8F, 0x63, 0x2D, 0x73, 0xF3, 0x05, 0xDA, 0x9D, 0x6A, 0xF8, 0xB9, 0x5B, 0x80, 0xB4, 0x30, 0xB3, 0x11, 0xF7, 0x96, 0x8A, 0xCF, 0x70, 0xD7, 0x62, 0x6E, 0x99, 0x32, 0xFD, 0x74, 0x34, 0x16, 0xFD, 0x17, 0x1F, 0xB1, 0xEC, 0xA4, 0x0F, 0x52, 0x13, 0x9F, 0x62, 0x0D, 0xE0, 0x50, 0xA6, 0xA0, 0x7B, 0x69, 0x95, 0xE0, 0xE9, 0xBB, 0x38, 0x0C, 0x62, 0xE0, 0xE3, 0xCE, 0x82, 0xE0, 0xB9, 0xE0, 0xF6, 0x61, 0x50, 0xBF, 0xA8, 0x18, 0x15, 0x38, 0xFE, 0xFA, 0x8C, 0xBA, 0xA5, 0xB9, 0x9C, 0x05, 0xA6, 0x91, 0x5C, 0xA7, 0x13, 0x6F, 0x13, 0x3F, 0xF1, 0xF6, 0x68, 0xAF, 0x40, 0xEC, 0x27, 0xE0, 0x33, 0x6B, 0xCF, 0x26, 0x06, 0xF8, 0x6A, 0x13, 0x6C, 0xBC, 0xDB, 0xAF, 0x6F, 0x78, 0xA0, 0x80, 0x10, 0x8F, 0xB6, 0x91, 0x5A, 0x43, 0x2C, 0x5F, 0x1D, 0xBA, 0xB4, 0x5E, 0xBE, 0xAE, 0x53, 0x09, 0x17, 0x5B, 0x6C, 0xC1, 0x5E, 0x0F, 0x72, 0x6E, 0xD6, 0x10, 0x0B, 0xC3, 0x26, 0xDC, 0xAF, 0xCA, 0x28, 0xAB, 0x00, 0x67, 0x04, 0xE3, 0x54, 0xE8, 0x95, 0xC6, 0x23, 0xB6, 0x79, 0x70, 0xA4, 0x87, 0x6D, 0x12, 0x48, 0xCC, 0x11, 0x86, 0xEC, 0x82, 0xF4, 0x30, 0xC9, 0xB1, 0x6D, 0x08, 0xA7, 0xEA, 0x8C, 0x6A, 0x97, 0xAA, 0x89, 0xD5, 0xC5, 0x07, 0xA9, 0xD5, 0xCF, 0x09, 0x08, 0xBC, 0x56, 0x63, 0x8D, 0x70, 0x2F, 0x64, 0xAF, 0x51, 0x9E, 0x22, 0xA4, 0x88, 0xF0, 0xDC, 0x56, 0x72, 0x28 }; // DEMO -static const unsigned char demo_2_dev_hdrpub[0x100] = +static const unsigned char demo_fw1E_dev_hdrpub[0x100] = { 0xC0, 0xBE, 0x2D, 0xAC, 0x4A, 0x1D, 0xCB, 0xDE, 0x84, 0x61, 0x0C, 0x29, 0x50, 0xEC, 0x7A, 0xF9, 0xA4, 0x96, 0x3B, 0x6E, 0xF7, 0xEC, 0x38, 0x25, 0x52, 0xB0, 0x6D, 0x71, 0xA4, 0x55, 0x61, 0x7C, 0xB4, 0xCA, 0x7F, 0x4D, 0xB0, 0xF2, 0x26, 0xE8, 0xDE, 0x11, 0x01, 0x3C, 0xFF, 0x11, 0xBE, 0x42, 0x7D, 0x80, 0xD6, 0xF0, 0xEB, 0x1E, 0xF5, 0x68, 0x48, 0x24, 0x65, 0x09, 0xA0, 0x29, 0x9B, 0xC3, 0xBB, 0x45, 0x7E, 0x49, 0xE7, 0x98, 0x0E, 0x5F, 0x3C, 0xCC, 0xA6, 0xC6, 0x13, 0xC5, 0xC6, 0x8C, 0x82, 0x8F, 0xEC, 0xF1, 0x6D, 0xDB, 0x9C, 0xE6, 0xAD, 0xB7, 0x3E, 0xD7, 0x29, 0xFC, 0x3B, 0x50, 0x1F, 0x92, 0x0B, 0x25, 0x91, 0x41, 0x32, 0xFE, 0xCE, 0xAF, 0x0D, 0x34, 0xC5, 0xA3, 0x2E, 0x1A, 0x41, 0xA1, 0xC4, 0x86, 0x8D, 0x94, 0x1E, 0x80, 0x58, 0x3E, 0x35, 0x58, 0x2D, 0x0C, 0xD1, 0x0E, 0x3E, 0x6C, 0xE3, 0xDC, 0x2B, 0x97, 0xDC, 0xEC, 0x3A, 0x0D, 0xDA, 0x8E, 0x14, 0x5F, 0x12, 0xDC, 0xD7, 0x19, 0xD1, 0xE9, 0xDA, 0xD9, 0x6D, 0x02, 0x4E, 0xFC, 0x9B, 0x41, 0x3E, 0x4A, 0x70, 0xD6, 0x81, 0x41, 0xF3, 0x7F, 0xC8, 0x6E, 0xAD, 0x58, 0x25, 0xC8, 0x92, 0xD6, 0x37, 0x10, 0x93, 0xEB, 0x1D, 0xCD, 0x80, 0x05, 0x9F, 0x85, 0x05, 0x75, 0x47, 0xFC, 0x3C, 0xA7, 0x6A, 0xF4, 0x32, 0x1D, 0x49, 0xF3, 0xAA, 0x26, 0xEB, 0x78, 0x02, 0xE6, 0xA7, 0x15, 0xC0, 0xE1, 0x76, 0x19, 0x61, 0x42, 0xEC, 0x58, 0x38, 0x5F, 0x6F, 0xA6, 0x61, 0x6D, 0x49, 0x07, 0x70, 0xFD, 0x08, 0x28, 0x41, 0xB7, 0xA7, 0x96, 0x0E, 0x94, 0x2E, 0xF9, 0x25, 0x29, 0x15, 0x92, 0x13, 0xFC, 0xA6, 0x0D, 0x40, 0x54, 0x2D, 0x9D, 0x4E, 0x19, 0x77, 0xB1, 0xFC, 0x27, 0x95, 0x8F, 0xDA, 0x99, 0xED, 0x2C, 0xD7, 0xE1 }; -static const unsigned char demo_2_dev_acexsig[0x100] = +static const unsigned char demo_fw1E_dev_acexsig[0x100] = { 0x67, 0xC0, 0xA1, 0x00, 0x1D, 0xE0, 0x35, 0x62, 0x0F, 0xA7, 0xFE, 0xE7, 0xC5, 0x8B, 0x44, 0xFE, 0x1F, 0x61, 0x82, 0xFD, 0x42, 0xAF, 0x88, 0xAD, 0x44, 0xE2, 0x26, 0xFB, 0xFD, 0xA1, 0xFC, 0x3A, 0x9D, 0xCD, 0x1B, 0x2D, 0xD2, 0x40, 0x13, 0x85, 0x1C, 0x66, 0xCF, 0xF1, 0xF5, 0x1D, 0xF0, 0x5E, 0x54, 0xB5, 0xB9, 0x8A, 0xB2, 0x72, 0x91, 0xF5, 0x23, 0xF0, 0x58, 0xBA, 0xC0, 0x4D, 0x84, 0x77, 0x5A, 0x4D, 0x41, 0xBD, 0xBD, 0x07, 0x38, 0x3E, 0x42, 0x40, 0x94, 0x55, 0x21, 0xCF, 0x99, 0x89, 0xA7, 0xEC, 0xBA, 0x6D, 0x72, 0x3B, 0x98, 0xE1, 0x5A, 0x21, 0x57, 0x79, 0xBF, 0xC4, 0xC5, 0x0D, 0xBF, 0x76, 0x44, 0x88, 0xFE, 0x3D, 0x8A, 0x8A, 0x05, 0x85, 0x61, 0xBB, 0xB6, 0x76, 0x22, 0xF6, 0x59, 0x9E, 0x3B, 0x21, 0xF3, 0x23, 0xC7, 0x20, 0x34, 0x8E, 0xB7, 0xAB, 0xD0, 0x06, 0x56, 0x11, 0x92, 0x02, 0xF0, 0xB7, 0x1A, 0x4D, 0x85, 0xD5, 0x7A, 0x71, 0x75, 0x5D, 0x3A, 0x7D, 0x6F, 0xB7, 0xC2, 0xA6, 0xAF, 0xCF, 0x1C, 0x44, 0x61, 0xBB, 0xE7, 0x03, 0x7D, 0x2E, 0xE9, 0xC2, 0x0D, 0x89, 0xD9, 0x4B, 0x4D, 0x88, 0xB8, 0x81, 0xB5, 0x86, 0x45, 0xAE, 0x59, 0xA5, 0x8D, 0x68, 0x80, 0x00, 0x05, 0x53, 0x27, 0x89, 0xC9, 0x20, 0x1E, 0x9F, 0xDE, 0xAE, 0x7C, 0x98, 0xAC, 0xAC, 0x78, 0x80, 0x7B, 0x3A, 0x1E, 0xA6, 0x4E, 0x03, 0xD3, 0x00, 0xDD, 0x1E, 0xEB, 0x01, 0x9A, 0xDE, 0xAE, 0xF4, 0x84, 0x44, 0xBC, 0x4B, 0xD5, 0xDE, 0x23, 0xF0, 0x3C, 0xA4, 0x57, 0x70, 0x25, 0x2C, 0x93, 0x3D, 0xA5, 0x17, 0xCF, 0x1B, 0x0A, 0xDF, 0x4F, 0x21, 0x71, 0x05, 0xF4, 0xE4, 0x6F, 0xE2, 0xC3, 0x50, 0x74, 0xA9, 0x09, 0x61, 0x1D, 0x81, 0xC9, 0xA3, 0x1F, 0x82, 0x2D, 0x8F, 0xDB, 0x5A, 0x62, 0xB0 }; /* CTR_SDK 3 (3.2.5) */ // APP -static const unsigned char app_3_dev_hdrpub[0x100] = +static const unsigned char app_fw20_dev_hdrpub[0x100] = { 0xC4, 0xF6, 0x84, 0x47, 0xF0, 0xF0, 0x5D, 0x2B, 0x06, 0xE0, 0xC6, 0x73, 0xE2, 0x43, 0x9F, 0x57, 0xAA, 0x48, 0xCE, 0xB8, 0xEA, 0xBD, 0xA1, 0x84, 0x06, 0xFC, 0xF5, 0x7D, 0xA0, 0x37, 0x79, 0xA6, 0x27, 0xF0, 0xFE, 0xE8, 0x7E, 0xF1, 0x9E, 0xC0, 0x7A, 0x0A, 0x40, 0x86, 0x20, 0x52, 0x61, 0x4D, 0xAB, 0x50, 0xC5, 0x93, 0xEB, 0x2C, 0x36, 0x10, 0xAA, 0xEF, 0x32, 0x28, 0x5C, 0x82, 0xF7, 0x58, 0xE5, 0x2E, 0xC0, 0xEA, 0x0F, 0xB9, 0x90, 0x64, 0x0D, 0x44, 0x39, 0x36, 0x4E, 0x0D, 0x8A, 0xBF, 0xEB, 0x95, 0x98, 0x29, 0x27, 0xCF, 0xDC, 0x66, 0xE4, 0xCD, 0xE9, 0xC7, 0x9F, 0xF8, 0x1F, 0x64, 0xB0, 0x47, 0x91, 0x82, 0x54, 0x8D, 0x87, 0xD3, 0xE0, 0xA9, 0xFF, 0xE5, 0x78, 0xE9, 0x35, 0x55, 0x57, 0x28, 0x8C, 0x8B, 0x54, 0x63, 0xB7, 0x36, 0xFB, 0x85, 0xDD, 0xB2, 0x54, 0x14, 0xAD, 0x39, 0xDE, 0x88, 0x91, 0xCB, 0xD6, 0xF0, 0x0C, 0xB7, 0xEC, 0x91, 0x48, 0x1C, 0xB9, 0xB3, 0xEB, 0x90, 0xBC, 0xAC, 0x00, 0x40, 0x35, 0x45, 0xD4, 0x71, 0x6A, 0x14, 0x65, 0x3E, 0x3C, 0xEA, 0xAE, 0xE0, 0xFE, 0xE6, 0x71, 0xA2, 0x51, 0x2A, 0x15, 0x70, 0xC1, 0x3D, 0x70, 0x29, 0xAE, 0xFC, 0x21, 0x66, 0x06, 0x8B, 0x66, 0xE4, 0xE9, 0x4D, 0x6A, 0x9D, 0x66, 0xDA, 0x64, 0x2B, 0xE8, 0xF3, 0x8E, 0x31, 0xF0, 0xC2, 0x12, 0x02, 0x39, 0x73, 0x41, 0x4E, 0xF5, 0x91, 0x43, 0x9D, 0x1E, 0x51, 0xE6, 0x2D, 0x4C, 0x8F, 0xA0, 0x21, 0x2A, 0x38, 0x69, 0x3C, 0xB6, 0x9F, 0xF9, 0xBB, 0x8B, 0xFF, 0x72, 0x3A, 0x74, 0x7C, 0xCC, 0x49, 0x5B, 0x40, 0x25, 0x41, 0xE2, 0x2F, 0xEB, 0x3B, 0xD4, 0xE5, 0x14, 0x0F, 0x83, 0x43, 0x63, 0x30, 0x75, 0x5E, 0x4B, 0x29, 0x94, 0x65, 0xF8, 0xDC, 0x6D, 0x5B, 0xC1, 0xB1 }; -static const unsigned char app_3_dev_acexsig[0x100] = +static const unsigned char app_fw20_dev_acexsig[0x100] = { 0x48, 0xAB, 0x7A, 0x3E, 0x55, 0x05, 0x84, 0x09, 0x4E, 0x70, 0xD2, 0x42, 0x3C, 0xBA, 0x32, 0x8B, 0xB9, 0x9F, 0x9D, 0x16, 0x95, 0x19, 0xE7, 0xC7, 0x8E, 0x5B, 0x1D, 0xA3, 0x67, 0xC8, 0x9D, 0xD3, 0xCD, 0x82, 0x5A, 0x3D, 0xC0, 0xD6, 0xB9, 0x13, 0xBE, 0x3F, 0xE7, 0x5F, 0x36, 0x73, 0x71, 0x77, 0xCD, 0x7B, 0x40, 0x33, 0x25, 0xA6, 0xA5, 0xA2, 0x51, 0xC8, 0x40, 0x88, 0xC3, 0x7C, 0x8D, 0x29, 0xDE, 0xEB, 0xCB, 0x9B, 0x5D, 0xE3, 0xDA, 0x3D, 0x74, 0x4A, 0xDE, 0xE7, 0xE7, 0xC0, 0x85, 0x2E, 0x5E, 0x84, 0xE3, 0x1B, 0x24, 0x0B, 0x82, 0x79, 0xEF, 0x1B, 0xAD, 0xD2, 0x6C, 0xE3, 0xDD, 0xC0, 0x03, 0xFD, 0x5E, 0xD9, 0x11, 0xE5, 0x65, 0x05, 0xED, 0x65, 0x79, 0x03, 0x59, 0xE7, 0x09, 0x63, 0x39, 0x9D, 0x51, 0x00, 0x2F, 0x5E, 0x65, 0xB1, 0xA7, 0x73, 0x1B, 0x1E, 0xC9, 0x27, 0x75, 0xB3, 0xF6, 0x7B, 0x36, 0x60, 0x57, 0x3F, 0xF7, 0x45, 0x83, 0x5D, 0x01, 0xD4, 0x02, 0xA7, 0xE5, 0xCE, 0x06, 0x63, 0xF9, 0x27, 0x9A, 0xF7, 0xA6, 0xD8, 0x5A, 0x72, 0xD1, 0x7F, 0x03, 0xE0, 0xA7, 0xD3, 0x47, 0xE9, 0xC2, 0xB3, 0x1C, 0xAE, 0x99, 0xD7, 0x08, 0x13, 0xE7, 0x5F, 0x8B, 0x8D, 0xD6, 0x71, 0xF4, 0x66, 0x0E, 0x71, 0x5E, 0xE0, 0x08, 0xA1, 0x19, 0x9A, 0x39, 0xBD, 0x29, 0x78, 0x75, 0x9F, 0xFE, 0x62, 0xD4, 0x52, 0xA0, 0x01, 0x7B, 0x16, 0x9C, 0x33, 0xFD, 0xBC, 0x05, 0xFB, 0xC4, 0xC9, 0x67, 0xF6, 0xE1, 0xE0, 0x15, 0xFF, 0x13, 0x78, 0x09, 0xDF, 0x1B, 0x6C, 0x29, 0x9F, 0xA7, 0x8D, 0x3D, 0x36, 0xEB, 0x28, 0x2E, 0x85, 0xF1, 0x99, 0x5B, 0x94, 0xB4, 0xB4, 0x47, 0x78, 0xE9, 0x74, 0xDA, 0x71, 0xA0, 0x72, 0xDC, 0x32, 0x55, 0x14, 0xE8, 0x63, 0xDA, 0xB4, 0x77, 0x58, 0x14, 0xC7 }; /* CTR_SDK 4 (4.2.8) */ // APP -static const unsigned char app_4_dev_hdrpub[0x100] = +static const unsigned char app_fw21_dev_hdrpub[0x100] = { 0xCF, 0xEC, 0xB2, 0x48, 0x03, 0x6D, 0xB8, 0x09, 0xE3, 0x5C, 0x6C, 0x62, 0x2C, 0xA9, 0x49, 0xE1, 0xF4, 0xF4, 0x0C, 0x6C, 0xC3, 0xE5, 0x2F, 0x9D, 0x50, 0xA0, 0x2B, 0x5A, 0x00, 0xC6, 0x72, 0x00, 0x0B, 0xA3, 0x04, 0x5D, 0x94, 0x46, 0xE7, 0x00, 0x1B, 0x48, 0x85, 0xB5, 0x61, 0x2C, 0xC9, 0x74, 0xCA, 0x2B, 0x43, 0x13, 0xC1, 0x78, 0x97, 0x5C, 0x33, 0x2F, 0x07, 0xC7, 0x85, 0xF0, 0xDA, 0xDB, 0x60, 0x96, 0x50, 0x0F, 0x7C, 0x4B, 0x7A, 0xD7, 0x17, 0x9D, 0xE4, 0xE5, 0xC3, 0xAB, 0x6F, 0x5D, 0xA5, 0x78, 0x32, 0xAD, 0x04, 0xDD, 0x96, 0x6E, 0xDC, 0x75, 0xFF, 0xC2, 0x2F, 0xFA, 0xA2, 0xEE, 0x46, 0x89, 0xCD, 0xAE, 0x69, 0x92, 0xA4, 0x48, 0xBC, 0x46, 0x47, 0xC4, 0x8C, 0x89, 0x63, 0xE1, 0x0A, 0x4D, 0x1C, 0xDC, 0x46, 0x2F, 0x5B, 0x70, 0x8A, 0x7C, 0xE9, 0x22, 0x9C, 0x09, 0x0B, 0xA8, 0x97, 0x40, 0xCA, 0x2A, 0x7D, 0x84, 0xA1, 0x04, 0x4A, 0x2E, 0xDB, 0xD7, 0xD0, 0x64, 0x43, 0x9C, 0xD0, 0x78, 0x11, 0x41, 0x88, 0x33, 0xDD, 0x31, 0x62, 0x90, 0x2D, 0x17, 0xF2, 0xC6, 0xA9, 0x2B, 0x9C, 0x70, 0xAB, 0xDC, 0xD3, 0xAB, 0x5D, 0xDA, 0xEE, 0x3D, 0x6C, 0x0E, 0x81, 0xFF, 0xF6, 0x67, 0x5A, 0x44, 0xF9, 0xAC, 0x07, 0x3D, 0x23, 0x94, 0x75, 0x65, 0x93, 0x20, 0x0C, 0xC5, 0x76, 0x1D, 0x0F, 0x65, 0x06, 0x3D, 0x21, 0xA2, 0xF0, 0x96, 0x80, 0xB7, 0x0A, 0x49, 0x53, 0x38, 0xA3, 0x5D, 0xC0, 0x74, 0x3C, 0xA4, 0xD9, 0x40, 0x36, 0x85, 0x1F, 0x8C, 0xD1, 0x2D, 0x15, 0xF9, 0xEF, 0x24, 0xA9, 0x7E, 0x9D, 0xB2, 0x1E, 0xF8, 0xA0, 0x72, 0x81, 0x17, 0x77, 0x73, 0xB1, 0x56, 0x7F, 0xAD, 0x05, 0xA2, 0xD2, 0x30, 0x5A, 0xF5, 0xD3, 0xAF, 0x0F, 0x10, 0x4A, 0x52, 0xD8, 0x09, 0x47, 0x97 }; -static const unsigned char app_4_dev_hdrpvt[0x100] = +static const unsigned char app_fw21_dev_hdrpvt[0x100] = { 0x8C, 0xBD, 0xB2, 0x3B, 0xCE, 0x9E, 0x51, 0x09, 0xD8, 0x6D, 0x72, 0x2B, 0xCE, 0x01, 0x55, 0x32, 0x6E, 0xC5, 0x57, 0x37, 0xB4, 0x2E, 0x09, 0x59, 0xD9, 0xFE, 0x60, 0xF9, 0xCE, 0x36, 0x85, 0x6A, 0x04, 0x76, 0x76, 0xF9, 0x04, 0xEA, 0x2D, 0x68, 0xC4, 0x0F, 0x05, 0xFA, 0xAD, 0x69, 0x4C, 0x80, 0x12, 0x6C, 0xD0, 0x3D, 0xAA, 0x22, 0xFF, 0x89, 0x78, 0x57, 0xE8, 0x53, 0x25, 0x15, 0xD0, 0x7E, 0xD8, 0x55, 0x46, 0xA2, 0x04, 0xC7, 0x6E, 0xC1, 0xF3, 0x89, 0x7C, 0x2C, 0x0E, 0x93, 0x97, 0x91, 0x72, 0xF4, 0xF6, 0x90, 0x69, 0x0F, 0xB8, 0xC9, 0x17, 0xCF, 0x83, 0xAC, 0xA5, 0x1F, 0x69, 0x74, 0x12, 0x29, 0x2B, 0x21, 0x58, 0xF2, 0xDA, 0xE3, 0x25, 0x16, 0x09, 0x74, 0x40, 0x90, 0xAB, 0x1B, 0xE4, 0x06, 0x28, 0x77, 0xED, 0xC6, 0x16, 0x86, 0x0A, 0x27, 0xDD, 0x03, 0x01, 0x4D, 0x9A, 0x26, 0x6E, 0xC8, 0x9F, 0xD3, 0x9A, 0x4B, 0x59, 0xD1, 0x10, 0x9B, 0xEB, 0xA9, 0x58, 0x72, 0xBD, 0xA1, 0xFE, 0x9D, 0x86, 0xED, 0x29, 0xE9, 0x29, 0x49, 0x62, 0x4B, 0xD8, 0x7D, 0x2A, 0x7A, 0x66, 0x1B, 0xE5, 0x04, 0x81, 0x56, 0x10, 0x50, 0xAF, 0xB8, 0x48, 0x27, 0xC1, 0xC9, 0x46, 0xBD, 0x3F, 0x16, 0x06, 0xA5, 0x3D, 0x04, 0x9F, 0x0D, 0x54, 0x71, 0x1C, 0xF4, 0x82, 0xC0, 0x66, 0x74, 0xEA, 0x9C, 0x83, 0x3C, 0x27, 0x01, 0xDF, 0x6F, 0x56, 0xA8, 0x1B, 0xE3, 0x68, 0x55, 0x9F, 0xAB, 0x90, 0x67, 0x20, 0x25, 0xFA, 0x3D, 0x51, 0x2A, 0x23, 0x16, 0xCB, 0x06, 0x5A, 0xAD, 0xAC, 0xC8, 0x47, 0xF9, 0x39, 0x2E, 0x6A, 0xF8, 0xFA, 0x0A, 0xE8, 0x8A, 0x64, 0x84, 0x6B, 0xED, 0xDA, 0x8F, 0x2A, 0x08, 0x86, 0x8F, 0x56, 0x69, 0x64, 0xC3, 0x98, 0x55, 0x37, 0x9A, 0x48, 0x40, 0xDA, 0xD5, 0x03, 0x21 }; -static const unsigned char app_4_dev_acexsig[0x100] = +static const unsigned char app_fw21_dev_acexsig[0x100] = { 0xDF, 0x1C, 0x8B, 0x98, 0xE4, 0x6F, 0xA2, 0x35, 0x6C, 0xC3, 0x18, 0x17, 0x98, 0xF3, 0xCE, 0x54, 0x7E, 0x14, 0x2E, 0x7F, 0x1E, 0xD8, 0x6D, 0xCF, 0xBC, 0x29, 0x4E, 0xFE, 0x32, 0x2E, 0xC1, 0x11, 0xAD, 0x46, 0x9A, 0xC6, 0x70, 0xEA, 0xEE, 0x28, 0x55, 0x22, 0xE1, 0x36, 0x05, 0x1C, 0x04, 0x8A, 0xCE, 0x0F, 0x0C, 0x83, 0x8F, 0xC8, 0xD6, 0xDE, 0x11, 0x8E, 0xEA, 0xCF, 0xAD, 0x9B, 0xCF, 0x81, 0x0D, 0xEB, 0x71, 0x13, 0xB3, 0xD3, 0xAE, 0x83, 0x02, 0x4C, 0x0E, 0x10, 0x50, 0x59, 0x3C, 0xEE, 0x60, 0x06, 0xFB, 0x8C, 0x7F, 0xC2, 0x20, 0x24, 0x01, 0x62, 0x55, 0x87, 0x60, 0x0F, 0xAD, 0xFA, 0x73, 0x2E, 0xF6, 0x65, 0x62, 0xD2, 0xE5, 0x10, 0x45, 0x69, 0x70, 0x39, 0x03, 0xD1, 0x39, 0xEC, 0x50, 0xC1, 0xD4, 0x25, 0x39, 0xB2, 0x90, 0x11, 0x4E, 0x95, 0xCB, 0x19, 0xEB, 0xCA, 0x0F, 0xB5, 0xFA, 0xC7, 0xB0, 0xE2, 0xD7, 0xE0, 0x71, 0xC3, 0xE5, 0x55, 0x33, 0x9E, 0x5C, 0xDC, 0x4D, 0x3B, 0x51, 0x11, 0x0D, 0x31, 0x78, 0x96, 0xCA, 0xD7, 0x18, 0x58, 0xEE, 0x00, 0xE9, 0x28, 0xF2, 0x68, 0x76, 0xD4, 0x57, 0xFE, 0x65, 0xB1, 0x4B, 0x49, 0x3F, 0xF6, 0xA6, 0x58, 0x4A, 0xC7, 0xFC, 0xC4, 0xBB, 0x61, 0xBC, 0x58, 0x8D, 0x55, 0x65, 0xE6, 0x0A, 0x79, 0x39, 0x41, 0xB8, 0x80, 0x61, 0xF7, 0x05, 0xC3, 0xFE, 0xD6, 0x8B, 0x09, 0x82, 0xC2, 0x5F, 0xA6, 0x56, 0xF9, 0xEE, 0x1D, 0x0E, 0x06, 0x3E, 0x9F, 0x3F, 0xF1, 0x93, 0x9A, 0x4F, 0xA2, 0xD5, 0x91, 0x87, 0x8A, 0xFE, 0xCF, 0xC3, 0xFC, 0x8A, 0xB1, 0xC4, 0x78, 0xE9, 0xD1, 0x1A, 0xF7, 0xB1, 0xD3, 0x20, 0xCB, 0x83, 0xBE, 0x03, 0xD5, 0xCA, 0xA5, 0x5E, 0x17, 0xA6, 0x91, 0x10, 0xD4, 0xBE, 0x23, 0xD6, 0x4B, 0x4F, 0x03, 0xA9, 0xAE }; // DEMO -static const unsigned char demo_4_dev_hdrpub[0x100] = +static const unsigned char demo_fw21_dev_hdrpub[0x100] = { 0xB5, 0x11, 0x8D, 0x9E, 0x2D, 0xDB, 0x70, 0x6D, 0x6E, 0xEE, 0xAA, 0x21, 0xE0, 0x4E, 0x80, 0x0A, 0x96, 0x4A, 0x10, 0xD0, 0x9C, 0xD7, 0xD9, 0xD4, 0x94, 0x87, 0x72, 0xA2, 0xAF, 0x02, 0xA0, 0x05, 0x2E, 0xBF, 0x17, 0xEB, 0xFE, 0x5B, 0x9F, 0xB7, 0x0B, 0x1E, 0x3E, 0xF9, 0xAC, 0xBC, 0x7B, 0xB1, 0x56, 0x10, 0x24, 0x5F, 0x57, 0x2C, 0x08, 0xD0, 0x14, 0x79, 0x83, 0x84, 0x6A, 0x45, 0x25, 0xEB, 0xD9, 0xBE, 0x02, 0x21, 0xF7, 0x35, 0xC2, 0x74, 0x57, 0xC5, 0xAC, 0x34, 0x05, 0xC6, 0x9E, 0x82, 0xB8, 0xED, 0x78, 0xC4, 0x3B, 0xFD, 0x23, 0x59, 0x54, 0xD2, 0x0A, 0x0B, 0x5B, 0x25, 0xC0, 0x71, 0xC3, 0x84, 0x3A, 0xA7, 0xF9, 0x99, 0x86, 0xD8, 0xFE, 0x60, 0x10, 0x85, 0x77, 0x57, 0x76, 0x0C, 0x25, 0xE1, 0x18, 0x18, 0x3B, 0x83, 0xFD, 0x36, 0x7C, 0x84, 0x58, 0xC2, 0xC4, 0x68, 0x4F, 0xD1, 0xD7, 0x0A, 0x88, 0xFD, 0xCA, 0x97, 0xA1, 0xE5, 0xCE, 0x72, 0x63, 0xCF, 0x74, 0xD0, 0x20, 0xD9, 0xDE, 0x3F, 0xBB, 0x11, 0xF9, 0x21, 0xAB, 0x3F, 0x54, 0x41, 0xA7, 0xAA, 0xCA, 0xFC, 0xE1, 0x1A, 0x8C, 0x12, 0xC9, 0x39, 0x13, 0x5A, 0x81, 0x29, 0x49, 0xE8, 0xFB, 0x48, 0xC9, 0x4D, 0x50, 0x87, 0xAE, 0x51, 0xFB, 0x94, 0xFC, 0xF0, 0x9C, 0x70, 0x1C, 0xE8, 0x6E, 0x44, 0x53, 0x1E, 0x2F, 0x27, 0x5C, 0xB8, 0xEC, 0xBE, 0xFC, 0xD9, 0x98, 0x6A, 0x08, 0xD0, 0x5C, 0x4D, 0x78, 0x2D, 0x4D, 0x07, 0xAD, 0x5E, 0xB8, 0x51, 0x40, 0xE2, 0x2A, 0x7F, 0xB1, 0x54, 0x47, 0x5C, 0x99, 0x12, 0xC2, 0x6D, 0x5E, 0xED, 0x25, 0x30, 0x6A, 0x99, 0xC5, 0x0D, 0x65, 0x83, 0x68, 0x3A, 0xFD, 0x82, 0x59, 0x0D, 0xCE, 0x0B, 0x49, 0xBE, 0x17, 0x46, 0x51, 0xA9, 0xB6, 0x54, 0xE1, 0x18, 0xBD, 0x49, 0xE6, 0x7F }; -static const unsigned char demo_4_dev_hdrpvt[0x100] = +static const unsigned char demo_fw21_dev_hdrpvt[0x100] = { 0x1D, 0x7B, 0x79, 0x32, 0xAB, 0x46, 0xD2, 0xBC, 0x8E, 0xD6, 0x7F, 0x8F, 0x3A, 0x85, 0xAD, 0xA5, 0x8B, 0xA9, 0x0D, 0xA9, 0xDA, 0x0F, 0xEF, 0x61, 0x04, 0xBA, 0x35, 0x39, 0x36, 0x03, 0xD8, 0x68, 0x5F, 0x9F, 0x2F, 0xD6, 0xF6, 0x38, 0x96, 0xFD, 0xE7, 0xEA, 0x89, 0xD8, 0x7F, 0x7E, 0xC5, 0x29, 0x2F, 0xD9, 0x3B, 0x02, 0xE7, 0x1F, 0xBD, 0x63, 0x9C, 0x21, 0xD8, 0xFF, 0x43, 0x8A, 0x74, 0xCD, 0x3D, 0x4C, 0x09, 0xEE, 0xDB, 0xE0, 0xBE, 0x03, 0xD1, 0x92, 0xD7, 0x22, 0x35, 0x5A, 0x8C, 0xCE, 0xBE, 0x2B, 0xB4, 0x81, 0x47, 0x3F, 0x45, 0x75, 0x33, 0x31, 0x6B, 0xFF, 0x43, 0x5D, 0x17, 0x43, 0xAE, 0xD1, 0x25, 0xF7, 0xD9, 0xD5, 0x5C, 0xB6, 0x92, 0x5C, 0xB3, 0xF3, 0xF7, 0x65, 0x9F, 0x4C, 0x05, 0x12, 0xEC, 0xA8, 0x6D, 0x70, 0x65, 0x57, 0x6C, 0xD8, 0xE3, 0xD6, 0xFA, 0xC1, 0xFD, 0x54, 0xE8, 0x34, 0x67, 0x4D, 0x0A, 0x14, 0x2F, 0xA3, 0xD4, 0x81, 0x8C, 0xC3, 0xD0, 0x8B, 0x09, 0x08, 0x90, 0x70, 0x68, 0xA0, 0x0E, 0xD1, 0x0B, 0xAA, 0x71, 0xEC, 0x9A, 0x1A, 0x83, 0xFF, 0xA1, 0x70, 0xEB, 0xAC, 0xF2, 0xE9, 0x80, 0xA1, 0xB8, 0x20, 0x31, 0x83, 0xF5, 0x37, 0x01, 0x72, 0x06, 0x50, 0x05, 0x3F, 0x14, 0xF9, 0x29, 0x48, 0x84, 0xA0, 0x0E, 0xF7, 0xB8, 0x1D, 0xA3, 0x36, 0x5A, 0x78, 0x6D, 0x83, 0x90, 0x27, 0xE3, 0x50, 0x49, 0x2F, 0x65, 0xE5, 0x61, 0xED, 0x65, 0xBE, 0xEA, 0x34, 0xA6, 0x6A, 0xEF, 0x49, 0xB4, 0xE0, 0xBC, 0xC2, 0xA5, 0xB8, 0xEB, 0xA9, 0x2F, 0xBA, 0x26, 0x76, 0xB2, 0x5A, 0x3A, 0x3B, 0xFD, 0xAD, 0xFB, 0xE4, 0x79, 0xE2, 0x85, 0x54, 0x5B, 0xAB, 0x1F, 0x0A, 0xE5, 0x8B, 0x77, 0x3A, 0x10, 0x98, 0x26, 0x74, 0xC8, 0xB0, 0x82, 0xB1, 0xF9, 0x8F, 0x68, 0x59 }; -static const unsigned char demo_4_dev_acexsig[0x100] = +static const unsigned char demo_fw21_dev_acexsig[0x100] = { 0xD3, 0x7D, 0x42, 0xBA, 0x6A, 0x1E, 0xD8, 0x07, 0x3C, 0x4A, 0xC4, 0xCD, 0x8C, 0x68, 0x3D, 0xCD, 0xCD, 0xBD, 0x9D, 0xCE, 0xB5, 0x2A, 0xF9, 0x63, 0x3D, 0xA9, 0x54, 0x0A, 0x2E, 0x4C, 0xE1, 0x60, 0x4B, 0xD0, 0xC9, 0xEB, 0xEF, 0x31, 0x65, 0x70, 0xB9, 0x0E, 0x06, 0x3B, 0x3D, 0x42, 0x4C, 0x6E, 0x8D, 0x2C, 0xD4, 0x71, 0x29, 0x76, 0xB7, 0xDD, 0x8C, 0xDA, 0xE7, 0xE3, 0x96, 0xA7, 0xAA, 0xF8, 0xCA, 0x05, 0xE8, 0xA7, 0x0A, 0xDD, 0x01, 0x49, 0xBD, 0xF1, 0xA5, 0xE8, 0x16, 0x22, 0xEE, 0x47, 0x1F, 0xEF, 0x28, 0x48, 0x87, 0xA9, 0x2D, 0xFC, 0x4E, 0xD5, 0xA5, 0x98, 0xB1, 0xFE, 0x1B, 0xEB, 0xA9, 0x06, 0x3C, 0x76, 0xD9, 0xAA, 0x0E, 0x9C, 0x60, 0xFC, 0xE9, 0x77, 0x9D, 0x7F, 0x67, 0xAC, 0xF5, 0xC7, 0x49, 0x12, 0xFD, 0x76, 0xAC, 0xD2, 0x54, 0xDB, 0x73, 0x41, 0x10, 0x1F, 0x04, 0x3F, 0xD0, 0x6F, 0xE0, 0x80, 0x24, 0xCC, 0xEE, 0xBF, 0x25, 0x9D, 0x0D, 0x5A, 0x2A, 0x1C, 0xC5, 0xD4, 0xE3, 0x5D, 0x3A, 0xC1, 0x86, 0xD3, 0xD4, 0x52, 0x1C, 0x4C, 0xBF, 0x31, 0xEB, 0x54, 0xCA, 0x4C, 0x06, 0x50, 0x52, 0x87, 0xD4, 0x9D, 0x4A, 0x4B, 0x22, 0xE1, 0x4A, 0xE9, 0x4D, 0x05, 0xA8, 0x57, 0xEC, 0xF8, 0x90, 0xF8, 0x58, 0xC3, 0x8B, 0x3A, 0x0F, 0x88, 0x36, 0xF4, 0xE5, 0x44, 0x10, 0x80, 0x68, 0x86, 0x1D, 0xAE, 0x90, 0x20, 0x03, 0x22, 0x2D, 0x44, 0xBF, 0xAB, 0x2B, 0xA1, 0x14, 0xAD, 0x6B, 0x40, 0x57, 0xDB, 0xBB, 0xDA, 0x09, 0x4C, 0x51, 0x26, 0x9B, 0xE3, 0xD9, 0xF9, 0xE1, 0xBC, 0xF1, 0xF1, 0xCD, 0x30, 0xB4, 0xF5, 0x39, 0xD0, 0xBC, 0xF7, 0x98, 0x05, 0xAF, 0xA8, 0x33, 0x4B, 0xC1, 0x16, 0x0F, 0xF2, 0xC2, 0x79, 0x96, 0xEC, 0xBE, 0xA9, 0xF5, 0x55, 0x7C, 0x82, 0x95, 0x73 }; // DLP -static const unsigned char dlp_4_dev_hdrpub[0x100] = +static const unsigned char dlp_fw21_dev_hdrpub[0x100] = { 0xB3, 0x16, 0x68, 0xF1, 0xED, 0x59, 0xC8, 0x7F, 0xC6, 0x50, 0x21, 0xFE, 0x36, 0x7C, 0x55, 0xE7, 0x07, 0xF9, 0x1D, 0x1B, 0xF5, 0xB1, 0x2A, 0x6B, 0x3A, 0xDE, 0x2D, 0x4C, 0x51, 0xCD, 0x4C, 0x9F, 0xEE, 0x1D, 0xE4, 0xE8, 0xF0, 0xFD, 0x09, 0x8E, 0x0F, 0x92, 0x5F, 0xDB, 0x9C, 0x5C, 0x15, 0x55, 0x1A, 0x4D, 0x04, 0x8C, 0xB0, 0xA4, 0x88, 0x97, 0xC4, 0xD5, 0x92, 0x04, 0x42, 0x33, 0x84, 0x81, 0x06, 0xD6, 0xF2, 0x17, 0xDE, 0x83, 0x17, 0x50, 0xD0, 0x47, 0x61, 0x14, 0x0D, 0xB7, 0xC7, 0xA0, 0xC1, 0x8B, 0x82, 0x47, 0x13, 0xEE, 0x76, 0xA2, 0xA3, 0x8D, 0xCE, 0x55, 0xC1, 0xF3, 0x7A, 0xEA, 0x91, 0xE1, 0xB9, 0x2F, 0x8F, 0x9B, 0xC3, 0x7B, 0x51, 0x2F, 0xE7, 0xAD, 0x93, 0x9C, 0xFD, 0xDF, 0x19, 0xC8, 0x6C, 0x24, 0xC2, 0xE2, 0x91, 0x97, 0x1F, 0xEB, 0x4B, 0xD4, 0x46, 0x6C, 0x06, 0x93, 0xAF, 0xF5, 0x5E, 0x8F, 0x77, 0x25, 0xC4, 0x28, 0xC0, 0x82, 0x4A, 0x78, 0xE9, 0x14, 0x08, 0xC3, 0xC3, 0x58, 0x24, 0x44, 0x2D, 0x2B, 0xA7, 0xEE, 0x28, 0xEF, 0x1B, 0x6D, 0xAA, 0x9C, 0xED, 0x7F, 0x35, 0xCE, 0x86, 0x5C, 0x6B, 0x8A, 0x23, 0xD3, 0x9D, 0x05, 0x8F, 0xD2, 0x41, 0x93, 0x1D, 0x1D, 0x7E, 0xB0, 0x46, 0x23, 0x63, 0x07, 0xEA, 0x5F, 0x26, 0xE3, 0x81, 0x27, 0xB3, 0x95, 0xB1, 0x93, 0x59, 0xD4, 0x1A, 0xB8, 0x73, 0xD0, 0x09, 0x95, 0x2B, 0xE8, 0x8B, 0xE2, 0x73, 0x5F, 0x34, 0xB9, 0x98, 0x82, 0xF0, 0x11, 0xC6, 0x8F, 0x12, 0x4D, 0x09, 0x57, 0x10, 0x97, 0x22, 0x0E, 0xC8, 0x7D, 0x40, 0xC1, 0x9D, 0x12, 0x1F, 0x71, 0xFE, 0x1E, 0x1A, 0x8C, 0x3F, 0x56, 0xAC, 0x43, 0xC3, 0x66, 0x0C, 0x81, 0xAE, 0xC1, 0x8F, 0x68, 0xFF, 0x87, 0x07, 0x3C, 0xCD, 0x0A, 0x23, 0xDE, 0xBA, 0x9B }; -static const unsigned char dlp_4_dev_hdrpvt[0x100] = +static const unsigned char dlp_fw21_dev_hdrpvt[0x100] = { 0x77, 0xC2, 0x7A, 0xB7, 0x9E, 0x13, 0xB6, 0x62, 0xCC, 0x09, 0x76, 0x51, 0xFB, 0xB9, 0xB5, 0xF0, 0x63, 0x82, 0x91, 0x96, 0xCA, 0xFC, 0x88, 0xF3, 0x60, 0x50, 0x87, 0x56, 0x4C, 0x35, 0xD0, 0x11, 0xFB, 0x38, 0x7E, 0x85, 0xCF, 0xF2, 0x46, 0xDB, 0x7B, 0x4A, 0x55, 0x54, 0x15, 0x01, 0xF7, 0x3A, 0x0B, 0xF6, 0x89, 0x1E, 0x54, 0x5A, 0x13, 0x05, 0xFB, 0x19, 0x1F, 0x26, 0x3D, 0xE7, 0x19, 0xAA, 0xF7, 0x19, 0xF2, 0x97, 0x47, 0xB3, 0xBE, 0x79, 0xCA, 0x6E, 0x91, 0x5A, 0xC9, 0xB9, 0xA6, 0x83, 0xB8, 0x2A, 0x45, 0x1A, 0xA7, 0x17, 0x86, 0xBA, 0x48, 0x49, 0x62, 0x3C, 0x33, 0x11, 0x51, 0x97, 0x5F, 0xAA, 0xE5, 0x1E, 0x0B, 0x19, 0x0C, 0xE6, 0x80, 0x6A, 0x5A, 0xB1, 0xD6, 0xCE, 0xDB, 0x6E, 0xC0, 0x5D, 0x29, 0x04, 0x84, 0x56, 0xE3, 0x29, 0x7E, 0xAC, 0xE8, 0xEE, 0xB1, 0x91, 0x37, 0xEB, 0x98, 0x9C, 0xBD, 0x02, 0x6A, 0x78, 0x61, 0xB0, 0x79, 0x1A, 0x9F, 0x30, 0x86, 0xF6, 0x71, 0x5A, 0x5A, 0x12, 0xA1, 0x9E, 0xA1, 0x68, 0x03, 0xE5, 0x95, 0xA8, 0x38, 0x58, 0x87, 0x08, 0x57, 0x35, 0x32, 0x47, 0x3B, 0xFC, 0x02, 0x6F, 0xCE, 0x55, 0x61, 0xA3, 0x2A, 0x6B, 0x2F, 0xF8, 0xEE, 0x8D, 0xFA, 0x43, 0x33, 0x02, 0x63, 0x47, 0x02, 0x78, 0x5A, 0x7F, 0x64, 0x07, 0x92, 0xB7, 0x7C, 0x09, 0x7C, 0xFE, 0x2D, 0x1C, 0xFC, 0x77, 0x9F, 0x19, 0x20, 0xDD, 0x6D, 0x4C, 0xFE, 0x49, 0x09, 0x47, 0xCA, 0x9B, 0x1C, 0x8C, 0x1F, 0x37, 0xAC, 0x14, 0x85, 0x56, 0xC0, 0xFD, 0xD6, 0x01, 0xB3, 0x40, 0xA3, 0x1A, 0x32, 0x78, 0xA0, 0xDD, 0x21, 0x75, 0xBF, 0x24, 0xD2, 0x93, 0x85, 0xED, 0x22, 0xAD, 0x99, 0x91, 0x87, 0x4A, 0xEC, 0xC0, 0x6C, 0x71, 0x00, 0x76, 0x08, 0x23, 0xA2, 0xF3, 0xCF, 0x61 }; -static const unsigned char dlp_4_dev_acexsig[0x100] = +static const unsigned char dlp_fw21_dev_acexsig[0x100] = { 0xAC, 0xE2, 0xA7, 0xC3, 0x00, 0xDE, 0xE8, 0xE9, 0xE0, 0x03, 0xB3, 0x54, 0x08, 0xA8, 0xF8, 0x3A, 0x2E, 0xD8, 0x10, 0x6B, 0xEC, 0xDC, 0x4E, 0xEE, 0x62, 0x10, 0x71, 0x49, 0xD4, 0x43, 0xB1, 0x0E, 0x6B, 0x8C, 0xD7, 0x54, 0xD5, 0x62, 0x28, 0x3F, 0xAA, 0xDE, 0xA9, 0x7D, 0xED, 0x37, 0x7C, 0xE7, 0x89, 0x0B, 0x02, 0xB2, 0x72, 0x4B, 0x17, 0xDB, 0xE2, 0xD3, 0x7C, 0x94, 0x12, 0x3F, 0x2E, 0xA1, 0x08, 0x99, 0xCC, 0x7F, 0x93, 0xE6, 0x38, 0xC9, 0x37, 0x84, 0xD7, 0x11, 0x9D, 0x02, 0x4D, 0x66, 0xB4, 0x70, 0x9F, 0xD8, 0xC6, 0xDD, 0xD5, 0x13, 0x52, 0xF0, 0xA6, 0x78, 0x8C, 0x8E, 0x15, 0xA0, 0xA1, 0xF3, 0xC4, 0xC3, 0x48, 0x45, 0xA5, 0xBE, 0xC9, 0x7A, 0x8B, 0xD3, 0x95, 0xA5, 0x4C, 0xF1, 0xB3, 0x0C, 0x6C, 0x76, 0xA7, 0x57, 0xA1, 0x77, 0xDF, 0x2F, 0xC8, 0x06, 0xA6, 0x0D, 0x1A, 0x09, 0xE4, 0x38, 0x64, 0x07, 0xBE, 0x6A, 0xD2, 0xA0, 0xC0, 0xEC, 0x09, 0x64, 0x9F, 0x0D, 0x93, 0x0C, 0x89, 0xA2, 0x71, 0xD6, 0xC6, 0xC2, 0x54, 0x79, 0x2A, 0xA4, 0x31, 0x28, 0x24, 0x1A, 0xF3, 0x56, 0x78, 0x63, 0x99, 0x97, 0xA5, 0xCE, 0x8F, 0x52, 0x7A, 0x79, 0x51, 0xEE, 0x4C, 0x8B, 0x00, 0x9D, 0x5C, 0x3E, 0xD5, 0xAA, 0x24, 0x9C, 0x94, 0xC6, 0xA3, 0x99, 0x1B, 0x2D, 0xD4, 0xFF, 0xB4, 0x25, 0x73, 0x13, 0x33, 0x9F, 0x03, 0x6F, 0x1E, 0x75, 0xC4, 0x70, 0xF4, 0x07, 0x4F, 0x18, 0xFE, 0xBD, 0x8F, 0x2C, 0x9B, 0x33, 0xD4, 0x30, 0xA7, 0x18, 0x4A, 0xF1, 0xA4, 0xDD, 0x78, 0x41, 0xA0, 0xB8, 0x02, 0x8D, 0x51, 0x96, 0xBE, 0xE7, 0x17, 0x94, 0x66, 0x65, 0x27, 0xF7, 0x69, 0x48, 0x7E, 0xA9, 0x08, 0x71, 0x20, 0x76, 0xB7, 0x8E, 0xD2, 0xBF, 0x5C, 0x7E, 0x5E, 0x06, 0x45, 0xAB, 0x7E, 0x2E }; /* CTR_SDK 5 (5.2.2) */ // APP -static const unsigned char app_5_dev_hdrpub[0x100] = +static const unsigned char app_fw23_dev_hdrpub[0x100] = { 0xED, 0xD8, 0x3B, 0x9E, 0x78, 0x26, 0xD2, 0x96, 0x73, 0x6B, 0x7D, 0xB0, 0x5E, 0x01, 0x51, 0x63, 0x0F, 0x4B, 0xE6, 0x87, 0xCC, 0x4A, 0x03, 0x84, 0xB2, 0x65, 0x77, 0xB2, 0xA2, 0x6F, 0x20, 0x7A, 0x3B, 0xC3, 0xF3, 0xCC, 0x37, 0x7C, 0x1F, 0x77, 0xC8, 0x3D, 0xE2, 0xA9, 0x19, 0x4E, 0x7C, 0xBB, 0xAC, 0x2D, 0x7D, 0x7D, 0xE1, 0x35, 0xF8, 0x44, 0x2E, 0xC5, 0xB7, 0x50, 0x8D, 0xA1, 0x18, 0x34, 0x45, 0x20, 0xD4, 0x29, 0x0E, 0x79, 0xA7, 0xE1, 0x97, 0x1A, 0xE0, 0x39, 0x1D, 0x55, 0xB4, 0x2A, 0xDB, 0xD4, 0x77, 0x56, 0xC8, 0x73, 0xC8, 0x63, 0x04, 0xBA, 0x4C, 0x61, 0x48, 0x2E, 0x52, 0xD5, 0xC5, 0x21, 0x83, 0x4C, 0xBE, 0xE4, 0x38, 0x44, 0xD4, 0x7D, 0x8E, 0xDE, 0x17, 0x4A, 0x6F, 0xBD, 0xB0, 0x2B, 0xF7, 0xA8, 0xF3, 0xD3, 0xB7, 0xED, 0xF2, 0xE6, 0x4C, 0x5B, 0x83, 0x3E, 0x68, 0x67, 0xAF, 0x45, 0xE1, 0xF3, 0xAA, 0xFF, 0x5E, 0xB0, 0x0B, 0x39, 0x8E, 0xCF, 0xA7, 0x28, 0x88, 0xEA, 0x8B, 0x6F, 0x39, 0x39, 0x9F, 0xB1, 0x51, 0xCA, 0xC3, 0xFD, 0x46, 0x02, 0x92, 0x62, 0xB9, 0x98, 0x95, 0xAA, 0xCA, 0x76, 0x75, 0xE7, 0xE8, 0x88, 0x1C, 0x59, 0x9F, 0xD8, 0xCA, 0x99, 0x76, 0x3D, 0x3B, 0x56, 0xFA, 0xE4, 0x5A, 0x2F, 0x12, 0x07, 0x14, 0xA7, 0x81, 0x3D, 0x3B, 0xC0, 0xA7, 0x10, 0xE8, 0x9E, 0x69, 0x41, 0x55, 0x3F, 0xD8, 0x2B, 0x9B, 0x09, 0x1C, 0xE3, 0x94, 0x29, 0xD5, 0x35, 0xB2, 0xC7, 0x04, 0x16, 0x8A, 0xBA, 0x0C, 0x77, 0x78, 0x69, 0xAC, 0x3D, 0xE8, 0x92, 0xD2, 0x78, 0x88, 0x51, 0xAC, 0x80, 0x03, 0xC1, 0x23, 0xEC, 0xDF, 0x0C, 0x80, 0x09, 0x2D, 0xBC, 0x74, 0x22, 0x3F, 0xF2, 0xE3, 0xF0, 0x09, 0x67, 0xA7, 0xD6, 0x36, 0xA8, 0xE4, 0x3F, 0xF5, 0xEC, 0x3D, 0x8B }; -static const unsigned char app_5_dev_acexsig[0x100] = +static const unsigned char app_fw23_dev_acexsig[0x100] = { 0x1C, 0x2A, 0x20, 0x20, 0xE1, 0x8C, 0x57, 0x67, 0xA7, 0x25, 0x6C, 0x77, 0x72, 0xAE, 0xC9, 0x6D, 0xCD, 0xB3, 0xA4, 0x0E, 0xCE, 0x8A, 0x62, 0x46, 0xB7, 0x99, 0xEB, 0x87, 0xDC, 0xCD, 0x3A, 0x1C, 0x10, 0x18, 0x2C, 0x59, 0x23, 0x81, 0x8A, 0xB9, 0x66, 0x9A, 0x20, 0x42, 0x5E, 0x38, 0xE2, 0x53, 0x92, 0xB1, 0xDD, 0x38, 0x6E, 0x01, 0xF4, 0x56, 0xEC, 0x43, 0x22, 0x9B, 0x15, 0x36, 0xE4, 0x2C, 0x3E, 0x6D, 0x1B, 0xAE, 0xAA, 0x71, 0xA8, 0x0C, 0x9A, 0xC4, 0x5E, 0x19, 0x93, 0xD6, 0x59, 0x23, 0xCD, 0xAD, 0xA5, 0xEF, 0xFD, 0x7D, 0x05, 0x73, 0xAF, 0x29, 0xC4, 0x85, 0x0B, 0x33, 0x9B, 0xF4, 0x5D, 0x31, 0x8E, 0xE8, 0x6C, 0xD1, 0x39, 0xBB, 0x03, 0x8B, 0xD9, 0x77, 0x30, 0xA4, 0x1A, 0x63, 0x50, 0xA0, 0xB9, 0x7B, 0x46, 0x10, 0x6A, 0x9A, 0x31, 0x71, 0x45, 0x72, 0x8C, 0x10, 0x6B, 0xE9, 0xBE, 0xC7, 0x0E, 0x2B, 0x4A, 0xF4, 0x29, 0x0B, 0xAA, 0x91, 0x76, 0xF8, 0xB3, 0x74, 0x57, 0xF8, 0x9B, 0xF4, 0xBE, 0x50, 0x22, 0x46, 0x93, 0xF1, 0x80, 0x64, 0xC1, 0x50, 0x77, 0x2A, 0x2A, 0x70, 0x74, 0x0C, 0xB2, 0xDC, 0x77, 0x34, 0x84, 0x83, 0x4E, 0x5B, 0x47, 0x30, 0x52, 0xF3, 0xEC, 0xC6, 0xB5, 0x93, 0xF3, 0x77, 0x0D, 0x10, 0x86, 0x65, 0x35, 0xC9, 0x84, 0x07, 0x43, 0x51, 0x00, 0x92, 0x2F, 0xA7, 0x75, 0x02, 0x23, 0xEE, 0x0F, 0x9E, 0x69, 0x5A, 0xF9, 0x9C, 0x0E, 0x17, 0x05, 0x94, 0x2A, 0xE9, 0x79, 0x82, 0x2C, 0x68, 0x3E, 0xCD, 0x26, 0xE6, 0x9E, 0x18, 0x99, 0x9A, 0xA0, 0xA7, 0x95, 0xA3, 0xBB, 0xB5, 0x9D, 0x86, 0x6E, 0x99, 0xFD, 0xC4, 0x1F, 0x49, 0x78, 0x2D, 0x4A, 0x8F, 0xAA, 0x77, 0x48, 0x6F, 0x69, 0x6A, 0x71, 0xA7, 0x19, 0x67, 0x56, 0x5B, 0x10, 0x27, 0x07, 0x7F +}; + +/* CTR_SDK 6 (6.?.?) */ +// FIRM +static const unsigned char firm_fw26_dev_hdrpub[0x100] = +{ + 0xC9, 0x3C, 0x30, 0xE3, 0x64, 0xFD, 0x70, 0xBB, 0x98, 0xB0, 0x7B, 0x59, 0x4F, 0x6A, 0xC5, 0x1A, 0x6E, 0xF7, 0x89, 0x6E, 0xF9, 0x9C, 0x58, 0xC4, 0x34, 0x51, 0xAF, 0x0B, 0x41, 0x0D, 0x76, 0x7D, 0xE5, 0xF8, 0x9C, 0x2F, 0x08, 0x52, 0x75, 0xE2, 0x83, 0x2D, 0x6B, 0x6F, 0x1D, 0xC6, 0x13, 0x41, 0xD6, 0x91, 0x78, 0xF8, 0xD6, 0xC6, 0x57, 0x58, 0xC4, 0xE4, 0x3D, 0x3C, 0x19, 0xEB, 0x81, 0x77, 0x6C, 0xCF, 0x4A, 0xCD, 0x87, 0x9A, 0x2A, 0x82, 0xCB, 0x94, 0xE0, 0xAB, 0x93, 0x49, 0x00, 0x48, 0x1B, 0x6B, 0x0E, 0x62, 0x94, 0xE4, 0x70, 0xAF, 0x16, 0x0C, 0x93, 0x3A, 0x6B, 0x16, 0x20, 0x93, 0xDF, 0x84, 0x26, 0x88, 0x1B, 0x61, 0x47, 0x2C, 0xAE, 0x58, 0x07, 0x5A, 0xE1, 0xED, 0x61, 0x99, 0x15, 0x47, 0x0F, 0x83, 0x69, 0xAF, 0x89, 0xBB, 0x18, 0xC7, 0x56, 0x9C, 0xF5, 0x00, 0xD8, 0x76, 0xFC, 0x2F, 0x56, 0x6D, 0xD7, 0xD2, 0x0F, 0x41, 0xF4, 0xB6, 0xC3, 0x46, 0x37, 0x24, 0xAE, 0x9B, 0x1A, 0xD7, 0xA0, 0x29, 0x48, 0xD0, 0x6C, 0x7F, 0x54, 0x7D, 0x0E, 0xA7, 0xDA, 0x7E, 0x39, 0xF7, 0xCA, 0xB6, 0x51, 0x37, 0x9F, 0x34, 0x84, 0x2F, 0x41, 0xF3, 0x4A, 0x6F, 0xDC, 0x75, 0x83, 0x74, 0x8C, 0x16, 0x28, 0xB2, 0x3D, 0x7B, 0xF1, 0x91, 0xEC, 0x09, 0x25, 0x5F, 0x89, 0x4F, 0x81, 0xA4, 0xD5, 0x9F, 0xD1, 0xD4, 0xDC, 0x0D, 0x96, 0x85, 0x34, 0x01, 0x4C, 0xFE, 0x5F, 0x1A, 0xA3, 0x0B, 0x5B, 0xCF, 0xCF, 0xE1, 0x50, 0x9C, 0x89, 0x2E, 0x06, 0xB4, 0x1A, 0xED, 0x22, 0x76, 0xDA, 0x3D, 0xB5, 0x3E, 0xF5, 0x9B, 0xA7, 0xE2, 0x0E, 0x9D, 0xBD, 0xE0, 0x68, 0xB5, 0xB5, 0x8A, 0xAA, 0x98, 0xF9, 0x07, 0xF1, 0xB4, 0x96, 0xC0, 0xA1, 0xB9, 0xE8, 0x56, 0xAC, 0xB7, 0x39, 0x11, 0x14, 0x0B +}; + +static const unsigned char firm_fw26_dev_acexsig[0x100] = +{ + 0xB0, 0xEB, 0x0B, 0xE4, 0x81, 0x5F, 0x4C, 0x41, 0x74, 0x13, 0x8D, 0x8C, 0x2D, 0x07, 0xDB, 0x67, 0xDB, 0x0A, 0xD3, 0xE9, 0xD9, 0x24, 0x35, 0xA7, 0x2A, 0x7A, 0x7D, 0x22, 0xAD, 0xE5, 0x5B, 0xAC, 0x6B, 0x08, 0x9E, 0xC3, 0x19, 0x5D, 0x28, 0x13, 0x71, 0xE0, 0x4E, 0xF8, 0xA4, 0x2F, 0xF9, 0x41, 0xB4, 0x9F, 0x02, 0x5B, 0xBD, 0xBB, 0x33, 0xFD, 0xF8, 0x57, 0xE5, 0x36, 0x63, 0xB4, 0x8D, 0x05, 0x8F, 0xA5, 0x87, 0x54, 0x62, 0xE5, 0x9E, 0x31, 0x61, 0xD4, 0x3C, 0xFB, 0xB5, 0xE9, 0x76, 0x65, 0x4E, 0xF2, 0x08, 0x44, 0x6D, 0x2B, 0x54, 0x6E, 0x4E, 0xAB, 0xF3, 0xA4, 0xF1, 0xA5, 0xEF, 0x43, 0xFD, 0x02, 0x09, 0xE5, 0x11, 0x2B, 0x8A, 0xB5, 0xEC, 0x20, 0xDE, 0x28, 0xA7, 0x5C, 0x16, 0x71, 0x1E, 0x0A, 0x1A, 0x1B, 0xED, 0x4B, 0x32, 0x0E, 0x3E, 0x86, 0x37, 0x86, 0x64, 0x10, 0xE7, 0x08, 0x18, 0x06, 0x58, 0x96, 0xFB, 0x84, 0x21, 0xA4, 0x46, 0x7A, 0x59, 0x7A, 0x1E, 0x08, 0x1D, 0x38, 0x28, 0xAF, 0xB2, 0x26, 0xB3, 0xAB, 0x00, 0x2C, 0x85, 0x3A, 0xFA, 0x5F, 0x3B, 0xC4, 0xA6, 0x22, 0xBB, 0x79, 0x74, 0x5A, 0x44, 0xCB, 0x9E, 0x8D, 0x6D, 0x18, 0xD3, 0xC1, 0x74, 0x6D, 0xA1, 0x8B, 0xAC, 0xF4, 0x15, 0x9B, 0x07, 0x52, 0xF5, 0x04, 0x26, 0x58, 0x82, 0x05, 0xF4, 0xE9, 0x54, 0xAD, 0x58, 0xF1, 0xE1, 0x02, 0x9B, 0xE2, 0x15, 0x67, 0x62, 0x3B, 0x95, 0xF2, 0xB7, 0xDC, 0x27, 0x94, 0x10, 0xAC, 0x5B, 0xC9, 0x01, 0xBE, 0x8F, 0x46, 0x92, 0x51, 0x22, 0x89, 0x06, 0xB5, 0x78, 0x52, 0x77, 0x83, 0x79, 0x22, 0xB8, 0x7B, 0x10, 0x7E, 0xF9, 0x7F, 0xF2, 0xA2, 0x53, 0x96, 0x89, 0x05, 0x60, 0x9C, 0x7C, 0xAF, 0x02, 0x29, 0x71, 0xB9, 0xEC, 0x62, 0x38, 0x2D, 0xA4, 0x99, 0x04, 0x78 +}; + +static const unsigned char firm_fw26_2_dev_hdrpub[0x100] = +{ + 0xB8, 0xF9, 0x95, 0xFA, 0xC9, 0xB4, 0x07, 0x9F, 0xCC, 0xF1, 0xAA, 0x82, 0xBB, 0xE3, 0x29, 0x23, 0xA8, 0xF0, 0xB9, 0x9A, 0x2B, 0x27, 0xCA, 0x65, 0x51, 0xAA, 0x05, 0x40, 0x0F, 0x9E, 0x46, 0xBB, 0xE2, 0xF2, 0x72, 0xA6, 0x76, 0xBE, 0x3D, 0xA8, 0xDA, 0x53, 0x4D, 0xD3, 0x95, 0xC4, 0x01, 0x19, 0xD5, 0xC7, 0x3B, 0xF6, 0x12, 0xE7, 0x08, 0x32, 0x2C, 0x66, 0xD9, 0xC1, 0xB6, 0x7D, 0x03, 0x99, 0xA2, 0x89, 0x40, 0x7E, 0x77, 0x0C, 0xF7, 0xD9, 0x29, 0x50, 0x9C, 0x12, 0xB5, 0xBD, 0xED, 0x74, 0x70, 0x30, 0x39, 0x77, 0x49, 0xCE, 0x4F, 0x4F, 0x42, 0xCE, 0xD3, 0xC9, 0xD0, 0xE3, 0x14, 0x13, 0x6E, 0xE3, 0x59, 0x7A, 0x13, 0xE6, 0xEA, 0x57, 0xA1, 0xA3, 0xEC, 0xF4, 0x03, 0x18, 0x07, 0x0D, 0x63, 0xD5, 0x4B, 0x4E, 0xE7, 0x7A, 0x1E, 0x5E, 0x07, 0x0E, 0x4E, 0xAD, 0x23, 0xCD, 0x38, 0x0B, 0xC0, 0x5E, 0x20, 0xD5, 0x98, 0x57, 0xD5, 0xD8, 0xFD, 0x9D, 0xFF, 0x9F, 0xB0, 0xF7, 0xD8, 0xE5, 0xEB, 0xA5, 0xA2, 0xD9, 0xBF, 0x9E, 0x0B, 0xD5, 0xD5, 0xD9, 0xCE, 0x12, 0xAE, 0x8F, 0xD1, 0xCC, 0xD1, 0x8A, 0x04, 0xA1, 0x06, 0x0A, 0x55, 0xDE, 0x0B, 0xCE, 0x7B, 0x11, 0xD7, 0x0F, 0xD6, 0xD9, 0xDF, 0x54, 0x6D, 0xDF, 0x76, 0x2C, 0xB8, 0xCF, 0x85, 0x54, 0xDB, 0xDB, 0x47, 0x35, 0x28, 0x90, 0x7C, 0x8E, 0x59, 0x7D, 0x25, 0x7C, 0x95, 0xA8, 0x9A, 0xF0, 0x4D, 0xE3, 0x5E, 0x0B, 0xE0, 0x7E, 0xAF, 0x0F, 0xEA, 0xC9, 0x06, 0x81, 0x90, 0xE3, 0xDE, 0x42, 0x9C, 0x99, 0x8F, 0x7A, 0x31, 0xFB, 0x83, 0x05, 0x8B, 0xBB, 0xE9, 0x88, 0x0B, 0x31, 0x44, 0x1C, 0x21, 0x02, 0x66, 0xA2, 0xC4, 0x12, 0xAF, 0x4A, 0xB8, 0x01, 0xB6, 0xE1, 0x3B, 0x73, 0x29, 0x78, 0x6E, 0xB5, 0x39, 0x41, 0x37, 0x07 +}; + +static const unsigned char firm_fw26_2_dev_acexsig[0x100] = +{ + 0x57, 0x9D, 0xD4, 0xA1, 0xE8, 0x8C, 0x59, 0x0C, 0xE1, 0xB6, 0x9E, 0x38, 0xD0, 0x45, 0xF7, 0x6F, 0xDD, 0xAE, 0xC6, 0xD1, 0xB1, 0xDE, 0x45, 0xBA, 0xD5, 0x69, 0xF3, 0x8B, 0x54, 0xB0, 0xAA, 0x43, 0x1C, 0x82, 0x58, 0x1D, 0x59, 0xB5, 0xC8, 0xF7, 0xB1, 0x80, 0x3A, 0x99, 0x3E, 0x72, 0xCB, 0x43, 0x5F, 0xE5, 0x96, 0x9C, 0x5B, 0xAE, 0x8C, 0xA3, 0x78, 0x6B, 0xC2, 0xC1, 0xC7, 0x50, 0x36, 0xCB, 0x87, 0xB5, 0x7D, 0x04, 0x74, 0x92, 0xE4, 0x92, 0x94, 0x77, 0x4F, 0x2B, 0x64, 0xDB, 0x6F, 0xE0, 0x75, 0x5A, 0xB5, 0x7B, 0x19, 0xE5, 0x57, 0x4B, 0x9C, 0x0D, 0x80, 0x64, 0xC9, 0x96, 0x1A, 0x5D, 0xAB, 0xEE, 0xB9, 0xAC, 0x3D, 0x2F, 0x60, 0x6F, 0xA2, 0xBC, 0xF9, 0xDD, 0x23, 0x7F, 0xA3, 0x3E, 0xE1, 0x33, 0x31, 0x60, 0x40, 0xF4, 0x26, 0x77, 0x6E, 0xDD, 0xD8, 0x98, 0xD0, 0xE7, 0x01, 0x13, 0x08, 0xC6, 0x0F, 0xB9, 0xF5, 0x52, 0x7A, 0xE4, 0x48, 0xCF, 0x3F, 0x0C, 0x37, 0x38, 0x69, 0x93, 0xFF, 0x12, 0x5B, 0x35, 0x9F, 0x4B, 0x1D, 0x36, 0x53, 0x0C, 0xE6, 0x66, 0xF3, 0xBB, 0xBC, 0x32, 0xF5, 0x8D, 0x74, 0x35, 0x2E, 0xCB, 0xFC, 0x03, 0x02, 0xED, 0x9B, 0xDD, 0xBE, 0x3F, 0xF3, 0xA7, 0xB5, 0xFF, 0x38, 0x43, 0x89, 0xDD, 0x93, 0x43, 0x7A, 0x6E, 0xE0, 0xCF, 0x5E, 0xBF, 0x0C, 0xD5, 0x25, 0x71, 0x98, 0xB2, 0x76, 0xC7, 0x5B, 0x18, 0xC0, 0x71, 0xCB, 0x0C, 0xDB, 0x26, 0x52, 0xB1, 0x55, 0xC3, 0x97, 0x43, 0x1D, 0x33, 0x41, 0x32, 0x2A, 0xD8, 0xB6, 0x37, 0xEA, 0x96, 0x2B, 0xBA, 0x05, 0xA8, 0xA6, 0x3F, 0x47, 0x82, 0xBF, 0x85, 0x3E, 0xDF, 0x8F, 0xEE, 0xFA, 0xD3, 0x68, 0xEE, 0xAE, 0xEB, 0x0E, 0x0D, 0x5D, 0xB1, 0x99, 0xE8, 0x76, 0x70, 0xCF, 0xA4, 0x7E, 0x1E, 0xE6, 0x65 +}; + +static const unsigned char firm_fw26_3_dev_hdrpub[0x100] = +{ + 0xAF, 0xC4, 0x87, 0x3F, 0x38, 0xFF, 0x0D, 0x27, 0xEF, 0x59, 0xB7, 0x5D, 0x71, 0xD4, 0x17, 0x5E, 0x37, 0xB9, 0xEC, 0xD9, 0x2B, 0x94, 0xCD, 0x3F, 0xD3, 0x01, 0x24, 0xC6, 0x67, 0x32, 0x67, 0xAA, 0x09, 0x12, 0xFF, 0x72, 0x74, 0x35, 0x6B, 0x41, 0xF4, 0xB5, 0xDD, 0x27, 0x8B, 0xB3, 0xA7, 0xA8, 0x20, 0x5C, 0x3F, 0x33, 0x10, 0xFF, 0x19, 0x60, 0xB0, 0x04, 0x31, 0x9F, 0xD6, 0x57, 0xB3, 0x41, 0xBC, 0x4C, 0xAC, 0xD8, 0xB4, 0x5B, 0x90, 0xDC, 0x85, 0xED, 0x2C, 0x75, 0x06, 0xD4, 0xA0, 0x0F, 0x90, 0xBB, 0x42, 0xA6, 0x17, 0x0D, 0xEB, 0x15, 0x53, 0xFE, 0x7A, 0x10, 0x57, 0x09, 0x9A, 0x5F, 0x9F, 0x94, 0x91, 0xCA, 0x7B, 0x55, 0x7D, 0xED, 0x3B, 0x80, 0x00, 0xD3, 0x5D, 0xC3, 0x0A, 0x9A, 0x5A, 0xD3, 0x80, 0xAD, 0x03, 0xB3, 0x81, 0x1C, 0xE3, 0xBC, 0x0D, 0x7C, 0x06, 0x8F, 0xE8, 0xEB, 0xCE, 0x96, 0x19, 0xA1, 0xF5, 0x1B, 0xE0, 0x87, 0x17, 0xA8, 0x5C, 0x76, 0x0D, 0xC3, 0xD2, 0xBC, 0x8F, 0x57, 0x02, 0xE1, 0x63, 0xFC, 0x14, 0x98, 0x3F, 0xFC, 0x67, 0x09, 0xB0, 0x99, 0xB6, 0x7D, 0x84, 0xD1, 0x39, 0xE3, 0xCE, 0x54, 0x00, 0xBF, 0x33, 0x78, 0xB2, 0xC9, 0x91, 0xAB, 0xF1, 0x05, 0x88, 0xFF, 0x6E, 0x28, 0xFB, 0x18, 0x08, 0x61, 0x9E, 0x37, 0xED, 0x21, 0x8F, 0x73, 0x82, 0x4D, 0x6C, 0x57, 0xEC, 0x85, 0xE4, 0x8B, 0xB9, 0x89, 0x6B, 0x2B, 0x70, 0x25, 0xE9, 0x00, 0x9A, 0x46, 0x00, 0x22, 0x9C, 0xC0, 0x1C, 0x7F, 0xAC, 0x92, 0x1B, 0x17, 0x3B, 0xDA, 0xF3, 0xA3, 0x60, 0x99, 0xF2, 0x75, 0x7C, 0x52, 0xC5, 0xAE, 0xF7, 0x45, 0xE3, 0xE5, 0x5B, 0x6D, 0x2D, 0x47, 0x39, 0x97, 0xFE, 0x2B, 0x6D, 0x7D, 0xBD, 0x35, 0xC8, 0xB6, 0x23, 0x7B, 0x2E, 0xB2, 0x00, 0xD2, 0x61, 0xC5 +}; + +static const unsigned char firm_fw26_3_dev_acexsig[0x100] = +{ + 0x85, 0x2B, 0xF3, 0xF5, 0x26, 0x11, 0xFA, 0x95, 0xF8, 0x32, 0x2A, 0xAE, 0xCB, 0x96, 0x71, 0x92, 0xCF, 0x81, 0xE4, 0xF7, 0xC9, 0xBB, 0x27, 0x14, 0x21, 0x08, 0x5B, 0x93, 0xA2, 0x92, 0x86, 0x7C, 0x1F, 0xF8, 0x22, 0x1B, 0x33, 0x10, 0x56, 0xF4, 0xC9, 0x58, 0xDB, 0x0F, 0xEC, 0x0B, 0x8C, 0x31, 0xE7, 0xE8, 0x80, 0x69, 0x57, 0x2B, 0xEE, 0xF9, 0x39, 0xBF, 0xEF, 0x56, 0x1B, 0xE1, 0xFF, 0x44, 0xD7, 0xEE, 0x3E, 0x6C, 0xAA, 0x2C, 0xB2, 0x17, 0xE0, 0xA8, 0xEA, 0xAA, 0x93, 0xE3, 0xBF, 0x63, 0xEE, 0xB4, 0xD5, 0x5F, 0x1E, 0x4A, 0x13, 0x22, 0x7D, 0x36, 0xE1, 0xC3, 0xF3, 0xC6, 0x3A, 0xEC, 0x1A, 0x02, 0xA3, 0x3E, 0xC5, 0x5E, 0xFD, 0xD3, 0x09, 0x1D, 0xAF, 0x7C, 0x1A, 0x75, 0x68, 0x58, 0x93, 0x91, 0x92, 0x27, 0xED, 0x0F, 0xCB, 0x98, 0x0E, 0xEA, 0xDF, 0xA5, 0x28, 0x2E, 0x4D, 0x84, 0x7A, 0xE6, 0xC1, 0xBD, 0x50, 0x8A, 0x6F, 0xAC, 0xEC, 0x64, 0xF4, 0xD2, 0x3B, 0x54, 0xFA, 0x07, 0x06, 0xE9, 0xFE, 0xB0, 0x93, 0x9A, 0x8E, 0x46, 0x95, 0xC5, 0xC5, 0xB5, 0x72, 0x0D, 0xD1, 0x79, 0x1A, 0x80, 0xA0, 0x0B, 0x1F, 0x5E, 0x49, 0x9D, 0x50, 0x57, 0xE5, 0x92, 0x6A, 0xF3, 0x16, 0x74, 0x7B, 0xE9, 0x0F, 0x29, 0xCF, 0x2B, 0x3D, 0x52, 0x10, 0xFC, 0x2F, 0x71, 0x5E, 0xDF, 0xAD, 0xC3, 0xCE, 0x69, 0x25, 0xD5, 0xF2, 0x97, 0x0B, 0xCA, 0xB1, 0x0A, 0x9B, 0xF8, 0x85, 0xB6, 0xDC, 0x4F, 0xB1, 0xCB, 0x03, 0xC4, 0xF8, 0x50, 0x63, 0x15, 0xE0, 0x1F, 0x5A, 0xB7, 0x07, 0x45, 0x0B, 0xD6, 0x9E, 0xCD, 0xBF, 0x2F, 0x1C, 0x99, 0x20, 0x69, 0x76, 0x5C, 0xFC, 0x31, 0x18, 0x9A, 0xB9, 0xAC, 0x77, 0xA6, 0xFB, 0xBD, 0xB9, 0x4D, 0x04, 0x45, 0xED, 0x9E, 0x19, 0x56, 0x18, 0xC7, 0x87, 0xFC +}; + +static const unsigned char firm_fw26_4_dev_hdrpub[0x100] = +{ + 0xC9, 0x83, 0x86, 0x8C, 0x40, 0x07, 0xF3, 0x48, 0xD1, 0xE9, 0xBC, 0x27, 0xAB, 0x11, 0xE4, 0x10, 0x1C, 0x65, 0x1C, 0xA1, 0xE5, 0x9A, 0xEB, 0xB5, 0x22, 0x1F, 0x78, 0x84, 0xC9, 0x9A, 0x7B, 0x45, 0x70, 0x7C, 0x80, 0xDD, 0xC1, 0xF2, 0xF6, 0x0D, 0x91, 0x90, 0x5C, 0xCB, 0x95, 0x1E, 0xC4, 0x31, 0x0D, 0x15, 0xA9, 0x2E, 0x22, 0x94, 0x3F, 0x97, 0x5C, 0x7E, 0x70, 0x5F, 0x5F, 0xF3, 0x12, 0x2D, 0x27, 0x91, 0x53, 0x31, 0xD8, 0x4D, 0xB8, 0x76, 0x74, 0xE8, 0xE1, 0x76, 0xE1, 0xA1, 0x84, 0xA9, 0xF8, 0x62, 0x4F, 0xED, 0x22, 0xFB, 0x82, 0xA5, 0x23, 0x36, 0x2E, 0x08, 0xC8, 0xC1, 0xBA, 0x46, 0x27, 0x10, 0x2E, 0x94, 0x47, 0x62, 0x01, 0x04, 0x4C, 0x84, 0x18, 0xC3, 0xCC, 0xF9, 0xD0, 0x1A, 0x89, 0xC7, 0x47, 0x5C, 0x62, 0x6F, 0x45, 0xF9, 0x18, 0x88, 0x80, 0x3F, 0x65, 0xB5, 0x4B, 0x07, 0x25, 0x4A, 0x97, 0x19, 0xBF, 0x13, 0x44, 0x28, 0x00, 0x38, 0xA7, 0x2E, 0x12, 0x32, 0x5B, 0xB4, 0x3A, 0x96, 0x64, 0x90, 0x77, 0x0F, 0x72, 0xB8, 0x79, 0x97, 0x59, 0x8E, 0x1C, 0xF0, 0xBC, 0x58, 0xD1, 0x26, 0x88, 0x3B, 0x25, 0x65, 0x7E, 0xC6, 0xF5, 0xF5, 0x24, 0x35, 0xC6, 0x65, 0xEF, 0x4C, 0x53, 0xC5, 0x56, 0x9A, 0x1A, 0x5F, 0x15, 0x29, 0xE7, 0x85, 0x1D, 0x35, 0xA1, 0x5C, 0x4B, 0xD6, 0xF2, 0x81, 0x24, 0x5F, 0x43, 0x05, 0xEA, 0xB0, 0x63, 0x0D, 0x78, 0xF7, 0xB5, 0x30, 0x20, 0xF2, 0xC9, 0xE8, 0x91, 0x8F, 0xBF, 0x20, 0x99, 0x95, 0x43, 0xAC, 0xB2, 0xF6, 0x82, 0xF0, 0xB1, 0x33, 0x1E, 0xA9, 0xB3, 0xF5, 0x61, 0xDC, 0x37, 0x81, 0xB3, 0x1F, 0xFE, 0xFF, 0x10, 0x9C, 0x12, 0x2A, 0x80, 0x1F, 0xE3, 0x9C, 0x86, 0x90, 0x47, 0x59, 0x29, 0xA9, 0xE2, 0xD7, 0x6F, 0x89, 0x5C, 0x7D +}; + +static const unsigned char firm_fw26_4_dev_acexsig[0x100] = +{ + 0x1B, 0x67, 0xA7, 0x4F, 0xF7, 0x55, 0x10, 0x85, 0xA9, 0x40, 0x89, 0xDC, 0xFF, 0xED, 0x4D, 0xC9, 0x71, 0x6E, 0x46, 0x92, 0xB2, 0x9E, 0xEA, 0xB9, 0x7C, 0xC6, 0xAB, 0xCD, 0xDD, 0x6B, 0x4A, 0x27, 0x31, 0xF3, 0xFA, 0x26, 0x2F, 0x99, 0x46, 0x32, 0xBD, 0xDE, 0xA3, 0x09, 0xC9, 0x44, 0x6D, 0xF8, 0x6E, 0x36, 0xB1, 0x26, 0x21, 0x02, 0x0E, 0x6B, 0x3F, 0x3C, 0xD6, 0xA5, 0x56, 0xD9, 0x19, 0x68, 0x73, 0xB7, 0x98, 0x08, 0x46, 0x5E, 0x7C, 0xDC, 0x61, 0x69, 0x06, 0x9C, 0x8C, 0x09, 0x4D, 0x54, 0x88, 0x22, 0x98, 0x85, 0x03, 0x07, 0xA7, 0xB7, 0x9F, 0x81, 0xFA, 0x9F, 0xF5, 0xF6, 0x0D, 0x2E, 0xE7, 0x8B, 0x09, 0xB2, 0xB4, 0x7F, 0xB5, 0xBB, 0x57, 0x7A, 0xEB, 0x92, 0x24, 0xAF, 0xFA, 0x24, 0x69, 0x33, 0x55, 0x9D, 0xF6, 0xAC, 0x78, 0xB9, 0xCF, 0x16, 0x88, 0x85, 0xDD, 0xBA, 0x12, 0xB9, 0x50, 0xA9, 0x81, 0x7D, 0x03, 0x83, 0x4F, 0x7F, 0x25, 0xBD, 0xE4, 0x5F, 0x24, 0x85, 0xCB, 0x3A, 0x46, 0x5A, 0x83, 0xEC, 0x1A, 0x85, 0xE1, 0x38, 0xAB, 0xC5, 0x54, 0xE7, 0x14, 0xD1, 0xC4, 0x77, 0x19, 0xAB, 0xAD, 0x75, 0x11, 0xCF, 0xB4, 0xFE, 0xAB, 0x85, 0xF8, 0xAC, 0x9C, 0x08, 0x93, 0xED, 0x10, 0x60, 0xB2, 0x3F, 0x5A, 0x7B, 0xA4, 0x30, 0xA0, 0x72, 0xC2, 0x33, 0xF3, 0xDC, 0x38, 0xEB, 0x58, 0x7A, 0x9C, 0xF5, 0x4F, 0xB4, 0x92, 0x57, 0x07, 0x7C, 0xC8, 0xD7, 0xE3, 0x28, 0xBA, 0x9B, 0x85, 0x7E, 0x8A, 0xB5, 0xF3, 0x18, 0x58, 0x27, 0x81, 0x37, 0x11, 0x9A, 0x8A, 0x97, 0x33, 0x1A, 0x46, 0x90, 0x0F, 0x1E, 0x37, 0xC9, 0x86, 0xF0, 0xF7, 0xA6, 0xBD, 0xCA, 0x65, 0x3B, 0x3B, 0xDC, 0x80, 0x02, 0x44, 0x84, 0x15, 0x12, 0x31, 0x14, 0xB8, 0x76, 0x9B, 0xAF, 0xB4, 0xCD, 0x2D, 0xC1 +}; + +static const unsigned char firm_fw26_5_dev_hdrpub[0x100] = +{ + 0xD2, 0x81, 0x84, 0x0D, 0x64, 0x18, 0x87, 0x0F, 0xAC, 0x05, 0x8A, 0xF1, 0x9D, 0x0F, 0x08, 0xC0, 0xC2, 0xD4, 0xE6, 0xEC, 0x7B, 0x96, 0xA1, 0xD0, 0xD7, 0x47, 0x01, 0x03, 0x3F, 0x6F, 0xCB, 0x81, 0xE8, 0x55, 0x82, 0xFE, 0xBC, 0x19, 0x07, 0x05, 0x3D, 0x80, 0x8B, 0x85, 0x44, 0xD4, 0x2D, 0x68, 0xAE, 0x6F, 0xC7, 0x0A, 0xBC, 0xA0, 0xB4, 0x83, 0x7D, 0x00, 0x6F, 0x34, 0x2C, 0xF5, 0x1A, 0x79, 0x59, 0x34, 0x5F, 0x94, 0x40, 0x36, 0x19, 0x90, 0x09, 0x45, 0x30, 0xA7, 0xED, 0x8E, 0x47, 0x9F, 0x6B, 0x31, 0xD2, 0x13, 0x53, 0xEE, 0xF8, 0xC1, 0x00, 0xBD, 0x31, 0x19, 0xB2, 0x5B, 0x9C, 0x44, 0xE3, 0x14, 0x36, 0x31, 0xB4, 0x6F, 0x45, 0x33, 0xCC, 0xD5, 0x5D, 0xD0, 0x54, 0xFC, 0x57, 0xC0, 0xE2, 0x5C, 0xC1, 0x7E, 0xE4, 0x98, 0xBF, 0x61, 0xC6, 0x5F, 0x11, 0xBC, 0xED, 0x7E, 0x2B, 0xB1, 0x31, 0xD3, 0xF6, 0xC7, 0x5C, 0xC9, 0x35, 0x41, 0x82, 0x01, 0xE3, 0xF3, 0x02, 0xCC, 0x09, 0x65, 0x5C, 0xBB, 0xC0, 0x41, 0x47, 0xDC, 0xDC, 0xB9, 0x57, 0xEC, 0x39, 0xB9, 0xE7, 0x30, 0x29, 0x26, 0xA0, 0xE8, 0xD2, 0x3E, 0xAF, 0x46, 0x49, 0xBF, 0xC4, 0x9D, 0xB2, 0xD7, 0x16, 0x77, 0xD3, 0xBA, 0xF4, 0x7C, 0x7B, 0x7B, 0x4C, 0xCD, 0x0E, 0x48, 0xCD, 0x92, 0x1F, 0x2D, 0x7F, 0x00, 0xE8, 0x75, 0xC1, 0xC5, 0x64, 0x53, 0x2B, 0x6F, 0xE0, 0xA8, 0x42, 0xC6, 0x55, 0x66, 0x62, 0x94, 0xEA, 0xCC, 0xAC, 0xE6, 0x75, 0x55, 0xBC, 0xB8, 0x88, 0x18, 0x5B, 0x1F, 0x12, 0xE6, 0x9C, 0x12, 0x1E, 0x29, 0xBD, 0x4F, 0xF0, 0x83, 0xCE, 0xEE, 0xF2, 0x3B, 0x87, 0x28, 0x49, 0x96, 0x31, 0x4F, 0x8E, 0x2A, 0x17, 0x31, 0x46, 0x73, 0x7E, 0xE8, 0x3C, 0x60, 0x82, 0xB7, 0x45, 0x63, 0x50, 0x96, 0xB6, 0xED +}; + +static const unsigned char firm_fw26_5_dev_acexsig[0x100] = +{ + 0x19, 0x92, 0x44, 0x57, 0xF2, 0xEE, 0x7E, 0xA6, 0x1D, 0xB7, 0xF0, 0x57, 0xE7, 0x35, 0x0F, 0x9B, 0xAE, 0xC3, 0x80, 0x3F, 0x8D, 0xFD, 0x4B, 0xBB, 0xCF, 0x0C, 0x02, 0x31, 0x04, 0x2C, 0xB8, 0xA3, 0xB9, 0x7B, 0x87, 0x74, 0x39, 0x86, 0x61, 0xE7, 0x69, 0xE6, 0xD6, 0x01, 0xCE, 0xCE, 0xAB, 0xD6, 0xE7, 0xDE, 0xF3, 0xFF, 0x4B, 0x20, 0xB0, 0x41, 0xCE, 0xE4, 0x02, 0xAA, 0x50, 0x3F, 0xF4, 0xE1, 0xE0, 0x57, 0x6C, 0xCD, 0xC4, 0x70, 0x59, 0x55, 0x80, 0xDB, 0x9F, 0x7B, 0xB3, 0x27, 0xEA, 0x29, 0xA5, 0xB4, 0x98, 0xEE, 0xDB, 0x6C, 0x7D, 0x50, 0x1E, 0xE7, 0xF9, 0xC0, 0x0F, 0x2F, 0x65, 0x0B, 0x37, 0x1C, 0xD2, 0x8B, 0x94, 0x1B, 0x1A, 0xC7, 0x23, 0x85, 0x56, 0x6C, 0x1A, 0xF3, 0x6D, 0xC2, 0xB2, 0xF1, 0x0F, 0xDF, 0x30, 0x65, 0x84, 0xF1, 0xEB, 0xD3, 0x6D, 0xA6, 0xA0, 0x65, 0x3B, 0xA9, 0x07, 0x20, 0x69, 0x7B, 0x63, 0x63, 0xF9, 0xCF, 0x97, 0x46, 0xD0, 0xD1, 0x7D, 0x9F, 0x87, 0x45, 0xC1, 0xED, 0xE8, 0x3C, 0x62, 0x5F, 0x16, 0x35, 0xB2, 0x2E, 0x1C, 0x16, 0x89, 0x2D, 0x93, 0xD9, 0x98, 0x4F, 0x42, 0xDF, 0x63, 0xA5, 0xB9, 0xBB, 0x48, 0x6F, 0xA2, 0xE3, 0x6C, 0xB5, 0xB6, 0x6F, 0x37, 0x37, 0x6E, 0x15, 0xD5, 0x32, 0x75, 0x2E, 0x39, 0x34, 0xCE, 0x1A, 0x81, 0x9E, 0xE8, 0x0B, 0xCA, 0xCB, 0xB0, 0x69, 0xA3, 0xE2, 0xBE, 0x8A, 0xC1, 0xE3, 0xBC, 0xAD, 0x25, 0x6F, 0xCA, 0x80, 0xB0, 0xEC, 0x1B, 0x0F, 0x5C, 0x6B, 0x92, 0xA0, 0xCE, 0x61, 0x04, 0x86, 0x51, 0x57, 0x9C, 0x0F, 0xB9, 0xD5, 0x80, 0x16, 0x30, 0xE1, 0x3A, 0x25, 0x4D, 0xEF, 0x74, 0xC4, 0x94, 0x78, 0xB6, 0x84, 0xDF, 0xC0, 0xE5, 0x62, 0x5B, 0x16, 0x4D, 0xDA, 0x75, 0x71, 0xA9, 0xB0, 0x58, 0x7E, 0x95, 0x83 }; \ No newline at end of file diff --git a/desc_presets.h b/desc_presets.h index 262900e..9fb01be 100644 --- a/desc_presets.h +++ b/desc_presets.h @@ -1,170 +1,196 @@ #pragma once -/* CTR_SDK 1 (1.2.0) */ +/* CTR_SDK 1 (1.2.0) (2.27 - 2.28) */ // DependencyList -static const unsigned char sdk1_dep_list[0x180] = +static const unsigned char fw1B_dep_list[0x180] = { 0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // APP -static const unsigned char app_1_desc_data[0x200] = +static const unsigned char app_fw1B_desc_data[0x200] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char app_1_acex_data[0x200] = +static const unsigned char app_fw1B_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; // DLP -static const unsigned char dlp_1_desc_data[0x200] = +static const unsigned char dlp_fw1B_desc_data[0x200] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char dlp_1_acex_data[0x200] = +static const unsigned char dlp_fw1B_acex_data[0x200] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; /* CTR_SDK 2 (2.3.4) */ -static const unsigned char sdk2_dep_list[0x180] = +static const unsigned char fw1D_dep_list[0x180] = { 0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -// APP -static const unsigned char app_2_desc_data[0x200] = +// APP (2.29) +static const unsigned char app_fw1D_desc_data[0x200] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char app_2_acex_data[0x200] = +static const unsigned char app_fw1D_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -// DLP -static const unsigned char dlp_2_desc_data[0x200] = +// APP (2.30) +static const unsigned char app_fw1E_desc_data[0x200] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1E, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char dlp_2_acex_data[0x200] = +static const unsigned char app_fw1E_acex_data[0x200] = +{ + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1E, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; + +// DLP (2.29) +static const unsigned char dlp_fw1D_desc_data[0x200] = +{ + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; +static const unsigned char dlp_fw1D_acex_data[0x200] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1D, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -// DEMO -static const unsigned char demo_2_desc_data[0x200] = +// DEMO (2.30) +static const unsigned char demo_fw1E_desc_data[0x200] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1E, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1E, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char demo_2_acex_data[0x200] = +static const unsigned char demo_fw1E_acex_data[0x200] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x1E, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -/* CTR_SDK 3 (3.2.5) */ -static const unsigned char sdk3_dep_list[0x180] = +/* CTR_SDK 3 (3.2.5) (2.32) */ +static const unsigned char fw20_dep_list[0x180] = { 0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // APP -static const unsigned char app_3_desc_data[0x200] = +static const unsigned char app_fw20_desc_data[0x200] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char app_3_acex_data[0x200] = +static const unsigned char app_fw20_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -/* CTR_SDK 4 (4.2.8) */ +// EC App +static const unsigned char ecapp_fw20_desc_data[0x200] = +{ + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; +static const unsigned char ecapp_fw20_acex_data[0x200] = +{ + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; + +/* CTR_SDK 4 (4.2.8) (2.33) */ // DependencyList -static const unsigned char sdk4_dep_list[0x180] = +static const unsigned char fw21_dep_list[0x180] = { 0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // APP -static const unsigned char app_4_desc_data[0x200] = +static const unsigned char app_fw21_desc_data[0x200] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char app_4_acex_data[0x200] = +static const unsigned char app_fw21_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -// EC App -static const unsigned char ecapp_4_desc_data[0x200] = -{ - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 -}; -static const unsigned char ecapp_4_acex_data[0x200] = -{ - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x20, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 -}; - // DEMO -static const unsigned char demo_4_desc_data[0x200] = +static const unsigned char demo_fw21_desc_data[0x200] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char demo_4_acex_data[0x200] = +static const unsigned char demo_fw21_acex_data[0x200] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; // DLP -static const unsigned char dlp_4_desc_data[0x200] = +static const unsigned char dlp_fw21_desc_data[0x200] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char dlp_4_acex_data[0x200] = +static const unsigned char dlp_fw21_acex_data[0x200] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x21, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -/* CTR_SDK 5 (5.2.3) */ -static const unsigned char sdk5_dep_list[0x180] = +/* CTR_SDK 5 (5.2.3) (2.35) */ +static const unsigned char fw23_dep_list[0x180] = { 0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // APP -static const unsigned char app_5_desc_data[0x200] = +static const unsigned char app_fw23_desc_data[0x200] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char app_5_acex_data[0x200] = +static const unsigned char app_fw23_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; // EC App -static const unsigned char ecapp_5_desc_data[0x200] = +static const unsigned char ecapp_fw23_desc_data[0x200] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char ecapp_5_acex_data[0x200] = +static const unsigned char ecapp_fw23_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x23, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -/* SDK 7 (7.1.0) */ -static const unsigned char sdk7_dep_list[0x180] = +/* SDK 7 (7.1.0) (2.39) */ +static const unsigned char fw27_dep_list[0x180] = { 0x02, 0x24, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x38, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x15, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x34, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x16, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x26, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x17, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x18, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x27, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x28, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1A, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x32, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x29, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x33, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x20, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2B, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x35, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2C, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2D, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x21, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x31, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x22, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x37, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2E, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x23, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x02, 0x2F, 0x00, 0x00, 0x30, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // APP -static const unsigned char app_7_desc_data[0x200] = +static const unsigned char app_fw27_desc_data[0x200] = +{ + 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x41, 0x00, 0x00, 0x00, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x74, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x27, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; +static const unsigned char app_fw27_acex_data[0x200] = { 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x41, 0x00, 0x00, 0x00, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x74, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x27, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; -static const unsigned char app_7_acex_data[0x200] = + +/* FIRM (sdk irrelevant) */ +static const unsigned char firm_fwXX_dep_list[0x180] = { - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x18, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x68, 0x69, 0x6F, 0x46, 0x49, 0x4F, 0x00, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x30, 0x24, 0x68, 0x6F, 0x73, 0x74, 0x69, 0x6F, 0x31, 0x63, 0x66, 0x67, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x66, 0x73, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x67, 0x73, 0x70, 0x3A, 0x3A, 0x47, 0x70, 0x75, 0x68, 0x69, 0x64, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x6E, 0x64, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x70, 0x78, 0x69, 0x3A, 0x64, 0x65, 0x76, 0x00, 0x41, 0x50, 0x54, 0x3A, 0x41, 0x00, 0x00, 0x00, 0x61, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x61, 0x63, 0x74, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x61, 0x6D, 0x3A, 0x61, 0x70, 0x70, 0x00, 0x00, 0x62, 0x6F, 0x73, 0x73, 0x3A, 0x55, 0x00, 0x00, 0x63, 0x61, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x63, 0x65, 0x63, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x64, 0x6C, 0x70, 0x3A, 0x46, 0x4B, 0x43, 0x4C, 0x64, 0x6C, 0x70, 0x3A, 0x53, 0x52, 0x56, 0x52, 0x64, 0x73, 0x70, 0x3A, 0x3A, 0x44, 0x53, 0x50, 0x66, 0x72, 0x64, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x68, 0x74, 0x74, 0x70, 0x3A, 0x43, 0x00, 0x00, 0x69, 0x72, 0x3A, 0x55, 0x53, 0x45, 0x52, 0x00, 0x6C, 0x64, 0x72, 0x3A, 0x72, 0x6F, 0x00, 0x00, 0x6D, 0x69, 0x63, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x6E, 0x65, 0x77, 0x73, 0x3A, 0x75, 0x00, 0x00, 0x6E, 0x69, 0x6D, 0x3A, 0x61, 0x6F, 0x63, 0x00, 0x6E, 0x77, 0x6D, 0x3A, 0x3A, 0x55, 0x44, 0x53, 0x70, 0x74, 0x6D, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x73, 0x6F, 0x63, 0x3A, 0x55, 0x00, 0x00, 0x00, 0x73, 0x73, 0x6C, 0x3A, 0x43, 0x00, 0x00, 0x00, 0x79, 0x32, 0x72, 0x3A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x9F, 0xFA, 0xF0, 0xFF, 0xBF, 0xFF, 0xF1, 0xE7, 0x3F, 0x00, 0xF2, 0x00, 0xF0, 0x91, 0xFF, 0x00, 0xF6, 0x91, 0xFF, 0x50, 0xFF, 0x81, 0xFF, 0x58, 0xFF, 0x81, 0xFF, 0x70, 0xFF, 0x81, 0xFF, 0x78, 0xFF, 0x81, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0x00, 0x02, 0x00, 0xFE, 0x27, 0x02, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// FIRM +static const unsigned char firm_fw26_desc_data[0x200] = +{ + 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xF1, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 +}; +static const unsigned char firm_fw26_acex_data[0x200] = +{ + 0xFF, 0xFF, 0xFF, 0xFF, 0x38, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x02, 0xF1, 0x00, 0x01, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; \ No newline at end of file diff --git a/desc_prod_sigdata.h b/desc_prod_sigdata.h index cc4ce55..a04b5e0 100644 --- a/desc_prod_sigdata.h +++ b/desc_prod_sigdata.h @@ -2,83 +2,133 @@ /* CTR_SDK 2 (2.3.4) */ // APP -static const unsigned char app_2_prod_hdrpub[0x100] = +static const unsigned char app_fw1D_prod_hdrpub[0x100] = { - 0xB4, 0xFE, 0x95, 0x00, 0xB5, 0xC3, 0x15, 0xC4, 0x44, 0xDF, 0x24, 0x4D, 0x31, 0x4E, 0x7B, 0xB1, 0x40, 0x69, 0x5B, 0xDD, 0xB7, 0x28, 0x6E, 0x66, 0x52, 0x1D, 0x8A, 0x48, 0x85, 0x64, 0x34, 0xEE, 0x0C, 0xE0, 0xEB, 0x19, 0x48, 0xE2, 0x35, 0x63, 0x6C, 0xEE, 0x57, 0x32, 0x1F, 0x85, 0xB0, 0xA2, 0x83, 0x99, 0xA9, 0x02, 0x36, 0xF9, 0xCF, 0x50, 0x22, 0xFE, 0xAE, 0x61, 0x65, 0x19, 0xC4, 0xAB, 0x09, 0xC9, 0xA4, 0x58, 0x5B, 0x73, 0x9E, 0x3E, 0x9A, 0xF7, 0xFD, 0x52, 0x74, 0xF5, 0x7E, 0x57, 0x21, 0xFC, 0x4F, 0x67, 0xFF, 0x33, 0x7D, 0x36, 0xD8, 0xFB, 0x01, 0x56, 0x4D, 0x5C, 0x3D, 0xB4, 0x42, 0x01, 0xEC, 0x22, 0xD2, 0x45, 0x86, 0x6A, 0x28, 0xC2, 0x01, 0xD6, 0xB5, 0xF3, 0x50, 0x49, 0x0B, 0x1C, 0x4C, 0x8E, 0xA4, 0xBD, 0x14, 0x4E, 0x53, 0x5F, 0xA3, 0xFD, 0x07, 0xC4, 0x7E, 0x4A, 0xF2, 0x9A, 0x39, 0x51, 0xB9, 0xC1, 0xC6, 0xE2, 0xF9, 0x25, 0x26, 0xFB, 0x18, 0xA7, 0xCD, 0x7E, 0x4E, 0xD4, 0x61, 0xB8, 0xCB, 0x0B, 0x28, 0xE8, 0xB5, 0x1C, 0xD1, 0xC0, 0xFE, 0xB8, 0xDC, 0xF9, 0x9F, 0x97, 0xEA, 0x2A, 0xF6, 0xDE, 0x19, 0x97, 0x73, 0x7A, 0x88, 0xDD, 0x70, 0x12, 0xBC, 0x00, 0x96, 0x2C, 0x2D, 0x3A, 0xDB, 0xC9, 0x74, 0x22, 0x22, 0x32, 0x24, 0xBE, 0xF0, 0xF7, 0xA6, 0x3A, 0x23, 0x8A, 0x41, 0xFF, 0x9D, 0x6B, 0x13, 0xEB, 0x37, 0x8E, 0x2E, 0x55, 0x5E, 0xFA, 0x99, 0x84, 0xA6, 0x91, 0x0D, 0xD2, 0xC7, 0x19, 0x06, 0x5E, 0x13, 0xC4, 0x2C, 0x58, 0x6C, 0x07, 0x5C, 0x84, 0xF0, 0x71, 0xFE, 0x01, 0x2F, 0xE1, 0x1B, 0x1B, 0x53, 0xBC, 0x4F, 0xE4, 0x80, 0x3E, 0x51, 0x4F, 0xEC, 0xEA, 0x3B, 0x29, 0x6E, 0x48, 0x6C, 0x7D, 0x43, 0x41, 0x2C, 0xC3, 0x9A, 0xE6, 0x82, 0x55 + 0x9F, 0xA8, 0xD0, 0xBE, 0x14, 0x3F, 0x28, 0xE5, 0xBE, 0x0E, 0xEB, 0x5D, 0x95, 0xEE, 0xD4, 0x76, 0x7E, 0x1C, 0x11, 0x49, 0x13, 0x55, 0x87, 0x22, 0xCF, 0xA4, 0x2B, 0xDE, 0x59, 0x1A, 0xDB, 0xEB, 0x39, 0x14, 0xE0, 0x27, 0xFD, 0x0B, 0x6E, 0x5B, 0xD9, 0x0E, 0xCD, 0xCC, 0xAF, 0x8E, 0xEF, 0x92, 0xFC, 0x9A, 0x3B, 0x2E, 0xB8, 0x9C, 0xDA, 0x20, 0x22, 0x84, 0x0B, 0x7D, 0xFA, 0xCE, 0x4B, 0xB0, 0xC6, 0xAC, 0xC7, 0xB7, 0x44, 0x59, 0xB6, 0x94, 0xD2, 0xA6, 0x87, 0xEA, 0x36, 0xCB, 0xCB, 0x8E, 0x58, 0xB7, 0xE5, 0xD0, 0xDD, 0x62, 0x0E, 0x83, 0x40, 0x03, 0x21, 0x5B, 0x48, 0x9C, 0x6E, 0x4A, 0x6C, 0x1E, 0x10, 0x9D, 0x6B, 0x85, 0xC3, 0x00, 0x59, 0x3C, 0xE0, 0x35, 0x93, 0x87, 0x94, 0x9A, 0x7C, 0x2C, 0x3C, 0x44, 0xE3, 0x3B, 0x15, 0x20, 0x57, 0xAC, 0x86, 0x8B, 0xE8, 0x97, 0xBB, 0x1C, 0x84, 0x8D, 0x95, 0x83, 0xE7, 0x54, 0x39, 0x8F, 0x0B, 0x13, 0xC7, 0xD6, 0x26, 0x6D, 0xA8, 0xBF, 0x96, 0x79, 0x39, 0xF9, 0x11, 0x63, 0xB1, 0x9F, 0x8C, 0x5F, 0x7A, 0xA9, 0x7B, 0xCD, 0xDB, 0xEE, 0x44, 0x8C, 0xF2, 0x83, 0x7C, 0xA8, 0xD9, 0x8D, 0x4B, 0xB0, 0xD7, 0x86, 0x53, 0x1D, 0xD7, 0x94, 0xD1, 0xFA, 0x61, 0x8B, 0x94, 0x20, 0x4D, 0xD8, 0x5C, 0xB5, 0x2C, 0x6E, 0x7E, 0xAC, 0x85, 0xC7, 0x33, 0xBB, 0x4D, 0x34, 0xAB, 0xDC, 0xED, 0x3F, 0xA0, 0xA8, 0xC7, 0xC2, 0x18, 0x48, 0x70, 0x54, 0x06, 0x7E, 0xA9, 0x2E, 0x30, 0x92, 0x04, 0xBA, 0xFD, 0x2A, 0xF9, 0xEC, 0xD1, 0xD9, 0x5D, 0x45, 0xB3, 0x7E, 0x9A, 0x86, 0xB4, 0x7F, 0xD6, 0x7A, 0x7F, 0x02, 0xEE, 0xB1, 0x65, 0x77, 0x68, 0xCB, 0x3D, 0xB2, 0x6C, 0x70, 0xB1, 0xB6, 0x57, 0x1F, 0x67, 0xB3, 0x73, 0x31, 0x0D, 0x89, 0x83, 0x39 }; -static const unsigned char app_2_prod_acexsig[0x100] = +static const unsigned char app_fw1D_prod_acexsig[0x100] = { - 0x88, 0x8E, 0x68, 0x07, 0x61, 0xA5, 0x45, 0x28, 0x3E, 0xB0, 0x16, 0xEE, 0x5A, 0xBB, 0xD8, 0xDA, 0xC6, 0x2D, 0x26, 0x3D, 0x9F, 0xC7, 0x2C, 0xEE, 0x5E, 0x18, 0xD4, 0x50, 0xCD, 0x6D, 0x56, 0xD7, 0x10, 0xD5, 0xCD, 0x57, 0xBE, 0xFB, 0x66, 0xF4, 0x0C, 0xDD, 0x49, 0x7D, 0xAE, 0xA5, 0x5C, 0x56, 0xC4, 0x1A, 0xE4, 0x01, 0xD4, 0xA4, 0xB0, 0x32, 0x2D, 0xFE, 0x1F, 0xA9, 0x1F, 0xC3, 0x10, 0x6B, 0x19, 0xC0, 0x42, 0x48, 0x81, 0x4D, 0xE4, 0x4C, 0xED, 0x4B, 0x63, 0x7F, 0xB3, 0x94, 0xD4, 0x65, 0x4F, 0x1B, 0x53, 0xC4, 0x20, 0x5E, 0x5F, 0xD8, 0x32, 0xD1, 0x2B, 0x79, 0xD1, 0xBD, 0x4F, 0xC5, 0x1F, 0xF2, 0xEB, 0x97, 0xC5, 0x19, 0xBB, 0x43, 0x4D, 0x75, 0xB5, 0x03, 0x11, 0x43, 0x1D, 0x5E, 0x35, 0x32, 0x67, 0xFA, 0xEC, 0xF7, 0xDA, 0x06, 0x23, 0x5B, 0x83, 0x95, 0x68, 0x23, 0x06, 0x49, 0xE2, 0x83, 0x43, 0xDC, 0xCC, 0x5F, 0x14, 0x0B, 0xA8, 0x50, 0xA5, 0xA5, 0xF6, 0x38, 0xB9, 0xDB, 0x9A, 0xC6, 0x6B, 0x64, 0x1C, 0xE9, 0xBD, 0x8A, 0x8D, 0x87, 0xB0, 0x6E, 0xE5, 0x09, 0x25, 0x00, 0x56, 0x81, 0x49, 0x6B, 0x28, 0x58, 0xD0, 0x77, 0xDE, 0x69, 0x86, 0x54, 0x17, 0x6A, 0x12, 0x52, 0xAD, 0x6B, 0x0E, 0xC1, 0xF4, 0x19, 0x5B, 0x56, 0x35, 0xA0, 0x95, 0x8F, 0x7B, 0xA4, 0xE5, 0xE3, 0xF9, 0xB0, 0xB0, 0xC1, 0x77, 0xA7, 0x18, 0x9B, 0x43, 0x7C, 0xE0, 0x0B, 0x6B, 0xD5, 0x39, 0x34, 0xCA, 0x1B, 0x32, 0xC5, 0x7E, 0xCF, 0xD8, 0x18, 0xD4, 0x75, 0x9A, 0xE4, 0xC0, 0xFE, 0xB7, 0xB1, 0x48, 0x14, 0x1A, 0x4E, 0x35, 0x51, 0x99, 0xB0, 0x01, 0x03, 0x6B, 0x60, 0xD4, 0x2A, 0x36, 0x7F, 0xE6, 0xEB, 0xAE, 0x73, 0xD9, 0xB2, 0x50, 0x11, 0x53, 0x44, 0x90, 0xE1, 0x02, 0x08, 0x83, 0x27 + 0x05, 0x67, 0xFA, 0xAC, 0x18, 0x3A, 0xCC, 0xC9, 0x1B, 0xCD, 0x49, 0x7F, 0x28, 0x87, 0xF5, 0x8A, 0xD9, 0x86, 0x06, 0xAB, 0x1D, 0x36, 0x41, 0xDB, 0xFD, 0xE5, 0x97, 0x93, 0x1C, 0x9C, 0xAB, 0xB2, 0x62, 0xEB, 0x8B, 0xD6, 0x85, 0xCF, 0x06, 0xC4, 0xC5, 0xB9, 0x7F, 0x3B, 0x6F, 0x07, 0x83, 0x93, 0xBD, 0x26, 0x71, 0x8C, 0xEC, 0xBC, 0x0B, 0x3C, 0xD8, 0x42, 0xF3, 0x19, 0xBE, 0x91, 0xB9, 0xAB, 0x23, 0x39, 0x0F, 0x46, 0x8A, 0xCB, 0xC2, 0x34, 0xD2, 0x39, 0x63, 0xE3, 0x49, 0x59, 0xE0, 0x47, 0x73, 0x4F, 0x8E, 0xC8, 0x87, 0xE7, 0x54, 0xDD, 0xF9, 0x3B, 0x19, 0xD5, 0xB5, 0x78, 0xED, 0x47, 0x4F, 0x53, 0x8F, 0x6D, 0xB6, 0xA8, 0x3A, 0x06, 0x3C, 0x2D, 0x6B, 0xFE, 0x7C, 0x3C, 0x6B, 0x20, 0x47, 0xC9, 0xF5, 0xB7, 0x36, 0x8A, 0x92, 0x27, 0x1A, 0x41, 0x4E, 0xE6, 0x75, 0x6E, 0x88, 0x57, 0xAA, 0x01, 0x43, 0x93, 0x78, 0x5E, 0xE0, 0x3D, 0x59, 0x26, 0xFD, 0x46, 0x09, 0x02, 0xCA, 0x58, 0x45, 0x5A, 0xCB, 0xCC, 0x85, 0xBD, 0x0B, 0xDF, 0xAB, 0xE3, 0xDB, 0x35, 0x36, 0xCC, 0xCF, 0x57, 0x8B, 0x4A, 0x21, 0x1C, 0x3A, 0x2D, 0x90, 0xED, 0xA6, 0xCB, 0x20, 0x21, 0x4A, 0xE4, 0x08, 0xF6, 0xF3, 0x73, 0x5B, 0xA5, 0x73, 0x2B, 0x1C, 0x46, 0x3C, 0x77, 0xB6, 0x43, 0x33, 0xFF, 0xEA, 0xF7, 0xA3, 0xDC, 0x3B, 0xD0, 0xC0, 0xC9, 0x10, 0xF4, 0x86, 0xB5, 0xB1, 0x83, 0x71, 0xF5, 0x6E, 0x67, 0xCC, 0xCA, 0xEE, 0xC0, 0x53, 0xD2, 0x78, 0xA4, 0x2C, 0x86, 0xDF, 0x2F, 0xEF, 0x4D, 0x0C, 0x8B, 0x6B, 0xAE, 0x32, 0xAC, 0x07, 0x2D, 0x4D, 0x6B, 0x4A, 0xEF, 0x13, 0xCE, 0xA7, 0x7C, 0xC9, 0x30, 0x69, 0x88, 0x96, 0x95, 0x8E, 0x11, 0x5C, 0x2A, 0x6D, 0x84, 0x3E, 0x36, 0xDA, 0x9B, 0x2A, 0x20 +}; + +// APP +static const unsigned char app_fw1E_prod_hdrpub[0x100] = +{ + 0xC8, 0xC4, 0x8C, 0x65, 0xA1, 0x76, 0x9B, 0x68, 0x91, 0xF1, 0x2B, 0xDE, 0xDF, 0x0D, 0xE1, 0x44, 0x6B, 0xB2, 0xF9, 0xFA, 0x0C, 0xB8, 0x9A, 0xC7, 0x7E, 0x71, 0xA3, 0x27, 0x57, 0xF3, 0x27, 0x99, 0x15, 0xF2, 0x43, 0x6A, 0x1E, 0x75, 0x4C, 0xA2, 0x7A, 0x77, 0x71, 0x60, 0xFE, 0x14, 0xB6, 0xCB, 0xFC, 0x6E, 0x64, 0x2E, 0x86, 0x9B, 0xFD, 0x17, 0xB5, 0x89, 0xD1, 0xC2, 0x10, 0xFC, 0xCD, 0x81, 0x58, 0x8F, 0x58, 0x43, 0xEC, 0x52, 0x6D, 0xE8, 0x14, 0x32, 0x6E, 0xCD, 0x67, 0x35, 0xDC, 0xDC, 0x58, 0x97, 0xB0, 0xBF, 0xD3, 0xC0, 0x2C, 0xFE, 0x77, 0xEC, 0xE0, 0x33, 0x65, 0xA8, 0x56, 0x52, 0xFD, 0x5B, 0xAB, 0x09, 0xB9, 0xF4, 0x74, 0xB9, 0x98, 0xDA, 0x33, 0x2F, 0x79, 0xD6, 0x52, 0x5D, 0x5A, 0x72, 0xA2, 0xCE, 0x15, 0xC5, 0x4B, 0x0C, 0x92, 0xD6, 0xC9, 0x10, 0x75, 0xFF, 0x6C, 0x8D, 0x9B, 0xDC, 0x34, 0x7A, 0xAA, 0x66, 0x45, 0x60, 0xBC, 0xC6, 0xB6, 0x3B, 0x08, 0x4B, 0x62, 0x2C, 0x95, 0x29, 0xAD, 0xDC, 0xAF, 0xEB, 0x47, 0xB5, 0xF5, 0xD2, 0x1C, 0x6D, 0x23, 0xD4, 0xCA, 0xD8, 0xE5, 0x58, 0x5D, 0x0D, 0x56, 0x95, 0x36, 0x7C, 0x2D, 0xFF, 0x51, 0x8B, 0xA9, 0xC4, 0x2D, 0xA0, 0x60, 0x94, 0xE4, 0xBB, 0x05, 0xF9, 0xFA, 0x08, 0x8C, 0xC6, 0x64, 0x88, 0x07, 0x71, 0x4F, 0x91, 0xB7, 0x62, 0xF6, 0x12, 0xFC, 0xF4, 0xC8, 0x7F, 0x9A, 0x50, 0x7F, 0xFC, 0x73, 0x3B, 0xC4, 0xC6, 0x41, 0x3D, 0xA3, 0x5B, 0x03, 0x54, 0xF6, 0x6C, 0x8C, 0x66, 0xC8, 0xFE, 0xE8, 0x38, 0xA5, 0xC3, 0xDD, 0xC3, 0x9F, 0x25, 0x66, 0x77, 0x75, 0x77, 0x2E, 0xD9, 0xE5, 0x37, 0x15, 0xB6, 0x7D, 0x29, 0x5F, 0xC5, 0x94, 0x31, 0xE0, 0xB2, 0xBA, 0xF3, 0xF7, 0xB6, 0x41, 0x3F, 0xF1, 0x67, 0x03, 0xE3 +}; + +static const unsigned char app_fw1E_prod_acexsig[0x100] = +{ + 0x28, 0xBD, 0x6C, 0x5C, 0xE1, 0x57, 0xAB, 0x22, 0xEB, 0xBF, 0x76, 0xC3, 0x45, 0xDB, 0x13, 0x7E, 0x6F, 0x15, 0x7B, 0x13, 0x86, 0x1C, 0xFA, 0xEA, 0xAC, 0x58, 0x43, 0x48, 0xB1, 0xCD, 0x6D, 0xA8, 0xB9, 0x45, 0x9C, 0x03, 0xBE, 0xBA, 0xCA, 0xF9, 0x7D, 0xF5, 0x78, 0x35, 0x36, 0xB3, 0xFE, 0xD8, 0x07, 0x48, 0x46, 0x31, 0x8D, 0xB6, 0x61, 0x94, 0xF7, 0x27, 0xB5, 0x03, 0x5C, 0x01, 0x5A, 0xEC, 0x92, 0x88, 0x15, 0xEB, 0xC1, 0x19, 0xD1, 0x13, 0xF9, 0x69, 0x3F, 0x75, 0x24, 0x18, 0x36, 0xE0, 0x12, 0x1E, 0xE2, 0x34, 0xC0, 0x79, 0x85, 0x4D, 0xB0, 0xA1, 0x9B, 0x8C, 0x9D, 0x0F, 0xCC, 0x56, 0x45, 0xEB, 0x0E, 0x56, 0xA8, 0x1D, 0xA2, 0x81, 0x94, 0x45, 0x35, 0xE9, 0x4A, 0x5D, 0x29, 0x47, 0xBC, 0x40, 0x5B, 0xA8, 0x67, 0xE6, 0x7C, 0x51, 0x8D, 0xB7, 0x97, 0x4A, 0x88, 0xD2, 0x14, 0xFE, 0x20, 0xFF, 0x7A, 0x10, 0xB7, 0xAB, 0x92, 0x38, 0xF5, 0xAC, 0x12, 0xCB, 0x97, 0xAF, 0xFD, 0x78, 0x93, 0xC6, 0xCC, 0xFF, 0x4F, 0x8C, 0x7F, 0x2D, 0x87, 0xEC, 0x8B, 0x85, 0xAE, 0xB1, 0xBA, 0xF9, 0xE2, 0x88, 0xFA, 0x41, 0xCB, 0x27, 0xAA, 0x19, 0x41, 0xF4, 0x93, 0x90, 0x73, 0x1A, 0xFA, 0xC9, 0x15, 0x58, 0xC7, 0x51, 0x02, 0x83, 0xB4, 0xD2, 0xDD, 0x43, 0x3E, 0x2C, 0x11, 0xBB, 0x97, 0x02, 0xCA, 0x29, 0xD2, 0x28, 0x82, 0x4C, 0x5B, 0x7B, 0x94, 0xE4, 0x8C, 0x0B, 0x49, 0x8F, 0x0F, 0xFA, 0xDA, 0x43, 0xA6, 0x52, 0x81, 0xA2, 0x1F, 0x98, 0xB3, 0xB1, 0x8F, 0x3D, 0x64, 0x54, 0x2D, 0xA0, 0xCB, 0xA8, 0x0D, 0xC3, 0x9C, 0xB0, 0x2E, 0x38, 0xEF, 0x3A, 0x47, 0x28, 0xE9, 0x54, 0x95, 0x1A, 0x94, 0x86, 0x7D, 0x36, 0xB6, 0x4D, 0x90, 0x44, 0xF6, 0xC0, 0xA7, 0xC6, 0x31, 0x15, 0x99, 0x7A }; /* CTR_SDK 3 (3.2.5) */ // APP -static const unsigned char app_3_prod_hdrpub[0x100] = +static const unsigned char app_fw20_prod_hdrpub[0x100] = { 0xC0, 0xDE, 0x75, 0x56, 0x5F, 0xC1, 0x95, 0x48, 0x9C, 0x1E, 0x00, 0x41, 0x49, 0x9F, 0xB2, 0x8C, 0x43, 0x30, 0xCA, 0x50, 0xC7, 0xCC, 0x7E, 0xF5, 0x56, 0xD0, 0x8F, 0x89, 0x6A, 0xC7, 0x15, 0x10, 0x70, 0x64, 0xB3, 0x29, 0x5B, 0xE8, 0x6B, 0xCA, 0xB1, 0xFE, 0x44, 0xEC, 0x4D, 0x5D, 0xB9, 0xFC, 0xA8, 0xE2, 0x95, 0xBC, 0xFA, 0x0F, 0x76, 0xA5, 0xE1, 0x07, 0xEA, 0x02, 0x13, 0x8C, 0xA6, 0x18, 0x55, 0xDA, 0xBD, 0x9C, 0xE3, 0x5F, 0xBD, 0x50, 0x1E, 0x89, 0xFC, 0x73, 0xC3, 0x37, 0x39, 0x05, 0xAF, 0xE4, 0xDA, 0xA8, 0x62, 0x9E, 0x58, 0x4B, 0x83, 0x9E, 0x5C, 0x26, 0xF2, 0x8B, 0x41, 0xB4, 0xB5, 0x89, 0xCD, 0x90, 0xC0, 0xB8, 0xA0, 0x9F, 0xFA, 0x83, 0x05, 0x11, 0x06, 0xD2, 0xED, 0x3A, 0xAB, 0xAF, 0x6D, 0x46, 0x8A, 0xE8, 0x0E, 0x39, 0xB1, 0xA3, 0xE6, 0x7A, 0x3E, 0x30, 0xE2, 0xA2, 0xDC, 0xC5, 0x4B, 0x8E, 0x3F, 0x9E, 0xB5, 0xC0, 0x9E, 0x05, 0x23, 0x72, 0x3F, 0x4E, 0xDD, 0x7C, 0xF4, 0x7D, 0xA6, 0x9B, 0x92, 0x45, 0x4B, 0x07, 0xD6, 0x19, 0x53, 0x1C, 0x98, 0x13, 0xB1, 0x50, 0x18, 0x6F, 0x74, 0xFD, 0x2D, 0x1C, 0xD5, 0x04, 0xBD, 0x59, 0x19, 0x05, 0xB0, 0xE8, 0x1E, 0x8A, 0xE8, 0x1C, 0xB0, 0x09, 0xB7, 0x82, 0x22, 0x77, 0x99, 0x93, 0xED, 0x33, 0x6D, 0xC8, 0x0C, 0x8F, 0x54, 0xA6, 0x51, 0x7C, 0x22, 0xC3, 0x13, 0x02, 0x5B, 0xC1, 0x44, 0xFE, 0x8E, 0x0D, 0x19, 0x8E, 0xD1, 0x0C, 0xB8, 0xED, 0xEF, 0xF4, 0x3D, 0x3B, 0x68, 0xA0, 0xA3, 0xB9, 0x52, 0x81, 0x98, 0xA9, 0xAE, 0xD0, 0xCD, 0xC2, 0x14, 0xF6, 0x67, 0x45, 0xC2, 0xC7, 0x68, 0x22, 0xB2, 0xC4, 0x20, 0xB8, 0x33, 0x48, 0x7B, 0xB6, 0x13, 0x2E, 0x7A, 0x3D, 0xC5, 0x5E, 0xB6, 0xAF, 0x2A, 0xF9, 0x7D, 0x53 }; -static const unsigned char app_3_prod_acexsig[0x100] = +static const unsigned char app_fw20_prod_acexsig[0x100] = { 0x19, 0xA5, 0x0A, 0x40, 0x4E, 0xF4, 0xDD, 0xE2, 0x8F, 0xA1, 0x50, 0xA5, 0x78, 0xFF, 0x1D, 0xBA, 0xE3, 0x2B, 0x9D, 0x7A, 0xB5, 0x7C, 0xC1, 0x59, 0x01, 0xB4, 0x2C, 0x46, 0xA8, 0x96, 0xDC, 0xD3, 0xD7, 0x41, 0x0D, 0x0F, 0xC8, 0x24, 0x0D, 0x20, 0xDA, 0xDF, 0x25, 0xE8, 0xC9, 0x88, 0x8C, 0x1B, 0xFF, 0x8B, 0x40, 0x89, 0x9C, 0x2F, 0x37, 0x43, 0x26, 0xDE, 0x18, 0xA3, 0xAB, 0x53, 0x5C, 0xB4, 0xFA, 0xD1, 0x80, 0x2E, 0x46, 0x57, 0x9A, 0x90, 0x49, 0x65, 0xCD, 0x66, 0xE5, 0xE6, 0xB8, 0xF5, 0x3C, 0x70, 0xAE, 0x57, 0xF3, 0x71, 0x31, 0xBA, 0x04, 0x3F, 0x9C, 0x2C, 0x28, 0x9A, 0x32, 0xB8, 0xCD, 0x22, 0x4A, 0x38, 0x7B, 0x91, 0xDA, 0xCC, 0x4D, 0x3A, 0x7D, 0x5C, 0xDC, 0x49, 0x85, 0x37, 0x7A, 0xFF, 0x20, 0xEA, 0x1D, 0x74, 0x2F, 0x83, 0xD8, 0x3C, 0x2E, 0x71, 0xBD, 0x0F, 0xFF, 0x90, 0x8F, 0x49, 0x1C, 0x1F, 0x2A, 0x34, 0xB0, 0x2E, 0x60, 0x78, 0x4B, 0x46, 0xDF, 0x27, 0xEC, 0x37, 0x36, 0xEA, 0xE9, 0xA0, 0xC5, 0x4A, 0x12, 0x1F, 0x36, 0x18, 0x07, 0x97, 0x52, 0xF6, 0xF3, 0xC2, 0x78, 0xA4, 0x70, 0xF2, 0xC3, 0xB6, 0xD8, 0xF1, 0xC9, 0x74, 0x2C, 0x11, 0x21, 0x1A, 0x54, 0xD9, 0x27, 0x6C, 0xB1, 0x24, 0xBD, 0xC8, 0x9B, 0xEC, 0x69, 0xD6, 0xAE, 0x16, 0x90, 0x43, 0x64, 0x58, 0x6F, 0xF8, 0x56, 0x29, 0x04, 0xDF, 0x2F, 0x4C, 0xEE, 0xCC, 0x4D, 0x22, 0x2D, 0xEB, 0x60, 0x35, 0x07, 0x20, 0xF5, 0x75, 0x69, 0x54, 0x26, 0x20, 0x02, 0xC2, 0x1A, 0xBD, 0xA5, 0xDE, 0xC8, 0x38, 0xCD, 0xDB, 0x32, 0x53, 0x5D, 0x08, 0x3F, 0x7D, 0xED, 0x7F, 0x6A, 0x6F, 0x29, 0xEB, 0x11, 0x8A, 0x9A, 0xEE, 0x9C, 0x3C, 0x87, 0x3F, 0xB7, 0x2B, 0x84, 0x7A, 0x74, 0x70, 0xE2, 0x90, 0x33, 0x29 }; - -/* CTR_SDK 4 (4.2.8) */ -// APP -static const unsigned char app_4_prod_hdrpub[0x100] = // app_4_prod_hdrpub +static const unsigned char app_fw20_2_prod_hdrpub[0x100] = { - 0xCF, 0x00, 0x9C, 0xB3, 0x20, 0xA0, 0x32, 0x47, 0x65, 0x89, 0xE0, 0xA0, 0x40, 0xC5, 0x57, 0x03, 0xA5, 0xF6, 0x8E, 0x66, 0xF5, 0x20, 0x28, 0xEE, 0xA7, 0x44, 0x3E, 0x8E, 0x4F, 0xC0, 0xC9, 0xD3, 0xE4, 0x3A, 0x0B, 0x31, 0xEC, 0x8F, 0xCC, 0x8D, 0x4C, 0xA6, 0x14, 0x49, 0x14, 0xBE, 0x05, 0xC1, 0xB4, 0x22, 0xAD, 0xCE, 0x1D, 0xCD, 0x29, 0x7B, 0x45, 0x16, 0xE5, 0xB9, 0xD6, 0xD2, 0x7A, 0xD0, 0x63, 0xCE, 0x69, 0xB2, 0xCA, 0xB8, 0x6D, 0x10, 0x9B, 0x99, 0x62, 0xF9, 0x45, 0xC0, 0x2E, 0xB5, 0xA1, 0xCD, 0x6B, 0xAF, 0x77, 0x9B, 0xEF, 0xD8, 0x56, 0x48, 0x75, 0x34, 0x02, 0x6E, 0xBA, 0xBF, 0x30, 0x54, 0xBF, 0x33, 0x4D, 0xB1, 0x36, 0xDC, 0x2A, 0xCD, 0x68, 0x81, 0x8C, 0x4F, 0xCB, 0xC2, 0xA2, 0x1D, 0x6E, 0xB0, 0xC0, 0x02, 0xF5, 0xF8, 0x1C, 0x6C, 0xB4, 0xC9, 0xD6, 0x90, 0x27, 0x50, 0xCA, 0x61, 0xE4, 0x1E, 0xA6, 0x1E, 0x43, 0x94, 0x01, 0x81, 0xC3, 0x69, 0xD0, 0xE2, 0x2C, 0xD7, 0x86, 0x1B, 0x8B, 0x69, 0x4D, 0xF0, 0xF1, 0x54, 0x24, 0x20, 0x91, 0xDD, 0x87, 0x12, 0x0A, 0x23, 0x98, 0x09, 0x63, 0xFD, 0xB4, 0x00, 0x69, 0x06, 0xD2, 0xF1, 0xC3, 0xE7, 0x9D, 0xCC, 0x87, 0x99, 0x01, 0x20, 0xDA, 0xD6, 0xA4, 0x24, 0x58, 0x9A, 0x62, 0x52, 0xF0, 0x30, 0x98, 0x6C, 0x08, 0x90, 0xB4, 0xA6, 0xE4, 0x79, 0x47, 0xF3, 0x1D, 0x58, 0x86, 0x4D, 0x9B, 0xA3, 0xE8, 0xFC, 0x1A, 0x63, 0xC3, 0x2F, 0xDF, 0xD3, 0xC6, 0x3B, 0x8E, 0xDA, 0xFB, 0xEA, 0x6D, 0xE3, 0x92, 0x14, 0xC8, 0x21, 0x2C, 0xE3, 0xF2, 0xE3, 0x31, 0x2E, 0xF6, 0x73, 0x27, 0xE8, 0xF2, 0xD5, 0x38, 0xB7, 0x04, 0x46, 0xA7, 0xBE, 0x92, 0x14, 0x66, 0x1E, 0x8D, 0x88, 0xF7, 0xC0, 0x60, 0xB5, 0x7F, 0xF3, 0xCE, 0x43 + 0xC7, 0x35, 0xC3, 0x09, 0x60, 0x43, 0xCD, 0xE6, 0x11, 0x07, 0x52, 0xCA, 0x8B, 0x6A, 0xF2, 0x5A, 0x72, 0xC9, 0xAA, 0xDF, 0x63, 0xF3, 0x1F, 0x2A, 0xDE, 0xE3, 0x56, 0x24, 0xE8, 0x95, 0x8D, 0xBA, 0x5D, 0x9F, 0xF7, 0x03, 0xD9, 0x3C, 0xC8, 0x58, 0x47, 0x00, 0x35, 0x1B, 0xDB, 0x16, 0x7B, 0xA7, 0x2B, 0x82, 0x38, 0xBD, 0x20, 0xA9, 0xB7, 0x1E, 0xF4, 0x78, 0xFC, 0x59, 0x28, 0x61, 0x29, 0x74, 0xE5, 0x63, 0x6F, 0xB2, 0x9E, 0x36, 0x2A, 0xA0, 0x5B, 0x50, 0x89, 0x3F, 0xE9, 0x0C, 0x76, 0x05, 0x41, 0xF3, 0x23, 0x9C, 0xCD, 0xA9, 0xC1, 0x3C, 0x0B, 0x48, 0xAC, 0x11, 0x17, 0xA9, 0x46, 0x4D, 0x64, 0xD9, 0xBF, 0x63, 0x13, 0xBF, 0x8A, 0xFF, 0xED, 0xF0, 0x24, 0x71, 0xD6, 0xA9, 0x50, 0x9D, 0x00, 0xFC, 0x9B, 0x33, 0xFF, 0x0F, 0x68, 0x22, 0x25, 0xE8, 0x49, 0x68, 0x76, 0xF4, 0x8D, 0x3B, 0x67, 0xF0, 0xD7, 0x49, 0x41, 0xDE, 0xBF, 0x55, 0xC3, 0x8F, 0xD9, 0xF6, 0x30, 0x39, 0xF3, 0x15, 0x2B, 0x79, 0x6D, 0x71, 0xAC, 0xE9, 0x93, 0x88, 0xBD, 0xDB, 0x24, 0x75, 0xB1, 0x19, 0x84, 0x51, 0xF8, 0xD3, 0xBB, 0xB1, 0xBC, 0xE4, 0x53, 0x51, 0x4E, 0x00, 0x29, 0x66, 0x05, 0xBC, 0x8E, 0x37, 0x80, 0xCD, 0xD3, 0x40, 0xF7, 0x4F, 0xE0, 0x6B, 0x88, 0xDB, 0xBD, 0xA6, 0xF2, 0x11, 0x9C, 0x26, 0xF8, 0xED, 0xB3, 0x37, 0xB0, 0x77, 0x1D, 0xF0, 0x63, 0x8F, 0x81, 0x07, 0xC0, 0x66, 0x91, 0xA1, 0x8D, 0x06, 0xC1, 0xE9, 0xD4, 0xEA, 0xD7, 0xA0, 0xCB, 0x6F, 0x20, 0x7D, 0xC4, 0xCB, 0x0B, 0x9E, 0x80, 0xB5, 0x3A, 0xDA, 0x57, 0xF5, 0x0E, 0x07, 0x9F, 0x2E, 0x92, 0xC7, 0xBC, 0x6E, 0x85, 0x34, 0xB5, 0x95, 0x15, 0xCA, 0x69, 0x37, 0x7B, 0x2C, 0x1D, 0x5A, 0x13, 0x81, 0x74, 0xA3, 0x3E, 0x9D }; -static const unsigned char app_4_prod_acexsig[0x100] = // app_4_prod_acexsig +static const unsigned char app_fw20_2_prod_acexsig[0x100] = { - 0x04, 0xE3, 0xD1, 0xD2, 0x32, 0xF4, 0x04, 0xE5, 0x79, 0x67, 0x1E, 0x74, 0xD8, 0x1B, 0x8F, 0x6C, 0xEB, 0xE2, 0xFE, 0x1B, 0xCE, 0xAB, 0x92, 0x03, 0xF0, 0x3C, 0xF5, 0x31, 0x07, 0xCE, 0x8E, 0x47, 0xB2, 0xE8, 0x52, 0x8F, 0xFF, 0xA7, 0x1B, 0xE1, 0xFF, 0x58, 0x5E, 0x99, 0xBA, 0x71, 0x90, 0x87, 0x01, 0x92, 0xE8, 0xD0, 0x67, 0x6E, 0x29, 0xD3, 0x1E, 0xA6, 0x22, 0x8F, 0x52, 0xAD, 0x6B, 0xB1, 0xB6, 0xC0, 0xC6, 0x44, 0x5D, 0x41, 0xD8, 0xCE, 0x3A, 0xEB, 0x04, 0x5A, 0x8C, 0x4D, 0x03, 0x9F, 0x31, 0xDC, 0x4E, 0x37, 0xEF, 0x7B, 0x42, 0x02, 0x19, 0x6A, 0x33, 0x60, 0xEF, 0xB9, 0x01, 0x11, 0xAC, 0x82, 0x10, 0xFD, 0x79, 0xD8, 0x2D, 0x5F, 0x42, 0xDE, 0xEC, 0x38, 0x79, 0xF6, 0x70, 0x84, 0x5A, 0xA8, 0x83, 0x58, 0xEF, 0x57, 0x2A, 0x04, 0x1E, 0x9B, 0xAF, 0xB3, 0xCC, 0x67, 0x62, 0xD1, 0x9B, 0xB0, 0xA4, 0x3C, 0x16, 0xB8, 0x0B, 0xC1, 0x7B, 0xE9, 0x39, 0x96, 0x32, 0xF5, 0xC4, 0xA0, 0xAB, 0xE8, 0xEA, 0x2F, 0x2D, 0x83, 0xF4, 0x8C, 0x62, 0xA3, 0x03, 0xDC, 0x6E, 0xAD, 0x9C, 0x46, 0x56, 0xD6, 0xF5, 0xDD, 0xB1, 0x95, 0x47, 0xE9, 0xAB, 0x40, 0x28, 0x87, 0x2B, 0x97, 0x42, 0x1A, 0x71, 0x9F, 0xB7, 0x7D, 0x45, 0x4A, 0x2B, 0xF6, 0xF7, 0xA8, 0x01, 0x14, 0x40, 0x77, 0x14, 0x49, 0x2B, 0x5D, 0x84, 0xA5, 0xC4, 0xA8, 0x10, 0xCD, 0x4B, 0x85, 0x34, 0x58, 0x74, 0x99, 0xD2, 0x44, 0x26, 0x37, 0xC7, 0x7A, 0x7A, 0x60, 0x85, 0x77, 0x73, 0xE9, 0x75, 0xB1, 0x6B, 0xDA, 0x43, 0x02, 0xAD, 0xD2, 0xC6, 0x7F, 0x53, 0xC4, 0xD3, 0x0F, 0x1D, 0xA0, 0x6F, 0xD8, 0x3B, 0xAF, 0xFF, 0x94, 0xF6, 0x27, 0x27, 0x7A, 0xEF, 0xF3, 0x96, 0xA5, 0x29, 0x4A, 0x47, 0xB1, 0x09, 0x2D, 0x34, 0xF5 + 0x33, 0x38, 0x2A, 0x9D, 0xBD, 0xBB, 0x2A, 0xE0, 0x63, 0x1E, 0xAA, 0xA5, 0x5D, 0x43, 0xD5, 0x95, 0xD7, 0xA7, 0xFF, 0x28, 0xA1, 0xD4, 0x2A, 0x70, 0x7E, 0x46, 0x0F, 0x8B, 0x00, 0xA0, 0x7E, 0x74, 0x5D, 0x1C, 0x96, 0x89, 0x5C, 0x38, 0xAF, 0x19, 0xF0, 0x2D, 0x88, 0x28, 0x8B, 0x6D, 0xE4, 0xC9, 0xF5, 0x2F, 0xCD, 0x94, 0xDB, 0xF4, 0x2E, 0x1E, 0xF1, 0x17, 0x2D, 0xB6, 0x1E, 0x21, 0x30, 0x28, 0xCE, 0xEA, 0x2E, 0xED, 0x6F, 0x95, 0xC8, 0x9E, 0xF5, 0x1E, 0x91, 0xC5, 0x38, 0x68, 0x1A, 0x4D, 0x74, 0x91, 0x2C, 0xDA, 0x72, 0xE1, 0xCE, 0x58, 0x2D, 0x4C, 0xD9, 0x9F, 0x24, 0xC1, 0xA2, 0xFA, 0xBD, 0x96, 0x95, 0x95, 0x29, 0x25, 0x58, 0x62, 0x39, 0xDD, 0xE7, 0xD7, 0xD3, 0xBF, 0xDB, 0x35, 0x0C, 0x26, 0xAE, 0x7C, 0xA5, 0x5D, 0x0E, 0x0B, 0x6D, 0xBF, 0x87, 0x72, 0xAA, 0x40, 0xA2, 0x55, 0x89, 0xDF, 0x1B, 0xBA, 0x2D, 0x5E, 0xDC, 0xB3, 0x40, 0x0F, 0x8C, 0xBA, 0xDF, 0xF5, 0xB7, 0x50, 0xC2, 0x94, 0x02, 0x4E, 0xFB, 0x8F, 0x5F, 0x8C, 0xE6, 0xE8, 0x38, 0x28, 0x5F, 0xB6, 0xA2, 0x66, 0x67, 0x73, 0x7F, 0xF8, 0x70, 0xFF, 0xE1, 0x30, 0xEC, 0xCE, 0x0D, 0x61, 0x9A, 0xE2, 0xD9, 0x4B, 0x40, 0xB7, 0xE2, 0x31, 0xC5, 0x6F, 0x06, 0x5C, 0x9A, 0x61, 0x5A, 0x14, 0xF6, 0x36, 0x44, 0xF5, 0x93, 0x30, 0x53, 0xB1, 0x97, 0x44, 0x50, 0x79, 0x9F, 0x3A, 0xFB, 0x2D, 0x42, 0xF1, 0x6C, 0x14, 0x8D, 0x35, 0xD6, 0x16, 0x22, 0xC3, 0x8B, 0x79, 0xFD, 0x26, 0xF8, 0x64, 0x76, 0x53, 0xA1, 0x32, 0x90, 0xBE, 0xA3, 0x9A, 0x6B, 0x5A, 0xCF, 0xC0, 0x34, 0xDE, 0x2F, 0xDC, 0x39, 0x14, 0x8F, 0x98, 0x01, 0x45, 0x57, 0x9E, 0x02, 0x05, 0xEB, 0x8E, 0x6D, 0x16, 0x0B, 0xCF, 0x43, 0xBF, 0xE5, 0xE5 +}; + +static const unsigned char app_fw20_3_prod_hdrpub[0x100] = +{ + 0xBF, 0x3C, 0x41, 0xF1, 0xD2, 0xDC, 0x47, 0xBE, 0xF2, 0xAE, 0x18, 0xA0, 0xCD, 0xAD, 0x0B, 0xEA, 0xB0, 0x8B, 0x69, 0x4E, 0x58, 0x36, 0x59, 0x59, 0x18, 0xA9, 0x02, 0x0C, 0xE6, 0xA9, 0x9D, 0xDA, 0x0A, 0x1E, 0xDA, 0x51, 0x08, 0xD9, 0xC3, 0x1F, 0xA3, 0x36, 0x55, 0xDE, 0xC3, 0xA0, 0x24, 0x1C, 0xB8, 0x67, 0x71, 0x98, 0xC0, 0x60, 0x15, 0x72, 0x47, 0x7E, 0xDC, 0x7E, 0xEB, 0x43, 0x5E, 0x35, 0x23, 0x95, 0xB2, 0x34, 0x1F, 0x31, 0xE8, 0xC7, 0x1E, 0xA4, 0x9B, 0x88, 0x51, 0x39, 0x75, 0xEE, 0x92, 0xA6, 0xF9, 0xD5, 0x5C, 0xFE, 0x84, 0xED, 0x5B, 0xE8, 0x3F, 0xC0, 0xBE, 0xA7, 0x49, 0x63, 0x5D, 0xF1, 0x89, 0xDC, 0x79, 0x75, 0xBC, 0xB1, 0xF5, 0x20, 0x2A, 0x50, 0xBC, 0x8D, 0x2F, 0xC0, 0x27, 0x14, 0x85, 0x58, 0x8B, 0x11, 0xE0, 0xBA, 0xDE, 0x5F, 0x41, 0x44, 0xEE, 0x4F, 0x3D, 0xB6, 0x8D, 0x7A, 0x2F, 0x9C, 0xE3, 0x2A, 0xC1, 0x5E, 0x82, 0x04, 0x3C, 0xFD, 0x68, 0xFD, 0x0A, 0x14, 0x91, 0xF8, 0x5E, 0xBA, 0xD1, 0x80, 0xF6, 0xF5, 0x89, 0xE2, 0x12, 0xE1, 0x86, 0xE7, 0xF1, 0x78, 0x6F, 0x43, 0x5C, 0xF7, 0xD1, 0x57, 0xDA, 0x83, 0x1E, 0x6E, 0xEF, 0x3C, 0xDF, 0xED, 0x03, 0x95, 0xB7, 0xD4, 0x15, 0x6E, 0x1C, 0xDE, 0xD3, 0x17, 0x02, 0x52, 0x15, 0xBF, 0xDA, 0xFB, 0x62, 0x2E, 0xB5, 0x47, 0x0A, 0x29, 0x08, 0xC5, 0x3C, 0x3C, 0x17, 0x00, 0xC3, 0x50, 0x13, 0x3C, 0xBF, 0xE6, 0xEF, 0x8A, 0x7C, 0x12, 0x22, 0x13, 0x19, 0x06, 0x56, 0xDE, 0xBC, 0xDC, 0xCC, 0xC5, 0xE7, 0xEE, 0xC4, 0x88, 0x48, 0x47, 0xE3, 0xA9, 0x76, 0xFA, 0x51, 0x7B, 0xB7, 0x1D, 0xAF, 0x48, 0x80, 0x25, 0xFD, 0x1C, 0xB8, 0x8C, 0x21, 0xA3, 0x37, 0x48, 0x77, 0xD6, 0x7E, 0x16, 0x8C, 0xC4, 0x0C, 0x05 +}; + +static const unsigned char app_fw20_3_prod_acexsig[0x100] = +{ + 0x5E, 0x3C, 0xF9, 0xB5, 0x50, 0x08, 0x3E, 0x49, 0x71, 0x21, 0x4F, 0x22, 0x5A, 0xDB, 0x32, 0x66, 0x8D, 0x64, 0x48, 0x96, 0x59, 0x47, 0xBF, 0xF0, 0x20, 0x4C, 0x6D, 0xE2, 0xCE, 0xE5, 0x44, 0x58, 0x78, 0x15, 0xCD, 0xA8, 0x58, 0xF7, 0x8A, 0xF2, 0x88, 0x04, 0xF1, 0x05, 0x7F, 0xF6, 0x1A, 0x61, 0x68, 0x22, 0xE9, 0x29, 0x01, 0xEF, 0x1C, 0x33, 0xB8, 0x30, 0x18, 0x96, 0xA2, 0x65, 0x15, 0xE6, 0x9C, 0x57, 0x95, 0x90, 0xF0, 0xB6, 0xBC, 0xB2, 0xCB, 0xDF, 0x43, 0xBD, 0x24, 0x6E, 0xD8, 0xC8, 0xAE, 0xA2, 0x32, 0xEA, 0x8A, 0x90, 0x50, 0x5D, 0xE1, 0x1B, 0x82, 0x72, 0x7C, 0x90, 0x24, 0x55, 0x2D, 0x3D, 0x8B, 0x95, 0xFC, 0xA4, 0xDA, 0xEF, 0x82, 0x2B, 0x25, 0xFA, 0x95, 0x28, 0xD0, 0x14, 0x5E, 0x67, 0xE6, 0x24, 0x0C, 0x5D, 0x56, 0x07, 0x79, 0x4F, 0x38, 0x4E, 0xF8, 0xDC, 0x74, 0x32, 0xFC, 0x92, 0xED, 0x99, 0x28, 0xC2, 0x1A, 0x52, 0xE5, 0x48, 0x21, 0xDB, 0x9C, 0x42, 0xF5, 0x71, 0xD3, 0x61, 0xF5, 0xCC, 0xF5, 0xC7, 0x7D, 0xC9, 0x60, 0x5C, 0x92, 0x68, 0x5A, 0xE6, 0x36, 0xF1, 0x7F, 0xCC, 0x85, 0x4C, 0x5C, 0x50, 0x6F, 0xA1, 0x0B, 0xA6, 0xC5, 0x57, 0x76, 0x6A, 0x81, 0x0B, 0x5B, 0xAB, 0x30, 0x85, 0xA8, 0x6B, 0x29, 0xC9, 0x9A, 0x96, 0xFF, 0xCD, 0x9B, 0x3A, 0x89, 0x94, 0x31, 0xC3, 0x4F, 0x0E, 0xC4, 0xA4, 0x19, 0x2F, 0xA4, 0x86, 0xCD, 0x07, 0x6D, 0xE4, 0xC7, 0x38, 0x32, 0xDF, 0x8E, 0xE7, 0xBE, 0x7B, 0xC1, 0x52, 0xBF, 0x4D, 0xB1, 0x66, 0x06, 0xBD, 0xBE, 0x98, 0xE9, 0x63, 0x9B, 0xFD, 0x43, 0x6B, 0x96, 0x9A, 0x8E, 0x78, 0x97, 0x1B, 0x7C, 0x8A, 0xE2, 0x8B, 0x28, 0xB8, 0xD0, 0xBD, 0x32, 0x05, 0x53, 0x92, 0xF7, 0x24, 0x04, 0xD0, 0x25, 0xB1, 0xF7, 0xDF }; // EC APP -static const unsigned char ecapp_4_prod_hdrpub[0x100] = // ecapp_4_prod_hdrpub +static const unsigned char ecapp_fw20_prod_hdrpub[0x100] = { 0xE1, 0xF2, 0xF8, 0x92, 0xEC, 0x5D, 0xD9, 0xB2, 0x38, 0xCE, 0x52, 0x72, 0x10, 0x3A, 0x51, 0xB2, 0x47, 0xD9, 0xC7, 0x00, 0xF9, 0xEB, 0xE2, 0x1E, 0xE8, 0x53, 0x2F, 0xFF, 0xB0, 0x0D, 0x9E, 0x1B, 0x21, 0x48, 0x0B, 0xBF, 0x53, 0x48, 0x93, 0x9E, 0x20, 0x55, 0xF2, 0x8F, 0xFE, 0x5E, 0x0D, 0xE6, 0xBF, 0xDD, 0xF5, 0xE6, 0xDF, 0x95, 0xA6, 0x5B, 0x38, 0x81, 0x49, 0x1E, 0xE9, 0x77, 0xB1, 0x96, 0xEA, 0xAA, 0x83, 0x18, 0x09, 0x2F, 0x77, 0x59, 0x16, 0x0B, 0xA9, 0xF1, 0xE8, 0xE8, 0x3A, 0x05, 0xEA, 0x35, 0x4F, 0x1D, 0xD4, 0xF9, 0xC5, 0x1A, 0xA2, 0x9E, 0xF7, 0xBD, 0x3B, 0x90, 0xDA, 0x80, 0xA9, 0xA3, 0xED, 0xFC, 0xE3, 0xBF, 0x7A, 0xF1, 0x43, 0x67, 0x5F, 0x35, 0x24, 0xD1, 0x4B, 0xCF, 0x1F, 0x59, 0xF5, 0xF4, 0x5E, 0x88, 0xDE, 0x3D, 0x19, 0xDD, 0x5E, 0x04, 0xB2, 0x39, 0xB3, 0x29, 0x32, 0xBA, 0xA3, 0x1C, 0x18, 0x75, 0x01, 0xE0, 0xC9, 0x22, 0x23, 0xA1, 0x95, 0x04, 0xA6, 0x0F, 0xFB, 0x5D, 0x25, 0xC2, 0x88, 0x21, 0x5F, 0xFD, 0x13, 0xFE, 0x9F, 0x06, 0xE6, 0x5E, 0x53, 0x69, 0x1A, 0x15, 0xD0, 0xAB, 0xBE, 0x16, 0xC5, 0x01, 0x52, 0xEA, 0x87, 0x5F, 0xFE, 0xE6, 0xC3, 0xD1, 0x4F, 0xB9, 0xC3, 0x6B, 0xBD, 0x7D, 0x4E, 0x1D, 0xA9, 0xCD, 0xD8, 0x89, 0x1B, 0x0E, 0x64, 0x97, 0x57, 0x7E, 0x23, 0xF4, 0x85, 0xD0, 0xE9, 0x68, 0x00, 0xBF, 0x7E, 0x8B, 0xB2, 0x42, 0xED, 0x9B, 0xDD, 0xD8, 0x62, 0x13, 0x26, 0x93, 0xF8, 0x66, 0x0B, 0x32, 0x30, 0x8A, 0x9C, 0xF0, 0x7A, 0x7E, 0xD2, 0x04, 0x5D, 0xF1, 0xF2, 0xB2, 0x4A, 0xF2, 0x18, 0xF4, 0xAF, 0xA4, 0x34, 0x06, 0xE7, 0x09, 0x77, 0x01, 0x8F, 0xEE, 0x17, 0x27, 0x89, 0x9B, 0xF0, 0x76, 0x00, 0x25, 0x01, 0x09, 0xC1, 0x51 }; -static const unsigned char ecapp_4_prod_acexsig[0x100] = // ecapp_4_prod_acexsig +static const unsigned char ecapp_fw20_prod_acexsig[0x100] = { 0x6F, 0x5C, 0xA2, 0xD4, 0xDB, 0x21, 0x69, 0x54, 0xFE, 0x63, 0x55, 0x4C, 0x18, 0x86, 0xFF, 0x47, 0x73, 0x9B, 0x3A, 0x6B, 0xF3, 0x63, 0x47, 0x7E, 0x76, 0x86, 0x3B, 0xF1, 0xC6, 0x05, 0xE4, 0x4B, 0x8B, 0x61, 0xF3, 0x06, 0x02, 0x9B, 0x1B, 0xD1, 0x48, 0xCC, 0x51, 0xAF, 0x78, 0xE5, 0x58, 0xEE, 0xC4, 0x93, 0x83, 0xC2, 0xC9, 0x91, 0xD4, 0x4E, 0x00, 0xAD, 0xA8, 0x12, 0x40, 0x77, 0x20, 0xF8, 0xED, 0x11, 0xC1, 0x1D, 0x71, 0x14, 0x75, 0x1D, 0xB6, 0x89, 0xCC, 0xE1, 0x38, 0x3B, 0x8E, 0xAD, 0xA5, 0x17, 0x88, 0x90, 0xC1, 0xBE, 0x95, 0xBB, 0x0F, 0x0B, 0x12, 0xF9, 0x9E, 0xA9, 0x4F, 0x16, 0x34, 0x06, 0x2D, 0xFD, 0x1B, 0x51, 0x92, 0xE1, 0xD3, 0x7D, 0x6B, 0x31, 0xF0, 0xB4, 0xC0, 0x75, 0x91, 0x75, 0x2A, 0x0C, 0x99, 0x46, 0x2F, 0x4B, 0x34, 0xF3, 0x72, 0x10, 0x04, 0x23, 0x62, 0xC8, 0x94, 0xAD, 0x06, 0xC7, 0x69, 0x2A, 0x78, 0x3A, 0xCE, 0x8B, 0xE0, 0x16, 0x7D, 0x28, 0x35, 0xB2, 0xE1, 0x71, 0x49, 0x1C, 0x55, 0xD7, 0xA8, 0x6D, 0xCB, 0xA6, 0xF3, 0xB9, 0x35, 0xEA, 0x9D, 0xB0, 0x04, 0xE8, 0xB5, 0xEC, 0x15, 0xC6, 0xB1, 0x01, 0x69, 0xFB, 0x01, 0x87, 0x58, 0x83, 0xCC, 0xF5, 0x91, 0xC3, 0x3C, 0x2D, 0x7E, 0xAF, 0x43, 0xB9, 0xCD, 0x95, 0x20, 0xF9, 0x8F, 0x6F, 0x39, 0xDE, 0x95, 0x7B, 0x3F, 0xAD, 0x56, 0xF3, 0x07, 0xA3, 0x52, 0x12, 0x0F, 0x56, 0xA4, 0xF7, 0xAC, 0x55, 0xC2, 0x2F, 0x01, 0x0E, 0xFD, 0x26, 0xC9, 0x06, 0x8B, 0xCB, 0x6A, 0x4A, 0xE3, 0xF4, 0x58, 0x04, 0xAB, 0x64, 0x02, 0x99, 0xB9, 0xC5, 0xDA, 0x1F, 0x96, 0xEA, 0xEE, 0xB0, 0x33, 0xFD, 0xE9, 0x74, 0x90, 0x48, 0x7B, 0x88, 0xDE, 0x72, 0x57, 0x4C, 0x69, 0x47, 0x89, 0x03, 0xD6, 0x6B, 0x22, 0xFF }; -/* CTR_SDK 5 (5.2.3) */ +/* CTR_SDK 4 (4.2.8) */ // APP -static const unsigned char app_5_prod_hdrpub[0x100] = // app_4_prod_hdrpub +static const unsigned char app_fw21_prod_hdrpub[0x100] = { 0xCF, 0x00, 0x9C, 0xB3, 0x20, 0xA0, 0x32, 0x47, 0x65, 0x89, 0xE0, 0xA0, 0x40, 0xC5, 0x57, 0x03, 0xA5, 0xF6, 0x8E, 0x66, 0xF5, 0x20, 0x28, 0xEE, 0xA7, 0x44, 0x3E, 0x8E, 0x4F, 0xC0, 0xC9, 0xD3, 0xE4, 0x3A, 0x0B, 0x31, 0xEC, 0x8F, 0xCC, 0x8D, 0x4C, 0xA6, 0x14, 0x49, 0x14, 0xBE, 0x05, 0xC1, 0xB4, 0x22, 0xAD, 0xCE, 0x1D, 0xCD, 0x29, 0x7B, 0x45, 0x16, 0xE5, 0xB9, 0xD6, 0xD2, 0x7A, 0xD0, 0x63, 0xCE, 0x69, 0xB2, 0xCA, 0xB8, 0x6D, 0x10, 0x9B, 0x99, 0x62, 0xF9, 0x45, 0xC0, 0x2E, 0xB5, 0xA1, 0xCD, 0x6B, 0xAF, 0x77, 0x9B, 0xEF, 0xD8, 0x56, 0x48, 0x75, 0x34, 0x02, 0x6E, 0xBA, 0xBF, 0x30, 0x54, 0xBF, 0x33, 0x4D, 0xB1, 0x36, 0xDC, 0x2A, 0xCD, 0x68, 0x81, 0x8C, 0x4F, 0xCB, 0xC2, 0xA2, 0x1D, 0x6E, 0xB0, 0xC0, 0x02, 0xF5, 0xF8, 0x1C, 0x6C, 0xB4, 0xC9, 0xD6, 0x90, 0x27, 0x50, 0xCA, 0x61, 0xE4, 0x1E, 0xA6, 0x1E, 0x43, 0x94, 0x01, 0x81, 0xC3, 0x69, 0xD0, 0xE2, 0x2C, 0xD7, 0x86, 0x1B, 0x8B, 0x69, 0x4D, 0xF0, 0xF1, 0x54, 0x24, 0x20, 0x91, 0xDD, 0x87, 0x12, 0x0A, 0x23, 0x98, 0x09, 0x63, 0xFD, 0xB4, 0x00, 0x69, 0x06, 0xD2, 0xF1, 0xC3, 0xE7, 0x9D, 0xCC, 0x87, 0x99, 0x01, 0x20, 0xDA, 0xD6, 0xA4, 0x24, 0x58, 0x9A, 0x62, 0x52, 0xF0, 0x30, 0x98, 0x6C, 0x08, 0x90, 0xB4, 0xA6, 0xE4, 0x79, 0x47, 0xF3, 0x1D, 0x58, 0x86, 0x4D, 0x9B, 0xA3, 0xE8, 0xFC, 0x1A, 0x63, 0xC3, 0x2F, 0xDF, 0xD3, 0xC6, 0x3B, 0x8E, 0xDA, 0xFB, 0xEA, 0x6D, 0xE3, 0x92, 0x14, 0xC8, 0x21, 0x2C, 0xE3, 0xF2, 0xE3, 0x31, 0x2E, 0xF6, 0x73, 0x27, 0xE8, 0xF2, 0xD5, 0x38, 0xB7, 0x04, 0x46, 0xA7, 0xBE, 0x92, 0x14, 0x66, 0x1E, 0x8D, 0x88, 0xF7, 0xC0, 0x60, 0xB5, 0x7F, 0xF3, 0xCE, 0x43 }; -static const unsigned char app_5_prod_acexsig[0x100] = // app_4_prod_acexsig +static const unsigned char app_fw21_prod_acexsig[0x100] = { 0x04, 0xE3, 0xD1, 0xD2, 0x32, 0xF4, 0x04, 0xE5, 0x79, 0x67, 0x1E, 0x74, 0xD8, 0x1B, 0x8F, 0x6C, 0xEB, 0xE2, 0xFE, 0x1B, 0xCE, 0xAB, 0x92, 0x03, 0xF0, 0x3C, 0xF5, 0x31, 0x07, 0xCE, 0x8E, 0x47, 0xB2, 0xE8, 0x52, 0x8F, 0xFF, 0xA7, 0x1B, 0xE1, 0xFF, 0x58, 0x5E, 0x99, 0xBA, 0x71, 0x90, 0x87, 0x01, 0x92, 0xE8, 0xD0, 0x67, 0x6E, 0x29, 0xD3, 0x1E, 0xA6, 0x22, 0x8F, 0x52, 0xAD, 0x6B, 0xB1, 0xB6, 0xC0, 0xC6, 0x44, 0x5D, 0x41, 0xD8, 0xCE, 0x3A, 0xEB, 0x04, 0x5A, 0x8C, 0x4D, 0x03, 0x9F, 0x31, 0xDC, 0x4E, 0x37, 0xEF, 0x7B, 0x42, 0x02, 0x19, 0x6A, 0x33, 0x60, 0xEF, 0xB9, 0x01, 0x11, 0xAC, 0x82, 0x10, 0xFD, 0x79, 0xD8, 0x2D, 0x5F, 0x42, 0xDE, 0xEC, 0x38, 0x79, 0xF6, 0x70, 0x84, 0x5A, 0xA8, 0x83, 0x58, 0xEF, 0x57, 0x2A, 0x04, 0x1E, 0x9B, 0xAF, 0xB3, 0xCC, 0x67, 0x62, 0xD1, 0x9B, 0xB0, 0xA4, 0x3C, 0x16, 0xB8, 0x0B, 0xC1, 0x7B, 0xE9, 0x39, 0x96, 0x32, 0xF5, 0xC4, 0xA0, 0xAB, 0xE8, 0xEA, 0x2F, 0x2D, 0x83, 0xF4, 0x8C, 0x62, 0xA3, 0x03, 0xDC, 0x6E, 0xAD, 0x9C, 0x46, 0x56, 0xD6, 0xF5, 0xDD, 0xB1, 0x95, 0x47, 0xE9, 0xAB, 0x40, 0x28, 0x87, 0x2B, 0x97, 0x42, 0x1A, 0x71, 0x9F, 0xB7, 0x7D, 0x45, 0x4A, 0x2B, 0xF6, 0xF7, 0xA8, 0x01, 0x14, 0x40, 0x77, 0x14, 0x49, 0x2B, 0x5D, 0x84, 0xA5, 0xC4, 0xA8, 0x10, 0xCD, 0x4B, 0x85, 0x34, 0x58, 0x74, 0x99, 0xD2, 0x44, 0x26, 0x37, 0xC7, 0x7A, 0x7A, 0x60, 0x85, 0x77, 0x73, 0xE9, 0x75, 0xB1, 0x6B, 0xDA, 0x43, 0x02, 0xAD, 0xD2, 0xC6, 0x7F, 0x53, 0xC4, 0xD3, 0x0F, 0x1D, 0xA0, 0x6F, 0xD8, 0x3B, 0xAF, 0xFF, 0x94, 0xF6, 0x27, 0x27, 0x7A, 0xEF, 0xF3, 0x96, 0xA5, 0x29, 0x4A, 0x47, 0xB1, 0x09, 0x2D, 0x34, 0xF5 }; +/* CTR_SDK 5 (5.2.3) */ +// APP +static const unsigned char app_fw23_prod_hdrpub[0x100] = +{ + 0xDD, 0x51, 0x85, 0xCB, 0x8C, 0x22, 0xBB, 0x76, 0x08, 0x31, 0xE1, 0xD3, 0x04, 0x30, 0xDB, 0x70, 0x78, 0x6F, 0xD5, 0xCB, 0x79, 0xD4, 0x87, 0x19, 0x3E, 0x39, 0x99, 0x07, 0x12, 0x1C, 0xC9, 0x7C, 0xC9, 0x34, 0x16, 0x37, 0x31, 0xFD, 0x7C, 0x56, 0xB4, 0x53, 0x5D, 0x9D, 0x1F, 0xFE, 0x87, 0x0A, 0x86, 0x2A, 0x9B, 0xF8, 0xE1, 0x2F, 0xE3, 0x98, 0xCD, 0xA0, 0xD2, 0xBF, 0xBF, 0x2D, 0x56, 0x73, 0xC2, 0x7B, 0x38, 0x89, 0x33, 0xA6, 0xC4, 0xC0, 0x7E, 0xF2, 0x54, 0xF6, 0x2F, 0x32, 0xD7, 0x88, 0x88, 0xCD, 0x4D, 0x2B, 0xB5, 0x6D, 0x97, 0xB7, 0x97, 0xF2, 0x5A, 0xCD, 0x93, 0xC8, 0x11, 0x3F, 0x44, 0xB3, 0xF8, 0x2B, 0x45, 0x3F, 0xE1, 0x44, 0x5D, 0x7D, 0xB8, 0x0C, 0x48, 0xD1, 0x53, 0xA8, 0xEF, 0x26, 0xCC, 0x5B, 0x25, 0x82, 0x92, 0x52, 0x2E, 0xAC, 0x32, 0x48, 0x27, 0x4F, 0x24, 0xD7, 0xF8, 0x1B, 0x64, 0x2F, 0x8C, 0x10, 0x84, 0xD3, 0xF7, 0x31, 0x6A, 0xD0, 0x79, 0xC3, 0x19, 0xF3, 0x4A, 0xB7, 0xC7, 0x4B, 0xD8, 0x32, 0x43, 0x29, 0x90, 0xED, 0x93, 0x70, 0x6D, 0xC0, 0x45, 0x1E, 0x6D, 0x3A, 0x8A, 0xCB, 0x43, 0xB1, 0xC3, 0xEB, 0x8D, 0xC0, 0xC3, 0x5C, 0x20, 0xA4, 0xFD, 0xF8, 0xFF, 0xED, 0x4E, 0x5A, 0x15, 0x22, 0x8E, 0x8E, 0xE8, 0x0D, 0x32, 0x0E, 0x15, 0xC4, 0xCF, 0x1F, 0xDF, 0x74, 0x42, 0x73, 0x3D, 0xF8, 0x3F, 0x32, 0x9B, 0xEE, 0xD6, 0xE4, 0x8F, 0x99, 0xAA, 0xF7, 0xFA, 0x72, 0xC0, 0xB6, 0xF6, 0x97, 0x22, 0xDB, 0xDB, 0x2E, 0xD0, 0xBF, 0x40, 0x58, 0x01, 0xE5, 0xBA, 0x07, 0x09, 0x70, 0x1E, 0x8F, 0x8B, 0xAF, 0x73, 0xF9, 0x0E, 0xB2, 0xC7, 0xF4, 0xB8, 0x88, 0xDD, 0xAF, 0xF5, 0x88, 0xA7, 0x1A, 0xE9, 0x39, 0xDF, 0x6C, 0x32, 0xE7, 0x7C, 0xAB, 0x33, 0xCD +}; + +static const unsigned char app_fw23_prod_acexsig[0x100] = +{ + 0xA6, 0x8B, 0x83, 0x98, 0x0A, 0x4C, 0x37, 0x75, 0x54, 0x25, 0xFE, 0xC9, 0x8A, 0x1E, 0x1A, 0x47, 0x0C, 0xD8, 0x12, 0x2E, 0xC0, 0xE4, 0x0D, 0x3D, 0xB9, 0x1E, 0x14, 0xEF, 0x05, 0xD4, 0x4F, 0xC1, 0x9E, 0xFD, 0xDF, 0xF1, 0x2C, 0xDE, 0x45, 0xC2, 0x1A, 0x83, 0xCD, 0x88, 0xFA, 0x51, 0x4F, 0x4A, 0x1F, 0xA3, 0x71, 0x1D, 0xC9, 0x81, 0xF0, 0xB4, 0x68, 0x86, 0x18, 0xCF, 0xF4, 0xE4, 0x58, 0x68, 0x54, 0xAE, 0x00, 0x9E, 0xC4, 0xA5, 0x0B, 0xFF, 0x52, 0x2D, 0x29, 0x83, 0xEF, 0x1F, 0x5A, 0x30, 0xD0, 0xA7, 0x1D, 0x1D, 0x0C, 0x17, 0xAA, 0x7F, 0x54, 0x50, 0xA9, 0x47, 0xA8, 0x2F, 0x31, 0xAE, 0x21, 0x0A, 0x2A, 0xF8, 0xDA, 0x59, 0x1F, 0x90, 0x92, 0x21, 0x56, 0x65, 0x0C, 0x20, 0xBE, 0x1E, 0x53, 0xBF, 0x56, 0x78, 0x38, 0xE0, 0x04, 0xBA, 0x43, 0x6C, 0xB3, 0xFC, 0xFB, 0x1F, 0x38, 0x41, 0x4D, 0xD5, 0xFE, 0xD8, 0x31, 0xC8, 0x53, 0xAD, 0xE1, 0x3F, 0x2C, 0x52, 0x84, 0x40, 0x90, 0x9B, 0xC4, 0xDB, 0xAB, 0x09, 0xAD, 0x41, 0x51, 0x77, 0x9D, 0x0D, 0x06, 0x56, 0x15, 0xEF, 0x45, 0x9D, 0x3A, 0xC3, 0x30, 0x1A, 0x7F, 0xBA, 0xB7, 0xB9, 0xA4, 0xAA, 0x3F, 0x0F, 0xB8, 0x9A, 0x5B, 0xE8, 0xE9, 0x59, 0x7B, 0x5E, 0x5D, 0x0A, 0x3C, 0x5D, 0x54, 0x3D, 0x48, 0x7B, 0x4C, 0x28, 0xD0, 0x91, 0xF6, 0xF1, 0x43, 0x52, 0xBC, 0xE6, 0x08, 0x52, 0x09, 0x0D, 0x64, 0xAE, 0x18, 0x67, 0x3E, 0x8C, 0xAD, 0xE7, 0x45, 0xD4, 0xE1, 0xA0, 0x65, 0xC2, 0x09, 0xE6, 0x44, 0xF4, 0xDE, 0xDD, 0xC5, 0x4C, 0x86, 0x9D, 0x60, 0x81, 0x28, 0x9F, 0x59, 0x78, 0xA5, 0x9F, 0x97, 0x09, 0x11, 0xD9, 0x1C, 0x0B, 0x98, 0x84, 0x83, 0x73, 0xEA, 0xF7, 0xFA, 0x27, 0x99, 0x3C, 0x12, 0xFB, 0x50, 0x43, 0x97, 0x17 +}; + +static const unsigned char app_fw23_2_prod_hdrpub[0x100] = +{ + 0xB0, 0x21, 0x4F, 0x59, 0x5E, 0xDA, 0xC8, 0x66, 0x28, 0xAC, 0x0F, 0xD6, 0xAA, 0xAA, 0xC3, 0xCD, 0x2E, 0x0C, 0xAF, 0x37, 0x44, 0xD2, 0x3A, 0x00, 0x5B, 0x8E, 0x06, 0x79, 0x7A, 0x26, 0x71, 0x0E, 0xF6, 0xC9, 0x41, 0x6D, 0x28, 0x9C, 0xC6, 0xF4, 0x74, 0x44, 0xFA, 0xAA, 0x06, 0xF9, 0xB7, 0x0B, 0x83, 0x04, 0xA2, 0x15, 0xA9, 0x2F, 0xD4, 0x66, 0x94, 0x3F, 0xCC, 0xE5, 0x09, 0xA6, 0xAC, 0xFF, 0x7A, 0x7D, 0x27, 0x44, 0x36, 0xE6, 0x83, 0x72, 0x37, 0x69, 0x64, 0x3E, 0x83, 0xFF, 0xED, 0x1A, 0x06, 0xBA, 0x7E, 0x7C, 0xED, 0x2F, 0xB0, 0x99, 0x06, 0x12, 0xC0, 0x74, 0xDF, 0xD3, 0xF9, 0xC9, 0x7D, 0xF1, 0xE1, 0xE3, 0x35, 0x3B, 0x8D, 0x35, 0xB9, 0x0D, 0xF0, 0x30, 0x0E, 0xA8, 0xCC, 0x3E, 0xDE, 0xA5, 0x53, 0x5A, 0xCD, 0x00, 0xCE, 0xBF, 0x6A, 0x62, 0x18, 0x44, 0xA1, 0xBB, 0xDF, 0xDE, 0x78, 0x54, 0xA4, 0x07, 0x3E, 0x63, 0xDB, 0x52, 0x8B, 0x12, 0x20, 0x87, 0x3B, 0x3F, 0xB0, 0xFA, 0xDD, 0x26, 0xB4, 0x32, 0x0B, 0x19, 0x97, 0x91, 0xD6, 0xA6, 0x98, 0xDB, 0xA7, 0xA7, 0xF7, 0xBD, 0x9A, 0xF8, 0x5F, 0x62, 0x9C, 0xFB, 0x70, 0x3D, 0xA2, 0x74, 0x4C, 0x00, 0xA9, 0xCD, 0xF3, 0x98, 0x69, 0x58, 0x40, 0xA1, 0xD8, 0x0F, 0x36, 0x15, 0xAC, 0xCA, 0x1C, 0xC0, 0xD4, 0x80, 0xC8, 0x66, 0x50, 0xBD, 0x78, 0x2C, 0x7C, 0xED, 0x3D, 0x87, 0x20, 0x85, 0x81, 0xAD, 0xBB, 0x8E, 0x6F, 0x79, 0x03, 0xBA, 0xBA, 0xFA, 0x26, 0x73, 0x21, 0xC1, 0xE4, 0xD8, 0x91, 0x1F, 0xE2, 0x86, 0xF1, 0x68, 0x6E, 0xC3, 0xC3, 0x91, 0x2F, 0x73, 0x92, 0xDA, 0x4B, 0x49, 0xE5, 0x4F, 0xD2, 0xA9, 0x82, 0xFE, 0x98, 0x83, 0xCB, 0x4C, 0xA2, 0xC3, 0x3F, 0x0E, 0xCC, 0x38, 0x9E, 0x82, 0xBA, 0xAD, 0x5C, 0xEB +}; + +static const unsigned char app_fw23_2_prod_acexsig[0x100] = +{ + 0x7B, 0xEB, 0x5A, 0xA0, 0x36, 0x1E, 0x1A, 0x75, 0x26, 0x22, 0x72, 0x46, 0xC0, 0x8D, 0x11, 0x8F, 0x9F, 0x7F, 0xDB, 0x8A, 0x06, 0xA9, 0xF9, 0x3E, 0xDC, 0x71, 0x49, 0xD3, 0x40, 0xBE, 0xC7, 0x3A, 0xFF, 0x67, 0xB4, 0x10, 0x23, 0x58, 0x0F, 0xBD, 0x24, 0x39, 0xBF, 0x3B, 0xEB, 0x73, 0x4D, 0x5B, 0xC8, 0xA7, 0x10, 0xDB, 0xFF, 0x54, 0x17, 0x1E, 0x65, 0x29, 0x3C, 0x63, 0x61, 0xB0, 0x9F, 0xC4, 0x80, 0x04, 0x53, 0xDD, 0xE9, 0x9F, 0xA8, 0xC6, 0x4A, 0x41, 0x16, 0x51, 0x4C, 0xF5, 0x7C, 0x38, 0x11, 0x43, 0xF2, 0xFC, 0x4B, 0xCA, 0x87, 0x99, 0x80, 0x20, 0x74, 0xE8, 0x31, 0x59, 0xAB, 0xA2, 0x6E, 0x07, 0xBA, 0xE0, 0x7B, 0xD1, 0x28, 0x1E, 0x37, 0x26, 0xA3, 0x70, 0xD2, 0x25, 0x82, 0xA6, 0x07, 0xE7, 0xBB, 0x18, 0xDE, 0xAA, 0x76, 0xB4, 0xCD, 0x83, 0xAF, 0xC7, 0xC5, 0x03, 0xE8, 0x96, 0x1A, 0xD5, 0x2C, 0x9F, 0xAC, 0x87, 0x70, 0x87, 0x90, 0x69, 0x65, 0x7C, 0xD4, 0x65, 0x0E, 0x64, 0xE1, 0x90, 0x7E, 0x09, 0x98, 0xC5, 0x30, 0x48, 0x5E, 0x7F, 0x4D, 0xB7, 0x08, 0x51, 0xF0, 0xD7, 0x00, 0xBE, 0x23, 0x17, 0xF6, 0x86, 0x09, 0x8B, 0xF2, 0x75, 0x67, 0x31, 0xE3, 0xB0, 0x0D, 0x7A, 0xF0, 0x56, 0x67, 0x21, 0x67, 0xC8, 0x9C, 0x4E, 0x16, 0x34, 0x6D, 0x1A, 0xB7, 0xB5, 0x7B, 0x02, 0x4D, 0x6B, 0xFA, 0xF8, 0x83, 0x09, 0x6C, 0x14, 0x06, 0x9B, 0x1F, 0x2E, 0x26, 0x61, 0xE9, 0xAD, 0xDE, 0xDD, 0x55, 0x92, 0xB3, 0x50, 0x41, 0xCB, 0x75, 0x47, 0xC1, 0xF8, 0x72, 0x44, 0xE5, 0xEA, 0xC9, 0x11, 0x91, 0xAF, 0x4E, 0xC5, 0xBA, 0xEA, 0x2F, 0x26, 0xE4, 0x73, 0xE3, 0x8A, 0xCD, 0x47, 0xB9, 0x53, 0x75, 0xFC, 0x74, 0xD5, 0x74, 0xCF, 0x1F, 0x75, 0x57, 0x9A, 0x1F, 0xA5, 0x56, 0xEF +}; + +static const unsigned char app_fw23_3_prod_hdrpub[0x100] = +{ + 0xB1, 0x75, 0x6B, 0x2D, 0x39, 0xB2, 0x1A, 0xFF, 0x5C, 0xE5, 0x49, 0xF9, 0x96, 0x5A, 0xAF, 0x3F, 0x5E, 0x64, 0xEB, 0xFC, 0x18, 0x50, 0x13, 0xCF, 0x52, 0xB8, 0x06, 0x8A, 0x5A, 0xEC, 0xB1, 0x2F, 0x61, 0x38, 0xFD, 0x9F, 0xC0, 0x2A, 0x51, 0x4F, 0x3B, 0x0E, 0xBA, 0xE7, 0xBA, 0xB8, 0x7C, 0xAA, 0x31, 0xC1, 0x66, 0x38, 0x10, 0x8B, 0xE4, 0x92, 0x42, 0xAB, 0xD7, 0x56, 0x1F, 0xEC, 0x23, 0xF4, 0x75, 0xFD, 0x7D, 0x87, 0xD3, 0xF4, 0x01, 0x3B, 0xA0, 0xF9, 0xD0, 0x17, 0xE4, 0x45, 0xAD, 0xB9, 0xF2, 0xB8, 0x74, 0x7A, 0x24, 0x98, 0x5F, 0x17, 0xD7, 0x21, 0x22, 0x4F, 0xDF, 0x4E, 0x1F, 0x6B, 0x60, 0x84, 0x88, 0x1D, 0xDB, 0xCF, 0x5C, 0xC6, 0xA7, 0xBF, 0x9D, 0x36, 0x88, 0xE2, 0xFD, 0x79, 0x43, 0x95, 0xE8, 0x1E, 0x9F, 0x89, 0x47, 0x40, 0x96, 0xFE, 0xE7, 0xD6, 0x67, 0xDA, 0x3A, 0x3C, 0x81, 0xBD, 0x65, 0x7C, 0xD1, 0xE4, 0xE1, 0x9E, 0x2C, 0xA9, 0xE4, 0xAE, 0x5B, 0xE6, 0x27, 0xAD, 0x25, 0xE6, 0xE4, 0x9F, 0x60, 0xB0, 0x95, 0xC3, 0xCC, 0x4C, 0xEC, 0x6D, 0xFB, 0x70, 0x17, 0xB5, 0x57, 0xC5, 0x47, 0x1C, 0xD2, 0x19, 0x4C, 0xF1, 0x33, 0xF3, 0x83, 0x62, 0x20, 0x8C, 0x23, 0x3D, 0xC3, 0x79, 0xD6, 0xD1, 0x7B, 0x12, 0x8C, 0xA2, 0x1A, 0x9F, 0xF2, 0xC4, 0x01, 0x5E, 0xA0, 0xA4, 0xC9, 0xCC, 0xDC, 0xC3, 0x67, 0xEC, 0x62, 0x81, 0x86, 0x6D, 0x14, 0x2E, 0xF9, 0xC9, 0xF9, 0xD3, 0x7B, 0x4B, 0xC6, 0x1A, 0xD6, 0x1E, 0xA8, 0x20, 0xA9, 0x19, 0xCF, 0xB1, 0xD8, 0xCB, 0xD3, 0xF4, 0x8E, 0x5C, 0xEC, 0x83, 0xD3, 0x54, 0xA2, 0x65, 0x78, 0xFF, 0x4B, 0x7E, 0xC2, 0x2C, 0xFC, 0xBE, 0x90, 0x53, 0x48, 0x06, 0x42, 0x45, 0xBA, 0xCC, 0xCE, 0xE0, 0x70, 0x5C, 0x47, 0xCE, 0xB5, 0xAD +}; + +static const unsigned char app_fw23_3_prod_acexsig[0x100] = +{ + 0x59, 0xB7, 0xA4, 0x4D, 0x58, 0x89, 0x33, 0xA0, 0x85, 0x77, 0xF7, 0x44, 0xE2, 0x14, 0x61, 0xFD, 0x42, 0xDF, 0x42, 0xEE, 0x08, 0x66, 0x2D, 0x28, 0x0C, 0xF9, 0x25, 0x12, 0x45, 0x50, 0x8C, 0x86, 0xF9, 0xCD, 0x86, 0xAB, 0x19, 0x4C, 0x1F, 0x1C, 0x0B, 0xDF, 0x21, 0xB5, 0x9C, 0x89, 0xFA, 0x90, 0xB3, 0x77, 0x3E, 0xA9, 0xCB, 0xDD, 0x6B, 0x15, 0x57, 0x12, 0xA1, 0xC1, 0x02, 0x4A, 0xED, 0xFC, 0x94, 0x02, 0xFF, 0x74, 0x87, 0x42, 0x5D, 0x6F, 0xBD, 0xD5, 0xAE, 0x25, 0xCA, 0x19, 0xF4, 0x89, 0x5A, 0x8E, 0x56, 0x22, 0xA2, 0xC9, 0xDE, 0x15, 0x32, 0xC9, 0x01, 0x43, 0x33, 0x3A, 0xBA, 0xCC, 0x52, 0x98, 0xCD, 0x6E, 0xD4, 0xC4, 0x51, 0x9F, 0xF4, 0xF1, 0xFC, 0xD3, 0x77, 0x22, 0x21, 0xAB, 0x79, 0xAA, 0x44, 0xDD, 0xA5, 0x88, 0xD5, 0x57, 0x26, 0x38, 0xFF, 0xBC, 0x31, 0xAF, 0xF2, 0xB2, 0xF1, 0xF2, 0x13, 0x22, 0xA8, 0xAA, 0x00, 0xA3, 0xFA, 0x82, 0x4A, 0xD6, 0xE6, 0xAF, 0xD7, 0x70, 0x0A, 0xEC, 0x1F, 0xC6, 0x7C, 0xA4, 0x5C, 0xEA, 0x1B, 0xBB, 0x4E, 0xF9, 0x8B, 0xEC, 0x06, 0x88, 0xC6, 0x16, 0x14, 0xB7, 0xCC, 0x77, 0xC1, 0x0B, 0xB4, 0x1D, 0x88, 0xE7, 0xDE, 0x0D, 0x64, 0xDF, 0xD0, 0x71, 0x76, 0xF5, 0x40, 0x38, 0xF5, 0x09, 0xAB, 0x57, 0x91, 0x02, 0x96, 0x39, 0x09, 0x6D, 0x30, 0xEB, 0x4C, 0x69, 0x34, 0x1E, 0xDD, 0xA3, 0x1B, 0xAD, 0xC9, 0xFC, 0xD3, 0xD0, 0x8A, 0x34, 0xD9, 0xDC, 0x48, 0x27, 0x7C, 0x3A, 0xB4, 0x5D, 0xB2, 0x34, 0x56, 0xAA, 0x51, 0x09, 0xD8, 0x74, 0xF0, 0xE3, 0xF2, 0xA0, 0x94, 0xC4, 0x35, 0x4C, 0xFD, 0xE7, 0xFB, 0x51, 0x6A, 0xCD, 0xAA, 0xDE, 0x32, 0x68, 0xE0, 0x5E, 0x3A, 0xC3, 0x62, 0x8E, 0xAB, 0xBA, 0x2B, 0x1D, 0xCE, 0x35, 0x24, 0x3F +}; + // EC APP -static const unsigned char ecapp_5_prod_hdrpub[0x100] = // ecapp_4_prod_hdrpub +static const unsigned char ecapp_fw23_prod_hdrpub[0x100] = { 0xC1, 0xFB, 0x30, 0x9C, 0x96, 0xB3, 0xA9, 0x09, 0x62, 0x06, 0xFF, 0xA2, 0x8B, 0xAE, 0xD2, 0xB2, 0xC1, 0x8C, 0x47, 0xA2, 0xC4, 0x49, 0x15, 0x52, 0xE7, 0xD6, 0xA3, 0xEF, 0x7F, 0xD8, 0xB8, 0x28, 0xF1, 0x56, 0x31, 0xF4, 0x6C, 0x23, 0x69, 0xAA, 0x64, 0x8C, 0xC1, 0xD9, 0x37, 0xAA, 0xBB, 0x47, 0xB4, 0xAE, 0x5B, 0xFB, 0x19, 0xFA, 0xC4, 0xD5, 0x89, 0xB0, 0x36, 0x9F, 0xF9, 0x47, 0x56, 0xE8, 0x64, 0xC4, 0xB5, 0x46, 0x3A, 0x18, 0xD5, 0x12, 0x24, 0x61, 0x8D, 0xB2, 0xC8, 0xA6, 0xAC, 0x5C, 0x39, 0x38, 0x6B, 0x34, 0xC4, 0x68, 0x65, 0xF3, 0x72, 0xC7, 0x43, 0x9B, 0x91, 0xE9, 0xC5, 0x48, 0x2F, 0xC9, 0x84, 0xF7, 0xAC, 0xEA, 0xE1, 0x2C, 0xA8, 0xCB, 0x8F, 0xC4, 0x15, 0x4E, 0x85, 0x13, 0x83, 0x6E, 0x7F, 0x44, 0xD9, 0x6C, 0x69, 0x82, 0x38, 0x69, 0xE8, 0x90, 0xA4, 0x82, 0x52, 0xD7, 0xF2, 0x51, 0xAB, 0xEC, 0x26, 0xAD, 0x35, 0x21, 0x40, 0x7B, 0x6D, 0xA6, 0xC2, 0x78, 0xB3, 0xD1, 0xCC, 0xE8, 0x58, 0xC1, 0xF5, 0xC5, 0x47, 0xED, 0x7F, 0xBA, 0x64, 0xD4, 0x24, 0x14, 0x78, 0x8D, 0xD4, 0x81, 0xDE, 0x45, 0x17, 0x30, 0x30, 0x8F, 0xCA, 0x7E, 0x26, 0x74, 0x11, 0x04, 0x21, 0x9E, 0xE9, 0x07, 0x29, 0xEC, 0x20, 0x86, 0x13, 0x7B, 0x56, 0xA4, 0x2D, 0x8A, 0xCB, 0x7C, 0xED, 0x00, 0x84, 0xDE, 0x23, 0xDB, 0x3B, 0x6D, 0xBD, 0x1F, 0xAA, 0x6F, 0xB9, 0x37, 0x2B, 0xCF, 0x6E, 0x88, 0x3E, 0xDB, 0x1A, 0x79, 0xEC, 0x41, 0x8C, 0x63, 0xDA, 0x83, 0x2F, 0xFC, 0x8E, 0x65, 0xAB, 0x71, 0xAC, 0x94, 0xBC, 0x97, 0x8B, 0x5A, 0x04, 0x18, 0x72, 0xF4, 0x22, 0x37, 0x3B, 0xB4, 0x02, 0xF0, 0x25, 0x50, 0x78, 0xDC, 0xCF, 0x76, 0xBD, 0x59, 0xFC, 0x4C, 0xC6, 0x93, 0xCD, 0x64, 0x55, 0x59 }; -static const unsigned char ecapp_5_prod_acexsig[0x100] = // ecapp_4_prod_acexsig +static const unsigned char ecapp_fw23_prod_acexsig[0x100] = { 0x70, 0xF8, 0x6E, 0x2F, 0xC5, 0xE1, 0x2A, 0x05, 0x29, 0x3F, 0x04, 0xA1, 0xD8, 0x30, 0xEC, 0x09, 0x60, 0xC0, 0x90, 0x17, 0x53, 0x1E, 0x3C, 0x14, 0x56, 0xE2, 0xF9, 0x80, 0xD9, 0x22, 0x4A, 0xA7, 0xC7, 0xC6, 0x39, 0xC1, 0x77, 0x2F, 0xC5, 0x35, 0x2D, 0x7E, 0xC9, 0xED, 0x7E, 0xB6, 0x8F, 0x9A, 0x5F, 0xF1, 0x4B, 0xE2, 0xE7, 0x25, 0x37, 0xD1, 0xB6, 0xE5, 0x12, 0x00, 0xA2, 0x84, 0x8F, 0x43, 0xBB, 0xB7, 0x1E, 0x7B, 0xBA, 0x42, 0x45, 0x04, 0x6F, 0xB5, 0x39, 0x67, 0x2E, 0xD1, 0xA2, 0x01, 0xF9, 0x87, 0xF8, 0x6E, 0x88, 0x5B, 0x82, 0xB7, 0xA3, 0xCE, 0xA7, 0xE6, 0xD3, 0xB3, 0x73, 0x93, 0xCC, 0xD1, 0x69, 0x03, 0x53, 0xFD, 0xD3, 0xF1, 0x46, 0xF4, 0xAB, 0xC9, 0xB3, 0xEA, 0x09, 0xC4, 0x36, 0x27, 0x09, 0xFF, 0xBF, 0xA4, 0xF3, 0xC8, 0xB5, 0xD2, 0xC8, 0x0D, 0xC2, 0x6F, 0xA3, 0x7D, 0x63, 0xAD, 0xBE, 0x99, 0x2F, 0xAD, 0x0C, 0xC4, 0x22, 0xC5, 0x3C, 0x17, 0xF8, 0x06, 0x96, 0xBA, 0x1F, 0xEF, 0x77, 0xF5, 0xC6, 0xB4, 0x87, 0x8F, 0x27, 0xE3, 0x38, 0x27, 0x16, 0x13, 0x99, 0x70, 0x35, 0xF2, 0xB1, 0x79, 0x3C, 0x99, 0xB6, 0x2B, 0x32, 0x3D, 0x0F, 0x9A, 0x2D, 0xDB, 0x61, 0xAF, 0x76, 0x74, 0xBF, 0x9E, 0x04, 0x3B, 0xE7, 0xEA, 0xC6, 0x34, 0xC1, 0x53, 0xFF, 0x8E, 0x10, 0x1E, 0x3E, 0x6E, 0x72, 0xAB, 0x75, 0x13, 0x44, 0x94, 0x91, 0x94, 0x34, 0x45, 0xD0, 0x44, 0xD7, 0xC9, 0x17, 0x62, 0xC3, 0xB9, 0x72, 0xE2, 0x88, 0x6A, 0x8C, 0x1D, 0xEF, 0xF2, 0x93, 0x22, 0xF6, 0x88, 0xFC, 0x29, 0xB4, 0x8A, 0x9D, 0xF2, 0x4E, 0xF9, 0x3E, 0xEA, 0x4D, 0x41, 0x00, 0xB3, 0xC4, 0x8B, 0x80, 0xE0, 0xB2, 0xB4, 0xB4, 0x2B, 0xA5, 0xC0, 0x0F, 0x57, 0x90, 0xED, 0x64, 0x8D, 0xC0, 0xEE }; /* SDK 7 (7.1.0) */ // APP -static const unsigned char app_7_prod_hdrpub[0x100] = +static const unsigned char app_fw27_prod_hdrpub[0x100] = { 0x9B, 0x3B, 0x52, 0x2D, 0x61, 0xF5, 0x0D, 0x14, 0x96, 0x09, 0x7A, 0x66, 0xC9, 0x86, 0x4C, 0x51, 0x61, 0x7D, 0xF8, 0x9B, 0xFD, 0xB0, 0x3E, 0x44, 0xC5, 0x0D, 0xC2, 0x6B, 0x6C, 0x66, 0x63, 0x3E, 0xE7, 0xC8, 0x04, 0xCB, 0x06, 0xC8, 0x35, 0xC5, 0x6D, 0xDB, 0x38, 0x36, 0xC5, 0x54, 0x32, 0xF0, 0x60, 0x11, 0x44, 0x9F, 0xD9, 0xFA, 0x6A, 0x43, 0xE1, 0x79, 0x56, 0xBF, 0xCF, 0xDD, 0xA8, 0x35, 0x15, 0x23, 0x51, 0xF9, 0x4B, 0xDA, 0x1A, 0xD9, 0x9D, 0x28, 0xF6, 0xCC, 0x1D, 0x53, 0x00, 0xC0, 0x3C, 0x13, 0x32, 0xBC, 0x7F, 0x75, 0x82, 0xCD, 0x79, 0xEF, 0x65, 0xBC, 0xCA, 0x98, 0x31, 0x0A, 0x7B, 0xEF, 0x18, 0xD8, 0xF3, 0x8D, 0x3A, 0x10, 0x22, 0xA0, 0xF2, 0x8D, 0xA5, 0xA8, 0xBE, 0xA0, 0x62, 0xEC, 0xE2, 0xC7, 0x6C, 0xCF, 0x06, 0x6B, 0xA7, 0xB5, 0xB8, 0x8C, 0xD5, 0x8E, 0xEF, 0xE3, 0x42, 0xC9, 0xAD, 0x44, 0x46, 0x3A, 0x4E, 0x77, 0x63, 0x02, 0xB4, 0x4E, 0xB4, 0x42, 0x65, 0x1D, 0x68, 0x98, 0x37, 0x7A, 0x27, 0x87, 0x31, 0xBE, 0x48, 0xFA, 0x4E, 0xD3, 0x85, 0xA6, 0xD6, 0xD2, 0x2D, 0xCD, 0x10, 0xC9, 0x13, 0x59, 0x12, 0x48, 0x14, 0x67, 0x3E, 0x40, 0xD3, 0xF8, 0x60, 0xA0, 0xBD, 0x77, 0x31, 0x76, 0x78, 0x85, 0x55, 0x53, 0x16, 0xF1, 0xB9, 0xFF, 0x7F, 0x3D, 0x9A, 0xF1, 0x33, 0x1E, 0x67, 0x8F, 0x6B, 0x4A, 0x7A, 0x79, 0x54, 0x8B, 0x43, 0xB5, 0xC2, 0xAF, 0xB8, 0x75, 0x11, 0xDE, 0x4D, 0x34, 0x6A, 0xD6, 0x5A, 0x3B, 0x48, 0x1F, 0x41, 0x9D, 0xF4, 0x58, 0x90, 0x67, 0xA8, 0x71, 0xD4, 0x09, 0x67, 0xF7, 0x55, 0xEF, 0xD3, 0x7C, 0x7D, 0x2F, 0x76, 0x84, 0x70, 0x6E, 0xAA, 0x75, 0x7D, 0xA9, 0x95, 0x42, 0xEF, 0x28, 0x29, 0x48, 0xCD, 0x79, 0xA8, 0x16, 0xB6, 0xB5 }; -static const unsigned char app_7_prod_acexsig[0x100] = +static const unsigned char app_fw27_prod_acexsig[0x100] = { 0x06, 0xDD, 0x68, 0x17, 0xAA, 0x40, 0x3A, 0x75, 0xD2, 0xCF, 0xA2, 0x5A, 0xC8, 0x1B, 0x74, 0x9D, 0x91, 0xCD, 0x38, 0x4E, 0xCA, 0x19, 0x60, 0x8E, 0x39, 0x71, 0x6C, 0xB9, 0xF9, 0x9F, 0x68, 0x44, 0xCF, 0x33, 0x94, 0x54, 0x72, 0xCC, 0xC6, 0x33, 0x96, 0x9F, 0x12, 0x07, 0xE9, 0x38, 0x87, 0x70, 0x11, 0x51, 0xFD, 0xBF, 0xD9, 0x2D, 0xFA, 0x3F, 0x70, 0x42, 0x75, 0x39, 0xE3, 0x97, 0x85, 0xAF, 0x7B, 0xC5, 0x87, 0x9B, 0x0B, 0xF9, 0xE4, 0x1C, 0xC5, 0x6B, 0x44, 0x2A, 0x10, 0x14, 0x86, 0xAA, 0xFE, 0x9E, 0x5B, 0x1D, 0x15, 0xBA, 0x8C, 0x34, 0xA2, 0xAF, 0x14, 0xD0, 0xD4, 0x0E, 0x7B, 0x3A, 0xD5, 0x3C, 0x53, 0xDB, 0x7C, 0xBE, 0x44, 0x58, 0x79, 0x42, 0x23, 0x3A, 0x77, 0xA3, 0x2C, 0xB9, 0xEB, 0x62, 0x19, 0x94, 0x2B, 0xA0, 0x67, 0x94, 0xC6, 0xB2, 0x90, 0xC6, 0x61, 0xFD, 0x43, 0xEC, 0xEA, 0x27, 0x7E, 0xA6, 0xB1, 0xED, 0xA9, 0x67, 0xED, 0x56, 0x91, 0x90, 0xF9, 0x32, 0x4E, 0xC3, 0x29, 0x5A, 0x84, 0x4C, 0xAB, 0x99, 0x75, 0x40, 0x8E, 0x19, 0xD9, 0x12, 0xD1, 0x06, 0x2D, 0xD0, 0x2C, 0xD9, 0x6C, 0x41, 0x35, 0x64, 0xDB, 0x80, 0x63, 0xB2, 0x01, 0xF8, 0x29, 0xAB, 0xF5, 0x70, 0x79, 0x4E, 0x0F, 0xFA, 0x23, 0x20, 0x2E, 0x04, 0x75, 0x48, 0x15, 0x9B, 0x71, 0xD5, 0x85, 0x09, 0x67, 0x7D, 0xAC, 0x6A, 0xFA, 0xC0, 0x16, 0xAF, 0x58, 0x26, 0xCD, 0x6F, 0x1F, 0xB8, 0xF5, 0x8D, 0xD1, 0x7D, 0x3D, 0x70, 0x2F, 0x08, 0xB8, 0x23, 0x61, 0x24, 0xAE, 0x94, 0x31, 0xA3, 0xBD, 0x1E, 0x18, 0xD7, 0x82, 0x92, 0xDD, 0x11, 0x79, 0x7D, 0x1F, 0xEC, 0x03, 0x08, 0x82, 0xCC, 0x52, 0x62, 0xC9, 0x27, 0x2D, 0x08, 0xD5, 0x6B, 0x4E, 0x86, 0x2E, 0x3F, 0x50, 0x5C, 0xA3, 0xC1, 0xDF, 0xF5 }; diff --git a/dpki.h b/dpki.h index cd31344..d143866 100644 --- a/dpki.h +++ b/dpki.h @@ -5,16 +5,16 @@ #endif // AES KEYS -static const unsigned char ctr_unfixed_ncch_keyX_dpki[2][16] = // Dummy +static const unsigned char dev_unfixed_ncch_keyX[2][16] = // Dummy { {0x82, 0xAD, 0xED, 0xC7, 0xBA, 0x0A, 0x3F, 0x3D, 0x5F, 0xDD, 0x30, 0x0F, 0x0E, 0x9B, 0xE1, 0x5B} , // Normal {0xE5, 0x70, 0x6F, 0x65, 0x6A, 0xF4, 0xD9, 0x3F, 0x1E, 0x2F, 0x29, 0x3F, 0x16, 0x15, 0x4E, 0xD8} , // 7.X new Crypto }; -static const unsigned char ctr_fixed_ncch_key_dpki[2][16] = +static const unsigned char dev_fixed_ncch_key[2][16] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} , // NormalFixedKey - {0x52, 0x7C, 0xE6, 0x30, 0xA9, 0xCA, 0x30, 0x5F, 0x36, 0x96, 0xF3, 0xCD, 0xE9, 0x54, 0x19, 0x4B} , // systemFixedKey + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} , // Normal FixedKey + {0x52, 0x7C, 0xE6, 0x30, 0xA9, 0xCA, 0x30, 0x5F, 0x36, 0x96, 0xF3, 0xCD, 0xE9, 0x54, 0x19, 0x4B} , // System FixedKey }; static const unsigned char ctr_common_etd_key_dpki[2][16] = @@ -891,4 +891,4 @@ static const unsigned char cpA_dpki_cert[0x300] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; \ No newline at end of file +}; diff --git a/exheader.c b/exheader.c index 4eb93fd..72391ec 100644 --- a/exheader.c +++ b/exheader.c @@ -113,7 +113,7 @@ int get_ExHeaderSettingsFromNcchset(exheader_settings *exhdrset, ncch_settings * /* Transfer settings */ exhdrset->keys = ncchset->keys; exhdrset->rsf = ncchset->rsfSet; - exhdrset->useAccessDescPreset = ncchset->keys->accessDescSign.presetType != not_preset; + exhdrset->useAccessDescPreset = ncchset->keys->accessDescSign.presetType != desc_preset_NONE; /* Creating Output Buffer */ ncchset->sections.exhdr.size = 0x800; @@ -158,9 +158,9 @@ int get_ExHeaderSettingsFromNcchset(exheader_settings *exhdrset, ncch_settings * /* Set Simple Flags */ if(ncchset->options.CompressCode) - exhdrset->exHdr->codeSetInfo.flag |= Compress; + exhdrset->exHdr->codeSetInfo.flag |= infoflag_COMPRESS_EXEFS_0; if(ncchset->options.UseOnSD) - exhdrset->exHdr->codeSetInfo.flag |= RetailSDAppFlag; + exhdrset->exHdr->codeSetInfo.flag |= infoflag_SD_APPLICATION; if(!ncchset->options.UseRomFS) // Move this later exhdrset->exHdr->arm11SystemLocalCapabilities.storageInfo.otherAttributes |= attribute_NOT_USE_ROMFS; @@ -187,10 +187,9 @@ int get_ExHeaderSettingsFromYaml(exheader_settings *exhdrset) if(!exhdrset->useAccessDescPreset){ result = get_ExHeaderARM11KernelInfo(&exhdrset->exHdr->arm11KernelCapabilities, exhdrset->rsf); if(result) goto finish; - - result = get_ExHeaderARM9AccessControlInfo(&exhdrset->exHdr->arm9AccessControlInfo, exhdrset->rsf); - if(result) goto finish; } + result = get_ExHeaderARM9AccessControlInfo(&exhdrset->exHdr->arm9AccessControlInfo, exhdrset->rsf); + if(result) goto finish; finish: return result; @@ -247,9 +246,9 @@ int get_ExHeaderDependencyList(u8 *DependencyList, rsf_settings *rsf) int get_ExHeaderSystemInfo(exhdr_SystemInfo *SystemInfo, rsf_settings *rsf) { /* SaveDataSize */ - if(rsf->Rom.SaveDataSize){ + if(rsf->SystemControlInfo.SaveDataSize){ u64 SaveDataSize = 0; - int ret = GetSaveDataSizeFromString(&SaveDataSize,rsf->Rom.SaveDataSize); + int ret = GetSaveDataSizeFromString(&SaveDataSize,rsf->SystemControlInfo.SaveDataSize,"EXHEADER"); if(ret) return ret; u64_to_u8(SystemInfo->savedataSize,SaveDataSize,LE); } @@ -1142,8 +1141,9 @@ int get_ExHeaderARM9AccessControlInfo(exhdr_ARM9AccessControlInfo *arm9, rsf_set arm9->descriptors[15] = strtol(rsf->AccessControlInfo.DescVersion,NULL,0); } else{ - ErrorParamNotFound("AccessControlInfo/DescVersion"); - return EXHDR_BAD_YAML_OPT; + //ErrorParamNotFound("AccessControlInfo/DescVersion"); + //return EXHDR_BAD_YAML_OPT; + arm9->descriptors[15] = 2; // Makerom generates a desc version 2 anyway, so if not specified, it will be set to 2 } return 0; @@ -1212,10 +1212,16 @@ int GetDependencyList_frm_exhdr(u8 *Dest, extended_hdr *hdr) return 0; } -/* ExHeader Settings Read from Yaml */ -int GetSaveDataSizeFromString(u64 *out, char *string) +/* ExHeader Settings Read from RSF */ +int GetSaveDataSizeFromString(u64 *out, char *string, char *moduleName) { + if(!string){ + *out = 0; + return 0; + } + u64 SaveDataSize = strtoull(string,NULL,10); + if(strstr(string,"K")){ char *str = strstr(string,"K"); if(strcmp(str,"K") == 0 || strcmp(str,"KB") == 0 ){ @@ -1235,11 +1241,17 @@ int GetSaveDataSizeFromString(u64 *out, char *string) } } else{ - fprintf(stderr,"[ERROR] Invalid save data size format.\n"); + if(moduleName) + fprintf(stderr,"[%s ERROR] Invalid save data size format.\n",moduleName); + else + fprintf(stderr,"[ERROR] Invalid save data size format.\n"); return EXHDR_BAD_YAML_OPT; } if((SaveDataSize & 65536) != 0){ - fprintf(stderr,"[ERROR] Save data size must be aligned to 64K.\n"); + if(moduleName) + fprintf(stderr,"[%s ERROR] Save data size must be aligned to 64K.\n",moduleName); + else + fprintf(stderr,"[ERROR] Save data size must be aligned to 64K.\n"); return EXHDR_BAD_YAML_OPT; } *out = SaveDataSize; @@ -1249,22 +1261,22 @@ int GetSaveDataSizeFromString(u64 *out, char *string) int GetSaveDataSize_rsf(u64 *SaveDataSize, user_settings *usrset) { - if(usrset->common.rsfSet.Rom.SaveDataSize){ - *SaveDataSize = strtoull(usrset->common.rsfSet.Rom.SaveDataSize,NULL,10); - if(strstr(usrset->common.rsfSet.Rom.SaveDataSize,"K")){ - char *str = strstr(usrset->common.rsfSet.Rom.SaveDataSize,"K"); + if(usrset->common.rsfSet.SystemControlInfo.SaveDataSize){ + *SaveDataSize = strtoull(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,NULL,10); + if(strstr(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"K")){ + char *str = strstr(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"K"); if(strcmp(str,"K") == 0 || strcmp(str,"KB") == 0 ){ *SaveDataSize = *SaveDataSize*KB; } } - else if(strstr(usrset->common.rsfSet.Rom.SaveDataSize,"M")){ - char *str = strstr(usrset->common.rsfSet.Rom.SaveDataSize,"M"); + else if(strstr(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"M")){ + char *str = strstr(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"M"); if(strcmp(str,"M") == 0 || strcmp(str,"MB") == 0 ){ *SaveDataSize = *SaveDataSize*MB; } } - else if(strstr(usrset->common.rsfSet.Rom.SaveDataSize,"G")){ - char *str = strstr(usrset->common.rsfSet.Rom.SaveDataSize,"G"); + else if(strstr(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"G")){ + char *str = strstr(usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"G"); if(strcmp(str,"G") == 0 || strcmp(str,"GB") == 0 ){ *SaveDataSize = *SaveDataSize*GB; } diff --git a/exheader.h b/exheader.h index aee01fa..431c776 100644 --- a/exheader.h +++ b/exheader.h @@ -9,8 +9,8 @@ typedef enum typedef enum { - Compress = 1, - RetailSDAppFlag = 2, + infoflag_COMPRESS_EXEFS_0 = 1, + infoflag_SD_APPLICATION = 2, } system_info_flags; typedef enum @@ -50,7 +50,7 @@ typedef enum typedef enum { - fsaccess_CATEGORY_SYSTEM_APPLICATION = (1 << 0), // 0x00000001 + fsaccess_CATEGORY_SYSTEM_APPLICATION = (1 << 0), // 0x00000001 used by all sys apps? fsaccess_CATEGORY_HARDWARE_CHECK = (1 << 1), // 0x00000002 fsaccess_CATEGORY_FILE_SYSTEM_TOOL = (1 << 2), // 0x00000004 fsaccess_DEBUG = (1 << 3), // 0x00000008 @@ -63,14 +63,14 @@ typedef enum fsaccess_CTR_NAND_RW = (1 << 10), // 0x00000400 fsaccess_CTR_NAND_RO_WRITE = (1 << 11), // 0x00000800 fsaccess_CATEGORY_SYSTEM_SETTINGS = (1 << 12), // 0x00001000 - fsaccess_CARD_BOARD = (1 << 13), // 0x00002000 + fsaccess_CARD_BOARD = (1 << 13), // 0x00002000 probably used by sys transfer fsaccess_EXPORT_IMPORT_IVS = (1 << 14), // 0x00004000 fsaccess_DIRECT_SDMC_WRITE = (1 << 15), // 0x00008000 - fsaccess_SWITCH_CLEANUP = (1 << 16), // 0x00010000 - fsaccess_SAVE_DATA_MOVE = (1 << 17), // 0x00020000 - fsaccess_SHOP = (1 << 18), // 0x00040000 - fsaccess_SHELL = (1 << 19), // 0x00080000 - fsaccess_CATEGORY_HOME_MENU = (1 << 20), // 0x00100000 + fsaccess_SWITCH_CLEANUP = (1 << 16), // 0x00010000 reference to Sys Transfer? + fsaccess_SAVE_DATA_MOVE = (1 << 17), // 0x00020000 used by save transfer tool + fsaccess_SHOP = (1 << 18), // 0x00040000 probably used by eshop + fsaccess_SHELL = (1 << 19), // 0x00080000 reference to "Nintendo [User Interface] Shell" (NS)? + fsaccess_CATEGORY_HOME_MENU = (1 << 20), // 0x00100000 used by homemenu } file_system_access; typedef enum @@ -226,8 +226,7 @@ int GetDependencyList_frm_exhdr(u8 *Dest,extended_hdr *hdr); void GetCoreVersion_frm_exhdr(u8 *Dest, extended_hdr *hdr); /* ExHeader Settings Read from Yaml */ -int GetSaveDataSize_rsf(u64 *SaveDataSize, user_settings *usrset); -int GetSaveDataSizeFromString(u64 *out, char *string); +int GetSaveDataSizeFromString(u64 *out, char *string, char *moduleName); int GetRemasterVersion_rsf(u16 *RemasterVersion, user_settings *usrset); void ErrorParamNotFound(char *string); \ No newline at end of file diff --git a/keyset.c b/keyset.c index a431393..39819c3 100644 --- a/keyset.c +++ b/keyset.c @@ -25,6 +25,10 @@ int SetCaCert(keys_struct *keys, u8 *Cert); int SetTikCert(keys_struct *keys, u8 *Cert); int SetTmdCert(keys_struct *keys, u8 *Cert); +int LoadKeysFromResources(keys_struct *keys); +int LoadKeysFromKeyfile(keys_struct *keys); +void CheckAccessDescKey(keys_struct *keys); +void DumpKeyset(keys_struct *keys); // Code void InitKeys(keys_struct *keys) @@ -44,16 +48,37 @@ void PrintBadKeySize(char *path, u32 size) int SetKeys(keys_struct *keys) { - if(keys->keyset == pki_TEST){ // Ergo False Sign + int result = 0; + result = LoadKeysFromResources(keys); + if(result) return KEYSET_ERROR; + + if(!keys->keysetLoaded){ + result = LoadKeysFromKeyfile(keys); + if(result) return KEYSET_ERROR; + } + + CheckAccessDescKey(keys); + + if(keys->dumpkeys) + DumpKeyset(keys); + + return 0; +} + +int LoadKeysFromResources(keys_struct *keys) +{ + if(keys->keyset == pki_TEST){ + keys->keysetLoaded = true; /* AES Keys */ // CIA //SetCommonKey(keys,(u8*)zeros_aesKey,1); if(keys->aes.currentCommonKey > 0xff) - SetCurrentCommonKey(keys,1); + SetCurrentCommonKey(keys,0); // NCCH - keys->aes.normalKey = (u8*)zeros_aesKey; + keys->aes.normalKey = NULL; keys->aes.systemFixedKey = NULL; + //SetNormalKey(keys,zeros_aesKey); //SetSystemFixedKey(keys,(u8*)zeros_aesKey); /* RSA Keys */ @@ -71,154 +96,9 @@ int SetKeys(keys_struct *keys) SetTikCert(keys,(u8*)xsC_tpki_cert); SetTmdCert(keys,(u8*)cpB_tpki_cert); } - else if(keys->keyset == pki_CUSTOM || keys->keyset == pki_BETA){ - char *cwd = calloc(100,sizeof(char)); - getcwdir(cwd,100); - - chdir(keys->keydir); - - // NCCH - keys->aes.normalKey = (u8*)zeros_aesKey; - if(DoesFileExist("systemfixed.aesKey")){ - keys->aes.systemFixedKey = ImportFile("systemfixed.aesKey",16); - if(!keys->aes.systemFixedKey) - return FAILED_TO_IMPORT_FILE; - } - - // commonKeys - char common_key_name[30]; - for(int i = 0; i < 256; i++){ - memset(common_key_name,0,sizeof(char)*30); - sprintf(common_key_name,"common_etd_%d.aesKey",i); - if(DoesFileExist(common_key_name)){ - keys->aes.commonKey[i] = ImportFile(common_key_name,16); - if(!keys->aes.commonKey[i]) - return FAILED_TO_IMPORT_FILE; - if(keys->aes.currentCommonKey > 0xff) - SetCurrentCommonKey(keys,i); - } - } - - // Certs - if(DoesFileExist("ca_cpki.cert")){ - keys->certs.caCert = ImportFile("ca_cpki.cert",0); - if(!keys->certs.caCert) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("ca_cpki.cert"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("xs_cpki.cert")){ - keys->certs.xsCert = ImportFile("xs_cpki.cert",0); - if(!keys->certs.xsCert) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("xs_cpki.cert"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("cp_cpki.cert")){ - keys->certs.cpCert = ImportFile("cp_cpki.cert",0); - if(!keys->certs.cpCert) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("cp_cpki.cert"); - return FAILED_TO_IMPORT_FILE; - } - - // RSA Keys - if(DoesFileExist("cp_cpki.rsaPubKey")){ - keys->rsa.cpPub = ImportFile("cp_cpki.rsaPubKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.cpPub) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("cp_cpki.rsaPubKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("cp_cpki.rsaPvtKey")){ - keys->rsa.cpPvt = ImportFile("cp_cpki.rsaPvtKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.cpPvt) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("cp_cpki.rsaPvtKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("xs_cpki.rsaPubKey")){ - keys->rsa.xsPub = ImportFile("xs_cpki.rsaPubKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.xsPub) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("xs_cpki.rsaPubKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("xs_cpki.rsaPvtKey")){ - keys->rsa.xsPvt = ImportFile("xs_cpki.rsaPvtKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.xsPvt) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("xs_cpki.rsaPvtKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("ncsd_cfa.rsaPubKey")){ - keys->rsa.cciCfaPub = ImportFile("ncsd_cfa.rsaPubKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.cciCfaPub) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("ncsd_cfa.rsaPubKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("ncsd_cfa.rsaPvtKey")){ - keys->rsa.cciCfaPvt = ImportFile("ncsd_cfa.rsaPvtKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.cciCfaPvt) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("ncsd_cfa.rsaPvtKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("acex.rsaPubKey")){ - keys->rsa.acexPub = ImportFile("acex.rsaPubKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.acexPub) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("acex.rsaPubKey"); - return FAILED_TO_IMPORT_FILE; - } - - if(DoesFileExist("acex.rsaPvtKey")){ - keys->rsa.acexPvt = ImportFile("acex.rsaPvtKey",RSA_2048_KEY_SIZE); - if(!keys->rsa.acexPvt) - return FAILED_TO_IMPORT_FILE; - } - else{ - keysetOpenError("acex.rsaPvtKey"); - return FAILED_TO_IMPORT_FILE; - } - - chdir(cwd); - free(cwd); -#ifdef DEBUG - fprintf(stdout,"[DEBUG] freed path\n"); -#endif - } -#ifndef PUBLIC_BUILD + #ifndef PUBLIC_BUILD else if(keys->keyset == pki_DEVELOPMENT){ + keys->keysetLoaded = true; /* AES Keys */ // CIA for(int i = 0; i < 2; i++){ @@ -228,12 +108,12 @@ int SetKeys(keys_struct *keys) SetCurrentCommonKey(keys,0); // NCCH - keys->aes.normalKey = (u8*)ctr_fixed_ncch_key_dpki[0]; - SetSystemFixedKey(keys,(u8*)ctr_fixed_ncch_key_dpki[1]); + SetNormalKey(keys,(u8*)dev_fixed_ncch_key[0]); + SetSystemFixedKey(keys,(u8*)dev_fixed_ncch_key[1]); /* - keys->aes.ncchKeyX0 = (u8*)ctr_unfixed_ncch_keyX_dpki[0]; - keys->aes.ncchKeyX1 = (u8*)ctr_unfixed_ncch_keyX_dpki[1]; + keys->aes.ncchKeyX0 = (u8*)dev_unfixed_ncch_keyX[0]; + keys->aes.ncchKeyX1 = (u8*)dev_unfixed_ncch_keyX[1]; */ /* RSA Keys */ @@ -251,6 +131,7 @@ int SetKeys(keys_struct *keys) SetTmdCert(keys,(u8*)cpA_dpki_cert); } else if(keys->keyset == pki_PRODUCTION){ + keys->keysetLoaded = true; /* AES Keys */ // CIA for(int i = 0; i < 6; i++){ @@ -260,10 +141,11 @@ int SetKeys(keys_struct *keys) SetCurrentCommonKey(keys,1); // NCCH - keys->aes.normalKey = (u8*)zeros_aesKey; + keys->aes.normalKey = NULL; + keys->aes.systemFixedKey = NULL; /* - keys->aes.ncchKeyX0 = (u8*)ctr_unfixed_ncch_keyX_ppki[0]; - keys->aes.ncchKeyX1 = (u8*)ctr_unfixed_ncch_keyX_ppki[1]; + keys->aes.ncchKeyX0 = (u8*)prod_unfixed_ncch_keyX[0]; + keys->aes.ncchKeyX1 = (u8*)prod_unfixed_ncch_keyX[1]; */ /* RSA Keys */ @@ -280,58 +162,71 @@ int SetKeys(keys_struct *keys) SetTikCert(keys,(u8*)xsC_ppki_cert); SetTmdCert(keys,(u8*)cpB_ppki_cert); } - - -#endif -#ifdef DEBUG - fprintf(stdout,"[DEBUG] Checking if access desc\n"); #endif + return 0; +} + +int LoadKeysFromKeyfile(keys_struct *keys) +{ + //else + printf("[KEYSET ERROR] Target not supported\n"); + return 0; +} + +void CheckAccessDescKey(keys_struct *keys) +{ // Checking if AccessDesc can be signed - u8 *tmp = malloc(0x100); - memset(tmp,0,0x100); - if(memcmp(tmp,keys->rsa.acexPvt,0x100) == 0) + u8 *tmp = calloc(1,RSA_2048_KEY_SIZE); + if(memcmp(tmp,keys->rsa.acexPvt,RSA_2048_KEY_SIZE) == 0) keys->rsa.requiresPresignedDesc = true; else keys->rsa.requiresPresignedDesc = false; free(tmp); +} - - if(keys->dumpkeys) - { - printf("[+] Keys\n"); +void DumpKeyset(keys_struct *keys) +{ + bool showNcchFixedKeys = (keys->aes.normalKey || keys->aes.systemFixedKey); + bool showCommonKeys = false; + for(int i = 0; i < 256; i++){ + if(keys->aes.commonKey[i]){ + showCommonKeys = true; + break; + } + } + + printf("[*] Keyset\n"); + if(showCommonKeys){ printf(" > eTicket Common Keys\n"); - for(int i = 0; i < 256; i++) - { - if(keys->aes.commonKey[i]) - { + for(int i = 0; i < 256; i++){ + if(keys->aes.commonKey[i]){ printf(" [0x%02x] ",i); memdump(stdout,"",keys->aes.commonKey[i],16); } } + } + if(showNcchFixedKeys){ printf(" > Fixed NCCH Keys\n"); - memdump(stdout," [Normal] ",keys->aes.normalKey,16); + if(keys->aes.normalKey) + memdump(stdout," [Normal] ",keys->aes.normalKey,16); if(keys->aes.systemFixedKey) memdump(stdout," [System] ",keys->aes.systemFixedKey,16); - printf(" > TIK RSA Keys\n"); - memdump(stdout," [PUB] ",keys->rsa.xsPub,0x100); - memdump(stdout," [PVT] ",keys->rsa.xsPvt,0x100); - printf(" > TMD RSA Keys\n"); - memdump(stdout," [PUB] ",keys->rsa.cpPub,0x100); - memdump(stdout," [PVT] ",keys->rsa.cpPvt,0x100); - printf(" > AcexDesc RSA Keys\n"); - memdump(stdout," [PUB] ",keys->rsa.acexPub,0x100); - memdump(stdout," [PVT] ",keys->rsa.acexPvt,0x100); - printf(" > NcsdCfa RSA Keys\n"); - memdump(stdout," [PUB] ",keys->rsa.cciCfaPub,0x100); - memdump(stdout," [PVT] ",keys->rsa.cciCfaPvt,0x100); } - -#ifdef DEBUG - fprintf(stdout,"[DEBUG] Done setting keys\n"); -#endif - return 0; + + printf(" > TIK RSA Keys\n"); + memdump(stdout," [PUB] ",keys->rsa.xsPub,0x100); + memdump(stdout," [PVT] ",keys->rsa.xsPvt,0x100); + printf(" > TMD RSA Keys\n"); + memdump(stdout," [PUB] ",keys->rsa.cpPub,0x100); + memdump(stdout," [PVT] ",keys->rsa.cpPvt,0x100); + printf(" > AcexDesc RSA Keys\n"); + memdump(stdout," [PUB] ",keys->rsa.acexPub,0x100); + memdump(stdout," [PVT] ",keys->rsa.acexPvt,0x100); + printf(" > NcsdCfa RSA Keys\n"); + memdump(stdout," [PUB] ",keys->rsa.cciCfaPub,0x100); + memdump(stdout," [PVT] ",keys->rsa.cciCfaPvt,0x100); } FILE* keyset_OpenFile(char *dir, char *name, bool FileRequired) @@ -365,6 +260,7 @@ void FreeKeys(keys_struct *keys) } } free(keys->aes.commonKey); + free(keys->aes.normalKey); free(keys->aes.systemFixedKey); free(keys->aes.unFixedKey0); free(keys->aes.unFixedKey1); @@ -425,6 +321,12 @@ int SetCurrentCommonKey(keys_struct *keys, u8 Index) return 0; } +int SetNormalKey(keys_struct *keys, u8 *systemFixedKey) +{ + if(!keys) return -1; + return CopyData(&keys->aes.normalKey,systemFixedKey,16); +} + int SetSystemFixedKey(keys_struct *keys, u8 *systemFixedKey) { if(!keys) return -1; diff --git a/keyset.h b/keyset.h index 88837e5..c0c983c 100644 --- a/keyset.h +++ b/keyset.h @@ -1,4 +1,10 @@ #pragma once + +typedef enum +{ + KEYSET_ERROR = -10, +} keyset_errors; + typedef enum { RSA_1024_KEY_SIZE = 0x80, @@ -9,7 +15,7 @@ typedef enum typedef enum { pki_TEST, - pki_BETA, + pki_BETA, // Not used, but is here for completeness pki_DEVELOPMENT, pki_PRODUCTION, pki_CUSTOM, @@ -17,20 +23,20 @@ typedef enum typedef enum { - not_preset, - app, - ec_app, - dlp, - demo, + desc_preset_NONE, + desc_preset_APP, + desc_preset_EC_APP, + desc_preset_DLP, + desc_preset_DEMO, + desc_preset_FIRM, } fixed_accessdesc_type; // Structs typedef struct { - char *keydir; pki_keyset keyset; - + bool keysetLoaded; bool dumpkeys; struct @@ -92,6 +98,8 @@ void FreeKeys(keys_struct *keys); int SetCommonKey(keys_struct *keys, u8 *commonKey, u8 Index); int SetCurrentCommonKey(keys_struct *keys, u8 Index); +int SetNormalKey(keys_struct *keys, u8 *systemFixedKey); int SetSystemFixedKey(keys_struct *keys, u8 *systemFixedKey); + int SetNcchUnfixedKeys(keys_struct *keys, u8 *ncchSig); \ No newline at end of file diff --git a/makerom.c b/makerom.c index dcca1de..8adf105 100644 --- a/makerom.c +++ b/makerom.c @@ -12,6 +12,7 @@ int main(int argc, char *argv[]) return -1; } init_UserSettings(usrset); + initRand(); int result; @@ -34,29 +35,38 @@ int main(int argc, char *argv[]) // Setup Content 0 if(!usrset->ncch.buildNcch0){ // Import Content if(usrset->common.workingFileType == infile_ncch){ - FILE *ncch0 = fopen(usrset->common.contentPath[0],"rb"); - if(!ncch0) { + if(!AssertFile(usrset->common.contentPath[0])){ fprintf(stderr,"[MAKEROM ERROR] Failed to open Content 0: %s\n",usrset->common.contentPath[0]); goto finish; } - fclose(ncch0); - usrset->common.workingFile.size = GetFileSize_u64(usrset->common.contentPath[0]); - usrset->common.workingFile.buffer = malloc(usrset->common.workingFile.size); - ncch0 = fopen(usrset->common.contentPath[0],"rb"); + u64 fileSize = GetFileSize_u64(usrset->common.contentPath[0]); + u64 calcSize = 0; + + FILE *ncch0 = fopen(usrset->common.contentPath[0],"rb"); + + ncch_hdr hdr; + GetNCCH_CommonHDR(&hdr,ncch0,NULL); + calcSize = GetNCCH_MediaSize(&hdr) * GetNCCH_MediaUnitSize(&hdr); + if(calcSize != fileSize){ + fprintf(stderr,"[MAKEROM ERROR] Content 0 is corrupt\n"); + fclose(ncch0); + goto finish; + } + + usrset->common.workingFile.size = fileSize; + usrset->common.workingFile.buffer = malloc(fileSize); ReadFile_64(usrset->common.workingFile.buffer, usrset->common.workingFile.size,0,ncch0); fclose(ncch0); } else if(usrset->common.workingFileType == infile_srl || usrset->common.workingFileType == infile_ncsd){ - FILE *fp = fopen(usrset->common.workingFilePath,"rb"); - if(!fp) { + if(!AssertFile(usrset->common.workingFilePath)) { fprintf(stderr,"[MAKEROM ERROR] Failed to open %s: %s\n",usrset->common.workingFileType == infile_srl? "SRL":"CCI",usrset->common.workingFilePath); goto finish; } - fclose(fp); u64 size = GetFileSize_u64(usrset->common.workingFilePath); usrset->common.workingFile.size = align(size,0x10); usrset->common.workingFile.buffer = malloc(usrset->common.workingFile.size); - fp = fopen(usrset->common.workingFilePath,"rb"); + FILE *fp = fopen(usrset->common.workingFilePath,"rb"); ReadFile_64(usrset->common.workingFile.buffer,size,0,fp); fclose(fp); } @@ -101,7 +111,7 @@ int main(int argc, char *argv[]) #endif FILE *ncch_out = fopen(usrset->common.outFileName,"wb"); if(!ncch_out) { - fprintf(stderr,"[ERROR] Failed to create '%s'\n",usrset->common.outFileName); + fprintf(stderr,"[MAKEROM ERROR] Failed to create '%s'\n",usrset->common.outFileName); fprintf(stderr,"[RESULT] Failed to build '%s'\n",usrset->common.outFormat == CXI? "CXI" : "CFA"); result = FAILED_TO_CREATE_OUTFILE; goto finish; diff --git a/ncch.c b/ncch.c index 9aef71a..7eac1db 100644 --- a/ncch.c +++ b/ncch.c @@ -1,4 +1,5 @@ #include "lib.h" +#include "dir.h" #include "ncch.h" #include "exheader.h" #include "elf.h" @@ -397,7 +398,7 @@ int SetupNcch(ncch_settings *ncchset, romfs_buildctx *romfs) plnRgnSize = 0; if(ncchset->sections.exeFs.size){ - exefsHashSize = ncchset->options.mediaSize; + exefsHashSize = align(sizeof(exefs_hdr),ncchset->options.mediaSize); exefsSize = align(ncchset->sections.exeFs.size,ncchset->options.mediaSize); exefsOffset = align(ncchSize,ncchset->options.mediaSize); ncchSize = exefsOffset + exefsSize; @@ -406,9 +407,9 @@ int SetupNcch(ncch_settings *ncchset, romfs_buildctx *romfs) exefsSize = 0; if(romfs->romfsSize){ - romfsHashSize = ncchset->options.mediaSize; + romfsHashSize = align(romfs->romfsHeaderSize,ncchset->options.mediaSize); romfsSize = align(romfs->romfsSize,ncchset->options.mediaSize); - //romfsOffset = align(ncchSize,0x200); // Old makerom method, SDK 3.x and prior + //romfsOffset = align(ncchSize,0x200); // Old makerom method, SDK 2.x and prior romfsOffset = align(ncchSize,0x1000); ncchSize = romfsOffset + romfsSize; } @@ -580,8 +581,10 @@ int SetCommonHeaderBasicData(ncch_settings *ncchset, ncch_hdr *hdr) /* NCCH Magic */ memcpy(hdr->magic,"NCCH",4); - /* NCCH Format titleVersion */ - u16_to_u8(hdr->formatVersion,0x2,LE); + /* NCCH Format Version */ + if(!ncchset->options.IsCfa) + u16_to_u8(hdr->formatVersion,0x2,LE); + /* Setting ProgramId/TitleId */ u64 ProgramId = 0; @@ -614,12 +617,20 @@ int SetCommonHeaderBasicData(ncch_settings *ncchset, ncch_hdr *hdr) if(!ncchset->options.Encrypt) hdr->flags[OtherFlag] = (NoCrypto|FixedCryptoKey); else if(ncchset->keys->aes.ncchKeyX0){ - hdr->flags[OtherFlag] = 0; + hdr->flags[OtherFlag] = UnFixedCryptoKey; if(ncchset->keys->aes.ncchKeyX1) hdr->flags[SecureCrypto2] = 1; } - else + else{ hdr->flags[OtherFlag] = FixedCryptoKey; + u8 *key = GetNCCHKey(GetNCCHKeyType(hdr),ncchset->keys); + if(!key){ // for detecting absense of fixed aes keys + hdr->flags[OtherFlag] = (NoCrypto|FixedCryptoKey); + fprintf(stderr,"[NCCH WARNING] NCCH AES Key could not be loaded, NCCH will not be encrypted\n"); + } + } + + /* Set ContentUnitSize */ hdr->flags[ContentUnitSize] = 0; // 0x200 @@ -969,11 +980,11 @@ bool IsCfa(ncch_hdr* hdr) u32 GetNCCH_MediaUnitSize(ncch_hdr* hdr) { - u16 titleVersion = u8_to_u16(hdr->formatVersion,LE); + u16 formatVersion = u8_to_u16(hdr->formatVersion,LE); u32 ret = 0; - if (titleVersion == 1) + if (formatVersion == 1) ret = 1; - else if (titleVersion == 2 || titleVersion == 0) + else if (formatVersion == 2 || formatVersion == 0) ret = 1 << (hdr->flags[ContentUnitSize] + 9); return ret; //return 0x200*pow(2,hdr->flags[ContentUnitSize]); @@ -1006,7 +1017,8 @@ u8* GetNCCHKey(ncch_key_type keytype, keys_struct *keys) { switch(keytype){ case NoKey: return NULL; - case KeyIsNormalFixed: return keys->aes.normalKey; + case KeyIsNormalFixed: + return keys->aes.normalKey; case KeyIsSystemFixed: return keys->aes.systemFixedKey; case KeyIsUnFixed: diff --git a/ncch.h b/ncch.h index 9757a96..c1dcfc1 100644 --- a/ncch.h +++ b/ncch.h @@ -53,6 +53,7 @@ typedef enum typedef enum { + UnFixedCryptoKey = 0x0, FixedCryptoKey = 0x1, NoMountRomFs = 0x2, NoCrypto = 0x4, diff --git a/ncsd.c b/ncsd.c index 7efa53a..3005887 100644 --- a/ncsd.c +++ b/ncsd.c @@ -8,8 +8,8 @@ // Private Prototypes /* RSA Crypto */ -int SignCCI(u8 *Signature, u8 *NCSD_HDR); -int CheckCCISignature(u8 *Signature, u8 *NCSD_HDR); +int SignCCI(u8 *Signature, u8 *NCSD_HDR, keys_struct *keys); +int CheckCCISignature(u8 *Signature, u8 *NCSD_HDR, keys_struct *keys); /* cci_settings tools */ void init_CCISettings(cci_settings *set); @@ -17,16 +17,18 @@ int get_CCISettings(cci_settings *cciset, user_settings *usrset); void free_CCISettings(cci_settings *set); /* CCI Data Gen/Write */ -int BuildNCSDHeader(cci_settings *cciset, user_settings *usrset); +int BuildCCIHeader(cci_settings *cciset, user_settings *usrset); int BuildCardInfoHeader(cci_settings *cciset, user_settings *usrset); -int WriteCCI_HDR_ToFile(cci_settings *cciset); -int WriteCCI_Content_ToFile(cci_settings *cciset,user_settings *usrset); -int WriteCCI_DummyBytes(cci_settings *cciset); +int WriteHeaderToFile(cci_settings *cciset); +int WriteContentToFile(cci_settings *cciset,user_settings *usrset); +int WriteDummyBytes(cci_settings *cciset); /* Get Data from Content Files */ int CheckContent0(cci_settings *cciset, user_settings *usrset); int GetDataFromContent0(cci_settings *cciset, user_settings *usrset); int GetContentFP(cci_settings *cciset, user_settings *usrset); +int ImportNcchPartitions(cci_settings *cciset); +int ImportCverDetails(cci_settings *cciset, user_settings *usrset); /* Get Data from YAML Settings */ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml); @@ -38,6 +40,7 @@ int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset); int CheckMediaSize(cci_settings *cciset); static InternalCCI_Context ctx; +const int NCCH0_OFFSET = 0x4000; // Code int build_CCI(user_settings *usrset) @@ -56,6 +59,10 @@ int build_CCI(user_settings *usrset) result = get_CCISettings(cciset,usrset); if(result) goto finish; + // Import Content + result = ImportNcchPartitions(cciset); + if(result) goto finish; + // Create Output File cciset->out = fopen(usrset->common.outFileName,"wb"); if(!cciset->out){ @@ -65,20 +72,19 @@ int build_CCI(user_settings *usrset) } // Generate NCSD Header and Additional Header - result = BuildNCSDHeader(cciset,usrset); - if(result) - goto finish; + result = BuildCCIHeader(cciset,usrset); + if(result) goto finish; BuildCardInfoHeader(cciset,usrset); // Write to File - WriteCCI_HDR_ToFile(cciset); - result = WriteCCI_Content_ToFile(cciset,usrset); + WriteHeaderToFile(cciset); + result = WriteContentToFile(cciset,usrset); if(result) goto finish; // Fill out file if necessary - if(cciset->fillOutCci) - WriteCCI_DummyBytes(cciset); + if(cciset->option.fillOutCci) + WriteDummyBytes(cciset); // Close output file finish: @@ -88,14 +94,14 @@ finish: } -int SignCCI(u8 *Signature, u8 *NCSD_HDR) +int SignCCI(u8 *Signature, u8 *NCSD_HDR, keys_struct *keys) { - return ctr_sig(NCSD_HDR,sizeof(cci_hdr),Signature,ctx.keys->rsa.cciCfaPub,ctx.keys->rsa.cciCfaPvt,RSA_2048_SHA256,CTR_RSA_SIGN); + return ctr_sig(NCSD_HDR,sizeof(cci_hdr),Signature,keys->rsa.cciCfaPub,keys->rsa.cciCfaPvt,RSA_2048_SHA256,CTR_RSA_SIGN); } -int CheckCCISignature(u8 *Signature, u8 *NCSD_HDR) +int CheckCCISignature(u8 *Signature, u8 *NCSD_HDR, keys_struct *keys) { - return ctr_sig(NCSD_HDR,sizeof(cci_hdr),Signature,ctx.keys->rsa.cciCfaPub,NULL,RSA_2048_SHA256,CTR_RSA_VERIFY); + return ctr_sig(NCSD_HDR,sizeof(cci_hdr),Signature,keys->rsa.cciCfaPub,NULL,RSA_2048_SHA256,CTR_RSA_VERIFY); } void init_CCISettings(cci_settings *set) @@ -106,7 +112,7 @@ void init_CCISettings(cci_settings *set) int get_CCISettings(cci_settings *cciset, user_settings *usrset) { - ctx.keys = &usrset->common.keys; + cciset->keys = &usrset->common.keys; int result = 0; /* Importing Data from Content */ @@ -118,7 +124,6 @@ int get_CCISettings(cci_settings *cciset, user_settings *usrset) result = GetContentFP(cciset,usrset); if(result) return result; - /* Getting Data from YAML */ @@ -147,27 +152,33 @@ int get_CCISettings(cci_settings *cciset, user_settings *usrset) void free_CCISettings(cci_settings *set) { - if(set->content){ + if(set->content.filePtrs){ for(int i = 1; i < 8; i++) { - if(set->content[i]) fclose(set->content[i]); + if(set->content.filePtrs[i]) fclose(set->content.filePtrs[i]); } - free(set->content); + free(set->content.filePtrs); } free(set); } -int BuildNCSDHeader(cci_settings *cciset, user_settings *usrset) +int BuildCCIHeader(cci_settings *cciset, user_settings *usrset) { memcpy((u8*)ctx.cciHdr.magic,"NCSD",4); - u32_to_u8((u8*)ctx.cciHdr.mediaSize,(cciset->mediaSize/cciset->mediaUnit),LE); - memcpy((u8*)ctx.cciHdr.titleId,cciset->mediaId,8); + u32_to_u8((u8*)ctx.cciHdr.mediaSize,(cciset->header.mediaSize/cciset->option.mediaUnit),LE); + memcpy((u8*)ctx.cciHdr.titleId,cciset->header.mediaId,8); + memcpy((u8*)ctx.cciHdr.flags,cciset->header.flags,8); + + // Content for(int i = 0; i < 8; i++){ - u32_to_u8((u8*)ctx.cciHdr.offset_sizeTable[i].offset,(cciset->contentOffset[i]/cciset->mediaUnit),LE); - u32_to_u8((u8*)ctx.cciHdr.offset_sizeTable[i].size,(cciset->contentSize[i]/cciset->mediaUnit),LE); - memcpy((u8*)ctx.cciHdr.partitionIdTable[i],cciset->contentTitleId[i],8); + u32_to_u8((u8*)ctx.cciHdr.offset_sizeTable[i].offset,(cciset->content.offset[i]/cciset->option.mediaUnit),LE); + u32_to_u8((u8*)ctx.cciHdr.offset_sizeTable[i].size,(cciset->content.size[i]/cciset->option.mediaUnit),LE); + memcpy((u8*)ctx.cciHdr.contentIdTable[i],cciset->content.titleId[i],8); + ctx.cciHdr.contentFsType[i] = cciset->content.fsType[i]; + ctx.cciHdr.contentCryptoType[i] = cciset->content.cryptoType[i]; } - memcpy((u8*)ctx.cciHdr.partitionFlags,cciset->flags,8); - if(SignCCI(ctx.signature,(u8*)&ctx.cciHdr) != Good){ + + // Signature + if(SignCCI(ctx.signature,(u8*)&ctx.cciHdr,cciset->keys) != Good){ fprintf(stderr,"[CCI ERROR] Failed to sign CCI\n"); return CCI_SIG_FAIL; } @@ -176,27 +187,49 @@ int BuildNCSDHeader(cci_settings *cciset, user_settings *usrset) int BuildCardInfoHeader(cci_settings *cciset, user_settings *usrset) { - u32_to_u8((u8*)ctx.cardinfo.writableAddress,(cciset->writableAddress/cciset->mediaUnit),LE); - u32_to_u8((u8*)ctx.cardinfo.cardInfoBitmask,cciset->cardInfoBitmask,BE); - u32_to_u8((u8*)ctx.cardinfo.mediaSizeUsed,cciset->cciTotalSize,LE); - memcpy(ctx.cardinfo.cverTitleId,cciset->cverTitleId,8); - memcpy(ctx.cardinfo.cverTitleVersion,cciset->cverTitleVersion,2); - memcpy((u8*)ctx.cardinfo.ncch0TitleId,cciset->contentTitleId[0],8); - memcpy((u8*)ctx.cardinfo.initialData,cciset->initialData,0x30); - memcpy((u8*)ctx.cardinfo.ncch0Hdr,cciset->ncchHdr,0x100); - memcpy((u8*)ctx.devcardinfo.titleKey,cciset->titleKey,0x10); + u32_to_u8((u8*)ctx.cardinfo.writableAddress,(cciset->cardinfo.writableAddress/cciset->option.mediaUnit),LE); + u32_to_u8((u8*)ctx.cardinfo.cardInfoBitmask,cciset->cardinfo.cardInfoBitmask,BE); + u32_to_u8((u8*)ctx.cardinfo.mediaSizeUsed,cciset->cardinfo.cciTotalSize,LE); + memcpy(ctx.cardinfo.cverTitleId,cciset->cardinfo.cverTitleId,8); + memcpy(ctx.cardinfo.cverTitleVersion,cciset->cardinfo.cverTitleVersion,2); + memcpy((u8*)ctx.cardinfo.ncch0TitleId,cciset->content.titleId[0],8); + memcpy((u8*)ctx.cardinfo.initialData,cciset->cardinfo.initialData,0x30); + memcpy((u8*)ctx.cardinfo.ncch0Hdr,&cciset->cardinfo.ncchHdr,0x100); + memcpy((u8*)ctx.devcardinfo.titleKey,cciset->cardinfo.titleKey,0x10); return 0; } -int WriteCCI_HDR_ToFile(cci_settings *cciset) +int ImportNcchPartitions(cci_settings *cciset) +{ + cciset->content.data->buffer = realloc(cciset->content.data->buffer,cciset->content.data->size); + if(!cciset->content.data->buffer){ + fprintf(stderr,"[CCI ERROR] Not enough memory\n"); + return MEM_ERROR; + } + + ncch_hdr *ncch0hdr = (ncch_hdr*)(cciset->content.data->buffer+0x100); + for(int i = 1; i < CCI_MAX_CONTENT; i++){ + if(!cciset->content.size[i]) + continue; + + u8 *ncchpos = (u8*)(cciset->content.data->buffer+cciset->content.offset[i]-cciset->content.offset[0]); + + ReadFile_64(ncchpos, cciset->content.fileSize[i], 0, cciset->content.filePtrs[i]); + if(ModifyNcchIds(ncchpos, cciset->content.titleId[i], ncch0hdr->programId, cciset->keys) != 0) + return -1; + } + return 0; +} + +int WriteHeaderToFile(cci_settings *cciset) { WriteBuffer(ctx.signature,0x100,0,cciset->out); WriteBuffer((u8*)&ctx.cciHdr,sizeof(cci_hdr),0x100,cciset->out); WriteBuffer((u8*)&ctx.cardinfo,sizeof(cardinfo_hdr),0x200,cciset->out); - if(memcmp(ctx.devcardinfo.titleKey,ctx.keys->aes.normalKey,16) == 0){ + if(!cciset->option.useDevCardInfo){ // Creating Buffer of Dummy Bytes - u64 len = cciset->contentOffset[0] - 0x1200; + u64 len = NCCH0_OFFSET - 0x1200; u8 *dummy_bytes = malloc(len); memset(dummy_bytes,0xff,len); WriteBuffer(dummy_bytes,len,0x1200,cciset->out); @@ -206,93 +239,85 @@ int WriteCCI_HDR_ToFile(cci_settings *cciset) return 0; } -int WriteCCI_Content_ToFile(cci_settings *cciset,user_settings *usrset) +int WriteContentToFile(cci_settings *cciset,user_settings *usrset) { // Write Content 0 - WriteBuffer(cciset->ncch0,cciset->contentSize[0],cciset->contentOffset[0],cciset->out); - free(usrset->common.workingFile.buffer); - usrset->common.workingFile.buffer = NULL; - usrset->common.workingFile.size = 0; - - // Add additional contents, recreating them with their new TitleID - for(int i = 1; i < 8; i++){ - if(cciset->content[i]){ - u8 *ncch = RetargetNCCH(cciset->content[i],cciset->contentSize[i],cciset->contentTitleId[i],cciset->mediaId,ctx.keys); - if(!ncch){ - fprintf(stderr,"[CCI ERROR] Could not import content %d to CCI\n",i); - return FAILED_TO_IMPORT_FILE; - } - WriteBuffer(ncch,cciset->contentSize[i],cciset->contentOffset[i],cciset->out); - free(ncch); - } - } + WriteBuffer(cciset->content.data->buffer,cciset->content.data->size,NCCH0_OFFSET,cciset->out); + free(cciset->content.data->buffer); + cciset->content.data->buffer = NULL; + cciset->content.data->size = 0; return 0; } -int WriteCCI_DummyBytes(cci_settings *cciset) +int WriteDummyBytes(cci_settings *cciset) { // Seeking end of CCI Data - fseek_64(cciset->out,cciset->cciTotalSize); + fseek_64(cciset->out,cciset->cardinfo.cciTotalSize); // Determining Size of Dummy Bytes - u64 len = cciset->mediaSize - cciset->cciTotalSize; + u64 len = cciset->header.mediaSize - cciset->cardinfo.cciTotalSize; // Creating Buffer of Dummy Bytes - u8 *dummy_bytes = malloc(cciset->mediaUnit); - memset(dummy_bytes,0xff,cciset->mediaUnit); + u8 *dummy_bytes = malloc(cciset->option.mediaUnit); + memset(dummy_bytes,0xff,cciset->option.mediaUnit); // Writing Dummy Bytes to file - for(u64 i = 0; i < len; i += cciset->mediaUnit) - fwrite(dummy_bytes,cciset->mediaUnit,1,cciset->out); + for(u64 i = 0; i < len; i += cciset->option.mediaUnit) + fwrite(dummy_bytes,cciset->option.mediaUnit,1,cciset->out); return 0; } int GetContentFP(cci_settings *cciset, user_settings *usrset) { - cciset->content = malloc(sizeof(FILE*)*8); - if(!cciset->content){ + cciset->content.filePtrs = calloc(8,sizeof(FILE*)); + if(!cciset->content.filePtrs){ fprintf(stderr,"[CCI ERROR] Not enough memory\n"); return MEM_ERROR; } - memset(cciset->content,0,sizeof(FILE*)*8); for(int i = 1; i < 8; i++){ if(usrset->common.contentPath[i]){ - cciset->content[i] = fopen(usrset->common.contentPath[i],"rb"); - if(!cciset->content[i]){ // Checking if file could be opened + if(!AssertFile(usrset->common.contentPath[i])){ // Checking if file could be opened fprintf(stderr,"[CCI ERROR] Failed to open '%s'\n",usrset->common.contentPath[i]); return FAILED_TO_OPEN_FILE; } - if(!IsNCCH(cciset->content[i],NULL)){ // Checking if NCCH + + cciset->content.fileSize[i] = GetFileSize_u64(usrset->common.contentPath[i]); + cciset->content.filePtrs[i] = fopen(usrset->common.contentPath[i],"rb"); + /* + if(!cciset->content.filePtrs[i]){ // Checking if file could be opened + fprintf(stderr,"[CCI ERROR] Failed to open '%s'\n",usrset->common.contentPath[i]); + return FAILED_TO_OPEN_FILE; + } + */ + if(!IsNCCH(cciset->content.filePtrs[i],NULL)){ // Checking if NCCH fprintf(stderr,"[CCI ERROR] Content '%s' is invalid\n",usrset->common.contentPath[i]); - return NCSD_INVALID_NCCH0; + return NCSD_INVALID_NCCH; } // Getting NCCH Header ncch_hdr *hdr = malloc(sizeof(ncch_hdr)); - GetNCCH_CommonHDR(hdr,cciset->content[i],NULL); - - if(GetNCCH_MediaUnitSize(hdr) != cciset->mediaUnit){ // Checking if Media Unit Size matches CCI - fprintf(stderr,"[CCI ERROR] Content '%s' is invalid\n",usrset->common.contentPath[i]); - return NCSD_INVALID_NCCH0; - } + GetNCCH_CommonHDR(hdr,cciset->content.filePtrs[i],NULL); if(usrset->cci.dontModifyNcchTitleID) - memcpy(&cciset->contentTitleId[i],hdr->titleId,8); + memcpy(&cciset->content.titleId[i], hdr->titleId, 8); else{ - memcpy(&cciset->contentTitleId[i],cciset->mediaId,8); // Set TitleID - - // Modify TitleID Accordingly - u16 tmp = u8_to_u16(&hdr->titleId[6],LE); - tmp |= (i+4); - u16_to_u8(&cciset->contentTitleId[i][6],tmp,LE); + memcpy(&cciset->content.titleId[i], cciset->header.mediaId, 8); // Set TitleID + u16_to_u8(&cciset->content.titleId[i][6], (i+4), LE); } - cciset->contentSize[i] = GetNCCH_MediaSize(hdr)*cciset->mediaUnit; - cciset->contentOffset[i] = cciset->cciTotalSize; + u64 contentSize = (u64)GetNCCH_MediaSize(hdr)* (u64)GetNCCH_MediaUnitSize(hdr); + if(contentSize != cciset->content.fileSize[i]){ + fprintf(stderr,"[CCI ERROR] Content '%s' is corrupt\n",usrset->common.contentPath[i]); + return NCSD_INVALID_NCCH; + } + + cciset->content.size[i] = align(contentSize,cciset->option.mediaUnit); + cciset->content.offset[i] = cciset->cardinfo.cciTotalSize; - cciset->cciTotalSize += cciset->contentSize[i]; + cciset->content.data->size += cciset->content.size[i]; + cciset->cardinfo.cciTotalSize += cciset->content.size[i]; free(hdr); } @@ -302,81 +327,97 @@ int GetContentFP(cci_settings *cciset, user_settings *usrset) int CheckContent0(cci_settings *cciset, user_settings *usrset) { - if(!usrset->common.workingFile.buffer) + if(!usrset->common.workingFile.buffer || !usrset->common.workingFile.size) return NCSD_NO_NCCH0; - cciset->ncch0 = usrset->common.workingFile.buffer; - cciset->ncch0_FileLen = usrset->common.workingFile.size; + cciset->content.data = &usrset->common.workingFile; - if(!IsNCCH(NULL,cciset->ncch0)) + if(!IsNCCH(NULL,cciset->content.data->buffer)) return NCSD_INVALID_NCCH0; return 0; } int GetDataFromContent0(cci_settings *cciset, user_settings *usrset) -{ - cciset->cciTotalSize = 0x4000; - +{ + cciset->cardinfo.cciTotalSize = NCCH0_OFFSET; ncch_hdr *hdr; - hdr = GetNCCH_CommonHDR(NULL,NULL,cciset->ncch0); + hdr = GetNCCH_CommonHDR(NULL,NULL,cciset->content.data->buffer); - cciset->ncchHdr = hdr; + memcpy(&cciset->cardinfo.ncchHdr,hdr,sizeof(ncch_hdr)); u16 ncch_format_ver = u8_to_u16(hdr->formatVersion,LE); - if(ncch_format_ver != 0 && ncch_format_ver != 2){ - fprintf(stderr,"[CCI ERROR] NCCH type %d Not Supported\n",ncch_format_ver); + if(ncch_format_ver > 2){ + fprintf(stderr,"[CCI ERROR] NCCH type %d not supported\n",ncch_format_ver); return FAILED_TO_IMPORT_FILE; } //memdump(stdout,"ncch0 head: ",(cciset->ncch0+0x100),0x100); //memdump(stdout,"ncch0 head: ",(u8*)(hdr),0x100); - memcpy(cciset->mediaId,hdr->titleId,8); - memcpy(&cciset->contentTitleId[0],hdr->titleId,8); + memcpy(cciset->header.mediaId,hdr->titleId,8); + memcpy(&cciset->content.titleId[0],hdr->titleId,8); +#ifndef PUBLIC_BUILD if(usrset->cci.useSDKStockData){ - memcpy(cciset->initialData,stock_initial_data,0x30); - memcpy(cciset->titleKey,stock_title_key,0x10); + memcpy(cciset->cardinfo.initialData,stock_initial_data,0x30); + memcpy(cciset->cardinfo.titleKey,stock_title_key,0x10); + cciset->option.useDevCardInfo = true; } else{ - u8 Hash[0x40]; - ctr_sha(cciset->ncch0,0x80,Hash,CTR_SHA_256); - ctr_sha((cciset->ncch0+0x80),0x80,(Hash+0x20),CTR_SHA_256); - memcpy(cciset->initialData,Hash,0x2C); - //memcpy(cciset->titleKey,(Hash+0x30),0x10); // Might Remove + for(int i = 0; i < 0x2c/sizeof(u32); i++) + { + u32 val = u32GetRand(); + memcpy((cciset->cardinfo.initialData+i*sizeof(u32)),&val,4); + } + /* + for(int i = 0; i < 2; i++) + { + u64 val = u64GetRand(); + memcpy((cciset->cardinfo.titleKey+i*8),&val,8); + } + cciset->option.useDevCardInfo = true; + */ } +#else + for(int i = 0; i < 0x2c/sizeof(u32); i++) + { + u32 val = u32GetRand(); + memcpy((cciset->cardinfo.initialData+i*sizeof(u32)),&val,4); + } +#endif - cciset->flags[MediaUnitSize] = hdr->flags[ContentUnitSize]; - cciset->mediaUnit = GetNCCH_MediaUnitSize(hdr); + cciset->header.flags[MediaUnitSize] = hdr->flags[ContentUnitSize]; + cciset->option.mediaUnit = GetNCCH_MediaUnitSize(hdr); - cciset->contentSize[0] = (u64)(GetNCCH_MediaSize(hdr) * cciset->mediaUnit); - cciset->contentOffset[0] = cciset->cciTotalSize; + cciset->content.size[0] = (u64)(GetNCCH_MediaSize(hdr) * cciset->option.mediaUnit); + cciset->content.offset[0] = cciset->cardinfo.cciTotalSize; - cciset->cciTotalSize += cciset->contentSize[0]; + cciset->content.data->size = cciset->content.size[0]; + cciset->cardinfo.cciTotalSize += cciset->content.size[0]; return 0; } int GetMediaSize(cci_settings *cciset, user_settings *usrset) { - char *MediaSizeStr = usrset->common.rsfSet.BasicInfo.MediaSize; - if(!MediaSizeStr) cciset->mediaSize = (u64)GB*2; + char *mediaSizeStr = usrset->common.rsfSet.CardInfo.MediaSize; + if(!mediaSizeStr) cciset->header.mediaSize = (u64)GB*2; else{ - if(strcasecmp(MediaSizeStr,"128MB") == 0) cciset->mediaSize = (u64)MB*128; - else if(strcasecmp(MediaSizeStr,"256MB") == 0) cciset->mediaSize = (u64)MB*256; - else if(strcasecmp(MediaSizeStr,"512MB") == 0) cciset->mediaSize = (u64)MB*512; - else if(strcasecmp(MediaSizeStr,"1GB") == 0) cciset->mediaSize = (u64)GB*1; - else if(strcasecmp(MediaSizeStr,"2GB") == 0) cciset->mediaSize = (u64)GB*2; - else if(strcasecmp(MediaSizeStr,"4GB") == 0) cciset->mediaSize = (u64)GB*4; - else if(strcasecmp(MediaSizeStr,"8GB") == 0) cciset->mediaSize = (u64)GB*8; - else if(strcasecmp(MediaSizeStr,"16GB") == 0) cciset->mediaSize = (u64)GB*16; - else if(strcasecmp(MediaSizeStr,"32GB") == 0) cciset->mediaSize = (u64)GB*32; + if(strcasecmp(mediaSizeStr,"128MB") == 0) cciset->header.mediaSize = (u64)MB*128; + else if(strcasecmp(mediaSizeStr,"256MB") == 0) cciset->header.mediaSize = (u64)MB*256; + else if(strcasecmp(mediaSizeStr,"512MB") == 0) cciset->header.mediaSize = (u64)MB*512; + else if(strcasecmp(mediaSizeStr,"1GB") == 0) cciset->header.mediaSize = (u64)GB*1; + else if(strcasecmp(mediaSizeStr,"2GB") == 0) cciset->header.mediaSize = (u64)GB*2; + else if(strcasecmp(mediaSizeStr,"4GB") == 0) cciset->header.mediaSize = (u64)GB*4; + else if(strcasecmp(mediaSizeStr,"8GB") == 0) cciset->header.mediaSize = (u64)GB*8; + else if(strcasecmp(mediaSizeStr,"16GB") == 0) cciset->header.mediaSize = (u64)GB*16; + else if(strcasecmp(mediaSizeStr,"32GB") == 0) cciset->header.mediaSize = (u64)GB*32; else { - fprintf(stderr,"[CCI ERROR] Invalid MediaSize: %s\n",MediaSizeStr); + fprintf(stderr,"[CCI ERROR] Invalid MediaSize: %s\n",mediaSizeStr); return INVALID_YAML_OPT; } } - if(usrset->common.rsfSet.BasicInfo.MediaFootPadding != -1) cciset->fillOutCci = usrset->common.rsfSet.BasicInfo.MediaFootPadding; + cciset->option.fillOutCci = usrset->common.rsfSet.Option.MediaFootPadding; return 0; } @@ -411,21 +452,21 @@ u64 GetUnusedSize(u64 MediaSize, u8 CardType) int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml) { /* BackupWriteWaitTime */ - cciset->flags[FW6x_BackupWriteWaitTime] = 0; + cciset->header.flags[FW6x_BackupWriteWaitTime] = 0; if(yaml->CardInfo.BackupWriteWaitTime){ u32 WaitTime = strtoul(yaml->CardInfo.BackupWriteWaitTime,NULL,0); if(WaitTime > 255){ fprintf(stderr,"[CCI ERROR] Invalid Card BackupWriteWaitTime (%d) : must 0-255\n",WaitTime); return EXHDR_BAD_YAML_OPT; } - cciset->flags[FW6x_BackupWriteWaitTime] = (u8)WaitTime; + cciset->header.flags[FW6x_BackupWriteWaitTime] = (u8)WaitTime; } /* MediaType */ - if(!yaml->CardInfo.MediaType) cciset->flags[MediaTypeIndex] = CARD1; + if(!yaml->CardInfo.MediaType) cciset->header.flags[MediaTypeIndex] = CARD1; else{ - if(strcasecmp(yaml->CardInfo.MediaType,"Card1") == 0) cciset->flags[MediaTypeIndex] = CARD1; - else if(strcasecmp(yaml->CardInfo.MediaType,"Card2") == 0) cciset->flags[MediaTypeIndex] = CARD2; + if(strcasecmp(yaml->CardInfo.MediaType,"Card1") == 0) cciset->header.flags[MediaTypeIndex] = CARD1; + else if(strcasecmp(yaml->CardInfo.MediaType,"Card2") == 0) cciset->header.flags[MediaTypeIndex] = CARD2; else { fprintf(stderr,"[CCI ERROR] Invalid MediaType: %s\n",yaml->CardInfo.MediaType); return INVALID_YAML_OPT; @@ -433,7 +474,7 @@ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml) } /* Platform */ - cciset->flags[MediaPlatformIndex] = CTR; + cciset->header.flags[MediaPlatformIndex] = CTR; u8 saveCrypto; @@ -451,23 +492,23 @@ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml) /* FW6x SaveCrypto */ - cciset->flags[FW6x_SaveCryptoFlag] = saveCrypto == 6; + cciset->header.flags[FW6x_SaveCryptoFlag] = saveCrypto == 6; /* CardDevice */ if(saveCrypto > 1){ u8 flag = CardDeviceFlag; if(saveCrypto == 2) flag = OldCardDeviceFlag; - if(!yaml->CardInfo.CardDevice) cciset->flags[flag] = CARD_DEVICE_NONE; + if(!yaml->CardInfo.CardDevice) cciset->header.flags[flag] = CARD_DEVICE_NONE; else{ if(strcmp(yaml->CardInfo.CardDevice,"NorFlash") == 0) { - cciset->flags[flag] = CARD_DEVICE_NOR_FLASH; - if(cciset->flags[MediaTypeIndex] == CARD2){ + cciset->header.flags[flag] = CARD_DEVICE_NOR_FLASH; + if(cciset->header.flags[MediaTypeIndex] == CARD2){ fprintf(stderr,"[CCI WARNING] 'CardDevice: NorFlash' is invalid on Card2\n"); - cciset->flags[flag] = CARD_DEVICE_NONE; + cciset->header.flags[flag] = CARD_DEVICE_NONE; } } - else if(strcmp(yaml->CardInfo.CardDevice,"None") == 0) cciset->flags[flag] = CARD_DEVICE_NONE; - else if(strcmp(yaml->CardInfo.CardDevice,"BT") == 0) cciset->flags[flag] = CARD_DEVICE_BT; + else if(strcmp(yaml->CardInfo.CardDevice,"None") == 0) cciset->header.flags[flag] = CARD_DEVICE_NONE; + else if(strcmp(yaml->CardInfo.CardDevice,"BT") == 0) cciset->header.flags[flag] = CARD_DEVICE_BT; else { fprintf(stderr,"[CCI ERROR] Invalid CardDevice: %s\n",yaml->CardInfo.CardDevice); return INVALID_YAML_OPT; @@ -479,37 +520,37 @@ int GetNCSDFlags(cci_settings *cciset, rsf_settings *yaml) int GetWriteableAddress(cci_settings *cciset, user_settings *usrset) { - int result = GetSaveDataSize_rsf(&cciset->savedataSize,usrset); + int result = GetSaveDataSizeFromString(&cciset->option.savedataSize,usrset->common.rsfSet.SystemControlInfo.SaveDataSize,"NCSD"); if(result) return result; char *WriteableAddressStr = usrset->common.rsfSet.CardInfo.WritableAddress;; - cciset->writableAddress = -1; - if(cciset->flags[MediaTypeIndex] != CARD2) return 0; // Can only be set for Card2 Media + cciset->cardinfo.writableAddress = -1; + if(cciset->header.flags[MediaTypeIndex] != CARD2) return 0; // Can only be set for Card2 Media if(WriteableAddressStr){ if(strncmp(WriteableAddressStr,"0x",2) != 0){ fprintf(stderr,"[CCI ERROR] WritableAddress requires a Hexadecimal value\n"); return INVALID_YAML_OPT; } - cciset->writableAddress = strtoul((WriteableAddressStr+2),NULL,16); + cciset->cardinfo.writableAddress = strtoull((WriteableAddressStr+2),NULL,16); } - if(cciset->writableAddress == -1){ // If not set manually or is max size - if ((cciset->mediaSize / 2) < cciset->savedataSize){ // If SaveData size is greater than half the MediaSize - u64 SavedataSize = cciset->savedataSize / KB; + if(cciset->cardinfo.writableAddress == -1){ // If not set manually or is max size + if ((cciset->header.mediaSize / 2) < cciset->option.savedataSize){ // If SaveData size is greater than half the MediaSize + u64 SavedataSize = cciset->option.savedataSize / KB; fprintf(stderr,"[CCI ERROR] Too large SavedataSize %llK\n",SavedataSize); return SAVE_DATA_TOO_LARGE; } - if (cciset->savedataSize > (u64)(2047*MB)){ // Limit set by Nintendo - u64 SavedataSize = cciset->savedataSize / KB; + if (cciset->option.savedataSize > (u64)(2047*MB)){ // Limit set by Nintendo + u64 SavedataSize = cciset->option.savedataSize / KB; fprintf(stderr,"[CCI ERROR] Too large SavedataSize %llK\n",SavedataSize); return SAVE_DATA_TOO_LARGE; } if(usrset->cci.closeAlignWritableRegion) - cciset->writableAddress = align(cciset->cciTotalSize, cciset->mediaUnit); + cciset->cardinfo.writableAddress = align(cciset->cardinfo.cciTotalSize, cciset->option.mediaUnit); else{ - u64 UnusedSize = GetUnusedSize(cciset->mediaSize,cciset->flags[MediaTypeIndex]); // Need to look into this - cciset->writableAddress = cciset->mediaSize - UnusedSize - cciset->savedataSize; + u64 UnusedSize = GetUnusedSize(cciset->header.mediaSize,cciset->header.flags[MediaTypeIndex]); // Need to look into this + cciset->cardinfo.writableAddress = cciset->header.mediaSize - UnusedSize - cciset->option.savedataSize; } } return 0; @@ -518,10 +559,10 @@ int GetWriteableAddress(cci_settings *cciset, user_settings *usrset) int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset) { char *str = usrset->common.rsfSet.CardInfo.CardType; - if(!str) cciset->cardInfoBitmask |= 0; + if(!str) cciset->cardinfo.cardInfoBitmask |= 0; else{ - if(strcasecmp(str,"s1") == 0) cciset->cardInfoBitmask |= 0; - else if(strcasecmp(str,"s2") == 0) cciset->cardInfoBitmask |= 0x20; + if(strcasecmp(str,"s1") == 0) cciset->cardinfo.cardInfoBitmask |= 0; + else if(strcasecmp(str,"s2") == 0) cciset->cardinfo.cardInfoBitmask |= 0x20; else { fprintf(stderr,"[CCI ERROR] Invalid CardType: %s\n",str); return INVALID_YAML_OPT; @@ -529,7 +570,7 @@ int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset) } str = usrset->common.rsfSet.CardInfo.CryptoType; - if(!str) cciset->cardInfoBitmask |= (3*0x40); + if(!str) cciset->cardinfo.cardInfoBitmask |= 0;//(3*0x40); else{ int Value = strtol(str,NULL,10); if(Value < 0 || Value > 3) { @@ -539,7 +580,7 @@ int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset) if(Value != 3){ fprintf(stderr,"[CCI WARNING] Card crypto type = '%d'\n",Value); } - cciset->cardInfoBitmask |= (Value*0x40); + cciset->cardinfo.cardInfoBitmask |= (Value*0x40); } return 0; @@ -548,12 +589,19 @@ int GetCardInfoBitmask(cci_settings *cciset, user_settings *usrset) int ImportCverDetails(cci_settings *cciset, user_settings *usrset) { if(!usrset->cci.cverCiaPath){ - memset(cciset->cverTitleId,0,8); - memset(cciset->cverTitleVersion,0,2); + memset(cciset->cardinfo.cverTitleId,0,8); + memset(cciset->cardinfo.cverTitleVersion,0,2); return 0; } - if(!DoesFileExist(usrset->cci.cverCiaPath)){ - fprintf(stderr,"[NCSD ERROR] Failed to open \"%s\"\n",usrset->cci.cverCiaPath); + if(!cciset->content.size[7]){ + fprintf(stderr,"[CCI WARNING] Update Partition (content 7) is not specified, cver details will not be set\n"); + memset(cciset->cardinfo.cverTitleId,0,8); + memset(cciset->cardinfo.cverTitleVersion,0,2); + return 0; + } + + if(!AssertFile(usrset->cci.cverCiaPath)){ + fprintf(stderr,"[CCI ERROR] Failed to open \"%s\"\n",usrset->cci.cverCiaPath); return FAILED_TO_IMPORT_FILE; } FILE *cia = fopen(usrset->cci.cverCiaPath,"rb"); @@ -565,12 +613,15 @@ int ImportCverDetails(cci_settings *cciset, user_settings *usrset) u8 *tmd = calloc(1,tmdSize); ReadFile_64(tmd,tmdSize,tmdOffset,cia); tmd_hdr *tmdHdr = GetTmdHdr(tmd); - memdump(stdout,"tmd: ",(u8*)tmdHdr,sizeof(tmd_hdr)); + //memdump(stdout,"tmd: ",(u8*)tmdHdr,sizeof(tmd_hdr)); - endian_memcpy(cciset->cverTitleId,tmdHdr->titleID,8,LE); - endian_memcpy(cciset->cverTitleVersion,tmdHdr->titleVersion,2,LE); + endian_memcpy(cciset->cardinfo.cverTitleId,tmdHdr->titleID,8,LE); + endian_memcpy(cciset->cardinfo.cverTitleVersion,tmdHdr->titleVersion,2,LE); + if(!usrset->cci.dontModifyNcchTitleID) + endian_memcpy(&cciset->content.titleId[7][6],tmdHdr->titleVersion,2,LE); + fclose(cia); free(ciaHdr); free(tmd); @@ -580,9 +631,9 @@ int ImportCverDetails(cci_settings *cciset, user_settings *usrset) int CheckMediaSize(cci_settings *cciset) { - if(cciset->cciTotalSize > cciset->mediaSize){ + if(cciset->cardinfo.cciTotalSize > cciset->header.mediaSize){ char *MediaSizeStr = NULL; - switch(cciset->mediaSize){ + switch(cciset->header.mediaSize){ case (u64)128*MB: MediaSizeStr = " '128MB'"; break; case (u64)256*MB: MediaSizeStr = " '256MB'"; break; case (u64)512*MB: MediaSizeStr = " '512MB'"; break; @@ -605,8 +656,9 @@ bool IsCci(u8 *ncsd) cci_hdr *hdr = (cci_hdr*)(ncsd+0x100); if(!hdr) return false; if(memcmp(hdr->magic,"NCSD",4)!=0) return false; - if(hdr->partitionFlags[MediaPlatformIndex] != CTR) return false; - if(hdr->partitionFlags[MediaTypeIndex] != CARD1 && hdr->partitionFlags[MediaTypeIndex] != CARD2) return false; + if(hdr->flags[MediaPlatformIndex] != CTR) return false; + if(hdr->flags[MediaTypeIndex] != CARD1 && hdr->flags[MediaTypeIndex] != CARD2) return false; + return true; } @@ -619,7 +671,7 @@ u8* GetPartition(u8 *ncsd, u8 index) u64 GetPartitionOffset(u8 *ncsd, u8 index) { cci_hdr *hdr = (cci_hdr*)(ncsd+0x100); - u32 media_size = 0x200*pow(2,hdr->partitionFlags[MediaUnitSize]); + u32 media_size = 0x200*pow(2,hdr->flags[MediaUnitSize]); u32 offset = u8_to_u64(hdr->offset_sizeTable[index].offset,LE); return offset*media_size; } @@ -627,7 +679,7 @@ u64 GetPartitionOffset(u8 *ncsd, u8 index) u64 GetPartitionSize(u8 *ncsd, u8 index) { cci_hdr *hdr = (cci_hdr*)(ncsd+0x100); - u32 media_size = 0x200*pow(2,hdr->partitionFlags[MediaUnitSize]); + u32 media_size = 0x200*pow(2,hdr->flags[MediaUnitSize]); u32 size = u8_to_u64(hdr->offset_sizeTable[index].size,LE); return size*media_size; } diff --git a/ncsd.h b/ncsd.h index cf53200..3afe866 100644 --- a/ncsd.h +++ b/ncsd.h @@ -5,8 +5,9 @@ typedef enum { NCSD_NO_NCCH0 = -1, NCSD_INVALID_NCCH0 = -2, - INVALID_YAML_OPT = -3, - CCI_SIG_FAIL = -4, + NCSD_INVALID_NCCH = -3, + INVALID_YAML_OPT = -4, + CCI_SIG_FAIL = -5, } ncsd_errors; @@ -69,12 +70,12 @@ typedef struct u8 magic[4]; u8 mediaSize[4]; u8 titleId[8]; - u8 partitionsFsType[8]; - u8 partitionsCryptoType[8]; + u8 contentFsType[8]; + u8 contentCryptoType[8]; partition_offsetsize offset_sizeTable[8]; u8 padding0[0x28]; - u8 partitionFlags[8]; - u8 partitionIdTable[8][8]; + u8 flags[8]; + u8 contentIdTable[8][8]; u8 padding1[0x30]; } cci_hdr; @@ -82,18 +83,20 @@ typedef struct { u8 writableAddress[4]; u8 cardInfoBitmask[4]; - // Notes + // Notes: reserved[0xDF8]; u8 reserved0[0xf8]; u8 mediaSizeUsed[8]; - u8 reserved1[0x18]; + u8 reserved1[0x8]; + u8 unknown[0x4]; + u8 reserved2[0xc]; u8 cverTitleId[8]; u8 cverTitleVersion[2]; - u8 reserved2[0xcd6]; + u8 reserved3[0xcd6]; // u8 ncch0TitleId[8]; - u8 reserved3[8]; + u8 reserved4[8]; u8 initialData[0x30]; - u8 reserved4[0xc0]; + u8 reserved5[0xc0]; u8 ncch0Hdr[0x100]; } cardinfo_hdr; @@ -110,41 +113,61 @@ typedef struct cci_hdr cciHdr; cardinfo_hdr cardinfo; devcardinfo_hdr devcardinfo; - u8 *ncchImportBuffer; - keys_struct *keys; } InternalCCI_Context; typedef struct { - u64 mediaSize; - u8 mediaId[8]; - u8 flags[8]; - u64 savedataSize; - u64 writableAddress; - u32 cardInfoBitmask; - - // cver details - u8 cverTitleId[8]; - u8 cverTitleVersion[2]; - - u8 initialData[0x30]; - ncch_hdr *ncchHdr; - u8 titleKey[0x10]; - - u8 *ncch0; - u64 ncch0_FileLen; - FILE **content; - u64 contentSize[CCI_MAX_CONTENT]; - u64 contentOffset[CCI_MAX_CONTENT]; - u8 contentTitleId[CCI_MAX_CONTENT][8]; - u64 cciTotalSize; - - bool fillOutCci; - u32 mediaUnit; - FILE *out; + keys_struct *keys; + + struct{ + bool fillOutCci; + bool useDevCardInfo; + u32 mediaUnit; + + u64 savedataSize; + } option; + + struct{ + /* Data */ + buffer_struct *data; + + /* Misc Records */ + FILE **filePtrs; + u64 fileSize[CCI_MAX_CONTENT]; + u16 count; + + /* Details for NCSD header */ + u8 fsType[CCI_MAX_CONTENT]; + u8 cryptoType[CCI_MAX_CONTENT]; + u64 offset[CCI_MAX_CONTENT]; + u64 size[CCI_MAX_CONTENT]; + u8 titleId[CCI_MAX_CONTENT][8]; + } content; + + struct{ + u64 mediaSize; + u8 mediaId[8]; + u8 flags[8]; + } header; + + struct{ + u64 writableAddress; + u32 cardInfoBitmask; + + u64 cciTotalSize; + + // cver details + u8 cverTitleId[8]; + u8 cverTitleVersion[2]; + + u8 initialData[0x30]; + ncch_hdr ncchHdr; + u8 titleKey[0x10]; + } cardinfo; } cci_settings; +#ifndef PUBLIC_BUILD static const u8 stock_initial_data[0x30] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -163,6 +186,7 @@ static const u8 stock_title_key[0x10] = 0x87, 0x46, 0x1E, 0xDD, 0xCB, 0xB8, 0x97, 0x11, 0x92, 0xBA }; +#endif // Public Prototypes // Build Functions diff --git a/ppki.h b/ppki.h index 3ead64c..e7852cb 100644 --- a/ppki.h +++ b/ppki.h @@ -5,7 +5,7 @@ #endif // AES KEYS -static const unsigned char ctr_unfixed_ncch_keyX_ppki[2][16] = // Dummy +static const unsigned char prod_unfixed_ncch_keyX[2][16] = // Dummy { {0x81, 0x50, 0xA9, 0x78, 0x53, 0x3B, 0xA5, 0xE9, 0xA5, 0x0A, 0x23, 0x16, 0xB9, 0x3A, 0xED, 0x5A} , // Normal {0xB4, 0xD1, 0xCF, 0x58, 0x49, 0xCE, 0x8A, 0x2D, 0x71, 0x58, 0xF6, 0x66, 0x77, 0x5D, 0x16, 0x3D} , // 7.X new Crypto diff --git a/romfs.c b/romfs.c index e6fb96d..758c546 100644 --- a/romfs.c +++ b/romfs.c @@ -1,4 +1,5 @@ #include "lib.h" +#include "dir.h" #include "ncch.h" #include "romfs.h" #include "romfs_binary.h" @@ -16,15 +17,12 @@ int SetupRomFs(ncch_settings *ncchset, romfs_buildctx *ctx) if(!ncchset->options.UseRomFS) return 0; - int result = 0; - if(ncchset->componentFilePtrs.romfs)// The user has specified a pre-built RomFs Binary - result = PrepareImportRomFsBinaryFromFile(ncchset,ctx); + return PrepareImportRomFsBinaryFromFile(ncchset,ctx); else // Otherwise build ROMFS - result = PrepareBuildRomFsBinary(ncchset,ctx); + return PrepareBuildRomFsBinary(ncchset,ctx); - return result; } int BuildRomFs(romfs_buildctx *ctx) @@ -49,4 +47,9 @@ void FreeRomFsCtx(romfs_buildctx *ctx) { if(ctx->romfsBinary) fclose(ctx->romfsBinary); + if(ctx->fs){ + fs_FreeFiles(ctx->fs); + fs_FreeDir(ctx->fs); + free(ctx->fs); + } } \ No newline at end of file diff --git a/romfs.h b/romfs.h index 0b55510..378435b 100644 --- a/romfs.h +++ b/romfs.h @@ -7,6 +7,15 @@ typedef enum // IVFC Structs +typedef struct +{ + u64 size; + u64 offset; + u64 logicalOffset; + u8 *pos; + u8 reserved[8]; +} ivfc_level; + typedef struct { u8 logicalOffset[8]; @@ -20,14 +29,11 @@ typedef struct u8 magic[4]; u8 id[4]; u8 masterHashSize[4]; - ivfc_levelheader level1; - ivfc_levelheader level2; - ivfc_levelheader level3; - u8 reserved[4]; + ivfc_levelheader level[3]; u8 optionalSize[4]; + u8 reserved[4]; } ivfc_hdr; -// ROMFS FS Structs typedef struct { u8 offset[4]; @@ -37,9 +43,9 @@ typedef struct typedef struct { u8 headersize[4]; - romfs_sectionheader section[4]; + romfs_sectionheader section[4]; // 8*4 = 0x20 u8 dataoffset[4]; -} romfs_infoheader; +} romfs_infoheader; //sizeof(romfs_infoheader) = 0x28 typedef struct @@ -64,16 +70,58 @@ typedef struct //u8 name[ROMFS_MAXNAMESIZE]; } romfs_fileentry; //sizeof(romfs_fileentry) = 0x20 - typedef struct { u8 *output; u64 romfsSize; + u64 romfsHeaderSize; + /* For Importing ROMFS Binaries */ + bool ImportRomfsBinary; + FILE *romfsBinary; + + /* For Creating ROMFS Binaries */ + ivfc_hdr *ivfcHdr; + romfs_infoheader *romfsHdr; + + fs_dir *fs; + + u32 *dirUTable; + u32 m_dirUTableEntry; + u32 u_dirUTableEntry; + + u8 *dirTable; + u32 dirNum; + u32 m_dirTableLen; + u32 u_dirTableLen; + + u32 *fileUTable; + u32 m_fileUTableEntry; + u32 u_fileUTableEntry; + + u8 *fileTable; + u32 fileNum; + u32 m_fileTableLen; + u32 u_fileTableLen; + + u8 *data; + u64 m_dataLen; + u64 u_dataLen; + + // Levels + ivfc_level level[4]; +} romfs_buildctx; + +/* +typedef struct +{ + u8 *output; + u64 romfsSize; + u64 romfsHeaderSize; bool ImportRomfsBinary; FILE *romfsBinary; } romfs_buildctx; - +*/ int SetupRomFs(ncch_settings *ncchset, romfs_buildctx *ctx); int BuildRomFs(romfs_buildctx *ctx); \ No newline at end of file diff --git a/romfs_binary.c b/romfs_binary.c index e50eee5..7103a00 100644 --- a/romfs_binary.c +++ b/romfs_binary.c @@ -1,13 +1,510 @@ #include "lib.h" +#include "dir.h" #include "ncch.h" #include "romfs.h" +const int ROMFS_BLOCK_SIZE = 0x1000; +const unsigned int ROMFS_UNUSED_ENTRY = 0xffffffff; + +// Build +bool IsFileWanted(fs_file *file, void *filter_criteria); +bool IsDirWanted(fs_dir *dir, void *filter_criteria); +void CalcDirSize(romfs_buildctx *ctx, fs_dir *fs); +int CalcRomfsSize(romfs_buildctx *ctx); +int AddFileToRomfs(romfs_buildctx *ctx, fs_file *file, u32 parent, u32 sibling); +int AddDirToRomfs(romfs_buildctx *ctx, fs_dir *fs, u32 parent, u32 sibling); +int FilterRomFS(fs_dir *fs_raw, fs_dir *fs_filtered, void *filter_criteria); +int PopulateRomfs(romfs_buildctx *ctx); +void BuildRomfsHeader(romfs_buildctx *ctx); +void BuildIvfcHeader(romfs_buildctx *ctx); +void GenIvfcHashTree(romfs_buildctx *ctx); + + int PrepareBuildRomFsBinary(ncch_settings *ncchset, romfs_buildctx *ctx) { + // Input Path + //printf("Get input path\n"); + + const int CWD_MAX_LEN = 1024; + char *cwd = calloc(CWD_MAX_LEN,sizeof(char)); + getcwd(cwd,CWD_MAX_LEN); + + char *dir = ncchset->rsfSet->Rom.HostRoot; + + fs_char *fs_path; + fs_romfs_char *path; + u32 path_len; +#ifdef _WIN32 + str_u8_to_u16(&path,&path_len,(u8*)dir,strlen(dir)); + fs_path = path; +#else + str_utf8_to_u16(&path,&path_len,(u8*)dir,strlen(dir)); + fs_path = dir; +#endif + + // FS Structures + void *filter_criteria = NULL; + //printf("calloc fs_raw\n"); + fs_dir *fs_raw = calloc(1,sizeof(fs_dir)); + //printf("calloc ctx->fs\n"); + ctx->fs = calloc(1,sizeof(fs_dir)); + //memdump(stdout,"ctx->fs: ",(u8*)ctx->fs,sizeof(fs_dir)); + //printf("ctx->fs = 0x%x\n",ctx->fs); + + // Import FS and process + //printf("open fs into fs_raw\n"); + fs_OpenDir(fs_path,path,path_len,fs_raw); + //printf("filter fs_raw into ctx->fs\n"); + FilterRomFS(fs_raw,ctx->fs,filter_criteria); + + // free unfiltered FS + fs_PrintDir(fs_raw,0); + //printf("free discarded file ptrs\n"); + fs_FreeFiles(fs_raw); // All important FPs have been moved with FilterRomFS, so only un-wanted FPs are closed here + //printf("free structs in fs_raw\n"); + fs_FreeDir(fs_raw); + //printf("free fs_raw\n"); + free(fs_raw); + + //printf("leave if no ROMFS needs to be made\n"); + if(ctx->fs->u_file == 0){ + ctx->romfsSize = 0; + goto finish; + } + + + // Print Filtered FS + //printf("print filtered FS\n"); + fs_PrintDir(ctx->fs,0); + + //printf("predict romfs size\n"); + CalcRomfsSize(ctx); + +finish: + chdir(cwd); return 0; } int BuildRomFsBinary(romfs_buildctx *ctx) { + // Decide IVFC Level Actual Offsets + ctx->level[0].offset = 0; + ctx->level[3].offset = ctx->level[0].offset + align(ctx->level[0].size, ROMFS_BLOCK_SIZE); + ctx->level[1].offset = ctx->level[3].offset + align(ctx->level[3].size, ROMFS_BLOCK_SIZE); + ctx->level[2].offset = ctx->level[1].offset + align(ctx->level[1].size, ROMFS_BLOCK_SIZE); + + // Decide IVFC Level Logical Offsets + for(int i = 1; i < 4; i++){ + if(i == 1) + ctx->level[i].logicalOffset = 0; + else + ctx->level[i].logicalOffset = align(ctx->level[i-1].logicalOffset + ctx->level[i-1].size,ROMFS_BLOCK_SIZE); + } + + // Setup IVFC Level Ptrs + for(int i = 0; i < 4; i++){ + ctx->level[i].pos = (ctx->output + ctx->level[i].offset); + if(i == 0) + ctx->level[i].pos += align(sizeof(ivfc_hdr),0x10); + } + + // Build Romfs + ctx->romfsHdr = (romfs_infoheader*)(ctx->level[3].pos); + BuildRomfsHeader(ctx); + if(PopulateRomfs(ctx) != 0) + return -1; + + + // Finalise by building IVFC hash tree + ctx->ivfcHdr = (ivfc_hdr*)(ctx->output + ctx->level[0].offset); + BuildIvfcHeader(ctx); + GenIvfcHashTree(ctx); + return 0; -} \ No newline at end of file +} + + +bool IsFileWanted(fs_file *file, void *filter_criteria) +{ + return true; +} + +bool IsDirWanted(fs_dir *dir, void *filter_criteria) +{ + bool ret = false; + for(u32 i = 0; i < dir->u_file; i++) + { + if(IsFileWanted(&dir->file[i],filter_criteria)) + { + ret = true; + break; + } + } + fs_dir *tmp = (fs_dir*)dir->dir; + for(u32 i = 0; i < dir->u_dir; i++) + { + if(IsDirWanted(&tmp[i],filter_criteria)) + { + ret = true; + break; + } + } + return ret; +} + +void CalcDirSize(romfs_buildctx *ctx, fs_dir *fs) +{ + if(ctx->m_dirTableLen == 0) + ctx->m_dirTableLen = sizeof(romfs_direntry); + else + ctx->m_dirTableLen += sizeof(romfs_direntry) + align(fs->name_len,4); + + for(u32 i = 0; i < fs->u_file; i++) + { + ctx->m_fileTableLen += sizeof(romfs_fileentry) + align(fs->file[i].name_len,4); + if(fs->file[i].size) + ctx->m_dataLen = align(ctx->m_dataLen,0x10) + fs->file[i].size; + } + + fs_dir *dir = (fs_dir*)fs->dir; + for(u32 i = 0; i < fs->u_dir; i++) + { + CalcDirSize(ctx,&dir[i]); + } + ctx->fileNum += fs->u_file; + ctx->dirNum += fs->u_dir; +} + +int CalcRomfsSize(romfs_buildctx *ctx) +{ + ctx->dirNum = 1; // root dir + //printf("Recursively get FS sizes\n"); + CalcDirSize(ctx,ctx->fs); + + //printf("check U tables\n"); + ctx->u_dirUTableEntry = 0; + ctx->m_dirUTableEntry = 3; + if(ctx->dirNum > 3) + ctx->m_dirUTableEntry += align(ctx->dirNum-3,2); + + ctx->u_fileUTableEntry = 0; + ctx->m_fileUTableEntry = 3; + if(ctx->fileNum > 3) + ctx->m_fileUTableEntry += align(ctx->fileNum-3,2); + + //printf("calc romfs header size\n"); + u32 romfsHdrSize = align(sizeof(romfs_infoheader) + ctx->m_dirUTableEntry*sizeof(u32) + ctx->m_dirTableLen + ctx->m_fileUTableEntry*sizeof(u32) + ctx->m_fileTableLen,0x10); + + //printf("predict level sizes\n"); + ctx->level[3].size = romfsHdrSize + ctx->m_dataLen; // data + ctx->level[2].size = align(ctx->level[3].size,ROMFS_BLOCK_SIZE) / ROMFS_BLOCK_SIZE * 0x20 ; + ctx->level[1].size = align(ctx->level[2].size,ROMFS_BLOCK_SIZE) / ROMFS_BLOCK_SIZE * 0x20 ; + ctx->level[0].size = align(ctx->level[1].size,ROMFS_BLOCK_SIZE) / ROMFS_BLOCK_SIZE * 0x20 + align(sizeof(ivfc_hdr),0x10); // hdr + + ctx->romfsHeaderSize = ctx->level[0].size; + + //printf("calc total ROMFS size\n"); + ctx->romfsSize = 0; + for(int i = 0; i < 4; i++) + ctx->romfsSize += align(ctx->level[i].size,ROMFS_BLOCK_SIZE); + + //printf("return from CalcRomfsSize();\n"); + return 0; +} + +int FilterRomFS(fs_dir *fs_raw, fs_dir *fs_filtered, void *filter_criteria) +{ + memset(fs_filtered,0,sizeof(fs_dir)); + if(!IsDirWanted(fs_raw,filter_criteria)) + return 0; + + fs_filtered->name_len = fs_raw->name_len; + fs_filtered->name = calloc(fs_filtered->name_len+2,1); + memcpy(fs_filtered->name,fs_raw->name,fs_filtered->name_len); + + fs_filtered->u_dir = 0; + fs_filtered->m_dir = fs_raw->u_dir; + fs_filtered->dir = calloc(fs_filtered->m_dir,sizeof(fs_dir)); + + fs_filtered->u_file = 0; + fs_filtered->m_file = fs_raw->u_file; + fs_filtered->file = calloc(fs_filtered->m_file,sizeof(fs_file)); + + + fs_dir *dir_raw = (fs_dir*)fs_raw->dir; + fs_dir *dir_filtered = (fs_dir*)fs_filtered->dir; + for(u32 i = 0; i < fs_raw->u_dir; i++) + { + if(IsDirWanted(&dir_raw[i],filter_criteria)) + { + FilterRomFS(&dir_raw[i],&dir_filtered[fs_filtered->u_dir],filter_criteria); + fs_filtered->u_dir++; + } + } + + for(u32 i = 0; i < fs_raw->u_file; i++) + { + if(IsFileWanted(&fs_raw->file[i],filter_criteria)) + { + fs_filtered->file[fs_filtered->u_file].name_len = fs_raw->file[i].name_len; + fs_filtered->file[fs_filtered->u_file].name = malloc(fs_filtered->file[fs_filtered->u_file].name_len+2); + memset(fs_filtered->file[fs_filtered->u_file].name,0,fs_filtered->file[fs_filtered->u_file].name_len+2); + memcpy(fs_filtered->file[fs_filtered->u_file].name,fs_raw->file[i].name,fs_filtered->file[fs_filtered->u_file].name_len); + + fs_filtered->file[fs_filtered->u_file].size = fs_raw->file[i].size; + + fs_filtered->file[fs_filtered->u_file].fp = fs_raw->file[i].fp; + fs_raw->file[i].fp = NULL; + + fs_filtered->u_file++; + } + } + + return 0; +} + +void BuildRomfsHeader(romfs_buildctx *ctx) +{ + u32 level3_pos = 0; + + u32_to_u8(ctx->romfsHdr->headersize,sizeof(romfs_infoheader),LE); + + level3_pos += sizeof(romfs_infoheader); + + for(int i = 0; i < 4; i++){ + if(i == 0){ + ctx->dirUTable = (u32*)(ctx->level[3].pos + level3_pos); + u32_to_u8(ctx->romfsHdr->section[i].offset,level3_pos,LE); + u32_to_u8(ctx->romfsHdr->section[i].size,ctx->m_dirUTableEntry*sizeof(u32),LE); + level3_pos += ctx->m_dirUTableEntry*sizeof(u32); + } + else if(i == 1 && ctx->m_dirTableLen){ + ctx->dirTable = ctx->level[3].pos + level3_pos; + u32_to_u8(ctx->romfsHdr->section[i].offset,level3_pos,LE); + u32_to_u8(ctx->romfsHdr->section[i].size,ctx->m_dirTableLen,LE); + level3_pos += ctx->m_dirTableLen; + } + else if(i == 2){ + ctx->fileUTable = (u32*)(ctx->level[3].pos + level3_pos); + u32_to_u8(ctx->romfsHdr->section[i].offset,level3_pos,LE); + u32_to_u8(ctx->romfsHdr->section[i].size,ctx->m_fileUTableEntry*sizeof(u32),LE); + level3_pos += ctx->m_fileUTableEntry*sizeof(u32); + } + else if(i == 3 && ctx->m_fileTableLen){ + ctx->fileTable = ctx->level[3].pos + level3_pos; + u32_to_u8(ctx->romfsHdr->section[i].offset,level3_pos,LE); + u32_to_u8(ctx->romfsHdr->section[i].size,ctx->m_fileTableLen,LE); + level3_pos += ctx->m_fileTableLen; + } + else{ + u32_to_u8(ctx->romfsHdr->section[i].offset,0,LE); + u32_to_u8(ctx->romfsHdr->section[i].size,0,LE); + } + } + + ctx->data = ctx->level[3].pos + align(level3_pos,0x10); + u32_to_u8(ctx->romfsHdr->dataoffset,align(level3_pos,0x10),LE); + + memset(ctx->dirUTable,0xff,ctx->m_dirUTableEntry*sizeof(u32)); + memset(ctx->fileUTable,0xff,ctx->m_fileUTableEntry*sizeof(u32)); + + return; +} + +u32 GetFileUTableIndex(romfs_buildctx *ctx, fs_file *file) +{ + u32 ret = ctx->u_fileUTableEntry; + ctx->u_fileUTableEntry++; + return ret; +} + +u32 GetDirUTableIndex(romfs_buildctx *ctx, fs_dir *dir) +{ + u32 ret = ctx->u_dirUTableEntry; + ctx->u_dirUTableEntry++; + return ret; +} + +int AddFileToRomfs(romfs_buildctx *ctx, fs_file *file, u32 parent, u32 sibling) +{ + romfs_fileentry *entry = (romfs_fileentry*)(ctx->fileTable + ctx->u_fileTableLen); + + u32_to_u8(entry->parentdiroffset,parent,LE); + u32_to_u8(entry->siblingoffset,sibling,LE); + + u32 uTableIndex = GetFileUTableIndex(ctx,file); + u32_to_u8(entry->weirdoffset,ctx->fileUTable[uTableIndex],LE); + ctx->fileUTable[uTableIndex] = ctx->u_fileTableLen; + + // Import Name + u32_to_u8(entry->namesize,file->name_len,LE); + u8 *name_pos = (u8*)(ctx->fileTable + ctx->u_fileTableLen + sizeof(romfs_fileentry)); + memset(name_pos,0,align(file->name_len,4)); + memcpy(name_pos,(u8*)file->name,file->name_len); + + // Import Data + if(file->size) + { + ctx->u_dataLen = align(ctx->u_dataLen,0x10); // Padding + u64_to_u8(entry->dataoffset,ctx->u_dataLen,LE); + u64_to_u8(entry->datasize,file->size,LE); + u8 *data_pos = (ctx->data + ctx->u_dataLen); + ReadFile_64(data_pos,file->size,0,file->fp); + ctx->u_dataLen += file->size; // adding file size + } + else + u64_to_u8(entry->dataoffset,0x40,LE); + + ctx->u_fileTableLen += sizeof(romfs_fileentry) + align(file->name_len,4); + + return 0; +} + +int AddDirToRomfs(romfs_buildctx *ctx, fs_dir *fs, u32 parent, u32 sibling) +{ + //wprintf(L"adding %s \n",fs->name); + romfs_direntry *entry = (romfs_direntry*)(ctx->dirTable + ctx->u_dirTableLen); + + u32_to_u8(entry->parentoffset,parent,LE); + u32_to_u8(entry->siblingoffset,sibling,LE); + + u32 uTableIndex = GetDirUTableIndex(ctx,fs); + u32_to_u8(entry->weirdoffset,ctx->dirUTable[uTableIndex],LE); + ctx->dirUTable[uTableIndex] = ctx->u_dirTableLen; + + u32 Currentdir = ctx->u_dirTableLen; + + if(Currentdir == 0) + { + u32_to_u8(entry->namesize,0,LE); + ctx->u_dirTableLen += sizeof(romfs_direntry); + } + else + { + u32_to_u8(entry->namesize,fs->name_len,LE); + u8 *name_pos = (u8*)(ctx->dirTable + ctx->u_dirTableLen + sizeof(romfs_direntry)); + memset(name_pos,0,(u32)align(fs->name_len,4)); + memcpy(name_pos,(u8*)fs->name,fs->name_len); + ctx->u_dirTableLen += sizeof(romfs_direntry) + (u32)align(fs->name_len,4); + } + + if(fs->u_file) + { + u32_to_u8(entry->fileoffset,ctx->u_fileTableLen,LE); + for(u32 i = 0; i < fs->u_file; i++) + { + u32 file_sibling = 0; + if(i >= fs->u_file-1) + file_sibling = ROMFS_UNUSED_ENTRY; + else + file_sibling = ctx->u_fileTableLen + sizeof(romfs_fileentry) + (u32)align(fs->file[i].name_len,4); + //wprintf(L"adding %s (0x%lx)\n",fs->file[i].name,fs->file[i].size); + AddFileToRomfs(ctx,&fs->file[i],Currentdir,file_sibling); + //wprintf(L"added %s (0x%lx)\n",fs->file[i].name,fs->file[i].size); + } + } + else + u32_to_u8(entry->fileoffset,ROMFS_UNUSED_ENTRY,LE); + + //printf("Checking if to add dirs\n"); + if(fs->u_dir) + { + //printf(" is adding dirs \n"); + u32_to_u8(entry->childoffset,ctx->u_dirTableLen,LE); + fs_dir *dir = (fs_dir*)fs->dir; + for(u32 i = 0; i < fs->u_dir; i++) + { + u32 dir_sibling = 0; + if(i >= fs->u_dir-1) + dir_sibling = ROMFS_UNUSED_ENTRY; + else + { + //printf(" dir has sibling\n"); + dir_sibling = ctx->u_dirTableLen + sizeof(romfs_direntry) + (u32)align(dir[i].name_len,4); + } + AddDirToRomfs(ctx,&dir[i],Currentdir,dir_sibling); + } + } + else + u32_to_u8(entry->childoffset,ROMFS_UNUSED_ENTRY,LE); + //printf(" finished adding dirs \n"); + + //wprintf(L"added %s \n",fs->name); + return 0; +} + +int PopulateRomfs(romfs_buildctx *ctx) +{ + return AddDirToRomfs(ctx,ctx->fs,0x0,ROMFS_UNUSED_ENTRY); +} + +void BuildIvfcHeader(romfs_buildctx *ctx) +{ + memcpy(ctx->ivfcHdr->magic,"IVFC",4); + u32_to_u8(ctx->ivfcHdr->id,0x10000,LE); + + u32 masterHashSize = ( align(ctx->level[1].size,ROMFS_BLOCK_SIZE) / ROMFS_BLOCK_SIZE ) * 0x20 ; + u32_to_u8(ctx->ivfcHdr->masterHashSize,masterHashSize,LE); + + for(int i = 1; i < 4; i++){ + u64_to_u8(ctx->ivfcHdr->level[i-1].logicalOffset,ctx->level[i].logicalOffset,LE); + u64_to_u8(ctx->ivfcHdr->level[i-1].hashDataSize,ctx->level[i].size,LE); + u32_to_u8(ctx->ivfcHdr->level[i-1].blockSize,log2l(ROMFS_BLOCK_SIZE),LE); + } + + u32_to_u8(ctx->ivfcHdr->optionalSize,sizeof(ivfc_hdr),LE); + + return; +} + +void GenIvfcHashTree(romfs_buildctx *ctx) +{ + for(int i = 2; i >= 0; i--){ + u32 numHashes = align(ctx->level[i+1].size,ROMFS_BLOCK_SIZE) / ROMFS_BLOCK_SIZE; + for(u32 j = 0; j < numHashes; j++){ + u8 *datapos = (u8*)(ctx->level[i+1].pos + ROMFS_BLOCK_SIZE * j); + u8 *hashpos = (u8*)(ctx->level[i].pos + 0x20 * j); + ctr_sha(datapos, ROMFS_BLOCK_SIZE, hashpos, CTR_SHA_256); + } + } + + return; +} + +/* +int main(int argc, char **argv) +{ + if(argc!=3){ + if(argc == 2) + return old_main(argc,argv); + printf("usage: %s