diff --git a/MacNB_iwleeprom/iwleeprom b/MacNB_iwleeprom/iwleeprom deleted file mode 100644 index 8124fdf..0000000 Binary files a/MacNB_iwleeprom/iwleeprom and /dev/null differ diff --git a/MacNB_iwleeprom/iwleeprom.8.gz b/MacNB_iwleeprom/iwleeprom.8.gz deleted file mode 100644 index 0bd0ee5..0000000 Binary files a/MacNB_iwleeprom/iwleeprom.8.gz and /dev/null differ diff --git a/MacNB_iwleeprom/obj/ath5kio.o b/MacNB_iwleeprom/obj/ath5kio.o deleted file mode 100644 index 1f807ea..0000000 Binary files a/MacNB_iwleeprom/obj/ath5kio.o and /dev/null differ diff --git a/MacNB_iwleeprom/obj/ath9kio.o b/MacNB_iwleeprom/obj/ath9kio.o deleted file mode 100644 index b3c20c4..0000000 Binary files a/MacNB_iwleeprom/obj/ath9kio.o and /dev/null differ diff --git a/MacNB_iwleeprom/obj/iwleeprom.o b/MacNB_iwleeprom/obj/iwleeprom.o deleted file mode 100644 index cba66fb..0000000 Binary files a/MacNB_iwleeprom/obj/iwleeprom.o and /dev/null differ diff --git a/MacNB_iwleeprom/obj/iwlio.o b/MacNB_iwleeprom/obj/iwlio.o deleted file mode 100644 index f42da87..0000000 Binary files a/MacNB_iwleeprom/obj/iwlio.o and /dev/null differ diff --git a/MacNB_iwleeprom/obj/original.bin b/MacNB_iwleeprom/obj/original.bin deleted file mode 100644 index 617904b..0000000 Binary files a/MacNB_iwleeprom/obj/original.bin and /dev/null differ diff --git a/dumpathrom/Makefile b/dumpathrom/Makefile index 88a03d5..2401b86 100644 --- a/dumpathrom/Makefile +++ b/dumpathrom/Makefile @@ -11,3 +11,5 @@ all: dumpathrom dumpathrom: dumpathrom.o $(LD) $(LDFLAGS) -o $@ $< +clean: + $(RM) dumpathrom *.o *.obj diff --git a/dumpathrom/dumpathrom b/dumpathrom/dumpathrom deleted file mode 100644 index c7db307..0000000 Binary files a/dumpathrom/dumpathrom and /dev/null differ diff --git a/dumpathrom/dumpathrom.c b/dumpathrom/dumpathrom.c index 14d70f6..44e3277 100644 --- a/dumpathrom/dumpathrom.c +++ b/dumpathrom/dumpathrom.c @@ -5,6 +5,9 @@ #include #include +#include "stdint.h" +#include "stdbool.h" + #ifdef __APPLE__ #include #endif @@ -186,7 +189,7 @@ static void ath9k_hw_4k_dump_eeprom(struct ar5416_eeprom_4k *eep) printf("\n"); printf("-RegDomain: 0x%.4x\n", *(unsigned int *)pBase->regDmn); - PR_EEP(" RegDomain1", pBase->regDmn[0]); + PR_EEP(" RegDomain1", pBase->regDmn[0] ^ 0x8000); PR_EEP(" RegDomain2", pBase->regDmn[1]); printf("\n"); @@ -252,9 +255,9 @@ int main(int argc, char **argv) if ((argc != 2) || (!strncmp(argv[1], "--help", strlen(argv[1]))) || (!strncmp(argv[1], "-h", strlen(argv[1])))) { - printf("AnV Atheros ROM Tool V1.0 (AR928X/AR9285 edition)\n"); + printf("AnV Atheros ROM Tool V1.1 (AR9271/AR928X/AR9285 edition)\n"); printf("Usage: %s \n\n", argv[0]); - printf("Copyright (C) 2014 AnV Software, all rights reserved.\n"); + printf("Copyright (C) 2018 AnV Software, all rights reserved.\n"); return 1; } @@ -272,11 +275,11 @@ int main(int argc, char **argv) fSize = ftell(f); fseek(f, 0, SEEK_SET); - if ((fSize != 376) && (fSize != 512) && (fSize != 4096)) + if ((fSize != 376) && (fSize != 512) && (fSize != 1024) && (fSize != 4096)) { fclose(f); - printf("ERROR: Invalid size, %d is not 376, 512 or 4096!\n", fSize); + printf("ERROR: Invalid size, %d is not 376, 512, 1024 or 4096!\n", fSize); return 3; } @@ -313,6 +316,7 @@ int main(int argc, char **argv) break; case 512: + case 1024: case 4096: romdata = (struct ar5416_eeprom_4k *)(buffer + 128); break; diff --git a/dumpathrom/dumpathrom.obj b/dumpathrom/dumpathrom.obj deleted file mode 100644 index 085c09e..0000000 Binary files a/dumpathrom/dumpathrom.obj and /dev/null differ diff --git a/iwleeprom/iwleeprom b/iwleeprom/iwleeprom deleted file mode 100644 index 2357526..0000000 Binary files a/iwleeprom/iwleeprom and /dev/null differ diff --git a/iwleeprom/iwleeprom.8.gz b/iwleeprom/iwleeprom.8.gz deleted file mode 100644 index e1de3d2..0000000 Binary files a/iwleeprom/iwleeprom.8.gz and /dev/null differ diff --git a/iwleeprom/obj/ath5kio.o b/iwleeprom/obj/ath5kio.o deleted file mode 100644 index 8339bcb..0000000 Binary files a/iwleeprom/obj/ath5kio.o and /dev/null differ diff --git a/iwleeprom/obj/ath9kio.o b/iwleeprom/obj/ath9kio.o deleted file mode 100644 index 04b4755..0000000 Binary files a/iwleeprom/obj/ath9kio.o and /dev/null differ diff --git a/iwleeprom/obj/iwleeprom.o b/iwleeprom/obj/iwleeprom.o deleted file mode 100644 index 143108d..0000000 Binary files a/iwleeprom/obj/iwleeprom.o and /dev/null differ diff --git a/iwleeprom/obj/iwlio.o b/iwleeprom/obj/iwlio.o deleted file mode 100644 index 6700a88..0000000 Binary files a/iwleeprom/obj/iwlio.o and /dev/null differ diff --git a/overriderom.patch b/overriderom.patch new file mode 100644 index 0000000..4267b48 --- /dev/null +++ b/overriderom.patch @@ -0,0 +1,218 @@ +diff -Naur ath9k/eeprom_4k.c ath9k-patched/eeprom_4k.c +--- ath9k/eeprom_4k.c 2016-07-30 18:58:42.807896380 +0300 ++++ ath9k-patched/eeprom_4k.c 2016-07-19 00:18:05.912438021 +0300 +@@ -18,6 +18,12 @@ + #include "hw.h" + #include "ar9002_phy.h" + ++#define CPTCFG_ATH9K_FORCEROM ++ ++#ifdef CPTCFG_ATH9K_FORCEROM ++#include "romimp.h" ++#endif ++ + static int ath9k_hw_4k_get_eeprom_ver(struct ath_hw *ah) + { + return ((ah->eeprom.map4k.baseEepHeader.version >> 12) & 0xF); +@@ -33,13 +39,27 @@ + static bool __ath9k_hw_4k_fill_eeprom(struct ath_hw *ah) + { + u16 *eep_data = (u16 *)&ah->eeprom.map4k; +- int addr, eep_start_loc = 64; ++ int addr; ++#ifndef CPTCFG_ATH9K_FORCEROM ++ int eep_start_loc = 64; ++#else ++ u16 *eep_temp; ++#endif + +- for (addr = 0; addr < SIZE_EEPROM_4K; addr++) { +- if (!ath9k_hw_nvram_read(ah, addr + eep_start_loc, eep_data)) +- return false; +- eep_data++; +- } ++ ++#ifndef CPTCFG_ATH9K_FORCEROM ++ for (addr = 0; addr < SIZE_EEPROM_4K; addr++) { ++ if (!ath9k_hw_nvram_read(ah, addr + eep_start_loc, eep_data)) ++ return false; ++ eep_data++; ++ } ++#else ++ eep_temp = (u16 *)(overriderom+128); ++ for (addr = 0; addr < SIZE_EEPROM_4K; addr++) { ++ *eep_data = eep_temp[addr]; ++ eep_data++; ++ } ++#endif + + return true; + } +@@ -183,13 +203,18 @@ + static int ath9k_hw_4k_check_eeprom(struct ath_hw *ah) + { + #define EEPROM_4K_SIZE (sizeof(struct ar5416_eeprom_4k) / sizeof(u16)) +- struct ath_common *common = ath9k_hw_common(ah); +- struct ar5416_eeprom_4k *eep = &ah->eeprom.map4k; +- u16 *eepdata, temp, magic, magic2; +- u32 sum = 0, el; +- bool need_swap = false; +- int i, addr; + ++ struct ath_common *common = ath9k_hw_common(ah); ++ u32 sum = 0; ++ int i; ++ u16 *eepdata; ++ ++#ifndef CPTCFG_ATH9K_FORCEROM ++ struct ar5416_eeprom_4k *eep = &ah->eeprom.map4k; ++ u16 temp, magic, magic2; ++ u32 el; ++ bool need_swap = false; ++ int addr; + + if (!ath9k_hw_use_flash(ah)) { + if (!ath9k_hw_nvram_read(ah, AR5416_EEPROM_MAGIC_OFFSET, +@@ -282,6 +307,14 @@ + eep->modalHeader.spurChans[i].spurChan = word; + } + } ++#else ++ eepdata = (u16 *)(overriderom+128); ++ ++ for (i=0; i < EEPROM_4K_SIZE; i++) ++ { ++ sum ^= *eepdata++; ++ } ++#endif + + if (sum != 0xffff || ah->eep_ops->get_eeprom_ver(ah) != AR5416_EEP_VER || + ah->eep_ops->get_eeprom_rev(ah) < AR5416_EEP_NO_BACK_VER) { +diff -Naur ath9k/init.c ath9k-patched/init.c +--- ath9k/init.c 2016-07-30 18:58:43.007896673 +0300 ++++ ath9k-patched/init.c 2016-07-19 00:18:05.922438036 +0300 +@@ -25,6 +25,12 @@ + + #include "ath9k.h" + ++#define CPTCFG_ATH9K_FORCEROM ++ ++#ifdef CPTCFG_ATH9K_FORCEROM ++#include "romimp.h" ++#endif ++ + struct ath9k_eeprom_ctx { + struct completion complete; + struct ath_hw *ah; +@@ -467,23 +473,33 @@ + ah->config.led_active_high = true; + } + ++#ifndef CPTCFG_ATH9K_FORCEROM + static void ath9k_eeprom_request_cb(const struct firmware *eeprom_blob, +- void *ctx) ++ void *ctx) + { +- struct ath9k_eeprom_ctx *ec = ctx; ++ struct ath9k_eeprom_ctx *ec = ctx; + +- if (eeprom_blob) +- ec->ah->eeprom_blob = eeprom_blob; ++ if (eeprom_blob) ++ ec->ah->eeprom_blob = eeprom_blob; + +- complete(&ec->complete); ++ complete(&ec->complete); + } ++#endif + + static int ath9k_eeprom_request(struct ath_softc *sc, const char *name) + { +- struct ath9k_eeprom_ctx ec; ++ ++#ifndef CPTCFG_ATH9K_FORCEROM ++ struct ath9k_eeprom_ctx ec; ++ int err; ++#endif + struct ath_hw *ah = ah = sc->sc_ah; +- int err; + ++#ifdef CPTCFG_ATH9K_FORCEROM ++ ah->eeprom_blob = (const struct firmware *)overriderom; ++ ++ printk("ath9k: Forcing override of card rom... size: 0x%X\n", overrideromsize); ++#else + /* try to load the EEPROM content asynchronously */ + init_completion(&ec.complete); + ec.ah = sc->sc_ah; +@@ -497,6 +513,7 @@ + } + + wait_for_completion(&ec.complete); ++#endif + + if (!ah->eeprom_blob) { + ath_err(ath9k_hw_common(ah), +@@ -509,7 +526,11 @@ + + static void ath9k_eeprom_release(struct ath_softc *sc) + { +- release_firmware(sc->sc_ah->eeprom_blob); ++#ifdef CPTCFG_ATH9K_FORCEROM ++ sc->sc_ah->eeprom_blob = NULL; ++#else ++ release_firmware(sc->sc_ah->eeprom_blob); ++#endif + } + + static int ath9k_init_soc_platform(struct ath_softc *sc) +diff -Naur ath9k/Makefile ath9k-patched/Makefile +--- ath9k/Makefile 2016-07-30 18:58:42.497895925 +0300 ++++ ath9k-patched/Makefile 2016-07-19 00:18:44.492494606 +0300 +@@ -6,8 +6,10 @@ + xmit.o \ + link.o \ + antenna.o \ +- channel.o ++ channel.o \ ++ romimp.o + ++ath9k-$(CPTCFG_ATH9K_FORCEROM) += romimp.o + ath9k-$(CONFIG_ATH9K_BTCOEX_SUPPORT) += mci.o + ath9k-$(CONFIG_ATH9K_PCI) += pci.o + ath9k-$(CONFIG_ATH9K_AHB) += ahb.o +@@ -41,7 +43,10 @@ + ar9002_mac.o \ + ar9003_mac.o \ + ar9003_eeprom.o \ +- ar9003_paprd.o ++ ar9003_paprd.o \ ++ romimp.o ++ ++ath9k_hw-$(CPTCFG_ATH9K_FORCEROM) += romimp.o + + ath9k_hw-$(CONFIG_ATH9K_WOW) += ar9003_wow.o + +diff -Naur ath9k/romimp.c ath9k-patched/romimp.c +--- ath9k/romimp.c 1970-01-01 03:00:00.000000000 +0300 ++++ ath9k-patched/romimp.c 2016-07-29 11:13:30.955904097 +0300 +@@ -0,0 +1,7 @@ ++/* ROM override file data for ath9k (auto-generated by convertromtoc.sh) */ ++const char overriderom[] = ++{ ++0x5a, 0xa5, 0x00, 0x00, 0x03, 0x00, 0x00, 0x50, 0x8c, 0x16, 0x2b, 0x00, 0x08, 0x50, 0x01, 0x00, 0x80, 0x02, 0x2c, 0x50, 0x8c, 0x16, 0xa1, 0x30, 0x64, 0x50, 0xc0, 0x8c, 0x04, 0x05, 0x0c, 0x57, 0x01, 0x3f, 0x00, 0x22, 0x04, 0x40, 0xcb, 0x05, 0x4a, 0x00, 0x74, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x50, 0xc2, 0x01, 0x0c, 0x51, 0x10, 0x20, 0x06, 0x00, 0x64, 0x51, 0x12, 0x14, 0x24, 0xff, 0x68, 0x51, 0xff, 0x17, 0x15, 0x00, 0x68, 0x50, 0x10, 0x20, 0x19, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x01, 0xfe, 0x90, 0x0d, 0xe0, 0x02, 0x00, 0x9c, 0x80, 0x00, 0x00, 0xb4, 0x82, 0xfe, 0xdc, 0xf4, 0x76, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x20, 0x00, 0xe2, 0x00, 0x0d, 0x00, 0x02, 0x0e, 0x1c, 0xba, 0x0a, 0x01, 0x00, 0x00, 0x06, 0x46, 0x34, 0x01, 0x0e, 0x0e, 0x00, 0x00, 0x1f, 0x2c, 0x00, 0x00, 0x34, 0x03, 0x44, 0x44, 0x33, 0x93, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x89, 0xac, 0x15, 0x1f, 0x2b, 0x37, 0x4e, 0x43, 0x50, 0x5d, 0x6b, 0x70, 0x08, 0x0b, 0x10, 0x1c, 0x46, 0x0c, 0x14, 0x20, 0x37, 0x59, 0x15, 0x20, 0x2b, 0x38, 0x4e, 0x43, 0x51, 0x5d, 0x66, 0x71, 0x08, 0x0c, 0x11, 0x1e, 0x48, 0x0c, 0x16, 0x21, 0x39, 0x5d, 0x16, 0x21, 0x2c, 0x38, 0x4e, 0x43, 0x50, 0x5d, 0x6a, 0x75, 0x09, 0x0b, 0x13, 0x1f, 0x4a, 0x0d, 0x14, 0x23, 0x3c, 0x60, 0x70, 0x22, 0x22, 0x22, 0x22, 0xb8, 0x22, 0x22, 0x22, 0x22, 0xff, 0x00, 0x00, 0x00, 0x00, 0x70, 0x22, 0x22, 0x22, 0x20, 0x89, 0x22, 0x22, 0x22, 0x20, 0xac, 0x22, 0x22, 0x22, 0x20, 0x70, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x1e, 0x89, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x1e, 0xac, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x1e, 0x70, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1a, 0x18, 0x89, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1a, 0x18, 0xac, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1a, 0x18, 0x11, 0x12, 0x15, 0x17, 0x41, 0x42, 0x45, 0x47, 0x31, 0x32, 0x35, 0x37, 0x70, 0x22, 0x75, 0x22, 0x7a, 0x62, 0xa2, 0x22, 0x70, 0x1c, 0x75, 0x60, 0x9d, 0x60, 0xa2, 0x1d, 0x70, 0x1a, 0x75, 0x60, 0x9d, 0x60, 0xa2, 0x1c, 0x7a, 0x13, 0x7f, 0x5b, 0x93, 0x1b, 0x98, 0x13, 0x70, 0x22, 0x75, 0x62, 0xac, 0x22, 0xb8, 0x22, 0x70, 0x22, 0x75, 0x62, 0xac, 0x22, 0x00, 0x00, 0x70, 0x22, 0x75, 0x62, 0xac, 0x22, 0x00, 0x00, 0x7a, 0x1c, 0x7f, 0x5c, 0x93, 0x5c, 0xa2, 0x1c, 0x70, 0x1c, 0x75, 0x5d, 0xac, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x75, 0x5e, 0xac, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x75, 0x5e, 0xac, 0x1c, 0x00, 0x00, 0x7a, 0x1c, 0x7f, 0x5c, 0x93, 0x5c, 0xa2, 0x1c, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5a, 0xa5, 0x00, 0x00, 0x03, 0x00, 0x00, 0x50, 0x8c, 0x16, 0x2b, 0x00, 0x08, 0x50, 0x01, 0x00, 0x80, 0x02, 0x2c, 0x50, 0x8c, 0x16, 0xa1, 0x30, 0x64, 0x50, 0xc0, 0x8c, 0x04, 0x05, 0x0c, 0x57, 0x01, 0x3f, 0x00, 0x22, 0x04, 0x40, 0xcb, 0x05, 0x4a, 0x00, 0x74, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x50, 0xc2, 0x01, 0x0c, 0x51, 0x10, 0x20, 0x06, 0x00, 0x64, 0x51, 0x12, 0x14, 0x24, 0xff, 0x68, 0x51, 0xff, 0x17, 0x15, 0x00, 0x68, 0x50, 0x10, 0x20, 0x19, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x78, 0x01, 0xfe, 0x90, 0x0d, 0xe0, 0x02, 0x00, 0x9c, 0x80, 0x00, 0x00, 0xb4, 0x82, 0xfe, 0xdc, 0xf4, 0x76, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x09, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x20, 0x00, 0xe2, 0x00, 0x0d, 0x00, 0x02, 0x0e, 0x1c, 0xba, 0x0a, 0x01, 0x00, 0x00, 0x06, 0x46, 0x34, 0x01, 0x0e, 0x0e, 0x00, 0x00, 0x1f, 0x2c, 0x00, 0x00, 0x34, 0x03, 0x44, 0x44, 0x33, 0x93, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x89, 0xac, 0x15, 0x1f, 0x2b, 0x37, 0x4e, 0x43, 0x50, 0x5d, 0x6b, 0x70, 0x08, 0x0b, 0x10, 0x1c, 0x46, 0x0c, 0x14, 0x20, 0x37, 0x59, 0x15, 0x20, 0x2b, 0x38, 0x4e, 0x43, 0x51, 0x5d, 0x66, 0x71, 0x08, 0x0c, 0x11, 0x1e, 0x48, 0x0c, 0x16, 0x21, 0x39, 0x5d, 0x16, 0x21, 0x2c, 0x38, 0x4e, 0x43, 0x50, 0x5d, 0x6a, 0x75, 0x09, 0x0b, 0x13, 0x1f, 0x4a, 0x0d, 0x14, 0x23, 0x3c, 0x60, 0x70, 0x22, 0x22, 0x22, 0x22, 0xb8, 0x22, 0x22, 0x22, 0x22, 0xff, 0x00, 0x00, 0x00, 0x00, 0x70, 0x22, 0x22, 0x22, 0x20, 0x89, 0x22, 0x22, 0x22, 0x20, 0xac, 0x22, 0x22, 0x22, 0x20, 0x70, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x1e, 0x89, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x1e, 0xac, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x20, 0x1e, 0x70, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1a, 0x18, 0x89, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1a, 0x18, 0xac, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1a, 0x18, 0x11, 0x12, 0x15, 0x17, 0x41, 0x42, 0x45, 0x47, 0x31, 0x32, 0x35, 0x37, 0x70, 0x22, 0x75, 0x22, 0x7a, 0x62, 0xa2, 0x22, 0x70, 0x1c, 0x75, 0x60, 0x9d, 0x60, 0xa2, 0x1d, 0x70, 0x1a, 0x75, 0x60, 0x9d, 0x60, 0xa2, 0x1c, 0x7a, 0x13, 0x7f, 0x5b, 0x93, 0x1b, 0x98, 0x13, 0x70, 0x22, 0x75, 0x62, 0xac, 0x22, 0xb8, 0x22, 0x70, 0x22, 0x75, 0x62, 0xac, 0x22, 0x00, 0x00, 0x70, 0x22, 0x75, 0x62, 0xac, 0x22, 0x00, 0x00, 0x7a, 0x1c, 0x7f, 0x5c, 0x93, 0x5c, 0xa2, 0x1c, 0x70, 0x1c, 0x75, 0x5d, 0xac, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x75, 0x5e, 0xac, 0x1c, 0x00, 0x00, 0x70, 0x1c, 0x75, 0x5e, 0xac, 0x1c, 0x00, 0x00, 0x7a, 0x1c, 0x7f, 0x5c, 0x93, 0x5c, 0xa2, 0x1c, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ++}; ++int overrideromsize = sizeof(overriderom); ++ +diff -Naur ath9k/romimp.h ath9k-patched/romimp.h +--- ath9k/romimp.h 1970-01-01 03:00:00.000000000 +0300 ++++ ath9k-patched/romimp.h 2014-07-21 10:33:36.000000000 +0400 +@@ -0,0 +1,8 @@ ++#ifndef ROM_FIX_H ++#define ROM_FIX_H 1 ++ ++extern const char overriderom[]; ++extern int overrideromsize; ++ ++#endif /* ROM_FIX_H */ ++ diff --git a/readme.md b/readme.md index 8ec97be..d7b266e 100644 --- a/readme.md +++ b/readme.md @@ -8,3 +8,15 @@ It has the following projects: - iwleeprom (AnV) - AR9285_Optimized_ROM (AnV) - iwleeprom (MacNB) + +**UPDATE:** +Here is overriderom.patch , which allows you to override rom of ath9k-driven card for testing, recovery, etc +It is writen for 4.4.16 lts version, but most likely it is usable for other versions due to ath9k source code is not being changed often. +Refer to http://www.insanelymac.com/forum/topic/299732-atheros-9k-series-rom-modding-tools-and-recovery-kit/ for some additional info. +**Usage :** +> mv overriderom.patch ${kernel-source-root}/drivers/net/wireless/ath +> cd ${kernel-source-root}/drivers/net/wireless/ath +> patch -s -p0 < overriderom.patch + +**ISSUE** +Overriding ROM is not configurable and enabled by default (using #defines directly in source code). Fixing of that is welcome