@shapeshiftoss/hdwallet-keepkey-nodehid 0.11.0 → 1.20.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/{LICENSE → LICENSE.md} +0 -0
- package/dist/adapter.d.ts +27 -10
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +62 -0
- package/dist/adapter.js.map +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -520
- package/dist/index.js.map +1 -1
- package/dist/transport.d.ts +19 -24
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +85 -0
- package/dist/transport.js.map +1 -0
- package/dist/utils.d.ts +3 -2
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +6 -0
- package/dist/utils.js.map +1 -0
- package/package.json +9 -14
- package/dist/index.m.js +0 -514
- package/dist/index.m.js.map +0 -1
- package/dist/index.umd.js +0 -521
- package/dist/index.umd.js.map +0 -1
package/dist/index.umd.js
DELETED
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@shapeshiftoss/hdwallet-core'), require('@shapeshiftoss/hdwallet-keepkey'), require('bytebuffer'), require('crypto'), require('node-hid')) :
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', '@shapeshiftoss/hdwallet-core', '@shapeshiftoss/hdwallet-keepkey', 'bytebuffer', 'crypto', 'node-hid'], factory) :
|
|
4
|
-
(factory((global.keepkeyHID = {}),global.hdwalletCore,global.hdwalletKeepkey,global.bytebuffer,global.crypto,global.HID));
|
|
5
|
-
}(this, (function (exports,hdwalletCore,hdwalletKeepkey,ByteBuffer,crypto,HID) {
|
|
6
|
-
var ByteBuffer__default = 'default' in ByteBuffer ? ByteBuffer['default'] : ByteBuffer;
|
|
7
|
-
|
|
8
|
-
// A type of promise-like that resolves synchronously and supports only one observer
|
|
9
|
-
var _Pact =
|
|
10
|
-
/*#__PURE__*/
|
|
11
|
-
function () {
|
|
12
|
-
function _Pact() {}
|
|
13
|
-
|
|
14
|
-
_Pact.prototype.then = function (onFulfilled, onRejected) {
|
|
15
|
-
var result = new _Pact();
|
|
16
|
-
var state = this.s;
|
|
17
|
-
|
|
18
|
-
if (state) {
|
|
19
|
-
var callback = state & 1 ? onFulfilled : onRejected;
|
|
20
|
-
|
|
21
|
-
if (callback) {
|
|
22
|
-
try {
|
|
23
|
-
_settle(result, 1, callback(this.v));
|
|
24
|
-
} catch (e) {
|
|
25
|
-
_settle(result, 2, e);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return result;
|
|
29
|
-
} else {
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
this.o = function (_this) {
|
|
35
|
-
try {
|
|
36
|
-
var value = _this.v;
|
|
37
|
-
|
|
38
|
-
if (_this.s & 1) {
|
|
39
|
-
_settle(result, 1, onFulfilled ? onFulfilled(value) : value);
|
|
40
|
-
} else if (onRejected) {
|
|
41
|
-
_settle(result, 1, onRejected(value));
|
|
42
|
-
} else {
|
|
43
|
-
_settle(result, 2, value);
|
|
44
|
-
}
|
|
45
|
-
} catch (e) {
|
|
46
|
-
_settle(result, 2, e);
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
return result;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
return _Pact;
|
|
54
|
-
}(); // Settles a pact synchronously
|
|
55
|
-
|
|
56
|
-
function _settle(pact, state, value) {
|
|
57
|
-
if (!pact.s) {
|
|
58
|
-
if (value instanceof _Pact) {
|
|
59
|
-
if (value.s) {
|
|
60
|
-
if (state & 1) {
|
|
61
|
-
state = value.s;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
value = value.v;
|
|
65
|
-
} else {
|
|
66
|
-
value.o = _settle.bind(null, pact, state);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (value && value.then) {
|
|
72
|
-
value.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
pact.s = state;
|
|
77
|
-
pact.v = value;
|
|
78
|
-
var observer = pact.o;
|
|
79
|
-
|
|
80
|
-
if (observer) {
|
|
81
|
-
observer(pact);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
function _isSettledPact(thenable) {
|
|
86
|
-
return thenable instanceof _Pact && thenable.s & 1;
|
|
87
|
-
} // Converts argument to a function that always returns a Promise
|
|
88
|
-
|
|
89
|
-
function _forTo(array, body, check) {
|
|
90
|
-
var i = -1,
|
|
91
|
-
pact,
|
|
92
|
-
reject;
|
|
93
|
-
|
|
94
|
-
function _cycle(result) {
|
|
95
|
-
try {
|
|
96
|
-
while (++i < array.length && (!check || !check())) {
|
|
97
|
-
result = body(i);
|
|
98
|
-
|
|
99
|
-
if (result && result.then) {
|
|
100
|
-
if (_isSettledPact(result)) {
|
|
101
|
-
result = result.v;
|
|
102
|
-
} else {
|
|
103
|
-
result.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (pact) {
|
|
110
|
-
_settle(pact, 1, result);
|
|
111
|
-
} else {
|
|
112
|
-
pact = result;
|
|
113
|
-
}
|
|
114
|
-
} catch (e) {
|
|
115
|
-
_settle(pact || (pact = new _Pact()), 2, e);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
_cycle();
|
|
120
|
-
|
|
121
|
-
return pact;
|
|
122
|
-
} // Asynchronously iterate through an object's properties (including properties inherited from the prototype)
|
|
123
|
-
var _iteratorSymbol =
|
|
124
|
-
/*#__PURE__*/
|
|
125
|
-
typeof Symbol !== "undefined" ? Symbol.iterator || (Symbol.iterator = Symbol("Symbol.iterator")) : "@@iterator"; // Asynchronously iterate through an object's values
|
|
126
|
-
var _asyncIteratorSymbol =
|
|
127
|
-
/*#__PURE__*/
|
|
128
|
-
typeof Symbol !== "undefined" ? Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator")) : "@@asyncIterator"; // Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing
|
|
129
|
-
|
|
130
|
-
function _for(test, update, body) {
|
|
131
|
-
var stage;
|
|
132
|
-
|
|
133
|
-
for (;;) {
|
|
134
|
-
var shouldContinue = test();
|
|
135
|
-
|
|
136
|
-
if (_isSettledPact(shouldContinue)) {
|
|
137
|
-
shouldContinue = shouldContinue.v;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (!shouldContinue) {
|
|
141
|
-
return result;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (shouldContinue.then) {
|
|
145
|
-
stage = 0;
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
var result = body();
|
|
150
|
-
|
|
151
|
-
if (result && result.then) {
|
|
152
|
-
if (_isSettledPact(result)) {
|
|
153
|
-
result = result.s;
|
|
154
|
-
} else {
|
|
155
|
-
stage = 1;
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (update) {
|
|
161
|
-
var updateValue = update();
|
|
162
|
-
|
|
163
|
-
if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
|
|
164
|
-
stage = 2;
|
|
165
|
-
break;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
var pact = new _Pact();
|
|
171
|
-
|
|
172
|
-
var reject = _settle.bind(null, pact, 2);
|
|
173
|
-
|
|
174
|
-
(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);
|
|
175
|
-
return pact;
|
|
176
|
-
|
|
177
|
-
function _resumeAfterBody(value) {
|
|
178
|
-
result = value;
|
|
179
|
-
|
|
180
|
-
do {
|
|
181
|
-
if (update) {
|
|
182
|
-
updateValue = update();
|
|
183
|
-
|
|
184
|
-
if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
|
|
185
|
-
updateValue.then(_resumeAfterUpdate).then(void 0, reject);
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
shouldContinue = test();
|
|
191
|
-
|
|
192
|
-
if (!shouldContinue || _isSettledPact(shouldContinue) && !shouldContinue.v) {
|
|
193
|
-
_settle(pact, 1, result);
|
|
194
|
-
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
if (shouldContinue.then) {
|
|
199
|
-
shouldContinue.then(_resumeAfterTest).then(void 0, reject);
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
result = body();
|
|
204
|
-
|
|
205
|
-
if (_isSettledPact(result)) {
|
|
206
|
-
result = result.v;
|
|
207
|
-
}
|
|
208
|
-
} while (!result || !result.then);
|
|
209
|
-
|
|
210
|
-
result.then(_resumeAfterBody).then(void 0, reject);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function _resumeAfterTest(shouldContinue) {
|
|
214
|
-
if (shouldContinue) {
|
|
215
|
-
result = body();
|
|
216
|
-
|
|
217
|
-
if (result && result.then) {
|
|
218
|
-
result.then(_resumeAfterBody).then(void 0, reject);
|
|
219
|
-
} else {
|
|
220
|
-
_resumeAfterBody(result);
|
|
221
|
-
}
|
|
222
|
-
} else {
|
|
223
|
-
_settle(pact, 1, result);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function _resumeAfterUpdate() {
|
|
228
|
-
if (shouldContinue = test()) {
|
|
229
|
-
if (shouldContinue.then) {
|
|
230
|
-
shouldContinue.then(_resumeAfterTest).then(void 0, reject);
|
|
231
|
-
} else {
|
|
232
|
-
_resumeAfterTest(shouldContinue);
|
|
233
|
-
}
|
|
234
|
-
} else {
|
|
235
|
-
_settle(pact, 1, result);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
} // Asynchronously implement a do ... while loop
|
|
239
|
-
|
|
240
|
-
function _catch(body, recover) {
|
|
241
|
-
try {
|
|
242
|
-
var result = body();
|
|
243
|
-
} catch (e) {
|
|
244
|
-
return recover(e);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
if (result && result.then) {
|
|
248
|
-
return result.then(void 0, recover);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
return result;
|
|
252
|
-
} // Asynchronously await a promise and pass the result to a finally continuation
|
|
253
|
-
|
|
254
|
-
var VENDOR_ID = 0x2b24;
|
|
255
|
-
var PRODUCT_ID = 0x0001;
|
|
256
|
-
|
|
257
|
-
var ByteBuffer_default = ByteBuffer__default;
|
|
258
|
-
var concat = ByteBuffer_default.concat;
|
|
259
|
-
var wrap = ByteBuffer_default.wrap;
|
|
260
|
-
function requestPair() {
|
|
261
|
-
return new HID.HID(VENDOR_ID, PRODUCT_ID);
|
|
262
|
-
}
|
|
263
|
-
var HIDKeepKeyTransport = /*@__PURE__*/(function (KeepKeyTransport) {
|
|
264
|
-
function HIDKeepKeyTransport(hidDevice, keyring, hidRef) {
|
|
265
|
-
KeepKeyTransport.call(this, keyring);
|
|
266
|
-
this.bufferQueue = [];
|
|
267
|
-
this.hidDevice = hidDevice;
|
|
268
|
-
this.hidRef = hidRef || new HID.HID(hidDevice.path);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
if ( KeepKeyTransport ) HIDKeepKeyTransport.__proto__ = KeepKeyTransport;
|
|
272
|
-
HIDKeepKeyTransport.prototype = Object.create( KeepKeyTransport && KeepKeyTransport.prototype );
|
|
273
|
-
HIDKeepKeyTransport.prototype.constructor = HIDKeepKeyTransport;
|
|
274
|
-
|
|
275
|
-
var prototypeAccessors = { isOpened: { configurable: true } };
|
|
276
|
-
|
|
277
|
-
HIDKeepKeyTransport.prototype.getDeviceID = function getDeviceID () {
|
|
278
|
-
return this.hidDevice.serialNumber;
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
HIDKeepKeyTransport.prototype.getVendor = function getVendor () {
|
|
282
|
-
return 'keepkey.com';
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
HIDKeepKeyTransport.prototype.getFirmwareHash = function getFirmwareHash (firmware) {
|
|
286
|
-
try {
|
|
287
|
-
var hash = crypto.createHash('sha256');
|
|
288
|
-
hash.update(firmware);
|
|
289
|
-
return hash.digest();
|
|
290
|
-
} catch (e) {
|
|
291
|
-
return Promise.reject(e);
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
prototypeAccessors.isOpened.get = function () {
|
|
296
|
-
return this.hidDevice.interface > -1;
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
HIDKeepKeyTransport.prototype.connect = function connect () {
|
|
300
|
-
try {
|
|
301
|
-
var _this = this;
|
|
302
|
-
|
|
303
|
-
if (_this.isOpened) { return; }
|
|
304
|
-
|
|
305
|
-
_this.hidRef.readSync(); // Start reading data from usbDevice
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
_this.listen();
|
|
309
|
-
} catch (e) {
|
|
310
|
-
return Promise.reject(e);
|
|
311
|
-
}
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
HIDKeepKeyTransport.prototype.disconnect = function disconnect () {
|
|
315
|
-
try {
|
|
316
|
-
var _this2 = this;
|
|
317
|
-
|
|
318
|
-
var _temp = _catch(function () {
|
|
319
|
-
// If the device is disconnected, this will fail and throw, which is fine.
|
|
320
|
-
return Promise.resolve(_this2.hidRef.close()).then(function () {});
|
|
321
|
-
}, function (e) {
|
|
322
|
-
console.log('Disconnect Error (Ignored):', e);
|
|
323
|
-
});
|
|
324
|
-
|
|
325
|
-
return _temp && _temp.then ? _temp.then(function () {}) : void 0;
|
|
326
|
-
} catch (e) {
|
|
327
|
-
return Promise.reject(e);
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
HIDKeepKeyTransport.prototype.getEntropy = function getEntropy (length) {
|
|
332
|
-
if ( length === void 0 ) length = 64;
|
|
333
|
-
|
|
334
|
-
return crypto.randomBytes(length);
|
|
335
|
-
};
|
|
336
|
-
|
|
337
|
-
HIDKeepKeyTransport.prototype.write = function write (buff) {
|
|
338
|
-
try {
|
|
339
|
-
var _this3 = this;
|
|
340
|
-
|
|
341
|
-
var i = 0;
|
|
342
|
-
|
|
343
|
-
var _temp2 = _for(function () {
|
|
344
|
-
return i < buff.limit;
|
|
345
|
-
}, function () {
|
|
346
|
-
return !!(i += hdwalletKeepkey.SEGMENT_SIZE);
|
|
347
|
-
}, function () {
|
|
348
|
-
var segment = buff.toArrayBuffer().slice(i, i + hdwalletKeepkey.SEGMENT_SIZE);
|
|
349
|
-
var padding = new Array(hdwalletKeepkey.SEGMENT_SIZE - segment.byteLength + 1).join('\0');
|
|
350
|
-
var fragments = [];
|
|
351
|
-
fragments.push([63]);
|
|
352
|
-
fragments.push(segment);
|
|
353
|
-
fragments.push(padding);
|
|
354
|
-
var fragmentBuffer = concat(fragments);
|
|
355
|
-
return Promise.resolve(_this3.writeChunk(fragmentBuffer)).then(function () {});
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
// break frame into segments
|
|
359
|
-
return _temp2 && _temp2.then ? _temp2.then(function () {}) : void 0;
|
|
360
|
-
} catch (e) {
|
|
361
|
-
return Promise.reject(e);
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
|
|
365
|
-
HIDKeepKeyTransport.prototype.readChunk = function readChunk (debugLink) {
|
|
366
|
-
try {
|
|
367
|
-
var _this4 = this;
|
|
368
|
-
|
|
369
|
-
return Promise.resolve(_this4.hidRef.readSync()).then(function (result) {
|
|
370
|
-
return Promise.resolve(wrap(result));
|
|
371
|
-
});
|
|
372
|
-
} catch (e) {
|
|
373
|
-
return Promise.reject(e);
|
|
374
|
-
}
|
|
375
|
-
};
|
|
376
|
-
|
|
377
|
-
HIDKeepKeyTransport.prototype.read = function read (debugLink) {
|
|
378
|
-
try {
|
|
379
|
-
var _this5 = this;
|
|
380
|
-
|
|
381
|
-
return Promise.resolve(_this5.readChunk(debugLink)).then(function (first) {
|
|
382
|
-
// Check that buffer starts with: "?##" [ 0x3f, 0x23, 0x23 ]
|
|
383
|
-
// "?" = USB marker, "##" = KeepKey magic bytes
|
|
384
|
-
// Message ID is bytes 4-5. Message length starts at byte 6.
|
|
385
|
-
var valid = (first.readUint32(0) & 0xffffff00) === 0x3f232300;
|
|
386
|
-
var msgLength = first.readUint32(5);
|
|
387
|
-
return function () {
|
|
388
|
-
if (valid && msgLength >= 0) {
|
|
389
|
-
function _temp4() {
|
|
390
|
-
return wrap(buffer);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// FIXME: why doesn't ByteBuffer.concat() work?
|
|
394
|
-
var buffer = new Uint8Array(9 + 2 + msgLength);
|
|
395
|
-
|
|
396
|
-
for (var k = 0; k < first.limit; k++) {
|
|
397
|
-
buffer[k] = first.readUint8(k);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
var offset = first.limit;
|
|
401
|
-
|
|
402
|
-
var _temp3 = _for(function () {
|
|
403
|
-
return offset < buffer.length;
|
|
404
|
-
}, void 0, function () {
|
|
405
|
-
return Promise.resolve(_this5.readChunk(debugLink)).then(function (next) {
|
|
406
|
-
// Drop USB "?" reportId in the first byte
|
|
407
|
-
for (var k = 1; k < next.limit && offset < buffer.length; k++) {
|
|
408
|
-
buffer[offset] = next.readUint8(k);
|
|
409
|
-
offset++;
|
|
410
|
-
}
|
|
411
|
-
});
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
|
415
|
-
}
|
|
416
|
-
}();
|
|
417
|
-
});
|
|
418
|
-
} catch (e) {
|
|
419
|
-
return Promise.reject(e);
|
|
420
|
-
}
|
|
421
|
-
};
|
|
422
|
-
|
|
423
|
-
HIDKeepKeyTransport.prototype.writeChunk = function writeChunk (buffer) {
|
|
424
|
-
try {
|
|
425
|
-
var _this6 = this;
|
|
426
|
-
|
|
427
|
-
var arr = new Array(buffer.limit).fill(undefined);
|
|
428
|
-
|
|
429
|
-
for (var i = buffer.offset; i < buffer.limit; i++) {
|
|
430
|
-
arr[i] = buffer.readByte(i);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
return _this6.hidRef.write(arr);
|
|
434
|
-
} catch (e) {
|
|
435
|
-
return Promise.reject(e);
|
|
436
|
-
}
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
HIDKeepKeyTransport.prototype.enqueueBuffer = function enqueueBuffer (data) {
|
|
440
|
-
if (data.length) { this.bufferQueue.push(wrap(data)); }
|
|
441
|
-
};
|
|
442
|
-
|
|
443
|
-
Object.defineProperties( HIDKeepKeyTransport.prototype, prototypeAccessors );
|
|
444
|
-
|
|
445
|
-
return HIDKeepKeyTransport;
|
|
446
|
-
}(hdwalletKeepkey.KeepKeyTransport));
|
|
447
|
-
|
|
448
|
-
var HIDKeepKeyAdapter = function HIDKeepKeyAdapter(keyring) {
|
|
449
|
-
this.keyring = keyring;
|
|
450
|
-
};
|
|
451
|
-
|
|
452
|
-
HIDKeepKeyAdapter.useKeyring = function useKeyring (keyring) {
|
|
453
|
-
return new HIDKeepKeyAdapter(keyring);
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
HIDKeepKeyAdapter.prototype.initialize = function initialize (devices, autoConnect) {
|
|
457
|
-
if ( autoConnect === void 0 ) autoConnect = true;
|
|
458
|
-
|
|
459
|
-
try {
|
|
460
|
-
var _this = this;
|
|
461
|
-
|
|
462
|
-
function _temp6() {
|
|
463
|
-
return Object.keys(_this.keyring.wallets).length;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
var devicesToInitialize = devices || HID.devices().filter(function (d) { return d.vendorId === VENDOR_ID && d.productId === PRODUCT_ID; });
|
|
467
|
-
|
|
468
|
-
var _temp5 = _forTo(devicesToInitialize, function (i) {
|
|
469
|
-
function _temp4() {
|
|
470
|
-
function _temp2() {
|
|
471
|
-
_this.keyring.add(wallet, hidDevice.serialNumber);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
var wallet = hdwalletKeepkey.create(new HIDKeepKeyTransport(hidDevice, _this.keyring));
|
|
475
|
-
|
|
476
|
-
var _temp = function () {
|
|
477
|
-
if (autoConnect) { return Promise.resolve(wallet.initialize()).then(function () {}); }
|
|
478
|
-
}();
|
|
479
|
-
|
|
480
|
-
return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
var hidDevice = devicesToInitialize[i];
|
|
484
|
-
|
|
485
|
-
var _temp3 = function () {
|
|
486
|
-
if (_this.keyring.wallets[hidDevice.serialNumber]) {
|
|
487
|
-
return Promise.resolve(_this.keyring.remove(hidDevice.serialNumber)).then(function () {});
|
|
488
|
-
}
|
|
489
|
-
}();
|
|
490
|
-
|
|
491
|
-
return _temp3 && _temp3.then ? _temp3.then(_temp4) : _temp4(_temp3);
|
|
492
|
-
});
|
|
493
|
-
|
|
494
|
-
return _temp5 && _temp5.then ? _temp5.then(_temp6) : _temp6(_temp5);
|
|
495
|
-
} catch (e) {
|
|
496
|
-
return Promise.reject(e);
|
|
497
|
-
}
|
|
498
|
-
};
|
|
499
|
-
|
|
500
|
-
HIDKeepKeyAdapter.prototype.handleConnectKeepKey = function handleConnectKeepKey (device) {
|
|
501
|
-
var this$1 = this;
|
|
502
|
-
|
|
503
|
-
var deviceID = device.serialNumber;
|
|
504
|
-
var devices = HID.devices().filter(function (d) { return d.serialNumber === device.serialNumber; });
|
|
505
|
-
this.initialize(devices).then(function () { return function () { return this$1.keyring.emit([device.product, deviceID, hdwalletCore.Events.CONNECT], deviceID); }; }).catch(console.error);
|
|
506
|
-
};
|
|
507
|
-
|
|
508
|
-
HIDKeepKeyAdapter.prototype.handleDisconnectKeepKey = function handleDisconnectKeepKey (device) {
|
|
509
|
-
var this$1 = this;
|
|
510
|
-
|
|
511
|
-
this.keyring.remove(device.serialNumber).then(function () { return this$1.keyring.emit([device.product, device.serialNumber, hdwalletCore.Events.DISCONNECT], device.serialNumber); }).catch(function () { return this$1.keyring.emit([device.product, device.serialNumber, hdwalletCore.Events.DISCONNECT], device.serialNumber); });
|
|
512
|
-
};
|
|
513
|
-
|
|
514
|
-
exports.HIDKeepKeyAdapter = HIDKeepKeyAdapter;
|
|
515
|
-
exports.requestPair = requestPair;
|
|
516
|
-
exports.HIDKeepKeyTransport = HIDKeepKeyTransport;
|
|
517
|
-
exports.VENDOR_ID = VENDOR_ID;
|
|
518
|
-
exports.PRODUCT_ID = PRODUCT_ID;
|
|
519
|
-
|
|
520
|
-
})));
|
|
521
|
-
//# sourceMappingURL=index.umd.js.map
|
package/dist/index.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/utils.ts","../src/transport.ts","../src/adapter.ts"],"sourcesContent":["// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && !check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, value);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\t_entry(_this).then(returnValue, function(error) {\n\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","export const VENDOR_ID = 0x2b24;\nexport const PRODUCT_ID = 0x0001;\n","import { Keyring } from '@shapeshiftoss/hdwallet-core'\nimport { SEGMENT_SIZE, KeepKeyTransport } from '@shapeshiftoss/hdwallet-keepkey'\nimport * as ByteBuffer from 'bytebuffer'\nimport { Device as NodeHIDDevice, HID } from 'node-hid'\nimport { VENDOR_ID, PRODUCT_ID } from './utils'\nimport { randomBytes, createHash } from 'crypto'\n\nconst {\n default: { concat, wrap }\n} = ByteBuffer as any\n\nexport function requestPair(): HID {\n return new HID(VENDOR_ID, PRODUCT_ID)\n}\n\nexport class HIDKeepKeyTransport extends KeepKeyTransport {\n public hidRef: HID\n public hidDevice: NodeHIDDevice\n\n private bufferQueue: ByteBuffer[] = []\n\n constructor(hidDevice: NodeHIDDevice, keyring: Keyring, hidRef?: HID) {\n super(keyring)\n this.hidDevice = hidDevice\n this.hidRef = hidRef || new HID(hidDevice.path)\n }\n\n public getDeviceID(): string {\n return this.hidDevice.serialNumber\n }\n\n public getVendor(): string {\n return 'keepkey.com'\n }\n\n public async getFirmwareHash(firmware: Buffer): Promise<Buffer> {\n const hash = createHash('sha256')\n hash.update(firmware)\n return hash.digest()\n }\n\n public get isOpened(): boolean {\n return this.hidDevice.interface > -1\n }\n\n public async connect(): Promise<void> {\n if (this.isOpened) return\n\n this.hidRef.readSync()\n\n // Start reading data from usbDevice\n this.listen()\n }\n\n public async disconnect(): Promise<void> {\n try {\n // If the device is disconnected, this will fail and throw, which is fine.\n await this.hidRef.close()\n } catch (e) {\n console.log('Disconnect Error (Ignored):', e)\n }\n }\n\n public getEntropy(length: number = 64): Uint8Array {\n return randomBytes(length)\n }\n\n protected async write(buff: ByteBuffer): Promise<void> {\n // break frame into segments\n for (let i = 0; i < buff.limit; i += SEGMENT_SIZE) {\n let segment = buff.toArrayBuffer().slice(i, i + SEGMENT_SIZE)\n let padding = new Array(SEGMENT_SIZE - segment.byteLength + 1).join('\\0')\n let fragments: Array<any> = []\n fragments.push([63])\n fragments.push(segment)\n fragments.push(padding)\n const fragmentBuffer = concat(fragments)\n await this.writeChunk(fragmentBuffer)\n }\n }\n\n private async readChunk(debugLink: boolean): Promise<ByteBuffer> {\n const result = await this.hidRef.readSync()\n return Promise.resolve(wrap(result))\n }\n\n protected async read(debugLink: boolean): Promise<ByteBuffer> {\n const first = await this.readChunk(debugLink)\n // Check that buffer starts with: \"?##\" [ 0x3f, 0x23, 0x23 ]\n // \"?\" = USB marker, \"##\" = KeepKey magic bytes\n // Message ID is bytes 4-5. Message length starts at byte 6.\n const valid = (first.readUint32(0) & 0xffffff00) === 0x3f232300\n const msgLength = first.readUint32(5)\n if (valid && msgLength >= 0) {\n // FIXME: why doesn't ByteBuffer.concat() work?\n const buffer = new Uint8Array(9 + 2 + msgLength)\n for (let k = 0; k < first.limit; k++) {\n buffer[k] = first.readUint8(k)\n }\n let offset = first.limit\n\n while (offset < buffer.length) {\n const next = await this.readChunk(debugLink)\n // Drop USB \"?\" reportId in the first byte\n for (let k = 1; k < next.limit && offset < buffer.length; k++) {\n buffer[offset] = next.readUint8(k)\n offset++\n }\n }\n\n return wrap(buffer)\n }\n }\n\n private async writeChunk(buffer: ByteBuffer): Promise<number> {\n const arr: number[] = new Array(buffer.limit).fill(undefined)\n for (let i = buffer.offset; i < buffer.limit; i++) {\n arr[i] = buffer.readByte(i)\n }\n return this.hidRef.write(arr)\n }\n\n private enqueueBuffer(data: number[]): void {\n if (data.length) this.bufferQueue.push(wrap(data))\n }\n}\n","import { Keyring, Events } from '@shapeshiftoss/hdwallet-core'\nimport { create as createHIDKeepKey } from '@shapeshiftoss/hdwallet-keepkey'\nimport { HIDKeepKeyTransport } from './transport'\nimport * as HID from 'node-hid'\nimport { VENDOR_ID, PRODUCT_ID } from './utils'\n\nexport class HIDKeepKeyAdapter {\n keyring: Keyring\n\n // public usbDetect = new USBDetect() // Must call keyring.usbDetect.stopMonitoring() for app to exit cleanly\n\n constructor(keyring: Keyring) {\n this.keyring = keyring\n }\n\n public static useKeyring(keyring: Keyring) {\n return new HIDKeepKeyAdapter(keyring)\n }\n\n public async initialize(devices?: HID.Device[], autoConnect: boolean = true): Promise<number> {\n const devicesToInitialize =\n devices ||\n HID.devices().filter(\n d => d.vendorId === VENDOR_ID && d.productId === PRODUCT_ID\n )\n\n for (let i = 0; i < devicesToInitialize.length; i++) {\n const hidDevice = devicesToInitialize[i]\n\n if (this.keyring.wallets[hidDevice.serialNumber]) {\n await this.keyring.remove(hidDevice.serialNumber)\n }\n\n let wallet = createHIDKeepKey(new HIDKeepKeyTransport(hidDevice, this.keyring))\n\n if (autoConnect)\n await wallet.initialize()\n\n this.keyring.add(wallet, hidDevice.serialNumber)\n }\n\n return Object.keys(this.keyring.wallets).length\n }\n\n protected handleConnectKeepKey(device: HID.Device): void {\n const deviceID = device.serialNumber\n const devices = HID.devices().filter(\n d => d.serialNumber === device.serialNumber\n )\n this.initialize(devices)\n .then(() => () =>\n this.keyring.emit([device.product, deviceID, Events.CONNECT], deviceID)\n )\n .catch(console.error)\n }\n\n protected handleDisconnectKeepKey(device: HID.Device): void {\n this.keyring\n .remove(device.serialNumber)\n .then(() =>\n this.keyring.emit(\n [device.product, device.serialNumber, Events.DISCONNECT],\n device.serialNumber\n )\n )\n .catch(() =>\n this.keyring.emit(\n [device.product, device.serialNumber, Events.DISCONNECT],\n device.serialNumber\n )\n )\n }\n}\n"],"names":["const","_Pact","prototype","then","onFulfilled","onRejected","result","state","s","callback","_settle","v","e","o","_this","value","pact","bind","observer","_isSettledPact","thenable","_forTo","array","body","check","i","reject","_cycle","length","_iteratorSymbol","Symbol","iterator","_asyncIteratorSymbol","asyncIterator","_for","test","update","stage","shouldContinue","updateValue","_resumeAfterTest","_resumeAfterBody","_resumeAfterUpdate","_catch","recover","VENDOR_ID","PRODUCT_ID","concat","wrap","requestPair","HID","HIDKeepKeyTransport","constructor","hidDevice","keyring","hidRef","path","getDeviceID","serialNumber","getVendor","getFirmwareHash","firmware","hash","createHash","digest","isOpened","interface","connect","readSync","listen","disconnect","close","console","log","getEntropy","randomBytes","write","buff","limit","SEGMENT_SIZE","segment","toArrayBuffer","slice","padding","Array","byteLength","join","fragments","push","fragmentBuffer","writeChunk","readChunk","debugLink","Promise","resolve","read","first","valid","readUint32","msgLength","buffer","Uint8Array","let","k","readUint8","offset","next","arr","fill","undefined","readByte","enqueueBuffer","data","bufferQueue","KeepKeyTransport","HIDKeepKeyAdapter","useKeyring","initialize","devices","autoConnect","Object","keys","wallets","devicesToInitialize","filter","d","vendorId","productId","add","wallet","createHIDKeepKey","remove","handleConnectKeepKey","device","deviceID","this","emit","product","Events","CONNECT","catch","error","handleDisconnectKeepKey","DISCONNECT"],"mappings":";;;;;;;CAAA;AACA,CAAOA,IAAMC,KAAK;;CAAiB,YAAW;YACpCA,KAAT,GAAiB;;GACjBA,KAAK,CAACC,SAAN,CAAgBC,IAAhB,GAAuB,UAASC,WAAT,EAAsBC,UAAtB,EAAkC;SAClDC,MAAM,GAAG,IAAIL,KAAJ,EAAf;SACMM,KAAK,GAAG,KAAKC,CAAnB;;SACID,KAAJ,EAAW;WACJE,QAAQ,GAAGF,KAAK,GAAG,CAAR,GAAYH,WAAZ,GAA0BC,UAA3C;;WACII,QAAJ,EAAc;aACT;WACHC,OAAO,CAACJ,MAAD,EAAS,CAAT,EAAYG,QAAQ,CAAC,KAAKE,CAAN,CAApB,CAAP;UADD,CAEE,OAAOC,CAAP,EAAU;WACXF,OAAO,CAACJ,MAAD,EAAS,CAAT,EAAYM,CAAZ,CAAP;;;gBAEMN,MAAP;QAND,MAOO;gBACC,IAAP;;;;UAGGO,CAAL,GAAS,UAASC,KAAT,EAAgB;WACpB;aACGC,KAAK,GAAGD,KAAK,CAACH,CAApB;;aACIG,KAAK,CAACN,CAAN,GAAU,CAAd,EAAiB;WAChBE,OAAO,CAACJ,MAAD,EAAS,CAAT,EAAYF,WAAW,GAAGA,WAAW,CAACW,KAAD,CAAd,GAAwBA,KAA/C,CAAP;UADD,MAEO,IAAIV,UAAJ,EAAgB;WACtBK,OAAO,CAACJ,MAAD,EAAS,CAAT,EAAYD,UAAU,CAACU,KAAD,CAAtB,CAAP;UADM,MAEA;WACNL,OAAO,CAACJ,MAAD,EAAS,CAAT,EAAYS,KAAZ,CAAP;;QAPF,CASE,OAAOH,CAAP,EAAU;SACXF,OAAO,CAACJ,MAAD,EAAS,CAAT,EAAYM,CAAZ,CAAP;;MAXF;;YAcON,MAAP;IA9BD;;UAgCOL,KAAP;EAlCiC,EAA3B;;AAsCP,CAAO,SAASS,OAAT,CAAiBM,IAAjB,EAAuBT,KAAvB,EAA8BQ,KAA9B,EAAqC;OACvC,CAACC,IAAI,CAACR,CAAV,EAAa;SACRO,KAAK,YAAYd,KAArB,EAA4B;WACvBc,KAAK,CAACP,CAAV,EAAa;aACRD,KAAK,GAAG,CAAZ,EAAe;WACdA,KAAK,GAAGQ,KAAK,CAACP,CAAd;;;SAEDO,KAAK,GAAGA,KAAK,CAACJ,CAAd;QAJD,MAKO;SACNI,KAAK,CAACF,CAAN,GAAUH,OAAO,CAACO,IAAR,CAAa,IAAb,EAAmBD,IAAnB,EAAyBT,KAAzB,CAAV;;;;;SAIEQ,KAAK,IAAIA,KAAK,CAACZ,IAAnB,EAAyB;OACxBY,KAAK,CAACZ,IAAN,CAAWO,OAAO,CAACO,IAAR,CAAa,IAAb,EAAmBD,IAAnB,EAAyBT,KAAzB,CAAX,EAA4CG,OAAO,CAACO,IAAR,CAAa,IAAb,EAAmBD,IAAnB,EAAyB,CAAzB,CAA5C;;;;KAGDA,IAAI,CAACR,CAAL,GAASD,KAAT;KACAS,IAAI,CAACL,CAAL,GAASI,KAAT;SACMG,QAAQ,GAAGF,IAAI,CAACH,CAAtB;;SACIK,QAAJ,EAAc;OACbA,QAAQ,CAACF,IAAD,CAAR;;;;AAKH,CAAO,SAASG,cAAT,CAAwBC,QAAxB,EAAkC;UACjCA,QAAQ,YAAYnB,KAApB,IAA6BmB,QAAQ,CAACZ,CAAT,GAAa,CAAjD;;;AAgDD,CAAO,SAASa,MAAT,CAAgBC,KAAhB,EAAuBC,IAAvB,EAA6BC,KAA7B,EAAoC;OACtCC,CAAC,GAAG,CAAC,CAAT;OAAYT,IAAZ;OAAkBU,MAAlB;;YACSC,MAAT,CAAgBrB,MAAhB,EAAwB;SACnB;cACI,EAAEmB,CAAF,GAAMH,KAAK,CAACM,MAAZ,KAAuB,CAACJ,KAAD,IAAU,CAACA,KAAK,EAAvC,CAAP,EAAmD;SAClDlB,MAAM,GAAGiB,IAAI,CAACE,CAAD,CAAb;;aACInB,MAAM,IAAIA,MAAM,CAACH,IAArB,EAA2B;eACtBgB,cAAc,CAACb,MAAD,CAAlB,EAA4B;aAC3BA,MAAM,GAAGA,MAAM,CAACK,CAAhB;YADD,MAEO;aACNL,MAAM,CAACH,IAAP,CAAYwB,MAAZ,EAAoBD,MAAM,KAAKA,MAAM,GAAGhB,OAAO,CAACO,IAAR,CAAa,IAAb,EAAmBD,IAAI,GAAG,IAAIf,KAAJ,EAA1B,EAAuC,CAAvC,CAAd,CAA1B;;;;;;WAKCe,IAAJ,EAAU;SACTN,OAAO,CAACM,IAAD,EAAO,CAAP,EAAUV,MAAV,CAAP;QADD,MAEO;SACNU,IAAI,GAAGV,MAAP;;MAfF,CAiBE,OAAOM,CAAP,EAAU;OACXF,OAAO,CAACM,IAAI,KAAKA,IAAI,GAAG,IAAIf,KAAJ,EAAZ,CAAL,EAA+B,CAA/B,EAAkCW,CAAlC,CAAP;;;;GAGFe,MAAM;;UACCX,IAAP;;CAyBMhB,IAAM6B,eAAe;;CAAiB,OAAOC,MAAP,KAAkB,WAAlB,GAAiCA,MAAM,CAACC,QAAP,KAAoBD,MAAM,CAACC,QAAP,GAAkBD,MAAM,CAAC,iBAAD,CAA5C,CAAjC,GAAqG,YAA3I;CA6DA9B,IAAMgC,oBAAoB;;CAAiB,OAAOF,MAAP,KAAkB,WAAlB,GAAiCA,MAAM,CAACG,aAAP,KAAyBH,MAAM,CAACG,aAAP,GAAuBH,MAAM,CAAC,sBAAD,CAAtD,CAAjC,GAAoH,iBAA/J;;AA8BP,CAAO,SAASI,IAAT,CAAcC,IAAd,EAAoBC,MAApB,EAA4Bb,IAA5B,EAAkC;OACpCc,KAAJ;;YACS;SACJC,cAAc,GAAGH,IAAI,EAAzB;;SACIhB,cAAc,CAACmB,cAAD,CAAlB,EAAoC;OACnCA,cAAc,GAAGA,cAAc,CAAC3B,CAAhC;;;SAEG,CAAC2B,cAAL,EAAqB;cACbhC,MAAP;;;SAEGgC,cAAc,CAACnC,IAAnB,EAAyB;OACxBkC,KAAK,GAAG,CAAR;;;;SAGG/B,MAAM,GAAGiB,IAAI,EAAjB;;SACIjB,MAAM,IAAIA,MAAM,CAACH,IAArB,EAA2B;WACtBgB,cAAc,CAACb,MAAD,CAAlB,EAA4B;SAC3BA,MAAM,GAAGA,MAAM,CAACE,CAAhB;QADD,MAEO;SACN6B,KAAK,GAAG,CAAR;;;;;SAIED,MAAJ,EAAY;WACPG,WAAW,GAAGH,MAAM,EAAxB;;WACIG,WAAW,IAAIA,WAAW,CAACpC,IAA3B,IAAmC,CAACgB,cAAc,CAACoB,WAAD,CAAtD,EAAqE;SACpEF,KAAK,GAAG,CAAR;;;;;;OAKCrB,IAAI,GAAG,IAAIf,KAAJ,EAAX;;OACIyB,MAAM,GAAGhB,OAAO,CAACO,IAAR,CAAa,IAAb,EAAmBD,IAAnB,EAAyB,CAAzB,CAAb;;IACCqB,KAAK,KAAK,CAAV,GAAcC,cAAc,CAACnC,IAAf,CAAoBqC,gBAApB,CAAd,GAAsDH,KAAK,KAAK,CAAV,GAAc/B,MAAM,CAACH,IAAP,CAAYsC,gBAAZ,CAAd,GAA8CF,WAAW,CAACpC,IAAZ,CAAiBuC,kBAAjB,CAArG,EAA2IvC,IAA3I,CAAgJ,KAAK,CAArJ,EAAwJuB,MAAxJ;UACOV,IAAP;;YACSyB,gBAAT,CAA0B1B,KAA1B,EAAiC;KAChCT,MAAM,GAAGS,KAAT;;QACG;WACEqB,MAAJ,EAAY;SACXG,WAAW,GAAGH,MAAM,EAApB;;aACIG,WAAW,IAAIA,WAAW,CAACpC,IAA3B,IAAmC,CAACgB,cAAc,CAACoB,WAAD,CAAtD,EAAqE;WACpEA,WAAW,CAACpC,IAAZ,CAAiBuC,kBAAjB,EAAqCvC,IAArC,CAA0C,KAAK,CAA/C,EAAkDuB,MAAlD;;;;;OAIFY,cAAc,GAAGH,IAAI,EAArB;;WACI,CAACG,cAAD,IAAoBnB,cAAc,CAACmB,cAAD,CAAd,IAAkC,CAACA,cAAc,CAAC3B,CAA1E,EAA8E;SAC7ED,OAAO,CAACM,IAAD,EAAO,CAAP,EAAUV,MAAV,CAAP;;;;;WAGGgC,cAAc,CAACnC,IAAnB,EAAyB;SACxBmC,cAAc,CAACnC,IAAf,CAAoBqC,gBAApB,EAAsCrC,IAAtC,CAA2C,KAAK,CAAhD,EAAmDuB,MAAnD;;;;OAGDpB,MAAM,GAAGiB,IAAI,EAAb;;WACIJ,cAAc,CAACb,MAAD,CAAlB,EAA4B;SAC3BA,MAAM,GAAGA,MAAM,CAACK,CAAhB;;MAnBF,QAqBS,CAACL,MAAD,IAAW,CAACA,MAAM,CAACH,IArB5B;;KAsBAG,MAAM,CAACH,IAAP,CAAYsC,gBAAZ,EAA8BtC,IAA9B,CAAmC,KAAK,CAAxC,EAA2CuB,MAA3C;;;YAEQc,gBAAT,CAA0BF,cAA1B,EAA0C;SACrCA,cAAJ,EAAoB;OACnBhC,MAAM,GAAGiB,IAAI,EAAb;;WACIjB,MAAM,IAAIA,MAAM,CAACH,IAArB,EAA2B;SAC1BG,MAAM,CAACH,IAAP,CAAYsC,gBAAZ,EAA8BtC,IAA9B,CAAmC,KAAK,CAAxC,EAA2CuB,MAA3C;QADD,MAEO;SACNe,gBAAgB,CAACnC,MAAD,CAAhB;;MALF,MAOO;OACNI,OAAO,CAACM,IAAD,EAAO,CAAP,EAAUV,MAAV,CAAP;;;;YAGOoC,kBAAT,GAA8B;SACzBJ,cAAc,GAAGH,IAAI,EAAzB,EAA6B;WACxBG,cAAc,CAACnC,IAAnB,EAAyB;SACxBmC,cAAc,CAACnC,IAAf,CAAoBqC,gBAApB,EAAsCrC,IAAtC,CAA2C,KAAK,CAAhD,EAAmDuB,MAAnD;QADD,MAEO;SACNc,gBAAgB,CAACF,cAAD,CAAhB;;MAJF,MAMO;OACN5B,OAAO,CAACM,IAAD,EAAO,CAAP,EAAUV,MAAV,CAAP;;;;;AAkOH,CAAO,SAASqC,MAAT,CAAgBpB,IAAhB,EAAsBqB,OAAtB,EAA+B;OACjC;SACCtC,MAAM,GAAGiB,IAAI,EAAjB;IADD,CAEE,OAAMX,CAAN,EAAS;YACHgC,OAAO,CAAChC,CAAD,CAAd;;;OAEGN,MAAM,IAAIA,MAAM,CAACH,IAArB,EAA2B;YACnBG,MAAM,CAACH,IAAP,CAAY,KAAK,CAAjB,EAAoByC,OAApB,CAAP;;;UAEMtC,MAAP;;;KC3jBYuC,SAAS,GAAG,MAAlB;AACP,KAAaC,UAAU,GAAG,MAAnB;;CCMP;CACaC;CAAQC;AAGrB,UAAgBC;UACP,IAAIC,OAAJ,CAAQL,SAAR,EAAmBC,UAAnB,CAAP;;AAGF,KAAaK;GAMXC,6BAAYC,WAA0BC,SAAkBC;iCAChDD,OAAN;qBAHM,GAA4B,EAA5B;UAIDD,SAAL,GAAiBA,SAAjB;UACKE,MAAL,GAAcA,MAAM,IAAI,IAAIL,OAAJ,CAAQG,SAAS,CAACG,IAAlB,CAAxB;;;;;;;;;iCAGKC;YACE,KAAKJ,SAAL,CAAeK,YAAtB;;;iCAGKC;YACE,aAAP;;;iCAGWC,4CAAgBC;;WACrBC,IAAI,GAAGC,iBAAU,CAAC,QAAD,CAAvB;OACAD,IAAI,CAAC1B,MAAL,CAAYyB,QAAZ;cACOC,IAAI,CAACE,MAAL,EAAP;;;;;;sBAGSC;YACF,KAAKZ,SAAL,CAAea,SAAf,GAA2B,CAAC,CAAnC;;;iCAGWC;;mBACP;;WAAA,MAAKF,QAAT,IAAmB;;aAEdV,MAAL,CAAYa,QAAZ;;;aAGKC,MAAL;;;;;;iCAGWC;;oBAGH;;sCAFJ;;gCAEI,OAAKf,MAAL,CAAYgB,KAAZ,EAFJ;oBAGK3D,GAAG;SACV4D,OAAO,CAACC,GAAR,CAAY,6BAAZ,EAA2C7D,CAA3C;;;;;;;;;iCAIG8D,kCAAW9C,MAAD;uCAAkB;;YAC1B+C,kBAAW,CAAC/C,MAAD,CAAlB;;;iCAGcgD,wBAAMC;;oBAUZ;;WARCpD,CAAC,GAAG,CAAR;;;gBAAWA,CAAC,GAAGoD,IAAI,CAACC;;mBAAOrD,CAAC,IAAIsD;sBAAc;aAC7CC,OAAO,GAAGH,IAAI,CAACI,aAAL,GAAqBC,KAArB,CAA2BzD,CAA3B,EAA8BA,CAAC,GAAGsD,4BAAlC,CAAd;aACII,OAAO,GAAG,IAAIC,KAAJ,CAAUL,4BAAY,GAAGC,OAAO,CAACK,UAAvB,GAAoC,CAA9C,EAAiDC,IAAjD,CAAsD,IAAtD,CAAd;aACIC,SAAS,GAAe,EAA5B;SACAA,SAAS,CAACC,IAAV,CAAe,CAAC,EAAD,CAAf;SACAD,SAAS,CAACC,IAAV,CAAeR,OAAf;SACAO,SAAS,CAACC,IAAV,CAAeL,OAAf;aACMM,cAAc,GAAG1C,MAAM,CAACwC,SAAD,CAA7B;gCACM,OAAKG,UAAL,CAAgBD,cAAhB,CAR2C;;;;;;;;;;iCAYvCE,gCAAUC;;oBACD;;8BAAA,OAAKrC,MAAL,CAAYa,QAAZ,mBAAf9D;gBACCuF,OAAO,CAACC,OAAR,CAAgB9C,IAAI,CAAC1C,MAAD,CAApB,CAAP;;;;;;;iCAGcyF,sBAAKH;;oBACC;;8BAAA,OAAKD,SAAL,CAAeC,SAAf,kBAAdI;;;;aAIAC,KAAK,GAAG,CAACD,KAAK,CAACE,UAAN,CAAiB,CAAjB,IAAsB,UAAvB,MAAuC,UAArD;aACMC,SAAS,GAAGH,KAAK,CAACE,UAAN,CAAiB,CAAjB,CAAlB;;eACID,KAAK,IAAIE,SAAS,IAAI;;sBAiBjBnD,IAAI,CAACoD,MAAD,CAAX;;;;iBAfMA,MAAM,GAAG,IAAIC,UAAJ,CAAe,IAAI,CAAJ,GAAQF,SAAvB,CAAf;;kBACKG,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGP,KAAK,CAAClB,KAA1B,EAAiCyB,CAAC,EAAlC,EAAsC;eACpCH,MAAM,CAACG,CAAD,CAAN,GAAYP,KAAK,CAACQ,SAAN,CAAgBD,CAAhB,CAAZ;;;iBAEEE,MAAM,GAAGT,KAAK,CAAClB,KAAnB;;;sBAEO2B,MAAM,GAAGL,MAAM,CAACxE;oCAAQ;sCACV,OAAK+D,SAAL,CAAeC,SAAf,CADU,iBACvBc,IADuB;;sBAGxBJ,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGG,IAAI,CAAC5B,KAAT,IAAkB2B,MAAM,GAAGL,MAAM,CAACxE,MAAlD,EAA0D2E,CAAC,EAA3D,EAA+D;mBAC7DH,MAAM,CAACK,MAAD,CAAN,GAAiBC,IAAI,CAACF,SAAL,CAAeD,CAAf,CAAjB;mBACAE,MAAM;;;;;;;;;;;;;;iCAQAf,kCAAWU;;oBAKhB;;WAJDO,GAAG,GAAa,IAAIvB,KAAJ,CAAUgB,MAAM,CAACtB,KAAjB,EAAwB8B,IAAxB,CAA6BC,SAA7B,CAAtB;;YACKP,IAAI7E,CAAC,GAAG2E,MAAM,CAACK,MAApB,EAA4BhF,CAAC,GAAG2E,MAAM,CAACtB,KAAvC,EAA8CrD,CAAC,EAA/C,EAAmD;SACjDkF,GAAG,CAAClF,CAAD,CAAH,GAAS2E,MAAM,CAACU,QAAP,CAAgBrF,CAAhB,CAAT;;;cAEK,OAAK8B,MAAL,CAAYqB,KAAZ,CAAkB+B,GAAlB,CAAP;;;;;;iCAGMI,wCAAcC,IAAD;SACfA,IAAI,CAACpF,MAAT,IAAiB,KAAKqF,WAAL,CAAiBzB,IAAjB,CAAsBxC,IAAI,CAACgE,IAAD,CAA1B;;;;;;GA5GoBE;;KCT5BC,oBAKX/D,2BAAYE;QACLA,OAAL,GAAeA,OAAf;;;mBAGY8D,kCAAW9D,OAAlB;UACE,IAAI6D,iBAAJ,CAAsB7D,OAAtB,CAAP;;;CAGW+D,4BAAAA,kCAAWC,SAAwBC;iDAAuB;;;iBAU/D;;;cAYCC,MAAM,CAACC,IAAP,CAAY,MAAKnE,OAAL,CAAaoE,OAAzB,EAAkC9F,MAAzC;;;SArBM+F,mBAAmB,GACvBL,OAAO,IACPpE,WAAA,GAAc0E,MAAd,WACEC,YAAKA,CAAC,CAACC,QAAF,KAAejF,SAAf,IAA4BgF,CAAC,CAACE,SAAF,KAAgBjF,aADnD,CAFF;;yBAMoB6E,+BAAXlG,GAA4C;;;iBAY9C6B,OAAL,CAAa0E,GAAb,CAAiBC,MAAjB,EAAyB5E,SAAS,CAACK,YAAnC;;;aALIuE,MAAM,GAAGC,sBAAgB,CAAC,IAAI/E,mBAAJ,CAAwBE,SAAxB,EAAmC,MAAKC,OAAxC,CAAD,CAA7B;;;eAEIiE,WAAJ,2BACQU,MAAM,CAACZ,UAAP,EADR;;;;;;WARMhE,SAAS,GAAGsE,mBAAmB,CAAClG,CAAD,CAArC;;;aAEI,MAAK6B,OAAL,CAAaoE,OAAb,CAAqBrE,SAAS,CAACK,YAA/B,CAH+C;kCAI3C,MAAKJ,OAAL,CAAa6E,MAAb,CAAoB9E,SAAS,CAACK,YAA9B,CAJ2C;;;;;;;;;;;;;CAkB7C0E,4BAAAA,sDAAqBC,MAAD;;;OACtBC,QAAQ,GAAGD,MAAM,CAAC3E,YAAxB;OACM4D,OAAO,GAAGpE,WAAA,GAAc0E,MAAd,WACdC,YAAKA,CAAC,CAACnE,YAAF,KAAmB2E,MAAM,CAAC3E,eADjB,CAAhB;QAGK2D,UAAL,CAAgBC,OAAhB,EACGnH,IADH,2CAEIoI,OAAKjF,OAAL,CAAakF,IAAb,CAAkB,CAACH,MAAM,CAACI,OAAR,EAAiBH,QAAjB,EAA2BI,mBAAM,CAACC,OAAlC,CAAlB,EAA8DL,QAA9D,OAFJ,EAIGM,KAJH,CAISpE,OAAO,CAACqE,KAJjB;;;CAOQC,4BAAAA,4DAAwBT,MAAD;;;QAC1B/E,OAAL,CACG6E,MADH,CACUE,MAAM,CAAC3E,YADjB,EAEGvD,IAFH,sBAGIoI,OAAKjF,OAAL,CAAakF,IAAb,CACE,CAACH,MAAM,CAACI,OAAR,EAAiBJ,MAAM,CAAC3E,YAAxB,EAAsCgF,mBAAM,CAACK,UAA7C,CADF,EAEEV,MAAM,CAAC3E,YAFT,IAHJ,EAQGkF,KARH,sBASIL,OAAKjF,OAAL,CAAakF,IAAb,CACE,CAACH,MAAM,CAACI,OAAR,EAAiBJ,MAAM,CAAC3E,YAAxB,EAAsCgF,mBAAM,CAACK,UAA7C,CADF,EAEEV,MAAM,CAAC3E,YAFT,IATJ;;;;;;;;;;;;;"}
|