react-native-ble-manager 12.4.2 → 12.4.4

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.
@@ -1,6 +1,6 @@
1
1
  /**
2
- * android states: https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#EXTRA_STATE
3
- * ios states: https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerstate
2
+ * Android states: https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#EXTRA_STATE
3
+ * iOS states: https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerstate
4
4
  * */
5
5
  export declare enum BleState {
6
6
  /**
@@ -19,11 +19,11 @@ export declare enum BleState {
19
19
  On = "on",
20
20
  Off = "off",
21
21
  /**
22
- * [android only]
22
+ * [Android only]
23
23
  */
24
24
  TurningOn = "turning_on",
25
25
  /**
26
- * [android only]
26
+ * [Android only]
27
27
  */
28
28
  TurningOff = "turning_off"
29
29
  }
@@ -57,59 +57,82 @@ export interface CustomAdvertisingData {
57
57
  }
58
58
  export interface StartOptions {
59
59
  /**
60
- * [iOS only]
60
+ * [iOS only] Show or hide the alert if the bluetooth is turned off during initialization
61
61
  */
62
62
  showAlert?: boolean;
63
63
  /**
64
- * [iOS only]
64
+ * [iOS only] Unique key to use for CoreBluetooth state restoration
65
65
  */
66
66
  restoreIdentifierKey?: string;
67
67
  /**
68
- * [iOS only]
68
+ * [iOS only] Unique key to use for a queue identifier on which CoreBluetooth events will be dispatched
69
69
  */
70
70
  queueIdentifierKey?: string;
71
71
  /**
72
- * [android only]
72
+ * [Android only] Force to use the LegacyScanManager
73
73
  */
74
74
  forceLegacy?: boolean;
75
75
  }
76
76
  export interface ConnectOptions {
77
77
  /**
78
- * [android only]
78
+ * [Android only] whether to directly connect to the remote device (false) or to automatically connect as soon as the remote device becomes available (true) ([`Android doc`](<https://developer.android.com/reference/android/bluetooth/BluetoothDevice?hl=en#connectGatt(android.content.Context,%20boolean,%20android.bluetooth.BluetoothGattCallback,%20int,%20int)>))
79
79
  */
80
80
  autoconnect?: boolean;
81
81
  /**
82
- * [android only]
82
+ * [Android only] corresponding to the preferred phy channel ([`Android doc`](<https://developer.android.com/reference/android/bluetooth/BluetoothDevice?hl=en#connectGatt(android.content.Context,%20boolean,%20android.bluetooth.BluetoothGattCallback,%20int,%20int)>))
83
83
  */
84
84
  phy?: BleScanPhyMode;
85
85
  }
86
86
  /**
87
- * [android only]
87
+ * [Android only]
88
88
  * https://developer.android.com/reference/android/bluetooth/le/ScanSettings
89
89
  */
