irtxrx 0.0.1

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.
Files changed (178) hide show
  1. package/README.md +127 -0
  2. package/dist/cjs/decode.d.ts +184 -0
  3. package/dist/cjs/decode.d.ts.map +1 -0
  4. package/dist/cjs/decode.js +431 -0
  5. package/dist/cjs/decode.js.map +1 -0
  6. package/dist/cjs/encode.d.ts +76 -0
  7. package/dist/cjs/encode.d.ts.map +1 -0
  8. package/dist/cjs/encode.js +185 -0
  9. package/dist/cjs/encode.js.map +1 -0
  10. package/dist/cjs/index.d.ts +34 -0
  11. package/dist/cjs/index.d.ts.map +1 -0
  12. package/dist/cjs/index.js +99 -0
  13. package/dist/cjs/index.js.map +1 -0
  14. package/dist/cjs/protocols/coolix.d.ts +98 -0
  15. package/dist/cjs/protocols/coolix.d.ts.map +1 -0
  16. package/dist/cjs/protocols/coolix.js +331 -0
  17. package/dist/cjs/protocols/coolix.js.map +1 -0
  18. package/dist/cjs/protocols/daikin.d.ts +47 -0
  19. package/dist/cjs/protocols/daikin.d.ts.map +1 -0
  20. package/dist/cjs/protocols/daikin.js +353 -0
  21. package/dist/cjs/protocols/daikin.js.map +1 -0
  22. package/dist/cjs/protocols/daikin128.d.ts +60 -0
  23. package/dist/cjs/protocols/daikin128.d.ts.map +1 -0
  24. package/dist/cjs/protocols/daikin128.js +267 -0
  25. package/dist/cjs/protocols/daikin128.js.map +1 -0
  26. package/dist/cjs/protocols/daikin152.d.ts +47 -0
  27. package/dist/cjs/protocols/daikin152.d.ts.map +1 -0
  28. package/dist/cjs/protocols/daikin152.js +256 -0
  29. package/dist/cjs/protocols/daikin152.js.map +1 -0
  30. package/dist/cjs/protocols/daikin160.d.ts +37 -0
  31. package/dist/cjs/protocols/daikin160.d.ts.map +1 -0
  32. package/dist/cjs/protocols/daikin160.js +176 -0
  33. package/dist/cjs/protocols/daikin160.js.map +1 -0
  34. package/dist/cjs/protocols/daikin176.d.ts +44 -0
  35. package/dist/cjs/protocols/daikin176.d.ts.map +1 -0
  36. package/dist/cjs/protocols/daikin176.js +215 -0
  37. package/dist/cjs/protocols/daikin176.js.map +1 -0
  38. package/dist/cjs/protocols/daikin2.d.ts +46 -0
  39. package/dist/cjs/protocols/daikin2.d.ts.map +1 -0
  40. package/dist/cjs/protocols/daikin2.js +337 -0
  41. package/dist/cjs/protocols/daikin2.js.map +1 -0
  42. package/dist/cjs/protocols/daikin216.d.ts +30 -0
  43. package/dist/cjs/protocols/daikin216.d.ts.map +1 -0
  44. package/dist/cjs/protocols/daikin216.js +167 -0
  45. package/dist/cjs/protocols/daikin216.js.map +1 -0
  46. package/dist/cjs/protocols/daikin312.d.ts +45 -0
  47. package/dist/cjs/protocols/daikin312.d.ts.map +1 -0
  48. package/dist/cjs/protocols/daikin312.js +345 -0
  49. package/dist/cjs/protocols/daikin312.js.map +1 -0
  50. package/dist/cjs/protocols/daikin64.d.ts +79 -0
  51. package/dist/cjs/protocols/daikin64.d.ts.map +1 -0
  52. package/dist/cjs/protocols/daikin64.js +260 -0
  53. package/dist/cjs/protocols/daikin64.js.map +1 -0
  54. package/dist/cjs/protocols/daikin_common.d.ts +28 -0
  55. package/dist/cjs/protocols/daikin_common.d.ts.map +1 -0
  56. package/dist/cjs/protocols/daikin_common.js +41 -0
  57. package/dist/cjs/protocols/daikin_common.js.map +1 -0
  58. package/dist/cjs/protocols/nec.d.ts +50 -0
  59. package/dist/cjs/protocols/nec.d.ts.map +1 -0
  60. package/dist/cjs/protocols/nec.js +180 -0
  61. package/dist/cjs/protocols/nec.js.map +1 -0
  62. package/dist/decode.d.ts +67 -0
  63. package/dist/decode.d.ts.map +1 -0
  64. package/dist/decode.js +242 -0
  65. package/dist/decode.js.map +1 -0
  66. package/dist/encode.d.ts +76 -0
  67. package/dist/encode.d.ts.map +1 -0
  68. package/dist/encode.js +174 -0
  69. package/dist/encode.js.map +1 -0
  70. package/dist/esm/decode.d.ts +184 -0
  71. package/dist/esm/decode.d.ts.map +1 -0
  72. package/dist/esm/decode.js +420 -0
  73. package/dist/esm/decode.js.map +1 -0
  74. package/dist/esm/encode.d.ts +76 -0
  75. package/dist/esm/encode.d.ts.map +1 -0
  76. package/dist/esm/encode.js +174 -0
  77. package/dist/esm/encode.js.map +1 -0
  78. package/dist/esm/index.d.ts +34 -0
  79. package/dist/esm/index.d.ts.map +1 -0
  80. package/dist/esm/index.js +20 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/protocols/coolix.d.ts +98 -0
  83. package/dist/esm/protocols/coolix.d.ts.map +1 -0
  84. package/dist/esm/protocols/coolix.js +322 -0
  85. package/dist/esm/protocols/coolix.js.map +1 -0
  86. package/dist/esm/protocols/daikin.d.ts +47 -0
  87. package/dist/esm/protocols/daikin.d.ts.map +1 -0
  88. package/dist/esm/protocols/daikin.js +344 -0
  89. package/dist/esm/protocols/daikin.js.map +1 -0
  90. package/dist/esm/protocols/daikin128.d.ts +60 -0
  91. package/dist/esm/protocols/daikin128.d.ts.map +1 -0
  92. package/dist/esm/protocols/daikin128.js +260 -0
  93. package/dist/esm/protocols/daikin128.js.map +1 -0
  94. package/dist/esm/protocols/daikin152.d.ts +47 -0
  95. package/dist/esm/protocols/daikin152.d.ts.map +1 -0
  96. package/dist/esm/protocols/daikin152.js +247 -0
  97. package/dist/esm/protocols/daikin152.js.map +1 -0
  98. package/dist/esm/protocols/daikin160.d.ts +37 -0
  99. package/dist/esm/protocols/daikin160.d.ts.map +1 -0
  100. package/dist/esm/protocols/daikin160.js +167 -0
  101. package/dist/esm/protocols/daikin160.js.map +1 -0
  102. package/dist/esm/protocols/daikin176.d.ts +44 -0
  103. package/dist/esm/protocols/daikin176.d.ts.map +1 -0
  104. package/dist/esm/protocols/daikin176.js +208 -0
  105. package/dist/esm/protocols/daikin176.js.map +1 -0
  106. package/dist/esm/protocols/daikin2.d.ts +46 -0
  107. package/dist/esm/protocols/daikin2.d.ts.map +1 -0
  108. package/dist/esm/protocols/daikin2.js +328 -0
  109. package/dist/esm/protocols/daikin2.js.map +1 -0
  110. package/dist/esm/protocols/daikin216.d.ts +30 -0
  111. package/dist/esm/protocols/daikin216.d.ts.map +1 -0
  112. package/dist/esm/protocols/daikin216.js +158 -0
  113. package/dist/esm/protocols/daikin216.js.map +1 -0
  114. package/dist/esm/protocols/daikin312.d.ts +45 -0
  115. package/dist/esm/protocols/daikin312.d.ts.map +1 -0
  116. package/dist/esm/protocols/daikin312.js +336 -0
  117. package/dist/esm/protocols/daikin312.js.map +1 -0
  118. package/dist/esm/protocols/daikin64.d.ts +79 -0
  119. package/dist/esm/protocols/daikin64.d.ts.map +1 -0
  120. package/dist/esm/protocols/daikin64.js +253 -0
  121. package/dist/esm/protocols/daikin64.js.map +1 -0
  122. package/dist/esm/protocols/daikin_common.d.ts +28 -0
  123. package/dist/esm/protocols/daikin_common.d.ts.map +1 -0
  124. package/dist/esm/protocols/daikin_common.js +38 -0
  125. package/dist/esm/protocols/daikin_common.js.map +1 -0
  126. package/dist/esm/protocols/nec.d.ts +50 -0
  127. package/dist/esm/protocols/nec.d.ts.map +1 -0
  128. package/dist/esm/protocols/nec.js +175 -0
  129. package/dist/esm/protocols/nec.js.map +1 -0
  130. package/dist/index.d.ts +32 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +19 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/protocols/daikin.d.ts +47 -0
  135. package/dist/protocols/daikin.d.ts.map +1 -0
  136. package/dist/protocols/daikin.js +343 -0
  137. package/dist/protocols/daikin.js.map +1 -0
  138. package/dist/protocols/daikin128.d.ts +60 -0
  139. package/dist/protocols/daikin128.d.ts.map +1 -0
  140. package/dist/protocols/daikin128.js +259 -0
  141. package/dist/protocols/daikin128.js.map +1 -0
  142. package/dist/protocols/daikin152.d.ts +47 -0
  143. package/dist/protocols/daikin152.d.ts.map +1 -0
  144. package/dist/protocols/daikin152.js +246 -0
  145. package/dist/protocols/daikin152.js.map +1 -0
  146. package/dist/protocols/daikin160.d.ts +37 -0
  147. package/dist/protocols/daikin160.d.ts.map +1 -0
  148. package/dist/protocols/daikin160.js +166 -0
  149. package/dist/protocols/daikin160.js.map +1 -0
  150. package/dist/protocols/daikin176.d.ts +44 -0
  151. package/dist/protocols/daikin176.d.ts.map +1 -0
  152. package/dist/protocols/daikin176.js +207 -0
  153. package/dist/protocols/daikin176.js.map +1 -0
  154. package/dist/protocols/daikin2.d.ts +46 -0
  155. package/dist/protocols/daikin2.d.ts.map +1 -0
  156. package/dist/protocols/daikin2.js +326 -0
  157. package/dist/protocols/daikin2.js.map +1 -0
  158. package/dist/protocols/daikin216.d.ts +30 -0
  159. package/dist/protocols/daikin216.d.ts.map +1 -0
  160. package/dist/protocols/daikin216.js +157 -0
  161. package/dist/protocols/daikin216.js.map +1 -0
  162. package/dist/protocols/daikin312.d.ts +45 -0
  163. package/dist/protocols/daikin312.d.ts.map +1 -0
  164. package/dist/protocols/daikin312.js +334 -0
  165. package/dist/protocols/daikin312.js.map +1 -0
  166. package/dist/protocols/daikin64.d.ts +79 -0
  167. package/dist/protocols/daikin64.d.ts.map +1 -0
  168. package/dist/protocols/daikin64.js +251 -0
  169. package/dist/protocols/daikin64.js.map +1 -0
  170. package/dist/protocols/daikin_common.d.ts +28 -0
  171. package/dist/protocols/daikin_common.d.ts.map +1 -0
  172. package/dist/protocols/daikin_common.js +38 -0
  173. package/dist/protocols/daikin_common.js.map +1 -0
  174. package/dist/protocols/nec.d.ts +50 -0
  175. package/dist/protocols/nec.d.ts.map +1 -0
  176. package/dist/protocols/nec.js +175 -0
  177. package/dist/protocols/nec.js.map +1 -0
  178. package/package.json +37 -0
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ /**
3
+ * Daikin 128-bit (16-byte) IR protocol encoder.
4
+ *
5
+ * Leader (2x mark/space) + 2 sections: bytes 0–7 (with header) + bytes 8–15 (no header, footer mark).
6
+ * Nibble-based checksums.
7
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.Daikin128Fan = exports.Daikin128Mode = void 0;
11
+ exports.buildDaikin128Raw = buildDaikin128Raw;
12
+ exports.sendDaikin128 = sendDaikin128;
13
+ exports.encodeDaikin128Raw = encodeDaikin128Raw;
14
+ exports.decodeDaikin128 = decodeDaikin128;
15
+ const encode_js_1 = require("../encode.js");
16
+ const decode_js_1 = require("../decode.js");
17
+ // ---------------------------------------------------------------------------
18
+ // Timing constants (shared with Daikin64)
19
+ // ---------------------------------------------------------------------------
20
+ const LDR_MARK = 9800;
21
+ const LDR_SPACE = 9800;
22
+ const HDR_MARK = 4600;
23
+ const HDR_SPACE = 2500;
24
+ const BIT_MARK = 350;
25
+ const ONE_SPACE = 954;
26
+ const ZERO_SPACE = 382;
27
+ const GAP = 20300;
28
+ const FOOTER_MARK = 4600; // kDaikin128FooterMark = kDaikin128HdrMark
29
+ const STATE_LENGTH = 16;
30
+ const SECTION_LEN = 8;
31
+ // ---------------------------------------------------------------------------
32
+ // Daikin128-specific mode values (4-bit, different from shared 3-bit)
33
+ // ---------------------------------------------------------------------------
34
+ exports.Daikin128Mode = {
35
+ Dry: 0b0001,
36
+ Cool: 0b0010,
37
+ Fan: 0b0100,
38
+ Heat: 0b1000,
39
+ Auto: 0b1010,
40
+ };
41
+ exports.Daikin128Fan = {
42
+ Auto: 0b0001,
43
+ High: 0b0010,
44
+ Med: 0b0100,
45
+ Low: 0b1000,
46
+ Powerful: 0b0011,
47
+ Quiet: 0b1001,
48
+ };
49
+ const MIN_TEMP = 16;
50
+ const MAX_TEMP = 30;
51
+ // ---------------------------------------------------------------------------
52
+ // Bit helpers
53
+ // ---------------------------------------------------------------------------
54
+ function setBit(raw, byteIdx, bitIdx, on) {
55
+ if (on)
56
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
57
+ else
58
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
59
+ }
60
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
61
+ const mask = ((1 << size) - 1) << bitOffset;
62
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
63
+ }
64
+ // ---------------------------------------------------------------------------
65
+ // Build
66
+ // ---------------------------------------------------------------------------
67
+ function defaultState() {
68
+ const raw = new Uint8Array(STATE_LENGTH);
69
+ raw[0] = 0x16;
70
+ raw[7] = 0x04; // Lower nibble = 0x4, upper nibble = checksum
71
+ raw[8] = 0xa1;
72
+ return raw;
73
+ }
74
+ function buildDaikin128Raw(state) {
75
+ const raw = defaultState();
76
+ // Mode (byte 1, bits 0–3)
77
+ let mode = state.mode ?? exports.Daikin128Mode.Auto;
78
+ if (!(mode === exports.Daikin128Mode.Auto || mode === exports.Daikin128Mode.Cool || mode === exports.Daikin128Mode.Heat || mode === exports.Daikin128Mode.Fan || mode === exports.Daikin128Mode.Dry))
79
+ mode = exports.Daikin128Mode.Auto;
80
+ setBitsRange(raw, 1, 0, 4, mode);
81
+ // Fan (byte 1, bits 4–7) — mode-dependent constraints
82
+ let fan = state.fan ?? exports.Daikin128Fan.Auto;
83
+ if (fan === exports.Daikin128Fan.Quiet || fan === exports.Daikin128Fan.Powerful) {
84
+ if (mode === exports.Daikin128Mode.Auto)
85
+ fan = exports.Daikin128Fan.Auto;
86
+ }
87
+ if (!(fan === exports.Daikin128Fan.Auto || fan === exports.Daikin128Fan.High || fan === exports.Daikin128Fan.Med || fan === exports.Daikin128Fan.Low || fan === exports.Daikin128Fan.Quiet || fan === exports.Daikin128Fan.Powerful))
88
+ fan = exports.Daikin128Fan.Auto;
89
+ setBitsRange(raw, 1, 4, 4, fan);
90
+ // Clock (byte 2 = ClockMins BCD, byte 3 = ClockHours BCD)
91
+ if (state.clock !== undefined) {
92
+ let mins = state.clock;
93
+ if (mins >= 24 * 60)
94
+ mins = 0;
95
+ raw[2] = (0, encode_js_1.uint8ToBcd)(mins % 60);
96
+ raw[3] = (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60));
97
+ }
98
+ // On timer (byte 4: bits 0–5 = OnHours, bit 6 = OnHalfHour, bit 7 = OnTimer)
99
+ if (state.onTime !== undefined) {
100
+ let mins = state.onTime;
101
+ if (mins >= 24 * 60)
102
+ mins = 0;
103
+ setBitsRange(raw, 4, 0, 6, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60)));
104
+ setBit(raw, 4, 6, (mins % 60) >= 30);
105
+ }
106
+ setBit(raw, 4, 7, state.onTimerEnabled ?? false);
107
+ // Off timer (byte 5: bits 0–5 = OffHours, bit 6 = OffHalfHour, bit 7 = OffTimer)
108
+ if (state.offTime !== undefined) {
109
+ let mins = state.offTime;
110
+ if (mins >= 24 * 60)
111
+ mins = 0;
112
+ setBitsRange(raw, 5, 0, 6, (0, encode_js_1.uint8ToBcd)(Math.trunc(mins / 60)));
113
+ setBit(raw, 5, 6, (mins % 60) >= 30);
114
+ }
115
+ setBit(raw, 5, 7, state.offTimerEnabled ?? false);
116
+ // Temp (byte 6, BCD)
117
+ const temp = Math.min(Math.max(state.temp ?? 24, MIN_TEMP), MAX_TEMP);
118
+ raw[6] = (0, encode_js_1.uint8ToBcd)(temp);
119
+ // Byte 7 lower nibble fields: SwingV(bit 0), Sleep(bit 1), bit 2 always 1, Power(bit 3)
120
+ setBit(raw, 7, 0, state.swingVertical ?? false);
121
+ setBit(raw, 7, 1, state.sleep ?? false);
122
+ setBit(raw, 7, 2, true); // always 1
123
+ setBit(raw, 7, 3, state.power ?? false);
124
+ // Byte 9: Ceiling(bit 0), Econo(bit 2), Wall(bit 3)
125
+ const econo = (state.econo ?? false) && (mode === exports.Daikin128Mode.Cool || mode === exports.Daikin128Mode.Heat);
126
+ setBit(raw, 9, 0, state.ceiling ?? false);
127
+ setBit(raw, 9, 2, econo);
128
+ setBit(raw, 9, 3, state.wall ?? false);
129
+ // --- Checksums ---
130
+ // First checksum: sumNibbles(bytes 0–6, init=lower nibble of byte 7) & 0x0F → upper nibble of byte 7
131
+ const sum1 = (0, encode_js_1.sumNibbles)(raw, 0, SECTION_LEN - 1, raw[7] & 0x0f) & 0x0f;
132
+ raw[7] = (raw[7] & 0x0f) | (sum1 << 4);
133
+ // Second checksum: sumNibbles(bytes 8–14) → byte 15
134
+ raw[15] = (0, encode_js_1.sumNibbles)(raw, SECTION_LEN, SECTION_LEN - 1);
135
+ return raw;
136
+ }
137
+ // ---------------------------------------------------------------------------
138
+ // Send
139
+ // ---------------------------------------------------------------------------
140
+ function sendDaikin128(state, repeat = 0) {
141
+ return encodeDaikin128Raw(buildDaikin128Raw(state), repeat);
142
+ }
143
+ function encodeDaikin128Raw(data, repeat = 0) {
144
+ const result = [];
145
+ for (let r = 0; r <= repeat; r++) {
146
+ // Leader: 2x (mark + space)
147
+ for (let i = 0; i < 2; i++) {
148
+ result.push(LDR_MARK);
149
+ result.push(LDR_SPACE);
150
+ }
151
+ // Section 1 (bytes 0–7) — with header
152
+ const s1 = (0, encode_js_1.sendGenericBytes)({
153
+ headerMark: HDR_MARK, headerSpace: HDR_SPACE,
154
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
155
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
156
+ footerMark: BIT_MARK, gap: GAP,
157
+ data: data.subarray(0, SECTION_LEN), msbFirst: false,
158
+ });
159
+ for (let i = 0; i < s1.length; i++)
160
+ result.push(s1[i]);
161
+ // Section 2 (bytes 8–15) — no header, footer = FOOTER_MARK
162
+ const s2 = (0, encode_js_1.sendGenericBytes)({
163
+ headerMark: 0, headerSpace: 0,
164
+ oneMark: BIT_MARK, oneSpace: ONE_SPACE,
165
+ zeroMark: BIT_MARK, zeroSpace: ZERO_SPACE,
166
+ footerMark: FOOTER_MARK, gap: GAP,
167
+ data: data.subarray(SECTION_LEN), msbFirst: false,
168
+ });
169
+ for (let i = 0; i < s2.length; i++)
170
+ result.push(s2[i]);
171
+ }
172
+ return result;
173
+ }
174
+ // ---------------------------------------------------------------------------
175
+ // Decode API
176
+ // ---------------------------------------------------------------------------
177
+ /**
178
+ * Try to skip the leader section (2x mark/space pairs).
179
+ * Returns the new offset past the leader, or the original offset if no leader.
180
+ */
181
+ function skipLeader(timings, offset) {
182
+ let pos = offset;
183
+ // Leader is 2x (LDR_MARK + LDR_SPACE)
184
+ for (let i = 0; i < 2; i++) {
185
+ if (pos + 1 >= timings.length)
186
+ return offset;
187
+ if (!(0, decode_js_1.matchMark)(timings[pos], LDR_MARK))
188
+ return offset;
189
+ if (!(0, decode_js_1.matchSpace)(timings[pos + 1], LDR_SPACE))
190
+ return offset;
191
+ pos += 2;
192
+ }
193
+ return pos;
194
+ }
195
+ /**
196
+ * Decode raw IR timings as a Daikin128 message.
197
+ *
198
+ * The leader preamble (2x mark/space) is optional — hardware captures often
199
+ * miss it.
200
+ *
201
+ * @param timings Raw mark/space timing array in microseconds.
202
+ * @param offset Starting index in the timings array (default 0).
203
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
204
+ */
205
+ function decodeDaikin128(timings, offset = 0, headerOptional = false) {
206
+ // Skip leader if present.
207
+ let pos = skipLeader(timings, offset);
208
+ // Section 1 (bytes 0–7): header + 8 bytes + footer (BIT_MARK + GAP).
209
+ const s1 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION_LEN, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
210
+ headerOptional);
211
+ if (!s1)
212
+ return null;
213
+ pos += s1.used;
214
+ // Section 2 (bytes 8–15): no header + 8 bytes + footer (FOOTER_MARK + GAP).
215
+ const s2 = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, SECTION_LEN, 0, 0, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, FOOTER_MARK, GAP, true, undefined, undefined, false);
216
+ if (!s2)
217
+ return null;
218
+ // Concatenate sections into one 16-byte array.
219
+ const raw = new Uint8Array(STATE_LENGTH);
220
+ raw.set(s1.data, 0);
221
+ raw.set(s2.data, SECTION_LEN);
222
+ // Validate checksums.
223
+ // Section 1: sumNibbles(bytes 0–6, init=lower nibble of byte 7) & 0x0F === upper nibble of byte 7
224
+ const expectedSum1 = (0, encode_js_1.sumNibbles)(raw, 0, SECTION_LEN - 1, raw[7] & 0x0f) & 0x0f;
225
+ if (((raw[7] >> 4) & 0x0f) !== expectedSum1)
226
+ return null;
227
+ // Section 2: sumNibbles(bytes 8–14) === byte 15
228
+ const expectedSum2 = (0, encode_js_1.sumNibbles)(raw, SECTION_LEN, SECTION_LEN - 1);
229
+ if (raw[15] !== expectedSum2)
230
+ return null;
231
+ // Extract state from byte/bit positions.
232
+ const mode = (raw[1] & 0x0f);
233
+ const fan = ((raw[1] >> 4) & 0x0f);
234
+ // Clock: byte 2 = minutes BCD, byte 3 = hours BCD
235
+ const clockMins = (0, encode_js_1.bcdToUint8)(raw[2]);
236
+ const clockHours = (0, encode_js_1.bcdToUint8)(raw[3]);
237
+ const clock = clockHours * 60 + clockMins;
238
+ // On timer (byte 4): bits 0–5 = hours BCD, bit 6 = half-hour, bit 7 = enabled
239
+ const onTimerHours = (0, encode_js_1.bcdToUint8)(raw[4] & 0x3f);
240
+ const onTimerHalf = !!(raw[4] & (1 << 6));
241
+ const onTimerEnabled = !!(raw[4] & (1 << 7));
242
+ const onTime = onTimerHours * 60 + (onTimerHalf ? 30 : 0);
243
+ // Off timer (byte 5): bits 0–5 = hours BCD, bit 6 = half-hour, bit 7 = enabled
244
+ const offTimerHours = (0, encode_js_1.bcdToUint8)(raw[5] & 0x3f);
245
+ const offTimerHalf = !!(raw[5] & (1 << 6));
246
+ const offTimerEnabled = !!(raw[5] & (1 << 7));
247
+ const offTime = offTimerHours * 60 + (offTimerHalf ? 30 : 0);
248
+ // Temp (byte 6, BCD)
249
+ const temp = (0, encode_js_1.bcdToUint8)(raw[6]);
250
+ return {
251
+ power: !!(raw[7] & (1 << 3)),
252
+ temp,
253
+ mode,
254
+ fan,
255
+ swingVertical: !!(raw[7] & (1 << 0)),
256
+ sleep: !!(raw[7] & (1 << 1)),
257
+ econo: !!(raw[9] & (1 << 2)),
258
+ ceiling: !!(raw[9] & (1 << 0)),
259
+ wall: !!(raw[9] & (1 << 3)),
260
+ clock,
261
+ onTimerEnabled,
262
+ onTime,
263
+ offTimerEnabled,
264
+ offTime,
265
+ };
266
+ }
267
+ //# sourceMappingURL=daikin128.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin128.js","sourceRoot":"","sources":["../../../src/protocols/daikin128.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Daikin 152-bit (19-byte) IR protocol encoder.
3
+ *
4
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
5
+ */
6
+ import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
7
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
8
+ export type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
9
+ export interface Daikin152State {
10
+ power?: boolean;
11
+ /** Temperature in °C (10–32). Ignored in Fan/Dry modes. */
12
+ temp?: number;
13
+ mode?: DaikinModeValue;
14
+ /** Fan speed: 1–5, or DaikinFan.Auto / DaikinFan.Quiet. */
15
+ fan?: DaikinFanValue;
16
+ swingVertical?: boolean;
17
+ quiet?: boolean;
18
+ powerful?: boolean;
19
+ econo?: boolean;
20
+ sensor?: boolean;
21
+ comfort?: boolean;
22
+ }
23
+ /**
24
+ * Build the raw 19-byte Daikin152 state from a state object.
25
+ */
26
+ export declare function buildDaikin152Raw(state: Daikin152State): Uint8Array;
27
+ /**
28
+ * Encode a Daikin152 AC state into raw IR timings.
29
+ */
30
+ export declare function sendDaikin152(state: Daikin152State, repeat?: number): number[];
31
+ /**
32
+ * Encode a raw 19-byte Daikin152 state into IR timings.
33
+ *
34
+ * Matches IRremoteESP8266 `IRsend::sendDaikin152`.
35
+ */
36
+ export declare function encodeDaikin152Raw(data: Uint8Array, repeat?: number): number[];
37
+ /**
38
+ * Decode raw IR timings as a Daikin152 message.
39
+ *
40
+ * The 5-bit leader preamble is optional — hardware captures often miss it.
41
+ *
42
+ * @param timings Raw mark/space timing array in microseconds.
43
+ * @param offset Starting index in the timings array (default 0).
44
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
45
+ */
46
+ export declare function decodeDaikin152(timings: number[], offset?: number, headerOptional?: boolean): Daikin152State | null;
47
+ //# sourceMappingURL=daikin152.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin152.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin152.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqB1E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmCD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAwFnE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAGzE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAqCzE;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CA2CvB"}
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ /**
3
+ * Daikin 152-bit (19-byte) IR protocol encoder.
4
+ *
5
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp` / `ir_Daikin.h`.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.DaikinFan = exports.DaikinMode = void 0;
9
+ exports.buildDaikin152Raw = buildDaikin152Raw;
10
+ exports.sendDaikin152 = sendDaikin152;
11
+ exports.encodeDaikin152Raw = encodeDaikin152Raw;
12
+ exports.decodeDaikin152 = decodeDaikin152;
13
+ const encode_js_1 = require("../encode.js");
14
+ const decode_js_1 = require("../decode.js");
15
+ const daikin_common_js_1 = require("./daikin_common.js");
16
+ var daikin_common_js_2 = require("./daikin_common.js");
17
+ Object.defineProperty(exports, "DaikinMode", { enumerable: true, get: function () { return daikin_common_js_2.DaikinMode; } });
18
+ Object.defineProperty(exports, "DaikinFan", { enumerable: true, get: function () { return daikin_common_js_2.DaikinFan; } });
19
+ // ---------------------------------------------------------------------------
20
+ // Timing constants
21
+ // ---------------------------------------------------------------------------
22
+ const HDR_MARK = 3492;
23
+ const HDR_SPACE = 1718;
24
+ const BIT_MARK = 433;
25
+ const ONE_SPACE = 1529;
26
+ const ZERO_SPACE = 433; // kDaikin152ZeroSpace = kDaikin152BitMark
27
+ const GAP = 25182;
28
+ const LEADER_BITS = 5;
29
+ const STATE_LENGTH = 19;
30
+ const FAN_TEMP = 0x60; // 96 — special temp for fan-only mode
31
+ const DRY_TEMP = daikin_common_js_1.DAIKIN2_MIN_COOL_TEMP; // 18
32
+ // ---------------------------------------------------------------------------
33
+ // Build raw byte array
34
+ // ---------------------------------------------------------------------------
35
+ function defaultState() {
36
+ const raw = new Uint8Array(STATE_LENGTH);
37
+ raw[0] = 0x11;
38
+ raw[1] = 0xda;
39
+ raw[2] = 0x27;
40
+ // bytes 3–14 are 0x00
41
+ raw[15] = 0xc5;
42
+ // bytes 16–17 are 0x00
43
+ // byte 18 = checksum (set later)
44
+ return raw;
45
+ }
46
+ // Bit manipulation helpers for byte arrays
47
+ function setBit(raw, byteIdx, bitIdx, on) {
48
+ if (on)
49
+ raw[byteIdx] = raw[byteIdx] | (1 << bitIdx);
50
+ else
51
+ raw[byteIdx] = raw[byteIdx] & ~(1 << bitIdx);
52
+ }
53
+ function setBitsRange(raw, byteIdx, bitOffset, size, value) {
54
+ const mask = ((1 << size) - 1) << bitOffset;
55
+ raw[byteIdx] = (raw[byteIdx] & ~mask) | ((value << bitOffset) & mask);
56
+ }
57
+ /**
58
+ * Build the raw 19-byte Daikin152 state from a state object.
59
+ */
60
+ function buildDaikin152Raw(state) {
61
+ const raw = defaultState();
62
+ // --- Mode (byte 5, bits 4–6) ---
63
+ let mode = state.mode ?? daikin_common_js_1.DaikinMode.Auto;
64
+ switch (mode) {
65
+ case daikin_common_js_1.DaikinMode.Auto:
66
+ case daikin_common_js_1.DaikinMode.Cool:
67
+ case daikin_common_js_1.DaikinMode.Heat:
68
+ case daikin_common_js_1.DaikinMode.Dry:
69
+ case daikin_common_js_1.DaikinMode.Fan:
70
+ break;
71
+ default:
72
+ mode = daikin_common_js_1.DaikinMode.Auto;
73
+ }
74
+ setBitsRange(raw, 5, 4, 3, mode);
75
+ // --- Temp (byte 6, bits 1–7) ---
76
+ // C++ behaviour: setMode() sets a mode-specific default temp for Fan/Dry,
77
+ // then setTemp() overrides if the caller provides one.
78
+ let temp;
79
+ if (state.temp !== undefined) {
80
+ // Caller provided temp — apply same logic as C++ setTemp()
81
+ if (state.temp === FAN_TEMP) {
82
+ temp = FAN_TEMP; // Special fan-only temp passthrough
83
+ }
84
+ else {
85
+ const minTemp = mode === daikin_common_js_1.DaikinMode.Heat ? daikin_common_js_1.DAIKIN_MIN_TEMP : daikin_common_js_1.DAIKIN2_MIN_COOL_TEMP;
86
+ temp = Math.min(Math.max(state.temp, minTemp), daikin_common_js_1.DAIKIN_MAX_TEMP);
87
+ }
88
+ }
89
+ else {
90
+ // No temp provided — use mode-specific default
91
+ if (mode === daikin_common_js_1.DaikinMode.Fan)
92
+ temp = FAN_TEMP;
93
+ else if (mode === daikin_common_js_1.DaikinMode.Dry)
94
+ temp = DRY_TEMP;
95
+ else
96
+ temp = 25;
97
+ }
98
+ setBitsRange(raw, 6, 1, 7, temp);
99
+ // --- Fan (byte 8, bits 4–7) ---
100
+ let fan;
101
+ const fanInput = state.fan ?? daikin_common_js_1.DaikinFan.Auto;
102
+ if (fanInput === daikin_common_js_1.DaikinFan.Quiet || fanInput === daikin_common_js_1.DaikinFan.Auto) {
103
+ fan = fanInput;
104
+ }
105
+ else if (fanInput < 1 || fanInput > 5) {
106
+ fan = daikin_common_js_1.DaikinFan.Auto;
107
+ }
108
+ else {
109
+ fan = fanInput + 2; // Internal encoding: speed + 2
110
+ }
111
+ setBitsRange(raw, 8, 4, 4, fan);
112
+ // --- SwingV (byte 8, bits 0–3) ---
113
+ const swingV = state.swingVertical ?? false;
114
+ setBitsRange(raw, 8, 0, 4, swingV ? daikin_common_js_1.DAIKIN_SWING_ON : daikin_common_js_1.DAIKIN_SWING_OFF);
115
+ // --- Power (byte 5, bit 0) ---
116
+ setBit(raw, 5, 0, state.power ?? false);
117
+ // --- Quiet, Powerful, Econo, Comfort with mutual exclusions ---
118
+ // Apply in same order as C++ class: quiet → powerful → econo → comfort
119
+ let quiet = state.quiet ?? false;
120
+ let powerful = state.powerful ?? false;
121
+ let econo = state.econo ?? false;
122
+ let comfort = state.comfort ?? false;
123
+ // Resolve mutual exclusions (same logic as C++ setters called in order)
124
+ if (quiet)
125
+ powerful = false;
126
+ if (powerful) {
127
+ quiet = false;
128
+ comfort = false;
129
+ econo = false;
130
+ }
131
+ if (econo)
132
+ powerful = false;
133
+ if (comfort) {
134
+ powerful = false;
135
+ // Comfort also forces fan=auto and swing=off
136
+ setBitsRange(raw, 8, 4, 4, daikin_common_js_1.DaikinFan.Auto);
137
+ setBitsRange(raw, 8, 0, 4, daikin_common_js_1.DAIKIN_SWING_OFF);
138
+ }
139
+ setBit(raw, 13, 5, quiet); // Byte 13, bit 5
140
+ setBit(raw, 13, 0, powerful); // Byte 13, bit 0
141
+ setBit(raw, 16, 2, econo); // Byte 16, bit 2
142
+ setBit(raw, 16, 1, comfort); // Byte 16, bit 1
143
+ setBit(raw, 16, 3, state.sensor ?? false); // Byte 16, bit 3
144
+ // --- Checksum (byte 18) ---
145
+ raw[18] = (0, encode_js_1.sumBytes)(raw, 0, STATE_LENGTH - 1);
146
+ return raw;
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Public API
150
+ // ---------------------------------------------------------------------------
151
+ /**
152
+ * Encode a Daikin152 AC state into raw IR timings.
153
+ */
154
+ function sendDaikin152(state, repeat = 0) {
155
+ const raw = buildDaikin152Raw(state);
156
+ return encodeDaikin152Raw(raw, repeat);
157
+ }
158
+ /**
159
+ * Encode a raw 19-byte Daikin152 state into IR timings.
160
+ *
161
+ * Matches IRremoteESP8266 `IRsend::sendDaikin152`.
162
+ */
163
+ function encodeDaikin152Raw(data, repeat = 0) {
164
+ const result = [];
165
+ for (let r = 0; r <= repeat; r++) {
166
+ // Leader: 5 bits of zero (no header)
167
+ const leader = (0, encode_js_1.sendGeneric)({
168
+ headerMark: 0,
169
+ headerSpace: 0,
170
+ oneMark: BIT_MARK,
171
+ oneSpace: ONE_SPACE,
172
+ zeroMark: BIT_MARK,
173
+ zeroSpace: ZERO_SPACE,
174
+ footerMark: BIT_MARK,
175
+ gap: GAP,
176
+ data: 0n,
177
+ nbits: LEADER_BITS,
178
+ msbFirst: false,
179
+ });
180
+ for (let i = 0; i < leader.length; i++)
181
+ result.push(leader[i]);
182
+ // Header + Data + Footer
183
+ const frame = (0, encode_js_1.sendGenericBytes)({
184
+ headerMark: HDR_MARK,
185
+ headerSpace: HDR_SPACE,
186
+ oneMark: BIT_MARK,
187
+ oneSpace: ONE_SPACE,
188
+ zeroMark: BIT_MARK,
189
+ zeroSpace: ZERO_SPACE,
190
+ footerMark: BIT_MARK,
191
+ gap: GAP,
192
+ data,
193
+ msbFirst: false,
194
+ });
195
+ for (let i = 0; i < frame.length; i++)
196
+ result.push(frame[i]);
197
+ }
198
+ return result;
199
+ }
200
+ // ---------------------------------------------------------------------------
201
+ // Decode API
202
+ // ---------------------------------------------------------------------------
203
+ /**
204
+ * Try to skip a leader section (e.g. 5 zero bits + footer + gap).
205
+ * Returns the new offset past the leader, or the original offset if no leader.
206
+ */
207
+ function skipLeader(timings, offset) {
208
+ const result = (0, decode_js_1.matchGeneric)(timings, offset, timings.length - offset, LEADER_BITS, 0, 0, // no header
209
+ BIT_MARK, ONE_SPACE, // oneMark, oneSpace
210
+ BIT_MARK, ZERO_SPACE, // zeroMark, zeroSpace
211
+ BIT_MARK, GAP, // footerMark, gap
212
+ true);
213
+ return result ? offset + result.used : offset;
214
+ }
215
+ /**
216
+ * Decode raw IR timings as a Daikin152 message.
217
+ *
218
+ * The 5-bit leader preamble is optional — hardware captures often miss it.
219
+ *
220
+ * @param timings Raw mark/space timing array in microseconds.
221
+ * @param offset Starting index in the timings array (default 0).
222
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
223
+ */
224
+ function decodeDaikin152(timings, offset = 0, headerOptional = false) {
225
+ // Skip leader if present.
226
+ let pos = skipLeader(timings, offset);
227
+ // Match main frame: header + 19 bytes (LSB-first) + footer.
228
+ const frame = (0, decode_js_1.matchGenericBytes)(timings, pos, timings.length - pos, STATE_LENGTH, HDR_MARK, HDR_SPACE, BIT_MARK, ONE_SPACE, BIT_MARK, ZERO_SPACE, BIT_MARK, GAP, true, undefined, undefined, false, // atLeast, tol, excess, msbFirst=false
229
+ headerOptional);
230
+ if (!frame)
231
+ return null;
232
+ const raw = frame.data;
233
+ // Validate checksum.
234
+ if (raw[18] !== (0, encode_js_1.sumBytes)(raw, 0, STATE_LENGTH - 1))
235
+ return null;
236
+ // Extract state from byte/bit positions.
237
+ const mode = ((raw[5] >> 4) & 0b111);
238
+ const temp = (raw[6] >> 1) & 0x7F;
239
+ const fanInternal = (raw[8] >> 4) & 0x0F;
240
+ const fan = fanInternal === daikin_common_js_1.DaikinFan.Auto || fanInternal === daikin_common_js_1.DaikinFan.Quiet
241
+ ? fanInternal
242
+ : (fanInternal - 2);
243
+ return {
244
+ power: !!(raw[5] & 0x01),
245
+ temp,
246
+ mode,
247
+ fan,
248
+ swingVertical: (raw[8] & 0x0F) === daikin_common_js_1.DAIKIN_SWING_ON,
249
+ quiet: !!(raw[13] & (1 << 5)),
250
+ powerful: !!(raw[13] & (1 << 0)),
251
+ econo: !!(raw[16] & (1 << 2)),
252
+ comfort: !!(raw[16] & (1 << 1)),
253
+ sensor: !!(raw[16] & (1 << 3)),
254
+ };
255
+ }
256
+ //# sourceMappingURL=daikin152.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin152.js","sourceRoot":"","sources":["../../../src/protocols/daikin152.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Daikin 160-bit (20-byte) IR protocol encoder.
3
+ *
4
+ * 2 sections: bytes 0–6 (7 bytes) + bytes 7–19 (13 bytes).
5
+ * Ported from IRremoteESP8266 `ir_Daikin.cpp`.
6
+ */
7
+ import type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
8
+ export { DaikinMode, DaikinFan } from "./daikin_common.js";
9
+ export type { DaikinModeValue, DaikinFanValue } from "./daikin_common.js";
10
+ export declare const Daikin160SwingV: {
11
+ readonly Lowest: 1;
12
+ readonly Low: 2;
13
+ readonly Middle: 3;
14
+ readonly High: 4;
15
+ readonly Highest: 5;
16
+ readonly Auto: 15;
17
+ };
18
+ export type Daikin160SwingVValue = (typeof Daikin160SwingV)[keyof typeof Daikin160SwingV];
19
+ export interface Daikin160State {
20
+ power?: boolean;
21
+ temp?: number;
22
+ mode?: DaikinModeValue;
23
+ fan?: DaikinFanValue;
24
+ swingVertical?: Daikin160SwingVValue;
25
+ }
26
+ export declare function buildDaikin160Raw(state: Daikin160State): Uint8Array;
27
+ export declare function sendDaikin160(state: Daikin160State, repeat?: number): number[];
28
+ export declare function encodeDaikin160Raw(data: Uint8Array, repeat?: number): number[];
29
+ /**
30
+ * Decode raw IR timings as a Daikin160 message.
31
+ *
32
+ * @param timings Raw mark/space timing array in microseconds.
33
+ * @param offset Starting index in the timings array (default 0).
34
+ * @returns Decoded state (same shape as encode input), or null on mismatch.
35
+ */
36
+ export declare function decodeDaikin160(timings: number[], offset?: number, headerOptional?: boolean): Daikin160State | null;
37
+ //# sourceMappingURL=daikin160.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daikin160.d.ts","sourceRoot":"","sources":["../../../src/protocols/daikin160.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgB1E,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAM1F,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC;AAmCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAiCnE;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,EAAE,CAgBzE;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAU,EAClB,cAAc,GAAE,OAAe,GAC9B,cAAc,GAAG,IAAI,CAwDvB"}