tasmota-webserial-esptool 6.4.0 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/const.js CHANGED
@@ -151,6 +151,7 @@ export const ESP32H2_UART_DATE_REG_ADDR = 0x6000007c;
151
151
  export const ESP32H2_BOOTLOADER_FLASH_OFFSET = 0x0;
152
152
  export const ESP32P4_SPI_REG_BASE = 0x5008d000;
153
153
  export const ESP32P4_BASEFUSEADDR = 0x5012d000;
154
+ export const ESP32P4_EFUSE_BLOCK1_ADDR = ESP32P4_BASEFUSEADDR + 0x044;
154
155
  export const ESP32P4_MACFUSEADDR = 0x5012d000 + 0x044;
155
156
  export const ESP32P4_SPI_USR_OFFS = 0x18;
156
157
  export const ESP32P4_SPI_USR1_OFFS = 0x1c;
@@ -162,6 +163,7 @@ export const ESP32P4_UART_DATE_REG_ADDR = 0x500ca000 + 0x8c;
162
163
  export const ESP32P4_BOOTLOADER_FLASH_OFFSET = 0x2000;
163
164
  export const SYNC_PACKET = toByteArray("\x07\x07\x12 UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
164
165
  export const CHIP_DETECT_MAGIC_REG_ADDR = 0x40001000;
166
+ // Image Chip IDs (used by ESP32-C3 and later for chip detection)
165
167
  // These values for the families are made up; nothing that esptool uses.
166
168
  export const CHIP_FAMILY_ESP8266 = 0x8266;
167
169
  export const CHIP_FAMILY_ESP32 = 0x32;
@@ -174,28 +176,44 @@ export const CHIP_FAMILY_ESP32C6 = 0x32c6;
174
176
  export const CHIP_FAMILY_ESP32C61 = 0x32c61;
175
177
  export const CHIP_FAMILY_ESP32H2 = 0x3272;
176
178
  export const CHIP_FAMILY_ESP32P4 = 0x3280;
179
+ export const CHIP_ID_TO_INFO = {
180
+ 5: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
181
+ 9: { name: "ESP32-S3", family: CHIP_FAMILY_ESP32S3 },
182
+ 12: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
183
+ 13: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
184
+ 16: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
185
+ 17: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
186
+ 18: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
187
+ 20: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
188
+ };
177
189
  export const CHIP_DETECT_MAGIC_VALUES = {
178
190
  0xfff0c101: { name: "ESP8266", family: CHIP_FAMILY_ESP8266 },
179
191
  0x00f01d83: { name: "ESP32", family: CHIP_FAMILY_ESP32 },
180
192
  0x000007c6: { name: "ESP32-S2", family: CHIP_FAMILY_ESP32S2 },
181
193
  0x9: { name: "ESP32-S3", family: CHIP_FAMILY_ESP32S3 },
194
+ 0x0c21e06f: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
182
195
  0x6f51306f: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
183
196
  0x7c41a06f: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
184
- 0x0c21e06f: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
185
- 0x6921506f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
186
197
  0x1b31506f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
187
- 0x4881606f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
188
198
  0x4361606f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
199
+ 0x4881606f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
200
+ 0x6921506f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
201
+ 0x1101406f: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
189
202
  0x5fd1406f: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
190
- 0x1101406F: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
191
- 0x63E1406F: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
192
- 0x5C501458: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
193
- 0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
203
+ 0x5c501458: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
204
+ 0x63e1406f: { name: "ESP32-C5", family: CHIP_FAMILY_ESP32C5 },
194
205
  0x2ce0806f: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
206
+ 0x2421606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
207
+ 0x33f0206f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
208
+ 0x4f81606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
195
209
  0x7211606f: { name: "ESP32-C61", family: CHIP_FAMILY_ESP32C61 },
196
- 0x0addbad0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
197
- 0x7039ad9: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
210
+ 0x97e30068: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
211
+ 0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
212
+ // ESP32-P4 old revisions (< Rev. 300) - use magic value detection
213
+ // Rev. 300+ uses IMAGE_CHIP_ID detection instead
198
214
  0x0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
215
+ 0x7039ad9: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
216
+ 0x0addbad0: { name: "ESP32-P4", family: CHIP_FAMILY_ESP32P4 },
199
217
  };
200
218
  // Commands supported by ESP8266 ROM bootloader
201
219
  export const ESP_FLASH_BEGIN = 0x02;
@@ -213,6 +231,7 @@ export const ESP_SPI_SET_PARAMS = 0x0b;
213
231
  export const ESP_SPI_ATTACH = 0x0d;
214
232
  export const ESP_CHANGE_BAUDRATE = 0x0f;
215
233
  export const ESP_SPI_FLASH_MD5 = 0x13;
234
+ export const ESP_GET_SECURITY_INFO = 0x14;
216
235
  export const ESP_CHECKSUM_MAGIC = 0xef;
217
236
  export const ESP_FLASH_DEFL_BEGIN = 0x10;
218
237
  export const ESP_FLASH_DEFL_DATA = 0x11;
@@ -5,6 +5,8 @@ export declare class ESPLoader extends EventTarget {
5
5
  private _parent?;
6
6
  chipFamily: ChipFamily;
7
7
  chipName: string | null;
8
+ chipRevision: number | null;
9
+ chipVariant: string | null;
8
10
  _efuses: any[];
9
11
  _flashsize: number;
10
12
  debug: boolean;
@@ -16,6 +18,24 @@ export declare class ESPLoader extends EventTarget {
16
18
  constructor(port: SerialPort, logger: Logger, _parent?: ESPLoader | undefined);
17
19
  private get _inputBuffer();
18
20
  initialize(): Promise<void>;
21
+ /**
22
+ * Detect chip type using GET_SECURITY_INFO (for newer chips) or magic value (for older chips)
23
+ */
24
+ detectChip(): Promise<void>;
25
+ /**
26
+ * Get chip revision for ESP32-P4
27
+ */
28
+ getChipRevision(): Promise<number>;
29
+ /**
30
+ * Get security info including chip ID (ESP32-C3 and later)
31
+ */
32
+ getSecurityInfo(): Promise<{
33
+ flags: number;
34
+ flashCryptCnt: number;
35
+ keyPurposes: number[];
36
+ chipId: number;
37
+ apiVersion: number;
38
+ }>;
19
39
  /**
20
40
  * @name readLoop
21
41
  * Reads data from the input stream and places it in the inputBuffer
@@ -1,4 +1,5 @@
1
- import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, CHIP_ERASE_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, SlipReadError, } from "./const";
1
+ /// <reference types="@types/w3c-web-serial" />
2
+ import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, CHIP_ERASE_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32P4_EFUSE_BLOCK1_ADDR, SlipReadError, } from "./const";
2
3
  import { getStubCode } from "./stubs";
3
4
  import { hexFormatter, sleep, slipEncode, toHex } from "./util";
4
5
  // @ts-ignore
@@ -11,6 +12,8 @@ export class ESPLoader extends EventTarget {
11
12
  this.logger = logger;
12
13
  this._parent = _parent;
13
14
  this.chipName = null;
15
+ this.chipRevision = null;
16
+ this.chipVariant = null;
14
17
  this._efuses = new Array(4).fill(0);
15
18
  this._flashsize = 4 * 1024 * 1024;
16
19
  this.debug = false;
@@ -30,14 +33,8 @@ export class ESPLoader extends EventTarget {
30
33
  this.readLoop();
31
34
  }
32
35
  await this.sync();
33
- // Determine chip family and name
34
- let chipMagicValue = await this.readRegister(CHIP_DETECT_MAGIC_REG_ADDR);
35
- let chip = CHIP_DETECT_MAGIC_VALUES[chipMagicValue >>> 0];
36
- if (chip === undefined) {
37
- throw new Error(`Unknown Chip: Hex: ${toHex(chipMagicValue >>> 0, 8).toLowerCase()} Number: ${chipMagicValue}`);
38
- }
39
- this.chipName = chip.name;
40
- this.chipFamily = chip.family;
36
+ // Detect chip type
37
+ await this.detectChip();
41
38
  // Read the OTP data for this chip and store into this.efuses array
42
39
  let FlAddr = getSpiFlashAddresses(this.getChipFamily());
43
40
  let AddrMAC = FlAddr.macFuse;
@@ -47,6 +44,104 @@ export class ESPLoader extends EventTarget {
47
44
  this.logger.log(`Chip type ${this.chipName}`);
48
45
  //this.logger.log("FLASHID");
49
46
  }
47
+ /**
48
+ * Detect chip type using GET_SECURITY_INFO (for newer chips) or magic value (for older chips)
49
+ */
50
+ async detectChip() {
51
+ try {
52
+ // Try GET_SECURITY_INFO command first (ESP32-C3 and later)
53
+ const securityInfo = await this.getSecurityInfo();
54
+ const chipId = securityInfo.chipId;
55
+ const chipInfo = CHIP_ID_TO_INFO[chipId];
56
+ if (chipInfo) {
57
+ this.chipName = chipInfo.name;
58
+ this.chipFamily = chipInfo.family;
59
+ // Get chip revision for ESP32-P4
60
+ if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
61
+ this.chipRevision = await this.getChipRevision();
62
+ this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`);
63
+ // Set chip variant based on revision
64
+ if (this.chipRevision >= 300) {
65
+ this.chipVariant = "rev300";
66
+ }
67
+ else {
68
+ this.chipVariant = "rev0";
69
+ }
70
+ this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`);
71
+ }
72
+ this.logger.debug(`Detected chip via IMAGE_CHIP_ID: ${chipId} (${this.chipName})`);
73
+ return;
74
+ }
75
+ this.logger.debug(`Unknown IMAGE_CHIP_ID: ${chipId}, falling back to magic value detection`);
76
+ }
77
+ catch (err) {
78
+ // GET_SECURITY_INFO not supported, fall back to magic value detection
79
+ this.logger.debug(`GET_SECURITY_INFO failed, using magic value detection: ${err}`);
80
+ }
81
+ // Fallback: Use magic value detection for ESP8266, ESP32, ESP32-S2, and ESP32-P4 RC versions
82
+ let chipMagicValue = await this.readRegister(CHIP_DETECT_MAGIC_REG_ADDR);
83
+ let chip = CHIP_DETECT_MAGIC_VALUES[chipMagicValue >>> 0];
84
+ if (chip === undefined) {
85
+ throw new Error(`Unknown Chip: Hex: ${toHex(chipMagicValue >>> 0, 8).toLowerCase()} Number: ${chipMagicValue}`);
86
+ }
87
+ this.chipName = chip.name;
88
+ this.chipFamily = chip.family;
89
+ // For ESP32-P4 detected via magic value (old revisions), set variant
90
+ if (this.chipFamily === CHIP_FAMILY_ESP32P4) {
91
+ this.chipRevision = await this.getChipRevision();
92
+ this.logger.debug(`ESP32-P4 revision: ${this.chipRevision}`);
93
+ if (this.chipRevision >= 300) {
94
+ this.chipVariant = "rev300";
95
+ }
96
+ else {
97
+ this.chipVariant = "rev0";
98
+ }
99
+ this.logger.debug(`ESP32-P4 variant: ${this.chipVariant}`);
100
+ }
101
+ this.logger.debug(`Detected chip via magic value: ${toHex(chipMagicValue >>> 0, 8)} (${this.chipName})`);
102
+ }
103
+ /**
104
+ * Get chip revision for ESP32-P4
105
+ */
106
+ async getChipRevision() {
107
+ if (this.chipFamily !== CHIP_FAMILY_ESP32P4) {
108
+ return 0;
109
+ }
110
+ // Read from EFUSE_BLOCK1 to get chip revision
111
+ // Word 2 contains revision info for ESP32-P4
112
+ const word2 = await this.readRegister(ESP32P4_EFUSE_BLOCK1_ADDR + 8);
113
+ // Minor revision: bits [3:0]
114
+ const minorRev = word2 & 0x0f;
115
+ // Major revision: bits [23] << 2 | bits [5:4]
116
+ const majorRev = (((word2 >> 23) & 1) << 2) | ((word2 >> 4) & 0x03);
117
+ // Revision is major * 100 + minor
118
+ return majorRev * 100 + minorRev;
119
+ }
120
+ /**
121
+ * Get security info including chip ID (ESP32-C3 and later)
122
+ */
123
+ async getSecurityInfo() {
124
+ const [_, responseData] = await this.checkCommand(ESP_GET_SECURITY_INFO, [], 0);
125
+ if (responseData.length < 20) {
126
+ throw new Error(`Invalid security info response length: ${responseData.length}`);
127
+ }
128
+ const flags = unpack("<I", responseData.slice(0, 4))[0];
129
+ const flashCryptCnt = responseData[4];
130
+ const keyPurposes = Array.from(responseData.slice(5, 12));
131
+ const chipId = responseData.length >= 16
132
+ ? unpack("<I", responseData.slice(12, 16))[0]
133
+ : 0;
134
+ const apiVersion = responseData.length >= 20
135
+ ? unpack("<I", responseData.slice(16, 20))[0]
136
+ : 0;
137
+ return {
138
+ flags,
139
+ flashCryptCnt,
140
+ keyPurposes,
141
+ chipId,
142
+ apiVersion,
143
+ };
144
+ }
50
145
  /**
51
146
  * @name readLoop
52
147
  * Reads data from the input stream and places it in the inputBuffer
@@ -411,6 +506,7 @@ export class ESPLoader extends EventTarget {
411
506
  else {
412
507
  await this.reconfigurePort(baud);
413
508
  }
509
+ this.logger.log(`Changed baud rate to ${baud}`);
414
510
  }
415
511
  async reconfigurePort(baud) {
416
512
  var _a;
@@ -425,7 +521,6 @@ export class ESPLoader extends EventTarget {
425
521
  await this.port.open({ baudRate: baud });
426
522
  // Restart Readloop
427
523
  this.readLoop();
428
- this.logger.log(`Changed baud rate to ${baud}`);
429
524
  }
430
525
  catch (e) {
431
526
  console.error(e);
@@ -846,7 +941,7 @@ export class ESPLoader extends EventTarget {
846
941
  return await this.checkCommand(ESP_MEM_END, data, 0, timeout);
847
942
  }
848
943
  async runStub() {
849
- const stub = await getStubCode(this.chipFamily);
944
+ const stub = await getStubCode(this.chipFamily, this.chipRevision);
850
945
  // We're transferring over USB, right?
851
946
  let ramBlock = USB_RAM_BLOCK;
852
947
  // Upload
@@ -921,7 +1016,7 @@ class EspStubLoader extends ESPLoader {
921
1016
  * Start downloading an application image to RAM
922
1017
  */
923
1018
  async memBegin(size, blocks, blocksize, offset) {
924
- let stub = await getStubCode(this.chipFamily);
1019
+ let stub = await getStubCode(this.chipFamily, this.chipRevision);
925
1020
  let load_start = offset;
926
1021
  let load_end = offset + size;
927
1022
  console.log(load_start, load_end);
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="@types/w3c-web-serial" />
1
2
  import { ESP_ROM_BAUD } from "./const";
2
3
  import { ESPLoader } from "./esp_loader";
3
4
  export { ESPLoader } from "./esp_loader";
@@ -1,8 +1,8 @@
1
1
  {
2
- "entry": 1082131984,
3
- "text": "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",
2
+ "entry": 1082132556,
3
+ "text": "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",
4
4
  "text_start": 1082130432,
5
- "data": "FACEQJAJgEDsCYBAfAqAQF4LgEDKC4BAeAuAQH4IgEAaC4BAWguAQJgKgEAuCIBAzAqAQC4IgEBqCYBAsAmAQOwJgEB8CoBAfAmAQKYIgEDaCIBAeAmAQB4OgEDsCYBA5AyAQNYNgEBuB4BA/g2AQG4HgEBuB4BAbgeAQG4HgEBuB4BAbgeAQG4HgEBuB4BAgAyAQG4HgEACDYBA1g2AQA==",
6
- "data_start": 1082469296,
5
+ "data": "GACEQLQMgEACDYBAmg2AQHgOgEDgDoBAjg6AQAgLgEAsDoBAdA6AQLgNgEC4CoBA4A2AQLgKgECSDIBAzgyAQAINgECaDYBApAyAQDILgEBgC4BAoAyAQJYSgEACDYBARhCAQE4SgED2CYBAdhKAQPYJgED2CYBA9gmAQPYJgED2CYBA9gmAQPYJgED2CYBA7A+AQPYJgEByEYBAThKAQA==",
6
+ "data_start": 1082469300,
7
7
  "bss_start": 1082392576
8
8
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "entry": 1341458758,
3
+ "text": "QRG3Jw1QIsQmwkrAEUcGxrcE9k/Yyz6JM4TnAJOEBAAcQJGLmeeyQCJEkkQCSUEBgoADJQkAnEATdfUPgpfNtwERt6cMUE7Gg6mHAErINwn2TybKUsQGziLMk4THAT6KEwkJAIBAE3T0PxnIAyUKAIMnCQB9FBN19Q+Cl2X43bfyQGJEt6cMUCOoNwHSREJJskkiSgVhgoCTBwAMkEEqh2MY9QCFRwXGI6AFAHlVgoCFRmMH1gAJRWMNpgB9VYKAQgWTB7ANQYVjE/cCiUecwfW3EwbADWMVxwCUwT6FgoCTB9AN4xz3/JTBEwWwDYKAtzX3T0ERk4VFvwbGcT9jTQUEtzf3T5OHx7YDpwcIg9ZHCBOGFgAjkscINpcjAKcAA9dHCJFnk4cHBGMa9wI3t/ZPEwfHtqFnupcDpgcIt/b2T5OGxrpjH+YAI6bHCCOg1wgjkgcIIaD5V+MK9fyyQEEBgoAjptcII6DnCN23N9cIUBMHRwUcQ52L9f83xwhQEwdHBRxDnYv1/4KAQREGxvk/N9cIULcGAAgjJgcCkwfHAhTDFEP9/ohDskATRfX/BYlBAYKAQREGxsk/fd231whQNwcAQJjDmEN9/7JAQQGCgDlxItwm2krYUtRW0gbeTtaqhC6JMoRBSpcAy//ngODyhUpjS4AA8lBiVNJUQlmyWSJaklohYYKAooljU4oAwUmTlzkAIUg+xErCJocCyFbGAsCBSJMHAALChjFGkUUFRZcAzP/ngCB7MwQ0QU6ZzpRNvzlxItwm2krYUtRW0gbeTtaqhC6JMoSTCgAClwDL/+eAoOsFSmNLgADyUGJU0lRCWbJZIlqSWiFhgoAlP6KJY9SKAJMJAAKTlzkAyogmhz7AAUiTBwACoUZJRpFFBUVSyFLGAsQCwpcAzP/ngKBzlwDL/+eAYOZOmc6UMwQ0QV23eXEi1DeE9k8TBAQGStADKQQBBtYm0mMCCQp9NVnNvUeBRGPWJwEERP2Mk7QUANE1rT23B/ZPg8dHAMHPlwDL/+eAgOF9NRhEBUUqyCrGAsQCwgLAMge3BwABgUgBSIXIY1H3AuFHoUYTBoANlUWXAMz/54Aga5cAy//ngODdQUc9oJMHAAKhRhMGwA3Ft2Nc9wLhR6FGEwYAApVFlwDM/+eAQGiXAMv/54AA2wVHHEiZjxzIHES6lxzEslAiVJJUAllFYYKAkwcAAqFGEwYQAum3HEQ3BwABuoayB5nAtwaAAH0X+Y831whQXMMUwxxD/f/N3Gm3AREGziLMJsrxV2OS9QQ3BPZPtwT8TxMEBAADpUT9lwDL/+eAwE9jR6AA8kBiRNJEBWGCgAOlRP0FRmwAlwDL/+eAIE4cQANFwQCCl/m3/VfjnfX8cACJRQLGlwDL/+eAQE8yR7cH9k+ThwcAGeeURwVGY5TGACOG1wCYx323AREGzg07NwX0T2wAMRWXAMv/54Bg1KqHBUWd57JHk/cHID7GqTu31whQmEe3BkAANwX0T1WPmMeyRTEVlwDL/+eAwNEzNaAA8kAFYYKAQRG3h/ZPBsaThwcGBUcjgOcAE9fFAJjHBWd9F8zDyMf5jTqVqpWxgYzLI6oHAFE3GcETBVAMskBBAYKAAREizDeE9k8TBAQGJspERAbOSshOxlLEVsJawGPzlQCuhKXAAylEACqKJpkTWckAHEhjVfAAHERjX/kEeTF93bcH9k+Dx0cAgypEANnDk/n6DxMJABAzCTlBlwDL/+eAwL9j/CQDJobShVaFGTuXAMv/54CAvlxAppdcwFxEhY9cxPJAYkTSREJJskkiSpJKAksFYYKAtTNhv5OJCfBKhtKFVoWmmfE5k9mJAAFLMwVZAbMFKgFjZTsBM4YkQX23EwYAEAULdTkTCQkQE3v7D/m/JobShVaFlwDL/+eAoLsTdfUPSdmTB0AMXMhpt0ERBsaXAMv/54AAsANFhQGyQGkVEzUVAEEBgoBBEQbGlwDL/+eAQK4DRYUBskBtFRM1FQBBAYKAQREixDcE9k8TBAQAtwf8TxBIA6VH/ZMFRAEGxpcAy//ngMAsskAjKAQAIkRBAYKAQREGxkU/Acm3B/ZPk4cHAJxLkcN1P0k3EcEZRbJAQQEXA8v/ZwDDo0ERIsQGxibCKoRJNx3Ftwf2T5OHBwCYS5MGFwCUy7qXI4qHABMEBPQBxBMHF/wp4yJEskCSREEBhb8ihZcAy//ngMCdNTcNxbcE9k+ThAQAg9dEBYUHwgfBgyOa9ASTt/cDgccTBAT0AeS9NyOaBASyQCJEkkRBAYKAQREGxhMHAAxjGuUAEwWwDZ0/EwXADbJAQQG1txMHsA3jG+X+jTcTBdAN9bdBESLEJsIGxiqEswS1AGMXlACyQCJEkkRBAYKAA0UEAAUETT/tt3VxIsUmw87e0tzW2gbHSsETAQGAEwEBgKqENwr2TygILoSFapcAy//ngADrEwoKAJMJAQcV5CgALAiXAMv/54Ag6igAwUVRPwFFhWIWkbpAKkSaRApJ9llmWtZaSWGCgCKJY/OKAAVpg0dKAEqGzoUmhYnPiTxKhs6FKAiXAMv/54DA5cqUMwQkQW23lwDL/+eAAJwTdfUPed0TBTAGdbcTBQAMQb01cSLNTsdSxVrB4twGzybLSslWw97eEwEBgBMBAYCAGKqJLooyizaMIyoE+P0zOcE3BQIAlwDL/+eA4N63B/xPA6VH/ZcAy//ngOAPhWdj7WcRKAi3CvZPlwDL/+eAYN0BSZOKCgCDK0T5Y2R5DWPpSwXBoGkzkwcAAhnBtwcCAD6FlwDL/+eAANrJt7MEKkFjc5sA2oSDx0oAJoaihU6Fnce9Opk/poUihWk1uTcmhqKFKAiXAMv/54Dg16aZJpljfkkBswd5QePih/0BqJcAy//ngICNE3X1D2nVIywE+IFE+VujCQT4EwUxAJfwyv/ngCB8dfkDRTT5LADv8K/+kxcFAWPCBwKTt0QAkc+FZ5OHBweml4qXk4cHgJOHB4Ajiqf4hQR9v+MedfuRR+OM9PIoACwIlwDL/+eAANB1PcFFKADFO1U9yTkNzbcH/E8DpUf9lwDL/+eAoP43BQIAlwDL/+eAYMyFYhaR+kBqRNpESkm6SSpKmkoKS/ZbZlwNYYKArTmTBwACGcG3BwIAPoX5t7dXQUlxcZOH94QBRQbXItUm00rRTs9SzVbLWslex2LFZsNqwe7evsaX8Mr/54BgdS05BcU3R9hQt2cRUBMHF6qYzyOgBwAjrAcAmNPUTzcGBADRjtTPI6AHArcH9k83N/dPk4cHABMHx78hoCOgBwCRB+Pt5/7FO5FF6AAVM+Uzt7f2T5OHx7ahar6aI6D6CLcE9k+3B/VPk4QEAJOHBw+cwNU2YwIFGjcE/E8DJUT9E4aEAIlFlwDL/+eAwPC3Vw5Qk4fHFZhDtwYgAIVFVY+Yw7dnDVATBxACI6rnFkVFlwDL/+eAYLi3FcBPAUaThUWXRUWXAMv/54BguTcFAgCXAMv/54AguQMlRP23BfVPk4WlO5cAy//ngGDqAyVE/ZcAy//ngKDoAyVE/ZcAy//ngCDntwcAUJhHE2cXAJjHtwcOUIhfgUU3ifZPcYlhFRM1FQCX8Mr/54DgdOFHBUU+xPwIKsY+woFIAUiBRwFHoUYTBvAJkUUCyALAlwDM/+eAIPKDR+EFQWaFZhOHd/6Tt5cDEzd3AZO3FwDZjyOC9AATBwAQkwf2/7cFAAQBRbcMEVATCQkGDWuX8Mr/54CAZqEMSpuDp8oIY4QHDgOkygiFRyOmCggjCvEEg0cUAAlHIxvhBKMK8QSCzE1HY47nEFFHY4znEClHY57nAINHNAADRyQAogfZjxFHY5XnABxEnEO+zIE5oUXICFE2g0c0AANHJACiB9mPEWdBB2Ny9w4TBbAN0TQTBcANfTwTBeAOZTwNMUG3DTQpwbdnDVATBxACuM+FRUVFlwDL/+eAwKC3BfVPAUaThQUARUWXAMv/54DAobcnDVARR5jLNwUCAJcAy//ngAChXb23BfVPAUaThQUEFUWXAMv/54Agn7enDFDYRxMFAAITZxcQ2MfJv4PHxADjiAfwNwUCACOGBACXAMv/54DAnAllEwUFcZfwyv/ngGBClwDL/+eA4NqDpwwANwUAgO2bI6D8AJcAy//ngADPlwDL/+eAQNMBRZfwyv/ngCBFfb3JRyMb8QQZtwNHFADRRmPn5gKFRmPm5gABSpMJ8A9NrHkXE3f3D8lG4+jm/rc2908KB5OGBsA2lxhDAoeTBgcDk/b2DxFG42nW/BMH9wITd/cPjUZj4OYGtzb3TwoHk4bGxDaXGEMChxMHQAJjlucagsydSQFFrToBRcU6xTT5PKFFyAj9GQE845YJ/gFKgUmBpInr8AiBRQFFl/DK/+eAID0BxYVJAUolpNFF6AjlMoFJ1b+FSeX7l/DK/+eAQEKzOaAAzbchR+Oe5/wDKoQAgynEALNnOgHSB+n37/DP8HHxTpqFS2OICQAzBzpBkxcHAcGDse9BbIVLQX1jaDwLhUtjggkKg8dEADMHOkFjigcOOtbv8C/Fl/DK/+eAADsyV17IXsYCxALCAsCBSAFIkwcAAqFGEwYQApVFBUWXAMz/54BgxZOJCYCTiQmAVb+Dx0QAocM61u/w78CX8Mr/54DANjJXXshexgLEAsICwIFIAUiTBwACoUYTBhAClUUFRZcAzP/ngCDBk4kJgJOJCYCRvxNVxwCX8Mr/54BANm3VkwlQA7M5MAH1vYPHRAAzBzpBjc861u/w77qX8Mr/54DAMDJXXshexgLEAsICwIFIAUiTBwACoUYTBsANlUUFRZcAzP/ngCC76pkBvxNVBwGX8Mr/54DgMGXZkwlgA123E1XHAJfwyv/ngGAvBd1JvyFH44zn5gFKkwkADE2oQUfNv0FHhUnjn+fmTEQIRO/w34hxtUFHhUnjlufmGEiRZ2Pv5yJMSAhE7/DP3o29QUeFSeOZ5+QcSBFnY2L3IlhETEgIRLOJ5wLv8M/ct4f2T5OHBwYNZyOsBwC6lyOkN7E9vTeH9k8TBwcGg0YHAGOKBhgURMEXkwkADGOU9gCDKUcBAUeTBvAOY0X3BoNHVAADR0QAAUqiB9mPA0dkAEIHXY+DR3QA4gfZj2Oe9hoT9fkP7/Bv+RN1+g/v8O/47/Dfh+OcCbyDRxQASUdjaPcaCUfjdPe89ReT9/cPPUfjbve6Nzf3T4oHEwfHxbqXnEOChzMG5AADRoYBBQexjmm3t4f2T5OHBwYDxwcAfcvYR2MeBxSDqUcBI4AHAKWzYUdjkOcCXEwYTFRIEEhMRAhEl/DK/+eAYBwqirM5oACFvwFKhUmttxFHhUnjnefStxYOUPhe5Xf9FwVmfY9RjwhE+N63Fg5Qk4YGCJhCgUV9j1GPmMK3Fg5Qk4ZGCJhCfY9Rj5jCtxYOULhe+Y/Rj7zel/DK/+eAYB7duRP39wDjHAfkk9tHAJMJhAABSn1c4356ywOlyQCX8Mr/54BAAQOniQCDpkkAA6YJAPmOYweHARxCE0f3/32P2Y4UwgUKwQn5txFHObVBR4VJ453nyBxEWEj8zLjMYbm4TBOGB/8R5xnKAUqTCWAMXbX0TGPkxgaNi+OSB970TIFFgUcJqLMF9ACITbMF9wCRB4jBhUXj6Mf+44wFwp2OPpf0zLjMNbEhR4VJ45DnxIOpxAVjhAkAkwmADCOuBAQjrAQEJbMBSpMJIAyptZMJEAyRtQFKkwmADDW9AUqTCZAMFb0TByANY4PnEhMHQA3jmeegA0o0AINHJAAiCjNq+gCX8Mr/54CAAYMpyQBBGmNzOgHSieOGCZ4DKkkAYQROmhNaygCDJwkBY1bwAIMniQBjUfoQ7/DPhHXdg8dEAAMqSQBjhwcgs2c6Ab2LY5AHFJfwyv/ngID8t8cIUCOiBzSX8Mr/54AA/86LYx0FELfHCFCThwc0Pta3xwhQk4cHMD7Yt8cIUJOHhzQ+2rfHCFCTh8c0kw3wAz7cBUwTdfoDQe0TDQAEY+19Cf1HM7N3ARMdQwBBDWmggynEAABE7/AvwOMfBZIJZRMFBXGX8Mr/54BA5renDFDcSzcHAAFBF5PVRwGSB/mPvYndjbOFNQMBRbPVhQKX8Mr/54Cg5xMFgD6X8Mr/54Dg4t24VEgQSExECETv8C/Z5bCDRTQAg0ckABMFhAGiBd2NwRXv8K+owbjv8G+I/bWTd/oBQU211zJXk1ddQGqGHMPCV6KFPpWX8Mr/54AAAdJXI6BHAeJXI6CHAe/gf/Q3xwhQ4WeBRhMHhzUJRpOHB2oMQ2OPxQBjm/YAl/DK/+eAgOmTB0AMIyr5AGmohQbNt+OF9v423pfwyv/ngMDmt8cIUPJWI6iHNROHhzXhZw1Gk4cHagxDY4bFAOOA9vyFBtW/44z2+pfwyv/ngMDjIeWTFz0A/Rc+wFKHkwcAAmLIYsYCxALCgUgBSKFGSUaRRQVFl/DL/+eAwG23xwhQI6qHNbOLq0FqlGqa45QL6Jfwyv/ngEDfKtaX8Mr/54Cg3zJVJfGDJ0kAzpcjIvkAgyfJALOHN0EjJvkAl/DK/+eAgN1v8E/7ToaihVKFl/DK/+eAoNv5t4NJNACDRyQAogmz6fkAgyfJAMEZgeeTt1kAncu3PfdPt4v2TzcN9k9hBAVKk43Nv5OLCwYTDA0GY4cJAIMnyQCZw2NNQAFjVgoIkwdwDBmgkweQDCMq+QBv8I/0AyiLsIOnDQDOyDO4CQEGCLOH+0AFCL7OQtbv4D/uA6cNADJYN4X2T6KF/AjihpAIEwWFB5fwyv/ngMDPxkcDJ4uwg6UNALOJ+UAdjz6U9kcjJOuwKoq+lSOgvQCzhYVBAcXhd66XvfsTBQ0G7/DviCOgjQGlt2MXCuyDJ8kAY4MH7JMHgAyNvxxEY50H6u/wL5wJZRMFBXGX8Mr/54DAvZfwyv/ngMDCb/DP6UBEYwsE6O/w75kTBYA+l/DK/+eAoLsClG/wD+i6UCpUmlQKWfpJakraSkpLuksqTJpMCk32XU1hgoAAAA==",
4
+ "text_start": 1341456384,
5
+ "data": "YAD2T4YO9U/UDvVPcg/1T1gQ9U+yEPVPahD1T7gM9U8MEPVPVBD1T5AP9U9oDPVPuA/1T2gM9U9iDvVPoA71T9QO9U9yD/VPdA71T+IM9U8WDfVPcA71T5AU9U/UDvVPJhL1T1AU9U8MC/VPdBT1TwwL9U8MC/VPDAv1TwwL9U8MC/VPDAv1TwwL9U8MC/VPxBH1TwwL9U9sE/VPUBT1Tw==",
6
+ "data_start": 1341598716,
7
+ "bss_start": 1341521920
8
+ }
@@ -6,5 +6,5 @@ interface Stub {
6
6
  entry: number;
7
7
  data_start: number;
8
8
  }
9
- export declare const getStubCode: (chipFamily: ChipFamily) => Promise<Stub>;
9
+ export declare const getStubCode: (chipFamily: ChipFamily, chipRevision?: number | null) => Promise<Stub>;
10
10
  export {};
@@ -1,6 +1,6 @@
1
1
  import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP8266, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32P4 } from "../const";
2
2
  import { toByteArray } from "../util";
3
- export const getStubCode = async (chipFamily) => {
3
+ export const getStubCode = async (chipFamily, chipRevision) => {
4
4
  let stubcode;
5
5
  if (chipFamily == CHIP_FAMILY_ESP32) {
6
6
  stubcode = await import("./esp32.json");
@@ -33,7 +33,13 @@ export const getStubCode = async (chipFamily) => {
33
33
  stubcode = await import("./esp32h2.json");
34
34
  }
35
35
  else if (chipFamily == CHIP_FAMILY_ESP32P4) {
36
- stubcode = await import("./esp32p4.json");
36
+ // ESP32-P4: Use esp32p4r3.json for Rev. 300+, esp32p4.json for older revisions
37
+ if (chipRevision !== null && chipRevision !== undefined && chipRevision >= 300) {
38
+ stubcode = await import("./esp32p4r3.json");
39
+ }
40
+ else {
41
+ stubcode = await import("./esp32p4.json");
42
+ }
37
43
  }
38
44
  // Base64 decode the text and data
39
45
  return {
@@ -0,0 +1 @@
1
+ var A=1082132556,B="QRG39wBgIsQmwkrAEUcGxrcEhEDYyz6JM4TnAJOEBAAcQJGLmeeyQCJEkkQCSUEBgoADJQkAnEATdfUPgpfNtwERtwcAYE7Gg6mHAErINwmEQCbKUsQGziLMk4THAT6KEwkJAIBAE3T0PxnIAyUKAIMnCQB9FBN19Q+Cl2X43bfyQGJEtwcAYCOoNwHSREJJskkiSgVhgoCTBwAMkEEqh2MY9QCFRwXGI6AFAHlVgoCFRmMH1gAJRWMNpgB9VYKAQgWTB7ANQYVjE/cCiUecwfW3EwbADWMVxwCUwT6FgoCTB9AN4xz3/JTBEwWwDYKAtzWFQEERk4XFugbGcT9jTQUEtzeFQJOHR7IDpwcIg9ZHCBOGFgAjkscINpcjAKcAA9dHCJFnk4cHBGMa9wI3t4RAEwdHsqFnupcDpgcIt/aEQJOGRrZjH+YAI6bHCCOg1wgjkgcIIaD5V+MK9fyyQEEBgoAjptcII6DnCN23NzcAYBMHRwUcQ52L9f83JwBgEwdHBRxDnYv1/4KAQREGxvk/NzcAYLcGAAgjJgcCkwfHAhTDFEP9/ohDskATRfX/BYlBAYKAQREGxsk/fd23NwBgNwcAQJjDmEN9/7JAQQGCgHlxKoNCXjcFAECDTkEDgy9FAQVFRsJCwAbWDU92yCrGcsS+iDqItocyh6FGLoaahWOZ7wGX4IL/54DgfrJQRWGCgJfAgv/ngGAhzb95cSLUJtJK0FLMBtZOzqqELokyhEFKlwCA/+eAwO5jSoAAslAiVJJUAlnySWJKRWGCgKKJY1OKAMFJk5c5AD7AyogmhgLCAUiBRyFHkwYAArFFEUWFNzMENEFOmc6Uwbd5cSLUJtJK0FLMVsoG1k7OqoQuiTKEEwoAApcAgP/ngIDohUpjS4AAslAiVJJUAlnySWJK0kpFYYKA/T2iiWNUigCTCQACyocmhoFIE5g5AAFHkwYAAslFEUVWwgLA3T2XAID/54Ag5E6ZzpQzBDRBVb8BESLMN4SEQBMEhAFKyAMpBAEGzibKYwoJCEk1WcW9R4FEY9YnAQRE/YyTtBQAYT25NbcHhECDx0cAwceXAID/54BA30k1EESFRz7CAsAyBjcHAAGBSAFIgUeNxGNe5gABR+FGkwWADRVFpT2XAID/54BA3EFHJaABR5MGAAKTBcAN3bdjWeYCAUfhRpMFAAIVRYE9lwCA/+eAwNkFRxxImY8cyBxEupccxPJAYkTSREJJBWGCgAFHkwYAApMFEALBvxxENwcAAbqGsgeZwLcGgAB9F/mPNzcAYFzDFMMcQ/3/zdxBvwERBs5ROzcFhkBsAEEVlwCA/+eAANuqhwVFneeyR5P3ByA+xnU7tzcAYJhHtwZAADcFhkBVj5jHskVBFZcAgP/ngGDYMzWgAPJABWGCgEERt4eEQAbGk4eHAQVHI4DnABPXxQCYxwVnfRfMw8jH+Y06laqVsYGMyyOqBwBRNxnBEwVQDLJAQQGCgAERIsw3hIRAEwSEASbKREQGzkrITsZSxFbCWsBj85UAroSlwAMpRAAqiiaZE1nJABxIY1XwABxEY1/5BMU5fd23B4RAg8dHAIMqRADZw5P5+g8TCQAQMwk5QZcAgP/ngGDGY/wkAyaG0oVWhU07lwCA/+eAIMVcQKaXXMBcRIWPXMTyQGJE0kRCSbJJIkqSSgJLBWGCgO07Yb+TiQnwSobShVaFppmlO5PZiQABSzMFWQGzBSoBY2U7ATOGJEF9txMGABAFC6E7EwkJEBN7+w/5vyaG0oVWhZcAgP/ngEDCE3X1D0nZkwdADFzIabdBEQbGlwCA/+eAYLYDRYUBskB1FRM1FQBBAYKAQREGxsU3DcW3B4RAk4cHAJRHmc43ZwlgEwfHEBxDNwb9/30W8Y83BgMA8Y7VjxzDskBBAYKAQREGxm03EcENRbJAQQEXA4D/ZwBjrEERBsYmwiLEqoSXAID/54CAqVk3DcU3BIRAEwQEAINXxACFB8IHwYMjFvQAk7f3A4HHk4cE9IHnTT8jFgQAskAiRJJEQQGCgEERBsYTBwAMYxrlABMFsA1lNxMFwA2yQEEBeb8TB7AN4xvl/lE/EwXQDfW3QREixCbCBsYqhLMEtQBjF5QAskAiRJJEQQGCgANFBAAFBE0/7bd1cSLFJsPO3tLc1toGx0rBEwEBgBMBAYCqhDcKhEAoCC6EhWqXAID/54BAEhMKCgCTCQEHFeQoACwIlwCA/+eAYBEoAMFFUT8BRYViFpG6QCpEmkQKSfZZZlrWWklhgoAiiWPzigAFaYNHSgBKhs6FJoWJz6k+SobOhSgIlwCA/+eAAA3KlDMEJEFtt5cAgP/ngECoE3X1D3ndEwUwBnW3EwUADMm1NXEizU7HUsVaweLcBs8my0rJVsPe3hMBAYATAQGAqokuijKLNowCwgU9gBi3BwIAGeGTBwACPoWXAID/54AgBIVnY+xnDygItwqEQJcAgP/ngGAFAUmTigoAgytE+WNoeQtj7UsDZaCzBCpBY3ObANqEg8dKACaGooVOhZ3HbTStP6aFIoV9NY0/JoaihSgIlwCA/+eAYAGmmSaZY35JAbMHeUHj4of9AaiXAID/54AAnBN19Q9p1SMsBPiBRPlbowkE+BMFMQCXAID/54AginX5A0U0+SwA7/C/jJMXBQFjwgcCk7dEAJHPhWeThwcHppeKl5OHB4CThweAI4qn+IUEfb/jHnX7kUfjiPT0KAAsCJcAgP/ngID5xTXBRSgAET3hPRU7kwcAAhnBtwcCAD6FlwCA/+eAwPSFYhaR+kBqRNpESkm6SSpKmkoKS/ZbZlwNYYKAt1dBSTVxk4f3hAFFBs8izSbLSslOx1LFVsNawd7e4tzm2urY7tY+3pcAgP/ngECFyTkRzbdnCWCTh8cQmEO3BoRAI6TmALcGAwBVj5jDVTkFzbcnC2A3R9hQk4eHwRMHF6qYw7cmC2AjoAbAI6AHAJOHBsKYwxOHxsEUQzcGBADRjhTDI6AHALcHhEA3N4VAk4cHABMHR7shoCOgBwCRB+Pt5/4BNZFFaBgVO+U7t7eEQJOHR7Khar6aI6D6CDcJhEC3B4BAEwkJAJOHBw8jIPkABTljCwUUtwcBYBMHEAIjrOcMhUVFRZcAgP/ngADhtwWAQAFGk4UFAEVFlwCA/+eAQOK39wBgEUeYyzcFAgCXAID/54CA4bcXCWCIX4FFcYlhFRM1FQCXAID/54DAh7cHAEADp0cBhUdj/ecC4Uc+wAFHgUcCwpMIwQQBSIFGAUaTBfAJEUXv8P+Cg0fhBBOHd/4TN3cBYxQHDpO3lwNjgAcOgUdBZiMC+QATBwAQkwf2/4VmtwUABAFFl/B//+eAgHm3hIRAtzeFQJOEhAGTh0fBDWs+1Cabg6fKCPXfA6TKCIVHI6YKCCMC8QSDRxQACUcjE+EEowLxBILETUdjgucIUUdjgOcIKUdjnucAg0c0AANHJACiB9mPEUdjlecAHEScQ77EdTGhRcgAxTaDRzQAA0ckAKIH2Y8RZ0EHY3b3BBMFsA2JPhMFwA2xNhMF4A6ZNr05Sbe3BYBAAUaThQUEFUWXAID/54CgzrcHAGDYRxMFAAITZxcQ2MfJtYVHFbfJRyMT8QR5vwNHFADRRmPn5gKFRmPm5gABSpMJ8A9BrHkXE3f3D8lG4+jm/rc2hUAKB5OGhrs2lxhDAoeTBgcDk/b2DxFG42nW/BMH9wITd/cPjUZj7eYEtzaFQAoHk4ZGwDaXGEMChxMHQAJjlucYgsSdSQFFRTQBRdU00T7JPqFFyAD9GRE245YJ/gFKgUk5rJXr8ACBRQFFl/B//+eAYFgV4dFF6ADNNIFJMaiFSYHvl/B//+eAIF6zOaAAKaAhR2OF5wCFSQFK1aIDKoQAgynEALNnOgHSB/X37/C/hX3xTpqFS2OICQAzBjpBkxcGAcGDoevBawVMwXxj7TsJhUtjhwkIg0dJADMGOkHxyzLO7/BP4Jfwf//ngKBWckZewgLAgUgBSIFHAUeTBgACkwUQAhVF7/DP35OJCYCTiQmAwbeDR0kAncsyzu/wr9yX8H//54AAU3JGXsICwIFIAUiBRwFHkwYAApMFEAIVRe/wL9yTiQmAk4kJgK23E1XGAJfwf//ngCBTbdWTCVADszkwARW/g0dJADMGOkGFyzLO7/BP15fwf//ngKBNckZiwgLAgUgBSIFHAUeTBgACkwXADRVF7/DP1uaZBb8TVQYBl/B//+eAYE5l2ZMJYANFvxNVxgCX8H//54DgTDHVcb8hR+OM5+gBSpMJAAxFqEFHzb9BR4VJ45Dn7ExECERFMmW1QUeFSeOY5+oYSJFnY+/nIkxICETv8M/1ebVBR4VJ45vn6BxIEWdjYvciWERMSAhEs4nnAu/wz/O3h4RAk4eHAQ1nI6wHALqXI6Q3sam9N4eEQBMHhwGDRgcAY4YGGBREwReTCQAMY5T2AIMpRwEBR5MG8A5jQvcGg0dUAANHRAABSqIH2Y8DR2QAQgddj4NHdADiB9mPY572GhP1+Q/v8N+KE3X6D+/wX4rv8D+Z45oJyINHFABJR2No9xoJR+Ny98j1F5P39w89R+Ns98YiV4oHupecQ4KHMwbkAANGhgEFB7GOQb+3h4RAk4eHAQPHBwB1y9hHYxEHFoOpRwEjgAcATbthR2OQ5wJcTBhMVEgQSExECESX8H//54BgOiqKszmgAJ2/AUqFSYW/EUeFSeOS59i3lgBguF7ld/0XBWZ9j1GPCES43reWAGC4VoFFfY9Rj7jWt5YAYPhefY9Rj/jet5YAYPhS+Y/Rj/zSl/B//+eA4DwFsxP39wDjFAfmk9tHAJMJhAABSn1c43Z6zwOlyQCX8H//54BAHwOniQCDpkkAA6YJAPmOYweHARxCE0f3/32P2Y4UwgUKwQn5txFHOb1BR4VJ45bnzhxEWEgjKvkAIyjpAH25AycJAROGB/8R5wHOAUqTCWAMfbWDJkkBY+fGBo2L45YH3oMmSQGBRYFHCaizBfQAiE2zBfcAkQeIwYVF4+jH/uOPBcSdjj6XIyrZACMo6QC5sSFHhUnjkufIgylJAWOECQCTCYAMIyoJACMoCQAVuwFKkwkgDKm1kwkQDJG1AUqTCYAMNb0BSpMJkAwVvRMHIA1jjOcQEwdADeOX56wDSjQAg0ckACIKM2r6AJfwf//ngCAfg6nEAEEaY3M6AdKJ44QJqgOqRABhBE6aE1rKAJxIY1XwAJxEY1z6Du/wL6J13YNHSQADqkQAY4UHHrNnOgG9i2OaBxKX8H//54BgGrcnAGAjogc0l/B//+eA4BzOi2MXBRC3JwBgk4cHND7OtycAYJOHBzA+0LcnAGCTh4c0tywAYJMN8AM+0pOMzDQFTBN1+gNB6RMNAARj6X0J/Uczs3cBEx1DAEENSaAJZRMFBXGDKcQAAESX8H//54BABLcHAGDYS7cGAAHBFpNXRwESB3WPvYvZj7OHNwMBRbPVhwKX8H//54CgBRMFgD6X8H//54DgAMGyVEgQSExECETv8G/rTbqDRTQAg0ckABMFhAGiBd2NwRXv8I/Aabrv8C+p9b2Td/oBQU2123JHk1ddQGqGHMOCV6KFPpWXUIP/54CgsJJXI6BHASOgjAHv8I+SNycAYOFngUYTB4c1CUaThwdqDENjjsUAY5r2AJfwf//ngCAIkwdADNzIeaCFBtW344b2/jbWl/B//+eAgAW3JwBgslYjqIc1E4eHNeFnDUaThwdqDENjhsUA44H2/IUG1b/jjfb6l/B//+eAgAIV7RMYPQCBR1KGYsICwIFIfRgBR5MGAALJRRFF7/Bvi7cnAGAjqoc1s4urQWqUaprjkAvql/B//+eAwP4qzpfwf//ngCD/ckU99dxAzpfcwNxEs4c3QdzEl/B//+eAgP1ZuE6GooVShZfwf//ngMD74b+DSTQAg0ckAKIJs+n5ANxEwRmB55O3WQCVyzc9hUC3i4RAtwyEQGEEBUoTDU27k4uLAROMjAFjhgkA3ESZw2NMQAFjVQoIkwdwDBmgkweQDNzIb/A/gwMoi7CDJw0AzsAzuAkBBgizh/tABQi+xkLO7/DvkAMnDQBySDeFhECihfwA4oaQABMFBQOX8H//54AA8IZHAyeLsIMlDQCziflAHY8+lLZHIyTrsCqKvpUjIL0A4XezhYVBrpeRwy39E4WMAe/wz6IjII0BtbdjHAr63ERjiQf6kweADJ2/HERjkwf67/DPtAllEwUFcZfwf//ngODd7/BPsJfwf//ngKDib/BP+EBEYw8E9u/wT7ITBYA+l/B//+eAgNvv8O+tApRv8E/27/BPrfpAakTaREpJukkqSppKCkv2W2Zc1lxGXbZdDWGCgA==",E=1082130432,w="GACEQLQMgEACDYBAmg2AQHgOgEDgDoBAjg6AQAgLgEAsDoBAdA6AQLgNgEC4CoBA4A2AQLgKgECSDIBAzgyAQAINgECaDYBApAyAQDILgEBgC4BAoAyAQJYSgEACDYBARhCAQE4SgED2CYBAdhKAQPYJgED2CYBA9gmAQPYJgED2CYBA9gmAQPYJgED2CYBA7A+AQPYJgEByEYBAThKAQA==",g=1082469300,C=1082392576,Q={entry:A,text:B,text_start:E,data:w,data_start:g,bss_start:C};export{C as bss_start,w as data,g as data_start,Q as default,A as entry,B as text,E as text_start};
@@ -0,0 +1 @@
1
+ var A=1341458758,w="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",B=1341456384,E="YAD2T4YO9U/UDvVPcg/1T1gQ9U+yEPVPahD1T7gM9U8MEPVPVBD1T5AP9U9oDPVPuA/1T2gM9U9iDvVPoA71T9QO9U9yD/VPdA71T+IM9U8WDfVPcA71T5AU9U/UDvVPJhL1T1AU9U8MC/VPdBT1TwwL9U8MC/VPDAv1TwwL9U8MC/VPDAv1TwwL9U8MC/VPxBH1TwwL9U9sE/VPUBT1Tw==",D=1341598716,Q=1341521920,C={entry:A,text:w,text_start:B,data:E,data_start:D,bss_start:Q};export{Q as bss_start,E as data,D as data_start,C as default,A as entry,w as text,B as text_start};