90
90
  export interface ScanOptions {
91
+ /**
92
+ * The UUIDs of the services to look for.
93
+ */
91
94
  serviceUUIDs?: string[];
95
+ /**
96
+ * The amount of seconds to scan. If not set or set to `0`, scans until `stopScan()` is called.
97
+ */
92
98
  seconds?: number;
93
99
  /**
94
- * iOS only: whether to allow duplicate peripheral during a scan
100
+ * In Android this is a ScanFilter, if present it restricts scan results to devices with a specific advertising name.
101
+ * This is a whole word match, not a partial search.
102
+ * Use with caution, it's behavior is tricky and seems to be the following:
103
+ * if `callbackType` is set to `AllMatches`, only the completeLocalName will be used for filtering.
104
+ * if `callbackType` is set to `FirstMatch`, the shortenedLocalName will be used for filtering.
105
+ * https://developer.android.com/reference/android/bluetooth/le/ScanFilter.Builder#setDeviceName(java.lang.String)
106
+ *
107
+ * In iOS, this is a whole word match, not a partial search.
108
+ */
109
+ exactAdvertisingName?: string | string[];
110
+ /**
111
+ * [iOS only] whether to allow duplicate peripheral during a scan
95
112
  */
96
113
  allowDuplicates?: boolean;
97
114
  /**
98
- * This will only works if a ScanFilter is active. Otherwise, may not retrieve any result.
115
+ * [Android only] This will only work if a ScanFilter is active. Otherwise, may not retrieve any result.
99
116
  * See https://developer.android.com/reference/android/bluetooth/le/ScanSettings#MATCH_NUM_FEW_ADVERTISEMENT.
100
117
  * */
101
118
  numberOfMatches?: BleScanMatchCount;
119
+ /**
120
+ * [Android only] Defaults to `aggressive`.
121
+ */
102
122
  matchMode?: BleScanMatchMode;
103
123
  /**
104
- * This will only works if a ScanFilter is active. Otherwise, may not retrieve any result.
124
+ * [Android only] This will only work if a ScanFilter is active. Otherwise, may not retrieve any result.
105
125
  * See https://developer.android.com/reference/android/bluetooth/le/ScanSettings#CALLBACK_TYPE_FIRST_MATCH.
106
126
  * Also read [this issue](https://github.com/dariuszseweryn/RxAndroidBle/issues/561#issuecomment-532295346) for a deeper understanding
107
- * of the very brittle stability of ScanSettings on android.
127
+ * of the very brittle stability of ScanSettings on Android. Defaults to `allMatches`.
108
128
  * */
109
129
  callbackType?: BleScanCallbackType;
130
+ /**
131
+ * [Android only] Defaults to `lowPower`.
132
+ */
110
133
  scanMode?: BleScanMode;
111
134
  /**
112
- * This is supposed to push results after a certain delay.
135
+ * [Android only] This is supposed to push results after a certain delay.
113
136
  * In practice it is tricky, use with caution.
114
137
  * Do not set something below 5000ms as it will wait that long anyway before pushing the first results,
115
138
  * or on some phones it will ignore that setting and behave just like it was set to 0.
@@ -118,29 +141,20 @@ export interface ScanOptions {
118
141
  */
119
142
  reportDelay?: number;
120
143
  /**
121
- * Does not work in conjunction with legacy scans. Setting an unsupported PHY will result in a failure to scan,
144
+ * [Android only] Does not work in conjunction with legacy scans. Setting an unsupported PHY will result in a failure to scan,
122
145
  * use with caution.
123
146
  * https://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder#setPhy(int)
124
147
  */
125
148
  phy?: BleScanPhyMode;
126
149
  /**
127
- * true by default for compatibility with older apps.
150
+ * [Android only] true by default for compatibility with older apps.
128
151
  * In that mode, scan will only retrieve advertisements data as specified by BLE 4.2 and below.
129
152
  * Change this if you want to benefit from the extended BLE 5 advertisement spec.
130
153
  * https://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder#setLegacy(boolean)
131
154
  */
132
155
  legacy?: boolean;
133
156
  /**
134
- * an android ScanFilter, used if present to restrict scan results to devices with a specific advertising name.
135
- * This is a whole word match, not a partial search.
136
- * Use with caution, it's behavior is tricky and seems to be the following:
137
- * if `callbackType` is set to `AllMatches`, only the completeLocalName will be used for filtering.
138
- * if `callbackType` is set to `FirstMatch`, the shortenedLocalName will be used for filtering.
139
- * https://developer.android.com/reference/android/bluetooth/le/ScanFilter.Builder#setDeviceName(java.lang.String)
140
- */
141
- exactAdvertisingName?: string | string[];
142
- /**
143
- * Android only. Filters scan results by manufacturer id and data.
157
+ * [Android only] Filters scan results by manufacturer id and data.
144
158
  * `manufacturerId` usually matches the company id, can be given as a hex, e.g. 0xe4f7.
145
159
  * `manufacturerData` and `manufacturerDataMask` must have the same length. For any bit in the mask, set it to 1 if
146
160
  * it needs to match the one in manufacturer data, otherwise set it to 0.
@@ -151,13 +165,6 @@ export interface ScanOptions {
151
165
  manufacturerData?: number[];
152
166
  manufacturerDataMask?: number[];
153
167
  };
154
- /**
155
- * When using compaion mode, only associate single peripheral.
156
- *
157
- * See: https://developer.android.com/reference/android/companion/AssociationRequest.Builder#setSingleDevice(boolean)
158
- */
159
- single?: boolean;
160
- companion?: boolean;
161
168
  /**
162
169
  * [Android O+] Deliver scan results using a PendingIntent instead of the default callback.
163
170
  */
@@ -165,12 +172,12 @@ export interface ScanOptions {
165
172
  }
166
173
  export interface CompanionScanOptions {
167
174
  /**
168
- * Scan only for a single peripheral.
175
+ * Scan only for a single peripheral. See Android's `AssociationRequest.Builder.setSingleDevice`.
169
176
  */
170
177
  single?: boolean;
171
178
  }
172
179
  /**
173
- * [android only]
180
+ * [Android only]
174
181
  */
175
182
  export declare enum BleScanMode {
176
183
  Opportunistic = -1,
@@ -179,14 +186,14 @@ export declare enum BleScanMode {
179
186
  LowLatency = 2
180
187
  }
181
188
  /**
182
- * [android only]
189
+ * [Android only]
183
190
  */
184
191
  export declare enum BleScanMatchMode {
185
192
  Aggressive = 1,
186
193
  Sticky = 2
187
194
  }
188
195
  /**
189
- * [android only]
196
+ * [Android only]
190
197
  */
191
198
  export declare enum BleScanCallbackType {
192
199
  AllMatches = 1,
@@ -194,7 +201,7 @@ export declare enum BleScanCallbackType {
194
201
  MatchLost = 4
195
202
  }
196
203
  /**
197
- * [android only]
204
+ * [Android only]
198
205
  */
199
206
  export declare enum BleScanMatchCount {
200
207
  OneAdvertisement = 1,
@@ -202,7 +209,7 @@ export declare enum BleScanMatchCount {
202
209
  MaxAdvertisements = 3
203
210
  }
204
211
  /**
205
- * [android only]
212
+ * [Android only]
206
213
  */
207
214
  export declare enum BleScanPhyMode {
208
215
  LE_1M = 1,
@@ -211,7 +218,7 @@ export declare enum BleScanPhyMode {
211
218
  ALL_SUPPORTED = 255
212
219
  }
213
220
  /**
214
- * [android only API 21+]
221
+ * [Android only API 21+]
215
222
  */
216
223
  export declare enum ConnectionPriority {
217
224
  balanced = 0,
@@ -250,33 +257,18 @@ export interface PeripheralInfo extends Peripheral {
250
257
  characteristics?: Characteristic[];
251
258
  services?: Service[];
252
259
  }
253
- export declare enum BleEventType {
254
- BleManagerDidUpdateState = "BleManagerDidUpdateState",
255
- BleManagerStopScan = "BleManagerStopScan",
256
- BleManagerDiscoverPeripheral = "BleManagerDiscoverPeripheral",
257
- BleManagerDidUpdateValueForCharacteristic = "BleManagerDidUpdateValueForCharacteristic",
258
- BleManagerConnectPeripheral = "BleManagerConnectPeripheral",
259
- BleManagerDisconnectPeripheral = "BleManagerDisconnectPeripheral",
260
- /**
261
- * [Android only]
262
- */
263
- BleManagerPeripheralDidBond = "BleManagerPeripheralDidBond",
264
- /**
265
- * [iOS only]
266
- */
267
- BleManagerCentralManagerWillRestoreState = "BleManagerCentralManagerWillRestoreState",
268
- /**
269
- * [iOS only]
270
- */
271
- BleManagerDidUpdateNotificationStateFor = "BleManagerDidUpdateNotificationStateFor"
272
- }
260
+ export type EventCallback<T> = (event: T) => void | Promise<void>;
273
261
  export interface BleStopScanEvent {
274
262
  /**
275
- * [iOS only]
263
+ * [iOS] The reason for stopping the scan. Error code 10 is used for timeouts, 0 covers everything else.
264
+ * [Android] The reason for stopping the scan (<https://developer.android.com/reference/android/bluetooth/le/ScanCallback#constants_1>). Error code 10 is used for timeouts
276
265
  */
277
266
  status?: number;
278
267
  }
279
268
  export interface BleManagerDidUpdateStateEvent {
269
+ /**
270
+ * The new BLE state
271
+ */
280
272
  state: BleState;
281
273
  }
282
274
  export interface BleConnectPeripheralEvent {
@@ -285,7 +277,9 @@ export interface BleConnectPeripheralEvent {
285
277
  */
286
278
  readonly peripheral: string;
287
279
  /**
288
- * [android only]
280
+ * [Android only]
281
+ *
282
+ * Connect reason.
289
283
  */
290
284
  readonly status?: number;
291
285
  }
@@ -300,7 +294,7 @@ export interface BleDisconnectPeripheralEvent {
300
294
  */
301
295
  readonly peripheral: string;
302
296
  /**
303
- * [android only] disconnect reason.
297
+ * [Android only] disconnect reason.
304
298
  */
305
299
  readonly status?: number;
306
300
  /**
package/dist/cjs/types.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BleEventType = exports.ConnectionPriority = exports.BleScanPhyMode = exports.BleScanMatchCount = exports.BleScanCallbackType = exports.BleScanMatchMode = exports.BleScanMode = exports.BleState = void 0;
3
+ exports.ConnectionPriority = exports.BleScanPhyMode = exports.BleScanMatchCount = exports.BleScanCallbackType = exports.BleScanMatchMode = exports.BleScanMode = exports.BleState = void 0;
4
4
  /**
5
- * android states: https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#EXTRA_STATE
6
- * ios states: https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerstate
5
+ * Android states: https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#EXTRA_STATE
6
+ * iOS states: https://developer.apple.com/documentation/corebluetooth/cbcentralmanagerstate
7
7
  * */
8
8
  var BleState;
9
9
  (function (BleState) {
@@ -23,16 +23,16 @@ var BleState;
23
23
  BleState["On"] = "on";
24
24
  BleState["Off"] = "off";
25
25
  /**
26
- * [android only]
26
+ * [Android only]
27
27
  */
28
28
  BleState["TurningOn"] = "turning_on";
29
29
  /**
30
- * [android only]
30
+ * [Android only]
31
31
  */
32
32
  BleState["TurningOff"] = "turning_off";
33
33
  })(BleState || (exports.BleState = BleState = {}));
34
34
  /**
35
- * [android only]
35
+ * [Android only]
36
36
  */
37
37
  var BleScanMode;
38
38
  (function (BleScanMode) {
@@ -42,7 +42,7 @@ var BleScanMode;
42
42
  BleScanMode[BleScanMode["LowLatency"] = 2] = "LowLatency";
43
43
  })(BleScanMode || (exports.BleScanMode = BleScanMode = {}));
44
44
  /**
45
- * [android only]
45
+ * [Android only]
46
46
  */
47
47
  var BleScanMatchMode;
48
48
  (function (BleScanMatchMode) {
@@ -50,7 +50,7 @@ var BleScanMatchMode;
50
50
  BleScanMatchMode[BleScanMatchMode["Sticky"] = 2] = "Sticky";
51
51
  })(BleScanMatchMode || (exports.BleScanMatchMode = BleScanMatchMode = {}));
52
52
  /**
53
- * [android only]
53
+ * [Android only]
54
54
  */
55
55
  var BleScanCallbackType;
56
56
  (function (BleScanCallbackType) {
@@ -59,7 +59,7 @@ var BleScanCallbackType;
59
59
  BleScanCallbackType[BleScanCallbackType["MatchLost"] = 4] = "MatchLost";
60
60
  })(BleScanCallbackType || (exports.BleScanCallbackType = BleScanCallbackType = {}));
61
61
  /**
62
- * [android only]
62
+ * [Android only]
63
63
  */
64
64
  var BleScanMatchCount;
65
65
  (function (BleScanMatchCount) {
@@ -68,7 +68,7 @@ var BleScanMatchCount;
68
68
  BleScanMatchCount[BleScanMatchCount["MaxAdvertisements"] = 3] = "MaxAdvertisements";
69
69
  })(BleScanMatchCount || (exports.BleScanMatchCount = BleScanMatchCount = {}));
70
70
  /**
71
- * [android only]
71
+ * [Android only]
72
72
  */
73
73
  var BleScanPhyMode;
74
74
  (function (BleScanPhyMode) {
@@ -78,7 +78,7 @@ var BleScanPhyMode;
78
78
  BleScanPhyMode[BleScanPhyMode["ALL_SUPPORTED"] = 255] = "ALL_SUPPORTED";
79
79
  })(BleScanPhyMode || (exports.BleScanPhyMode = BleScanPhyMode = {}));
80
80
  /**
81
- * [android only API 21+]
81
+ * [Android only API 21+]
82
82
  */
83
83
  var ConnectionPriority;
84
84
  (function (ConnectionPriority) {
@@ -86,25 +86,4 @@ var ConnectionPriority;
86
86
  ConnectionPriority[ConnectionPriority["high"] = 1] = "high";
87
87
  ConnectionPriority[ConnectionPriority["low"] = 2] = "low";
88
88
  })(ConnectionPriority || (exports.ConnectionPriority = ConnectionPriority = {}));
89
- var BleEventType;
90
- (function (BleEventType) {
91
- BleEventType["BleManagerDidUpdateState"] = "BleManagerDidUpdateState";
92
- BleEventType["BleManagerStopScan"] = "BleManagerStopScan";
93
- BleEventType["BleManagerDiscoverPeripheral"] = "BleManagerDiscoverPeripheral";
94
- BleEventType["BleManagerDidUpdateValueForCharacteristic"] = "BleManagerDidUpdateValueForCharacteristic";
95
- BleEventType["BleManagerConnectPeripheral"] = "BleManagerConnectPeripheral";
96
- BleEventType["BleManagerDisconnectPeripheral"] = "BleManagerDisconnectPeripheral";
97
- /**
98
- * [Android only]
99
- */
100
- BleEventType["BleManagerPeripheralDidBond"] = "BleManagerPeripheralDidBond";
101
- /**
102
- * [iOS only]
103
- */
104
- BleEventType["BleManagerCentralManagerWillRestoreState"] = "BleManagerCentralManagerWillRestoreState";
105
- /**
106
- * [iOS only]
107
- */
108
- BleEventType["BleManagerDidUpdateNotificationStateFor"] = "BleManagerDidUpdateNotificationStateFor";
109
- })(BleEventType || (exports.BleEventType = BleEventType = {}));
110
89
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAAA;;;KAGK;AACL,IAAY,QAwBX;AAxBD,WAAY,QAAQ;IAClB;;OAEG;IACH,+BAAmB,CAAA;IACnB;;OAEG;IACH,mCAAuB,CAAA;IACvB,uCAA2B,CAAA;IAC3B;;OAEG;IACH,yCAA6B,CAAA;IAC7B,qBAAS,CAAA;IACT,uBAAW,CAAA;IACX;;OAEG;IACH,oCAAwB,CAAA;IACxB;;OAEG;IACH,sCAA0B,CAAA;AAC5B,CAAC,EAxBW,QAAQ,wBAAR,QAAQ,QAwBnB;AAuJD;;GAEG;AACH,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,gEAAkB,CAAA;IAClB,qDAAY,CAAA;IACZ,qDAAY,CAAA;IACZ,yDAAc,CAAA;AAChB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED;;GAEG;AACH,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,mEAAc,CAAA;IACd,2DAAU,CAAA;AACZ,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAED;;GAEG;AACH,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,yEAAc,CAAA;IACd,yEAAc,CAAA;IACd,uEAAa,CAAA;AACf,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B;AAED;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,iFAAoB,CAAA;IACpB,mFAAqB,CAAA;IACrB,mFAAqB,CAAA;AACvB,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED;;GAEG;AACH,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,qDAAS,CAAA;IACT,qDAAS,CAAA;IACT,2DAAY,CAAA;IACZ,uEAAmB,CAAA;AACrB,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED;;GAEG;AACH,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,mEAAY,CAAA;IACZ,2DAAQ,CAAA;IACR,yDAAO,CAAA;AACT,CAAC,EAJW,kBAAkB,kCAAlB,kBAAkB,QAI7B;AAsCD,IAAY,YAmBX;AAnBD,WAAY,YAAY;IACtB,qEAAqD,CAAA;IACrD,yDAAyC,CAAA;IACzC,6EAA6D,CAAA;IAC7D,uGAAuF,CAAA;IACvF,2EAA2D,CAAA;IAC3D,iFAAiE,CAAA;IACjE;;OAEG;IACH,2EAA2D,CAAA;IAC3D;;OAEG;IACH,qGAAqF,CAAA;IACrF;;OAEG;IACH,mGAAmF,CAAA;AACrF,CAAC,EAnBW,YAAY,4BAAZ,YAAY,QAmBvB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAAA;;;KAGK;AACL,IAAY,QAwBX;AAxBD,WAAY,QAAQ;IAClB;;OAEG;IACH,+BAAmB,CAAA;IACnB;;OAEG;IACH,mCAAuB,CAAA;IACvB,uCAA2B,CAAA;IAC3B;;OAEG;IACH,yCAA6B,CAAA;IAC7B,qBAAS,CAAA;IACT,uBAAW,CAAA;IACX;;OAEG;IACH,oCAAwB,CAAA;IACxB;;OAEG;IACH,sCAA0B,CAAA;AAC5B,CAAC,EAxBW,QAAQ,wBAAR,QAAQ,QAwBnB;AA8JD;;GAEG;AACH,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,gEAAkB,CAAA;IAClB,qDAAY,CAAA;IACZ,qDAAY,CAAA;IACZ,yDAAc,CAAA;AAChB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED;;GAEG;AACH,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,mEAAc,CAAA;IACd,2DAAU,CAAA;AACZ,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAED;;GAEG;AACH,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,yEAAc,CAAA;IACd,yEAAc,CAAA;IACd,uEAAa,CAAA;AACf,CAAC,EAJW,mBAAmB,mCAAnB,mBAAmB,QAI9B;AAED;;GAEG;AACH,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,iFAAoB,CAAA;IACpB,mFAAqB,CAAA;IACrB,mFAAqB,CAAA;AACvB,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED;;GAEG;AACH,IAAY,cAKX;AALD,WAAY,cAAc;IACxB,qDAAS,CAAA;IACT,qDAAS,CAAA;IACT,2DAAY,CAAA;IACZ,uEAAmB,CAAA;AACrB,CAAC,EALW,cAAc,8BAAd,cAAc,QAKzB;AAED;;GAEG;AACH,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,mEAAY,CAAA;IACZ,2DAAQ,CAAA;IACR,yDAAO,CAAA;AACT,CAAC,EAJW,kBAAkB,kCAAlB,kBAAkB,QAI7B"}