tedious 20.1.0 → 20.2.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 (48) hide show
  1. package/lib/all-headers.js +4 -4
  2. package/lib/all-headers.js.map +1 -1
  3. package/lib/bulk-load.js +3 -3
  4. package/lib/bulk-load.js.map +1 -1
  5. package/lib/data-types/bigint.js +2 -2
  6. package/lib/data-types/bigint.js.map +1 -1
  7. package/lib/data-types/datetime2.js +2 -2
  8. package/lib/data-types/datetime2.js.map +1 -1
  9. package/lib/data-types/datetimeoffset.js +2 -2
  10. package/lib/data-types/datetimeoffset.js.map +1 -1
  11. package/lib/data-types/time.js +2 -2
  12. package/lib/data-types/time.js.map +1 -1
  13. package/lib/data-types/tvp.js +5 -6
  14. package/lib/data-types/tvp.js.map +1 -1
  15. package/lib/data-types/varbinary.js +1 -3
  16. package/lib/data-types/varbinary.js.map +1 -1
  17. package/lib/ntlm-payload.js +7 -9
  18. package/lib/ntlm-payload.js.map +1 -1
  19. package/lib/prelogin-payload.js +8 -9
  20. package/lib/prelogin-payload.js.map +1 -1
  21. package/lib/request.d.ts +33 -0
  22. package/lib/request.js +20 -1
  23. package/lib/request.js.map +1 -1
  24. package/lib/rpcrequest-payload.js +6 -6
  25. package/lib/rpcrequest-payload.js.map +1 -1
  26. package/lib/sqlbatch-payload.js +2 -2
  27. package/lib/sqlbatch-payload.js.map +1 -1
  28. package/lib/token/colinfo-token-parser.d.ts +5 -0
  29. package/lib/token/colinfo-token-parser.js +68 -0
  30. package/lib/token/colinfo-token-parser.js.map +1 -0
  31. package/lib/token/handler.d.ts +5 -1
  32. package/lib/token/handler.js +17 -1
  33. package/lib/token/handler.js.map +1 -1
  34. package/lib/token/stream-parser.d.ts +3 -1
  35. package/lib/token/stream-parser.js +41 -1
  36. package/lib/token/stream-parser.js.map +1 -1
  37. package/lib/token/tabname-token-parser.d.ts +5 -0
  38. package/lib/token/tabname-token-parser.js +51 -0
  39. package/lib/token/tabname-token-parser.js.map +1 -0
  40. package/lib/token/token.d.ts +47 -0
  41. package/lib/token/token.js +22 -2
  42. package/lib/token/token.js.map +1 -1
  43. package/lib/tracking-buffer/writable-tracking-buffer.d.ts +58 -21
  44. package/lib/tracking-buffer/writable-tracking-buffer.js +187 -170
  45. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
  46. package/lib/transaction.js +5 -5
  47. package/lib/transaction.js.map +1 -1
  48. package/package.json +1 -1
@@ -6,92 +6,157 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  const SHIFT_LEFT_32 = (1 << 16) * (1 << 16);
8
8
  const SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
9
- const UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);
10
- const ZERO_LENGTH_BUFFER = Buffer.alloc(0);
11
- /**
12
- A Buffer-like class that tracks position.
13
9
 
14
- As values are written, the position advances by the size of the written data.
15
- When writing, automatically allocates new buffers if there's not enough space.
10
+ // The first chunk starts small and doubles up to `CHUNK_SIZE`: most payloads
11
+ // built through this class are a few dozen bytes.
12
+ const MIN_CHUNK_SIZE = 64;
13
+ /**
14
+ * A write-side buffer list.
15
+ *
16
+ * Bytes are appended through the `write*` methods, and taken out again
17
+ * either as a single buffer (`data`, `slice`) or as a list of chunks
18
+ * (`getBuffers`, `consume`). Small pieces are coalesced into chunks of at
19
+ * most `CHUNK_SIZE` bytes. Buffers of at least `CHUNK_SIZE` bytes written
20
+ * through `writeBuffer` are referenced rather than copied, so that large
21
+ * values cost no extra memory. (The caller must therefore not modify such
22
+ * buffers until they have been consumed.)
23
+ *
24
+ * The consumer side (`length`, `getBuffers`, `consume`, `slice`) mirrors
25
+ * that of `bl`'s `BufferList`.
16
26
  */
17
27
  class WritableTrackingBuffer {
18
- constructor(initialSize, encoding, doubleSizeGrowth) {
19
- this.initialSize = initialSize;
20
- this.encoding = encoding || 'ucs2';
21
- this.doubleSizeGrowth = doubleSizeGrowth || false;
22
- this.buffer = Buffer.alloc(this.initialSize, 0);
23
- this.compositeBuffer = ZERO_LENGTH_BUFFER;
24
- this.position = 0;
28
+ /**
29
+ * The size of the chunks a `WritableTrackingBuffer` produces, and the size
30
+ * from which written buffers are referenced rather than copied.
31
+ */
32
+ static CHUNK_SIZE = 8 * 1024;
33
+
34
+ /**
35
+ * The number of bytes appended and not yet consumed.
36
+ */
37
+
38
+ constructor() {
39
+ this.length = 0;
40
+ this._bufs = [];
41
+ this._open = Buffer.allocUnsafe(MIN_CHUNK_SIZE);
42
+ this._pos = 0;
25
43
  }
44
+
45
+ /**
46
+ * All appended and not yet consumed bytes as a single buffer.
47
+ *
48
+ * When everything fits into a single chunk this is a view of that chunk
49
+ * rather than a copy. The returned buffer must not be modified.
50
+ */
26
51
  get data() {
27
- this.newBuffer(0);
28
- return this.compositeBuffer;
29
- }
30
- copyFrom(buffer) {
31
- const length = buffer.length;
32
- this.makeRoomFor(length);
33
- buffer.copy(this.buffer, this.position);
34
- this.position += length;
35
- }
36
- makeRoomFor(requiredLength) {
37
- if (this.buffer.length - this.position < requiredLength) {
38
- if (this.doubleSizeGrowth) {
39
- let size = Math.max(128, this.buffer.length * 2);
40
- while (size < requiredLength) {
41
- size *= 2;
42
- }
43
- this.newBuffer(size);
44
- } else {
45
- this.newBuffer(requiredLength);
52
+ if (this._bufs.length === 0) {
53
+ return this._open.subarray(0, this._pos);
54
+ }
55
+ return this.slice();
56
+ }
57
+ _seal() {
58
+ if (this._pos > 0) {
59
+ this._bufs.push(this._open.subarray(0, this._pos));
60
+ this._open = Buffer.allocUnsafe(Math.min(this._open.length * 2, WritableTrackingBuffer.CHUNK_SIZE));
61
+ this._pos = 0;
62
+ }
63
+ }
64
+ _ensure(size) {
65
+ if (this._open.length - this._pos < size) {
66
+ this._seal();
67
+ if (this._open.length < size) {
68
+ this._open = Buffer.allocUnsafe(size);
46
69
  }
47
70
  }
48
71
  }
49
- newBuffer(size) {
50
- const buffer = this.buffer.slice(0, this.position);
51
- this.compositeBuffer = Buffer.concat([this.compositeBuffer, buffer]);
52
- this.buffer = size === 0 ? ZERO_LENGTH_BUFFER : Buffer.alloc(size, 0);
53
- this.position = 0;
72
+
73
+ /**
74
+ * The chunks holding all appended and not yet consumed bytes.
75
+ *
76
+ * The returned array is the list's own: later appends can add chunks to
77
+ * it. `consume` does not modify it, so taking the chunks and consuming
78
+ * them right away yields a stable snapshot.
79
+ */
80
+ getBuffers() {
81
+ this._seal();
82
+ return this._bufs;
83
+ }
84
+
85
+ /**
86
+ * Discards the given number of bytes from the front of the list.
87
+ */
88
+ consume(bytes) {
89
+ this._seal();
90
+ const bufs = this._bufs;
91
+ let i = 0;
92
+ while (i < bufs.length && bytes >= bufs[i].length) {
93
+ bytes -= bufs[i].length;
94
+ this.length -= bufs[i].length;
95
+ i++;
96
+ }
97
+
98
+ // A fresh array, so that a previously returned `getBuffers()` result
99
+ // stays intact.
100
+ this._bufs = bufs.slice(i);
101
+ if (bytes > 0 && this._bufs.length) {
102
+ this._bufs[0] = this._bufs[0].subarray(bytes);
103
+ this.length -= bytes;
104
+ }
105
+ return this;
106
+ }
107
+
108
+ /**
109
+ * Copies all appended and not yet consumed bytes into a new buffer.
110
+ */
111
+ slice() {
112
+ this._seal();
113
+ const result = Buffer.allocUnsafe(this.length);
114
+ let position = 0;
115
+ for (const buffer of this._bufs) {
116
+ position += buffer.copy(result, position);
117
+ }
118
+ return result;
54
119
  }
55
120
  writeUInt8(value) {
56
- const length = 1;
57
- this.makeRoomFor(length);
58
- this.buffer.writeUInt8(value, this.position);
59
- this.position += length;
121
+ this._ensure(1);
122
+ this._open.writeUInt8(value, this._pos);
123
+ this._pos += 1;
124
+ this.length += 1;
60
125
  }
61
126
  writeUInt16LE(value) {
62
- const length = 2;
63
- this.makeRoomFor(length);
64
- this.buffer.writeUInt16LE(value, this.position);
65
- this.position += length;
127
+ this._ensure(2);
128
+ this._open.writeUInt16LE(value, this._pos);
129
+ this._pos += 2;
130
+ this.length += 2;
66
131
  }
67
132
  writeUShort(value) {
68
133
  this.writeUInt16LE(value);
69
134
  }
70
135
  writeUInt16BE(value) {
71
- const length = 2;
72
- this.makeRoomFor(length);
73
- this.buffer.writeUInt16BE(value, this.position);
74
- this.position += length;
136
+ this._ensure(2);
137
+ this._open.writeUInt16BE(value, this._pos);
138
+ this._pos += 2;
139
+ this.length += 2;
75
140
  }
76
141
  writeUInt24LE(value) {
77
- const length = 3;
78
- this.makeRoomFor(length);
79
- this.buffer[this.position + 2] = value >>> 16 & 0xff;
80
- this.buffer[this.position + 1] = value >>> 8 & 0xff;
81
- this.buffer[this.position] = value & 0xff;
82
- this.position += length;
142
+ this._ensure(3);
143
+ this._open[this._pos + 2] = value >>> 16 & 0xff;
144
+ this._open[this._pos + 1] = value >>> 8 & 0xff;
145
+ this._open[this._pos] = value & 0xff;
146
+ this._pos += 3;
147
+ this.length += 3;
83
148
  }
84
149
  writeUInt32LE(value) {
85
- const length = 4;
86
- this.makeRoomFor(length);
87
- this.buffer.writeUInt32LE(value, this.position);
88
- this.position += length;
150
+ this._ensure(4);
151
+ this._open.writeUInt32LE(value, this._pos);
152
+ this._pos += 4;
153
+ this.length += 4;
89
154
  }
90
155
  writeBigInt64LE(value) {
91
- const length = 8;
92
- this.makeRoomFor(length);
93
- this.buffer.writeBigInt64LE(value, this.position);
94
- this.position += length;
156
+ this._ensure(8);
157
+ this._open.writeBigInt64LE(value, this._pos);
158
+ this._pos += 8;
159
+ this.length += 8;
95
160
  }
96
161
  writeInt64LE(value) {
97
162
  this.writeBigInt64LE(BigInt(value));
@@ -100,16 +165,16 @@ class WritableTrackingBuffer {
100
165
  this.writeBigUInt64LE(BigInt(value));
101
166
  }
102
167
  writeBigUInt64LE(value) {
103
- const length = 8;
104
- this.makeRoomFor(length);
105
- this.buffer.writeBigUInt64LE(value, this.position);
106
- this.position += length;
168
+ this._ensure(8);
169
+ this._open.writeBigUInt64LE(value, this._pos);
170
+ this._pos += 8;
171
+ this.length += 8;
107
172
  }
108
173
  writeUInt32BE(value) {
109
- const length = 4;
110
- this.makeRoomFor(length);
111
- this.buffer.writeUInt32BE(value, this.position);
112
- this.position += length;
174
+ this._ensure(4);
175
+ this._open.writeUInt32BE(value, this._pos);
176
+ this._pos += 4;
177
+ this.length += 4;
113
178
  }
114
179
  writeUInt40LE(value) {
115
180
  // inspired by https://github.com/dpw/node-buffer-more-ints
@@ -117,57 +182,54 @@ class WritableTrackingBuffer {
117
182
  this.writeUInt8(Math.floor(value * SHIFT_RIGHT_32));
118
183
  }
119
184
  writeInt8(value) {
120
- const length = 1;
121
- this.makeRoomFor(length);
122
- this.buffer.writeInt8(value, this.position);
123
- this.position += length;
185
+ this._ensure(1);
186
+ this._open.writeInt8(value, this._pos);
187
+ this._pos += 1;
188
+ this.length += 1;
124
189
  }
125
190
  writeInt16LE(value) {
126
- const length = 2;
127
- this.makeRoomFor(length);
128
- this.buffer.writeInt16LE(value, this.position);
129
- this.position += length;
191
+ this._ensure(2);
192
+ this._open.writeInt16LE(value, this._pos);
193
+ this._pos += 2;
194
+ this.length += 2;
130
195
  }
131
196
  writeInt16BE(value) {
132
- const length = 2;
133
- this.makeRoomFor(length);
134
- this.buffer.writeInt16BE(value, this.position);
135
- this.position += length;
197
+ this._ensure(2);
198
+ this._open.writeInt16BE(value, this._pos);
199
+ this._pos += 2;
200
+ this.length += 2;
136
201
  }
137
202
  writeInt32LE(value) {
138
- const length = 4;
139
- this.makeRoomFor(length);
140
- this.buffer.writeInt32LE(value, this.position);
141
- this.position += length;
203
+ this._ensure(4);
204
+ this._open.writeInt32LE(value, this._pos);
205
+ this._pos += 4;
206
+ this.length += 4;
142
207
  }
143
208
  writeInt32BE(value) {
144
- const length = 4;
145
- this.makeRoomFor(length);
146
- this.buffer.writeInt32BE(value, this.position);
147
- this.position += length;
209
+ this._ensure(4);
210
+ this._open.writeInt32BE(value, this._pos);
211
+ this._pos += 4;
212
+ this.length += 4;
148
213
  }
149
214
  writeFloatLE(value) {
150
- const length = 4;
151
- this.makeRoomFor(length);
152
- this.buffer.writeFloatLE(value, this.position);
153
- this.position += length;
215
+ this._ensure(4);
216
+ this._open.writeFloatLE(value, this._pos);
217
+ this._pos += 4;
218
+ this.length += 4;
154
219
  }
155
220
  writeDoubleLE(value) {
156
- const length = 8;
157
- this.makeRoomFor(length);
158
- this.buffer.writeDoubleLE(value, this.position);
159
- this.position += length;
221
+ this._ensure(8);
222
+ this._open.writeDoubleLE(value, this._pos);
223
+ this._pos += 8;
224
+ this.length += 8;
160
225
  }
161
226
  writeString(value, encoding) {
162
- if (encoding == null) {
163
- encoding = this.encoding;
164
- }
165
- const length = Buffer.byteLength(value, encoding);
166
- this.makeRoomFor(length);
167
-
168
- // $FlowFixMe https://github.com/facebook/flow/pull/5398
169
- this.buffer.write(value, this.position, encoding);
170
- this.position += length;
227
+ // UCS-2 is two bytes per UTF-16 code unit.
228
+ const length = encoding === 'ucs2' ? value.length * 2 : Buffer.byteLength(value, encoding);
229
+ this._ensure(length);
230
+ this._open.write(value, this._pos, encoding);
231
+ this._pos += length;
232
+ this.length += length;
171
233
  }
172
234
  writeBVarchar(value, encoding) {
173
235
  this.writeUInt8(value.length);
@@ -177,73 +239,28 @@ class WritableTrackingBuffer {
177
239
  this.writeUInt16LE(value.length);
178
240
  this.writeString(value, encoding);
179
241
  }
180
-
181
- // TODO: Figure out what types are passed in other than `Buffer`
182
- writeUsVarbyte(value, encoding) {
183
- if (encoding == null) {
184
- encoding = this.encoding;
185
- }
186
- let length;
187
- if (value instanceof Buffer) {
188
- length = value.length;
189
- } else {
190
- value = value.toString();
191
- length = Buffer.byteLength(value, encoding);
192
- }
193
- this.writeUInt16LE(length);
194
- if (value instanceof Buffer) {
195
- this.writeBuffer(value);
196
- } else {
197
- this.makeRoomFor(length);
198
- // $FlowFixMe https://github.com/facebook/flow/pull/5398
199
- this.buffer.write(value, this.position, encoding);
200
- this.position += length;
201
- }
242
+ writeUsVarbyte(value) {
243
+ this.writeUInt16LE(value.length);
244
+ this.writeBuffer(value);
202
245
  }
203
- writePLPBody(value, encoding) {
204
- if (encoding == null) {
205
- encoding = this.encoding;
206
- }
207
- let length;
208
- if (value instanceof Buffer) {
209
- length = value.length;
210
- } else {
211
- value = value.toString();
212
- length = Buffer.byteLength(value, encoding);
213
- }
214
246
 
215
- // Length of all chunks.
216
- // this.writeUInt64LE(length);
217
- // unknown seems to work better here - might revisit later.
218
- this.writeBuffer(UNKNOWN_PLP_LEN);
219
-
220
- // In the UNKNOWN_PLP_LEN case, the data is represented as a series of zero or more chunks.
221
- if (length > 0) {
222
- // One chunk.
223
- this.writeUInt32LE(length);
224
- if (value instanceof Buffer) {
225
- this.writeBuffer(value);
226
- } else {
227
- this.makeRoomFor(length);
228
- this.buffer.write(value, this.position, encoding);
229
- this.position += length;
230
- }
231
- }
232
-
233
- // PLP_TERMINATOR (no more chunks).
234
- this.writeUInt32LE(0);
235
- }
247
+ /**
248
+ * Appends a buffer. Buffers of at least `CHUNK_SIZE` bytes are referenced
249
+ * rather than copied, and must not be modified until consumed.
250
+ */
236
251
  writeBuffer(value) {
237
252
  const length = value.length;
238
- this.makeRoomFor(length);
239
- value.copy(this.buffer, this.position);
240
- this.position += length;
241
- }
242
- writeMoney(value) {
243
- this.writeInt32LE(Math.floor(value * SHIFT_RIGHT_32));
244
- this.writeInt32LE(value & -1);
253
+ if (length >= WritableTrackingBuffer.CHUNK_SIZE) {
254
+ this._seal();
255
+ this._bufs.push(value);
256
+ } else {
257
+ this._ensure(length);
258
+ value.copy(this._open, this._pos);
259
+ this._pos += length;
260
+ }
261
+ this.length += length;
245
262
  }
246
263
  }
247
264
  var _default = exports.default = WritableTrackingBuffer;
248
265
  module.exports = WritableTrackingBuffer;
249
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTSElGVF9MRUZUXzMyIiwiU0hJRlRfUklHSFRfMzIiLCJVTktOT1dOX1BMUF9MRU4iLCJCdWZmZXIiLCJmcm9tIiwiWkVST19MRU5HVEhfQlVGRkVSIiwiYWxsb2MiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwiY29uc3RydWN0b3IiLCJpbml0aWFsU2l6ZSIsImVuY29kaW5nIiwiZG91YmxlU2l6ZUdyb3d0aCIsImJ1ZmZlciIsImNvbXBvc2l0ZUJ1ZmZlciIsInBvc2l0aW9uIiwiZGF0YSIsIm5ld0J1ZmZlciIsImNvcHlGcm9tIiwibGVuZ3RoIiwibWFrZVJvb21Gb3IiLCJjb3B5IiwicmVxdWlyZWRMZW5ndGgiLCJzaXplIiwiTWF0aCIsIm1heCIsInNsaWNlIiwiY29uY2F0Iiwid3JpdGVVSW50OCIsInZhbHVlIiwid3JpdGVVSW50MTZMRSIsIndyaXRlVVNob3J0Iiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDI0TEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVCaWdJbnQ2NExFIiwid3JpdGVJbnQ2NExFIiwiQmlnSW50Iiwid3JpdGVVSW50NjRMRSIsIndyaXRlQmlnVUludDY0TEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVVSW50NDBMRSIsIndyaXRlSW50MzJMRSIsImZsb29yIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlU3RyaW5nIiwiYnl0ZUxlbmd0aCIsIndyaXRlIiwid3JpdGVCVmFyY2hhciIsIndyaXRlVXNWYXJjaGFyIiwid3JpdGVVc1ZhcmJ5dGUiLCJ0b1N0cmluZyIsIndyaXRlQnVmZmVyIiwid3JpdGVQTFBCb2R5Iiwid3JpdGVNb25leSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTSElGVF9MRUZUXzMyID0gKDEgPDwgMTYpICogKDEgPDwgMTYpO1xuY29uc3QgU0hJRlRfUklHSFRfMzIgPSAxIC8gU0hJRlRfTEVGVF8zMjtcbmNvbnN0IFVOS05PV05fUExQX0xFTiA9IEJ1ZmZlci5mcm9tKFsweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmXSk7XG5jb25zdCBaRVJPX0xFTkdUSF9CVUZGRVIgPSBCdWZmZXIuYWxsb2MoMCk7XG5cbmV4cG9ydCB0eXBlIEVuY29kaW5nID0gJ3V0ZjgnIHwgJ3VjczInIHwgJ2FzY2lpJztcblxuLyoqXG4gIEEgQnVmZmVyLWxpa2UgY2xhc3MgdGhhdCB0cmFja3MgcG9zaXRpb24uXG5cbiAgQXMgdmFsdWVzIGFyZSB3cml0dGVuLCB0aGUgcG9zaXRpb24gYWR2YW5jZXMgYnkgdGhlIHNpemUgb2YgdGhlIHdyaXR0ZW4gZGF0YS5cbiAgV2hlbiB3cml0aW5nLCBhdXRvbWF0aWNhbGx5IGFsbG9jYXRlcyBuZXcgYnVmZmVycyBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggc3BhY2UuXG4gKi9cbmNsYXNzIFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIge1xuICBkZWNsYXJlIGluaXRpYWxTaXplOiBudW1iZXI7XG4gIGRlY2xhcmUgZW5jb2Rpbmc6IEVuY29kaW5nO1xuICBkZWNsYXJlIGRvdWJsZVNpemVHcm93dGg6IGJvb2xlYW47XG5cbiAgZGVjbGFyZSBidWZmZXI6IEJ1ZmZlcjtcbiAgZGVjbGFyZSBjb21wb3NpdGVCdWZmZXI6IEJ1ZmZlcjtcblxuICBkZWNsYXJlIHBvc2l0aW9uOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbFNpemU6IG51bWJlciwgZW5jb2Rpbmc/OiBFbmNvZGluZyB8IG51bGwsIGRvdWJsZVNpemVHcm93dGg/OiBib29sZWFuKSB7XG4gICAgdGhpcy5pbml0aWFsU2l6ZSA9IGluaXRpYWxTaXplO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAndWNzMic7XG4gICAgdGhpcy5kb3VibGVTaXplR3Jvd3RoID0gZG91YmxlU2l6ZUdyb3d0aCB8fCBmYWxzZTtcbiAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyh0aGlzLmluaXRpYWxTaXplLCAwKTtcbiAgICB0aGlzLmNvbXBvc2l0ZUJ1ZmZlciA9IFpFUk9fTEVOR1RIX0JVRkZFUjtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHRoaXMubmV3QnVmZmVyKDApO1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZUJ1ZmZlcjtcbiAgfVxuXG4gIGNvcHlGcm9tKGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5idWZmZXIsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgbWFrZVJvb21Gb3IocmVxdWlyZWRMZW5ndGg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggLSB0aGlzLnBvc2l0aW9uIDwgcmVxdWlyZWRMZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLmRvdWJsZVNpemVHcm93dGgpIHtcbiAgICAgICAgbGV0IHNpemUgPSBNYXRoLm1heCgxMjgsIHRoaXMuYnVmZmVyLmxlbmd0aCAqIDIpO1xuICAgICAgICB3aGlsZSAoc2l6ZSA8IHJlcXVpcmVkTGVuZ3RoKSB7XG4gICAgICAgICAgc2l6ZSAqPSAyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV3QnVmZmVyKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXdCdWZmZXIocmVxdWlyZWRMZW5ndGgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5ld0J1ZmZlcihzaXplOiBudW1iZXIpIHtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmJ1ZmZlci5zbGljZSgwLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLmNvbXBvc2l0ZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuY29tcG9zaXRlQnVmZmVyLCBidWZmZXJdKTtcbiAgICB0aGlzLmJ1ZmZlciA9IChzaXplID09PSAwKSA/IFpFUk9fTEVOR1RIX0JVRkZFUiA6IEJ1ZmZlci5hbGxvYyhzaXplLCAwKTtcbiAgICB0aGlzLnBvc2l0aW9uID0gMDtcbiAgfVxuXG4gIHdyaXRlVUludDgodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IDE7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlVUludDgodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MTZMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gMjtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVVSW50MTZMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVVTaG9ydCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZVVJbnQxNkxFKHZhbHVlKTtcbiAgfVxuXG4gIHdyaXRlVUludDE2QkUodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbmd0aCA9IDI7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlVUludDE2QkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gMztcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXJbdGhpcy5wb3NpdGlvbiArIDJdID0gKHZhbHVlID4+PiAxNikgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb24gKyAxXSA9ICh2YWx1ZSA+Pj4gOCkgJiAweGZmO1xuICAgIHRoaXMuYnVmZmVyW3RoaXMucG9zaXRpb25dID0gdmFsdWUgJiAweGZmO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVVSW50MzJMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gNDtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVVSW50MzJMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJpZ0ludDY0TEUodmFsdWU6IGJpZ2ludCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IDg7XG4gICAgdGhpcy5tYWtlUm9vbUZvcihsZW5ndGgpO1xuICAgIHRoaXMuYnVmZmVyLndyaXRlQmlnSW50NjRMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUludDY0TEUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMud3JpdGVCaWdJbnQ2NExFKEJpZ0ludCh2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVVSW50NjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZUJpZ1VJbnQ2NExFKEJpZ0ludCh2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVCaWdVSW50NjRMRSh2YWx1ZTogYmlnaW50KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gODtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVCaWdVSW50NjRMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZVVJbnQzMkJFKHZhbHVlLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlVUludDQwTEUodmFsdWU6IG51bWJlcikge1xuICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kcHcvbm9kZS1idWZmZXItbW9yZS1pbnRzXG4gICAgdGhpcy53cml0ZUludDMyTEUodmFsdWUgJiAtMSk7XG4gICAgdGhpcy53cml0ZVVJbnQ4KE1hdGguZmxvb3IodmFsdWUgKiBTSElGVF9SSUdIVF8zMikpO1xuICB9XG5cbiAgd3JpdGVJbnQ4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAxO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDgodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQxNkxFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAyO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDE2TEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQxNkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSAyO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDE2QkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQzMkxFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDMyTEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUludDMyQkUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVGbG9hdExFKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSA0O1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlci53cml0ZUZsb2F0TEUodmFsdWUsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gbGVuZ3RoO1xuICB9XG5cbiAgd3JpdGVEb3VibGVMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gODtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG4gICAgdGhpcy5idWZmZXIud3JpdGVEb3VibGVMRSh2YWx1ZSwgdGhpcy5wb3NpdGlvbik7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZVN0cmluZyh2YWx1ZTogc3RyaW5nLCBlbmNvZGluZz86IEVuY29kaW5nIHwgbnVsbCkge1xuICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7XG4gICAgICBlbmNvZGluZyA9IHRoaXMuZW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgodmFsdWUsIGVuY29kaW5nKTtcbiAgICB0aGlzLm1ha2VSb29tRm9yKGxlbmd0aCk7XG5cbiAgICAvLyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L3B1bGwvNTM5OFxuICAgIHRoaXMuYnVmZmVyLndyaXRlKHZhbHVlLCB0aGlzLnBvc2l0aW9uLCBlbmNvZGluZyk7XG4gICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJWYXJjaGFyKHZhbHVlOiBzdHJpbmcsIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgdGhpcy53cml0ZVVJbnQ4KHZhbHVlLmxlbmd0aCk7XG4gICAgdGhpcy53cml0ZVN0cmluZyh2YWx1ZSwgZW5jb2RpbmcpO1xuICB9XG5cbiAgd3JpdGVVc1ZhcmNoYXIodmFsdWU6IHN0cmluZywgZW5jb2Rpbmc/OiBFbmNvZGluZyB8IG51bGwpIHtcbiAgICB0aGlzLndyaXRlVUludDE2TEUodmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLndyaXRlU3RyaW5nKHZhbHVlLCBlbmNvZGluZyk7XG4gIH1cblxuICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgdHlwZXMgYXJlIHBhc3NlZCBpbiBvdGhlciB0aGFuIGBCdWZmZXJgXG4gIHdyaXRlVXNWYXJieXRlKHZhbHVlOiBhbnksIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgaWYgKGVuY29kaW5nID09IG51bGwpIHtcbiAgICAgIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgZW5jb2RpbmcpO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVUludDE2TEUobGVuZ3RoKTtcblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgdGhpcy53cml0ZUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICAgIC8vICRGbG93Rml4TWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvcHVsbC81Mzk4XG4gICAgICB0aGlzLmJ1ZmZlci53cml0ZSh2YWx1ZSwgdGhpcy5wb3NpdGlvbiwgZW5jb2RpbmcpO1xuICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVQTFBCb2R5KHZhbHVlOiBhbnksIGVuY29kaW5nPzogRW5jb2RpbmcgfCBudWxsKSB7XG4gICAgaWYgKGVuY29kaW5nID09IG51bGwpIHtcbiAgICAgIGVuY29kaW5nID0gdGhpcy5lbmNvZGluZztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSwgZW5jb2RpbmcpO1xuICAgIH1cblxuICAgIC8vIExlbmd0aCBvZiBhbGwgY2h1bmtzLlxuICAgIC8vIHRoaXMud3JpdGVVSW50NjRMRShsZW5ndGgpO1xuICAgIC8vIHVua25vd24gc2VlbXMgdG8gd29yayBiZXR0ZXIgaGVyZSAtIG1pZ2h0IHJldmlzaXQgbGF0ZXIuXG4gICAgdGhpcy53cml0ZUJ1ZmZlcihVTktOT1dOX1BMUF9MRU4pO1xuXG4gICAgLy8gSW4gdGhlIFVOS05PV05fUExQX0xFTiBjYXNlLCB0aGUgZGF0YSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBvZiB6ZXJvIG9yIG1vcmUgY2h1bmtzLlxuICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAvLyBPbmUgY2h1bmsuXG4gICAgICB0aGlzLndyaXRlVUludDMyTEUobGVuZ3RoKTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICB0aGlzLndyaXRlQnVmZmVyKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICAgICAgdGhpcy5idWZmZXIud3JpdGUodmFsdWUsIHRoaXMucG9zaXRpb24sIGVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbiArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUExQX1RFUk1JTkFUT1IgKG5vIG1vcmUgY2h1bmtzKS5cbiAgICB0aGlzLndyaXRlVUludDMyTEUoMCk7XG4gIH1cblxuICB3cml0ZUJ1ZmZlcih2YWx1ZTogQnVmZmVyKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgIHRoaXMubWFrZVJvb21Gb3IobGVuZ3RoKTtcbiAgICB2YWx1ZS5jb3B5KHRoaXMuYnVmZmVyLCB0aGlzLnBvc2l0aW9uKTtcbiAgICB0aGlzLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlTW9uZXkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKE1hdGguZmxvb3IodmFsdWUgKiBTSElGVF9SSUdIVF8zMikpO1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKHZhbHVlICYgLTEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU1BLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUs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
266
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTSElGVF9MRUZUXzMyIiwiU0hJRlRfUklHSFRfMzIiLCJNSU5fQ0hVTktfU0laRSIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJDSFVOS19TSVpFIiwiY29uc3RydWN0b3IiLCJsZW5ndGgiLCJfYnVmcyIsIl9vcGVuIiwiQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJfcG9zIiwiZGF0YSIsInN1YmFycmF5Iiwic2xpY2UiLCJfc2VhbCIsInB1c2giLCJNYXRoIiwibWluIiwiX2Vuc3VyZSIsInNpemUiLCJnZXRCdWZmZXJzIiwiY29uc3VtZSIsImJ5dGVzIiwiYnVmcyIsImkiLCJyZXN1bHQiLCJwb3NpdGlvbiIsImJ1ZmZlciIsImNvcHkiLCJ3cml0ZVVJbnQ4IiwidmFsdWUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVU2hvcnQiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MjRMRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZUJpZ0ludDY0TEUiLCJ3cml0ZUludDY0TEUiLCJCaWdJbnQiLCJ3cml0ZVVJbnQ2NExFIiwid3JpdGVCaWdVSW50NjRMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZVVJbnQ0MExFIiwid3JpdGVJbnQzMkxFIiwiZmxvb3IiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVTdHJpbmciLCJlbmNvZGluZyIsImJ5dGVMZW5ndGgiLCJ3cml0ZSIsIndyaXRlQlZhcmNoYXIiLCJ3cml0ZVVzVmFyY2hhciIsIndyaXRlVXNWYXJieXRlIiwid3JpdGVCdWZmZXIiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU0hJRlRfTEVGVF8zMiA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KTtcbmNvbnN0IFNISUZUX1JJR0hUXzMyID0gMSAvIFNISUZUX0xFRlRfMzI7XG5cbi8vIFRoZSBmaXJzdCBjaHVuayBzdGFydHMgc21hbGwgYW5kIGRvdWJsZXMgdXAgdG8gYENIVU5LX1NJWkVgOiBtb3N0IHBheWxvYWRzXG4vLyBidWlsdCB0aHJvdWdoIHRoaXMgY2xhc3MgYXJlIGEgZmV3IGRvemVuIGJ5dGVzLlxuY29uc3QgTUlOX0NIVU5LX1NJWkUgPSA2NDtcblxuZXhwb3J0IHR5cGUgRW5jb2RpbmcgPSAndXRmOCcgfCAndWNzMicgfCAnYXNjaWknO1xuXG4vKipcbiAqIEEgd3JpdGUtc2lkZSBidWZmZXIgbGlzdC5cbiAqXG4gKiBCeXRlcyBhcmUgYXBwZW5kZWQgdGhyb3VnaCB0aGUgYHdyaXRlKmAgbWV0aG9kcywgYW5kIHRha2VuIG91dCBhZ2FpblxuICogZWl0aGVyIGFzIGEgc2luZ2xlIGJ1ZmZlciAoYGRhdGFgLCBgc2xpY2VgKSBvciBhcyBhIGxpc3Qgb2YgY2h1bmtzXG4gKiAoYGdldEJ1ZmZlcnNgLCBgY29uc3VtZWApLiBTbWFsbCBwaWVjZXMgYXJlIGNvYWxlc2NlZCBpbnRvIGNodW5rcyBvZiBhdFxuICogbW9zdCBgQ0hVTktfU0laRWAgYnl0ZXMuIEJ1ZmZlcnMgb2YgYXQgbGVhc3QgYENIVU5LX1NJWkVgIGJ5dGVzIHdyaXR0ZW5cbiAqIHRocm91Z2ggYHdyaXRlQnVmZmVyYCBhcmUgcmVmZXJlbmNlZCByYXRoZXIgdGhhbiBjb3BpZWQsIHNvIHRoYXQgbGFyZ2VcbiAqIHZhbHVlcyBjb3N0IG5vIGV4dHJhIG1lbW9yeS4gKFRoZSBjYWxsZXIgbXVzdCB0aGVyZWZvcmUgbm90IG1vZGlmeSBzdWNoXG4gKiBidWZmZXJzIHVudGlsIHRoZXkgaGF2ZSBiZWVuIGNvbnN1bWVkLilcbiAqXG4gKiBUaGUgY29uc3VtZXIgc2lkZSAoYGxlbmd0aGAsIGBnZXRCdWZmZXJzYCwgYGNvbnN1bWVgLCBgc2xpY2VgKSBtaXJyb3JzXG4gKiB0aGF0IG9mIGBibGAncyBgQnVmZmVyTGlzdGAuXG4gKi9cbmNsYXNzIFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIge1xuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNodW5rcyBhIGBXcml0YWJsZVRyYWNraW5nQnVmZmVyYCBwcm9kdWNlcywgYW5kIHRoZSBzaXplXG4gICAqIGZyb20gd2hpY2ggd3JpdHRlbiBidWZmZXJzIGFyZSByZWZlcmVuY2VkIHJhdGhlciB0aGFuIGNvcGllZC5cbiAgICovXG4gIHN0YXRpYyByZWFkb25seSBDSFVOS19TSVpFID0gOCAqIDEwMjQ7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgYXBwZW5kZWQgYW5kIG5vdCB5ZXQgY29uc3VtZWQuXG4gICAqL1xuICBkZWNsYXJlIGxlbmd0aDogbnVtYmVyO1xuXG4gIGRlY2xhcmUgcHJpdmF0ZSBfYnVmczogQnVmZmVyW107XG4gIGRlY2xhcmUgcHJpdmF0ZSBfb3BlbjogQnVmZmVyO1xuICBkZWNsYXJlIHByaXZhdGUgX3BvczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLl9idWZzID0gW107XG4gICAgdGhpcy5fb3BlbiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShNSU5fQ0hVTktfU0laRSk7XG4gICAgdGhpcy5fcG9zID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgYXBwZW5kZWQgYW5kIG5vdCB5ZXQgY29uc3VtZWQgYnl0ZXMgYXMgYSBzaW5nbGUgYnVmZmVyLlxuICAgKlxuICAgKiBXaGVuIGV2ZXJ5dGhpbmcgZml0cyBpbnRvIGEgc2luZ2xlIGNodW5rIHRoaXMgaXMgYSB2aWV3IG9mIHRoYXQgY2h1bmtcbiAgICogcmF0aGVyIHRoYW4gYSBjb3B5LiBUaGUgcmV0dXJuZWQgYnVmZmVyIG11c3Qgbm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgZ2V0IGRhdGEoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fYnVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9vcGVuLnN1YmFycmF5KDAsIHRoaXMuX3Bvcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2xpY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlYWwoKSB7XG4gICAgaWYgKHRoaXMuX3BvcyA+IDApIHtcbiAgICAgIHRoaXMuX2J1ZnMucHVzaCh0aGlzLl9vcGVuLnN1YmFycmF5KDAsIHRoaXMuX3BvcykpO1xuICAgICAgdGhpcy5fb3BlbiA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShNYXRoLm1pbih0aGlzLl9vcGVuLmxlbmd0aCAqIDIsIFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIuQ0hVTktfU0laRSkpO1xuICAgICAgdGhpcy5fcG9zID0gMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9lbnN1cmUoc2l6ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX29wZW4ubGVuZ3RoIC0gdGhpcy5fcG9zIDwgc2l6ZSkge1xuICAgICAgdGhpcy5fc2VhbCgpO1xuXG4gICAgICBpZiAodGhpcy5fb3Blbi5sZW5ndGggPCBzaXplKSB7XG4gICAgICAgIHRoaXMuX29wZW4gPSBCdWZmZXIuYWxsb2NVbnNhZmUoc2l6ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjaHVua3MgaG9sZGluZyBhbGwgYXBwZW5kZWQgYW5kIG5vdCB5ZXQgY29uc3VtZWQgYnl0ZXMuXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBhcnJheSBpcyB0aGUgbGlzdCdzIG93bjogbGF0ZXIgYXBwZW5kcyBjYW4gYWRkIGNodW5rcyB0b1xuICAgKiBpdC4gYGNvbnN1bWVgIGRvZXMgbm90IG1vZGlmeSBpdCwgc28gdGFraW5nIHRoZSBjaHVua3MgYW5kIGNvbnN1bWluZ1xuICAgKiB0aGVtIHJpZ2h0IGF3YXkgeWllbGRzIGEgc3RhYmxlIHNuYXBzaG90LlxuICAgKi9cbiAgZ2V0QnVmZmVycygpOiBCdWZmZXJbXSB7XG4gICAgdGhpcy5fc2VhbCgpO1xuICAgIHJldHVybiB0aGlzLl9idWZzO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2NhcmRzIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuXG4gICAqL1xuICBjb25zdW1lKGJ5dGVzOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9zZWFsKCk7XG5cbiAgICBjb25zdCBidWZzID0gdGhpcy5fYnVmcztcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBidWZzLmxlbmd0aCAmJiBieXRlcyA+PSBidWZzW2ldLmxlbmd0aCkge1xuICAgICAgYnl0ZXMgLT0gYnVmc1tpXS5sZW5ndGg7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBidWZzW2ldLmxlbmd0aDtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICAvLyBBIGZyZXNoIGFycmF5LCBzbyB0aGF0IGEgcHJldmlvdXNseSByZXR1cm5lZCBgZ2V0QnVmZmVycygpYCByZXN1bHRcbiAgICAvLyBzdGF5cyBpbnRhY3QuXG4gICAgdGhpcy5fYnVmcyA9IGJ1ZnMuc2xpY2UoaSk7XG5cbiAgICBpZiAoYnl0ZXMgPiAwICYmIHRoaXMuX2J1ZnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9idWZzWzBdID0gdGhpcy5fYnVmc1swXS5zdWJhcnJheShieXRlcyk7XG4gICAgICB0aGlzLmxlbmd0aCAtPSBieXRlcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3BpZXMgYWxsIGFwcGVuZGVkIGFuZCBub3QgeWV0IGNvbnN1bWVkIGJ5dGVzIGludG8gYSBuZXcgYnVmZmVyLlxuICAgKi9cbiAgc2xpY2UoKTogQnVmZmVyIHtcbiAgICB0aGlzLl9zZWFsKCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBCdWZmZXIuYWxsb2NVbnNhZmUodGhpcy5sZW5ndGgpO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgZm9yIChjb25zdCBidWZmZXIgb2YgdGhpcy5fYnVmcykge1xuICAgICAgcG9zaXRpb24gKz0gYnVmZmVyLmNvcHkocmVzdWx0LCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHdyaXRlVUludDgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2Vuc3VyZSgxKTtcbiAgICB0aGlzLl9vcGVuLndyaXRlVUludDgodmFsdWUsIHRoaXMuX3Bvcyk7XG4gICAgdGhpcy5fcG9zICs9IDE7XG4gICAgdGhpcy5sZW5ndGggKz0gMTtcbiAgfVxuXG4gIHdyaXRlVUludDE2TEUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2Vuc3VyZSgyKTtcbiAgICB0aGlzLl9vcGVuLndyaXRlVUludDE2TEUodmFsdWUsIHRoaXMuX3Bvcyk7XG4gICAgdGhpcy5fcG9zICs9IDI7XG4gICAgdGhpcy5sZW5ndGggKz0gMjtcbiAgfVxuXG4gIHdyaXRlVVNob3J0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLndyaXRlVUludDE2TEUodmFsdWUpO1xuICB9XG5cbiAgd3JpdGVVSW50MTZCRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZW5zdXJlKDIpO1xuICAgIHRoaXMuX29wZW4ud3JpdGVVSW50MTZCRSh2YWx1ZSwgdGhpcy5fcG9zKTtcbiAgICB0aGlzLl9wb3MgKz0gMjtcbiAgICB0aGlzLmxlbmd0aCArPSAyO1xuICB9XG5cbiAgd3JpdGVVSW50MjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZW5zdXJlKDMpO1xuICAgIHRoaXMuX29wZW5bdGhpcy5fcG9zICsgMl0gPSAodmFsdWUgPj4+IDE2KSAmIDB4ZmY7XG4gICAgdGhpcy5fb3Blblt0aGlzLl9wb3MgKyAxXSA9ICh2YWx1ZSA+Pj4gOCkgJiAweGZmO1xuICAgIHRoaXMuX29wZW5bdGhpcy5fcG9zXSA9IHZhbHVlICYgMHhmZjtcbiAgICB0aGlzLl9wb3MgKz0gMztcbiAgICB0aGlzLmxlbmd0aCArPSAzO1xuICB9XG5cbiAgd3JpdGVVSW50MzJMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZW5zdXJlKDQpO1xuICAgIHRoaXMuX29wZW4ud3JpdGVVSW50MzJMRSh2YWx1ZSwgdGhpcy5fcG9zKTtcbiAgICB0aGlzLl9wb3MgKz0gNDtcbiAgICB0aGlzLmxlbmd0aCArPSA0O1xuICB9XG5cbiAgd3JpdGVCaWdJbnQ2NExFKHZhbHVlOiBiaWdpbnQpIHtcbiAgICB0aGlzLl9lbnN1cmUoOCk7XG4gICAgdGhpcy5fb3Blbi53cml0ZUJpZ0ludDY0TEUodmFsdWUsIHRoaXMuX3Bvcyk7XG4gICAgdGhpcy5fcG9zICs9IDg7XG4gICAgdGhpcy5sZW5ndGggKz0gODtcbiAgfVxuXG4gIHdyaXRlSW50NjRMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy53cml0ZUJpZ0ludDY0TEUoQmlnSW50KHZhbHVlKSk7XG4gIH1cblxuICB3cml0ZVVJbnQ2NExFKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLndyaXRlQmlnVUludDY0TEUoQmlnSW50KHZhbHVlKSk7XG4gIH1cblxuICB3cml0ZUJpZ1VJbnQ2NExFKHZhbHVlOiBiaWdpbnQpIHtcbiAgICB0aGlzLl9lbnN1cmUoOCk7XG4gICAgdGhpcy5fb3Blbi53cml0ZUJpZ1VJbnQ2NExFKHZhbHVlLCB0aGlzLl9wb3MpO1xuICAgIHRoaXMuX3BvcyArPSA4O1xuICAgIHRoaXMubGVuZ3RoICs9IDg7XG4gIH1cblxuICB3cml0ZVVJbnQzMkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9lbnN1cmUoNCk7XG4gICAgdGhpcy5fb3Blbi53cml0ZVVJbnQzMkJFKHZhbHVlLCB0aGlzLl9wb3MpO1xuICAgIHRoaXMuX3BvcyArPSA0O1xuICAgIHRoaXMubGVuZ3RoICs9IDQ7XG4gIH1cblxuICB3cml0ZVVJbnQ0MExFKHZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZHB3L25vZGUtYnVmZmVyLW1vcmUtaW50c1xuICAgIHRoaXMud3JpdGVJbnQzMkxFKHZhbHVlICYgLTEpO1xuICAgIHRoaXMud3JpdGVVSW50OChNYXRoLmZsb29yKHZhbHVlICogU0hJRlRfUklHSFRfMzIpKTtcbiAgfVxuXG4gIHdyaXRlSW50OCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZW5zdXJlKDEpO1xuICAgIHRoaXMuX29wZW4ud3JpdGVJbnQ4KHZhbHVlLCB0aGlzLl9wb3MpO1xuICAgIHRoaXMuX3BvcyArPSAxO1xuICAgIHRoaXMubGVuZ3RoICs9IDE7XG4gIH1cblxuICB3cml0ZUludDE2TEUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2Vuc3VyZSgyKTtcbiAgICB0aGlzLl9vcGVuLndyaXRlSW50MTZMRSh2YWx1ZSwgdGhpcy5fcG9zKTtcbiAgICB0aGlzLl9wb3MgKz0gMjtcbiAgICB0aGlzLmxlbmd0aCArPSAyO1xuICB9XG5cbiAgd3JpdGVJbnQxNkJFKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9lbnN1cmUoMik7XG4gICAgdGhpcy5fb3Blbi53cml0ZUludDE2QkUodmFsdWUsIHRoaXMuX3Bvcyk7XG4gICAgdGhpcy5fcG9zICs9IDI7XG4gICAgdGhpcy5sZW5ndGggKz0gMjtcbiAgfVxuXG4gIHdyaXRlSW50MzJMRSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZW5zdXJlKDQpO1xuICAgIHRoaXMuX29wZW4ud3JpdGVJbnQzMkxFKHZhbHVlLCB0aGlzLl9wb3MpO1xuICAgIHRoaXMuX3BvcyArPSA0O1xuICAgIHRoaXMubGVuZ3RoICs9IDQ7XG4gIH1cblxuICB3cml0ZUludDMyQkUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2Vuc3VyZSg0KTtcbiAgICB0aGlzLl9vcGVuLndyaXRlSW50MzJCRSh2YWx1ZSwgdGhpcy5fcG9zKTtcbiAgICB0aGlzLl9wb3MgKz0gNDtcbiAgICB0aGlzLmxlbmd0aCArPSA0O1xuICB9XG5cbiAgd3JpdGVGbG9hdExFKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9lbnN1cmUoNCk7XG4gICAgdGhpcy5fb3Blbi53cml0ZUZsb2F0TEUodmFsdWUsIHRoaXMuX3Bvcyk7XG4gICAgdGhpcy5fcG9zICs9IDQ7XG4gICAgdGhpcy5sZW5ndGggKz0gNDtcbiAgfVxuXG4gIHdyaXRlRG91YmxlTEUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2Vuc3VyZSg4KTtcbiAgICB0aGlzLl9vcGVuLndyaXRlRG91YmxlTEUodmFsdWUsIHRoaXMuX3Bvcyk7XG4gICAgdGhpcy5fcG9zICs9IDg7XG4gICAgdGhpcy5sZW5ndGggKz0gODtcbiAgfVxuXG4gIHdyaXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcsIGVuY29kaW5nOiBFbmNvZGluZykge1xuICAgIC8vIFVDUy0yIGlzIHR3byBieXRlcyBwZXIgVVRGLTE2IGNvZGUgdW5pdC5cbiAgICBjb25zdCBsZW5ndGggPSBlbmNvZGluZyA9PT0gJ3VjczInID8gdmFsdWUubGVuZ3RoICogMiA6IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlLCBlbmNvZGluZyk7XG4gICAgdGhpcy5fZW5zdXJlKGxlbmd0aCk7XG4gICAgdGhpcy5fb3Blbi53cml0ZSh2YWx1ZSwgdGhpcy5fcG9zLCBlbmNvZGluZyk7XG4gICAgdGhpcy5fcG9zICs9IGxlbmd0aDtcbiAgICB0aGlzLmxlbmd0aCArPSBsZW5ndGg7XG4gIH1cblxuICB3cml0ZUJWYXJjaGFyKHZhbHVlOiBzdHJpbmcsIGVuY29kaW5nOiBFbmNvZGluZykge1xuICAgIHRoaXMud3JpdGVVSW50OCh2YWx1ZS5sZW5ndGgpO1xuICAgIHRoaXMud3JpdGVTdHJpbmcodmFsdWUsIGVuY29kaW5nKTtcbiAgfVxuXG4gIHdyaXRlVXNWYXJjaGFyKHZhbHVlOiBzdHJpbmcsIGVuY29kaW5nOiBFbmNvZGluZykge1xuICAgIHRoaXMud3JpdGVVSW50MTZMRSh2YWx1ZS5sZW5ndGgpO1xuICAgIHRoaXMud3JpdGVTdHJpbmcodmFsdWUsIGVuY29kaW5nKTtcbiAgfVxuXG4gIHdyaXRlVXNWYXJieXRlKHZhbHVlOiBCdWZmZXIpIHtcbiAgICB0aGlzLndyaXRlVUludDE2TEUodmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLndyaXRlQnVmZmVyKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGEgYnVmZmVyLiBCdWZmZXJzIG9mIGF0IGxlYXN0IGBDSFVOS19TSVpFYCBieXRlcyBhcmUgcmVmZXJlbmNlZFxuICAgKiByYXRoZXIgdGhhbiBjb3BpZWQsIGFuZCBtdXN0IG5vdCBiZSBtb2RpZmllZCB1bnRpbCBjb25zdW1lZC5cbiAgICovXG4gIHdyaXRlQnVmZmVyKHZhbHVlOiBCdWZmZXIpIHtcbiAgICBjb25zdCBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCA+PSBXcml0YWJsZVRyYWNraW5nQnVmZmVyLkNIVU5LX1NJWkUpIHtcbiAgICAgIHRoaXMuX3NlYWwoKTtcbiAgICAgIHRoaXMuX2J1ZnMucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Vuc3VyZShsZW5ndGgpO1xuICAgICAgdmFsdWUuY29weSh0aGlzLl9vcGVuLCB0aGlzLl9wb3MpO1xuICAgICAgdGhpcy5fcG9zICs9IGxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLmxlbmd0aCArPSBsZW5ndGg7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV3JpdGFibGVUcmFja2luZ0J1ZmZlcjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGFibGVUcmFja2luZ0J1ZmZlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsTUFBTUEsYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNDLE1BQU1DLGNBQWMsR0FBRyxDQUFDLEdBQUdELGFBQWE7O0FBRXhDO0FBQ0E7QUFDQSxNQUFNRSxjQUFjLEdBQUcsRUFBRTtBQUl6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"writable-tracking-buffer.js","names":["SHIFT_LEFT_32","SHIFT_RIGHT_32","UNKNOWN_PLP_LEN","Buffer","from","ZERO_LENGTH_BUFFER","alloc","WritableTrackingBuffer","constructor","initialSize","encoding","doubleSizeGrowth","buffer","compositeBuffer","position","data","newBuffer","copyFrom","length","makeRoomFor","copy","requiredLength","size","Math","max","slice","concat","writeUInt8","value","writeUInt16LE","writeUShort","writeUInt16BE","writeUInt24LE","writeUInt32LE","writeBigInt64LE","writeInt64LE","BigInt","writeUInt64LE","writeBigUInt64LE","writeUInt32BE","writeUInt40LE","writeInt32LE","floor","writeInt8","writeInt16LE","writeInt16BE","writeInt32BE","writeFloatLE","writeDoubleLE","writeString","byteLength","write","writeBVarchar","writeUsVarchar","writeUsVarbyte","toString","writeBuffer","writePLPBody","writeMoney","_default","exports","default","module"],"sources":["../../src/tracking-buffer/writable-tracking-buffer.ts"],"sourcesContent":["const SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nconst SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\nconst UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);\nconst ZERO_LENGTH_BUFFER = Buffer.alloc(0);\n\nexport type Encoding = 'utf8' | 'ucs2' | 'ascii';\n\n/**\n A Buffer-like class that tracks position.\n\n As values are written, the position advances by the size of the written data.\n When writing, automatically allocates new buffers if there's not enough space.\n */\nclass WritableTrackingBuffer {\n declare initialSize: number;\n declare encoding: Encoding;\n declare doubleSizeGrowth: boolean;\n\n declare buffer: Buffer;\n declare compositeBuffer: Buffer;\n\n declare position: number;\n\n constructor(initialSize: number, encoding?: Encoding | null, doubleSizeGrowth?: boolean) {\n this.initialSize = initialSize;\n this.encoding = encoding || 'ucs2';\n this.doubleSizeGrowth = doubleSizeGrowth || false;\n this.buffer = Buffer.alloc(this.initialSize, 0);\n this.compositeBuffer = ZERO_LENGTH_BUFFER;\n this.position = 0;\n }\n\n get data() {\n this.newBuffer(0);\n return this.compositeBuffer;\n }\n\n copyFrom(buffer: Buffer) {\n const length = buffer.length;\n this.makeRoomFor(length);\n buffer.copy(this.buffer, this.position);\n this.position += length;\n }\n\n makeRoomFor(requiredLength: number) {\n if (this.buffer.length - this.position < requiredLength) {\n if (this.doubleSizeGrowth) {\n let size = Math.max(128, this.buffer.length * 2);\n while (size < requiredLength) {\n size *= 2;\n }\n this.newBuffer(size);\n } else {\n this.newBuffer(requiredLength);\n }\n }\n }\n\n newBuffer(size: number) {\n const buffer = this.buffer.slice(0, this.position);\n this.compositeBuffer = Buffer.concat([this.compositeBuffer, buffer]);\n this.buffer = (size === 0) ? ZERO_LENGTH_BUFFER : Buffer.alloc(size, 0);\n this.position = 0;\n }\n\n writeUInt8(value: number) {\n const length = 1;\n this.makeRoomFor(length);\n this.buffer.writeUInt8(value, this.position);\n this.position += length;\n }\n\n writeUInt16LE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeUInt16LE(value, this.position);\n this.position += length;\n }\n\n writeUShort(value: number) {\n this.writeUInt16LE(value);\n }\n\n writeUInt16BE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeUInt16BE(value, this.position);\n this.position += length;\n }\n\n writeUInt24LE(value: number) {\n const length = 3;\n this.makeRoomFor(length);\n this.buffer[this.position + 2] = (value >>> 16) & 0xff;\n this.buffer[this.position + 1] = (value >>> 8) & 0xff;\n this.buffer[this.position] = value & 0xff;\n this.position += length;\n }\n\n writeUInt32LE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeUInt32LE(value, this.position);\n this.position += length;\n }\n\n writeBigInt64LE(value: bigint) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeBigInt64LE(value, this.position);\n this.position += length;\n }\n\n writeInt64LE(value: number) {\n this.writeBigInt64LE(BigInt(value));\n }\n\n writeUInt64LE(value: number) {\n this.writeBigUInt64LE(BigInt(value));\n }\n\n writeBigUInt64LE(value: bigint) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeBigUInt64LE(value, this.position);\n this.position += length;\n }\n\n writeUInt32BE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeUInt32BE(value, this.position);\n this.position += length;\n }\n\n writeUInt40LE(value: number) {\n // inspired by https://github.com/dpw/node-buffer-more-ints\n this.writeInt32LE(value & -1);\n this.writeUInt8(Math.floor(value * SHIFT_RIGHT_32));\n }\n\n writeInt8(value: number) {\n const length = 1;\n this.makeRoomFor(length);\n this.buffer.writeInt8(value, this.position);\n this.position += length;\n }\n\n writeInt16LE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeInt16LE(value, this.position);\n this.position += length;\n }\n\n writeInt16BE(value: number) {\n const length = 2;\n this.makeRoomFor(length);\n this.buffer.writeInt16BE(value, this.position);\n this.position += length;\n }\n\n writeInt32LE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeInt32LE(value, this.position);\n this.position += length;\n }\n\n writeInt32BE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeInt32BE(value, this.position);\n this.position += length;\n }\n\n writeFloatLE(value: number) {\n const length = 4;\n this.makeRoomFor(length);\n this.buffer.writeFloatLE(value, this.position);\n this.position += length;\n }\n\n writeDoubleLE(value: number) {\n const length = 8;\n this.makeRoomFor(length);\n this.buffer.writeDoubleLE(value, this.position);\n this.position += length;\n }\n\n writeString(value: string, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n const length = Buffer.byteLength(value, encoding);\n this.makeRoomFor(length);\n\n // $FlowFixMe https://github.com/facebook/flow/pull/5398\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n\n writeBVarchar(value: string, encoding?: Encoding | null) {\n this.writeUInt8(value.length);\n this.writeString(value, encoding);\n }\n\n writeUsVarchar(value: string, encoding?: Encoding | null) {\n this.writeUInt16LE(value.length);\n this.writeString(value, encoding);\n }\n\n // TODO: Figure out what types are passed in other than `Buffer`\n writeUsVarbyte(value: any, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n let length;\n if (value instanceof Buffer) {\n length = value.length;\n } else {\n value = value.toString();\n length = Buffer.byteLength(value, encoding);\n }\n this.writeUInt16LE(length);\n\n if (value instanceof Buffer) {\n this.writeBuffer(value);\n } else {\n this.makeRoomFor(length);\n // $FlowFixMe https://github.com/facebook/flow/pull/5398\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n }\n\n writePLPBody(value: any, encoding?: Encoding | null) {\n if (encoding == null) {\n encoding = this.encoding;\n }\n\n let length;\n if (value instanceof Buffer) {\n length = value.length;\n } else {\n value = value.toString();\n length = Buffer.byteLength(value, encoding);\n }\n\n // Length of all chunks.\n // this.writeUInt64LE(length);\n // unknown seems to work better here - might revisit later.\n this.writeBuffer(UNKNOWN_PLP_LEN);\n\n // In the UNKNOWN_PLP_LEN case, the data is represented as a series of zero or more chunks.\n if (length > 0) {\n // One chunk.\n this.writeUInt32LE(length);\n if (value instanceof Buffer) {\n this.writeBuffer(value);\n } else {\n this.makeRoomFor(length);\n this.buffer.write(value, this.position, encoding);\n this.position += length;\n }\n }\n\n // PLP_TERMINATOR (no more chunks).\n this.writeUInt32LE(0);\n }\n\n writeBuffer(value: Buffer) {\n const length = value.length;\n this.makeRoomFor(length);\n value.copy(this.buffer, this.position);\n this.position += length;\n }\n\n writeMoney(value: number) {\n this.writeInt32LE(Math.floor(value * SHIFT_RIGHT_32));\n this.writeInt32LE(value & -1);\n }\n}\n\nexport default WritableTrackingBuffer;\nmodule.exports = WritableTrackingBuffer;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"writable-tracking-buffer.js","names":["SHIFT_LEFT_32","SHIFT_RIGHT_32","MIN_CHUNK_SIZE","WritableTrackingBuffer","CHUNK_SIZE","constructor","length","_bufs","_open","Buffer","allocUnsafe","_pos","data","subarray","slice","_seal","push","Math","min","_ensure","size","getBuffers","consume","bytes","bufs","i","result","position","buffer","copy","writeUInt8","value","writeUInt16LE","writeUShort","writeUInt16BE","writeUInt24LE","writeUInt32LE","writeBigInt64LE","writeInt64LE","BigInt","writeUInt64LE","writeBigUInt64LE","writeUInt32BE","writeUInt40LE","writeInt32LE","floor","writeInt8","writeInt16LE","writeInt16BE","writeInt32BE","writeFloatLE","writeDoubleLE","writeString","encoding","byteLength","write","writeBVarchar","writeUsVarchar","writeUsVarbyte","writeBuffer","_default","exports","default","module"],"sources":["../../src/tracking-buffer/writable-tracking-buffer.ts"],"sourcesContent":["const SHIFT_LEFT_32 = (1 << 16) * (1 << 16);\nconst SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\n// The first chunk starts small and doubles up to `CHUNK_SIZE`: most payloads\n// built through this class are a few dozen bytes.\nconst MIN_CHUNK_SIZE = 64;\n\nexport type Encoding = 'utf8' | 'ucs2' | 'ascii';\n\n/**\n * A write-side buffer list.\n *\n * Bytes are appended through the `write*` methods, and taken out again\n * either as a single buffer (`data`, `slice`) or as a list of chunks\n * (`getBuffers`, `consume`). Small pieces are coalesced into chunks of at\n * most `CHUNK_SIZE` bytes. Buffers of at least `CHUNK_SIZE` bytes written\n * through `writeBuffer` are referenced rather than copied, so that large\n * values cost no extra memory. (The caller must therefore not modify such\n * buffers until they have been consumed.)\n *\n * The consumer side (`length`, `getBuffers`, `consume`, `slice`) mirrors\n * that of `bl`'s `BufferList`.\n */\nclass WritableTrackingBuffer {\n /**\n * The size of the chunks a `WritableTrackingBuffer` produces, and the size\n * from which written buffers are referenced rather than copied.\n */\n static readonly CHUNK_SIZE = 8 * 1024;\n\n /**\n * The number of bytes appended and not yet consumed.\n */\n declare length: number;\n\n declare private _bufs: Buffer[];\n declare private _open: Buffer;\n declare private _pos: number;\n\n constructor() {\n this.length = 0;\n this._bufs = [];\n this._open = Buffer.allocUnsafe(MIN_CHUNK_SIZE);\n this._pos = 0;\n }\n\n /**\n * All appended and not yet consumed bytes as a single buffer.\n *\n * When everything fits into a single chunk this is a view of that chunk\n * rather than a copy. The returned buffer must not be modified.\n */\n get data(): Buffer {\n if (this._bufs.length === 0) {\n return this._open.subarray(0, this._pos);\n }\n\n return this.slice();\n }\n\n private _seal() {\n if (this._pos > 0) {\n this._bufs.push(this._open.subarray(0, this._pos));\n this._open = Buffer.allocUnsafe(Math.min(this._open.length * 2, WritableTrackingBuffer.CHUNK_SIZE));\n this._pos = 0;\n }\n }\n\n private _ensure(size: number) {\n if (this._open.length - this._pos < size) {\n this._seal();\n\n if (this._open.length < size) {\n this._open = Buffer.allocUnsafe(size);\n }\n }\n }\n\n /**\n * The chunks holding all appended and not yet consumed bytes.\n *\n * The returned array is the list's own: later appends can add chunks to\n * it. `consume` does not modify it, so taking the chunks and consuming\n * them right away yields a stable snapshot.\n */\n getBuffers(): Buffer[] {\n this._seal();\n return this._bufs;\n }\n\n /**\n * Discards the given number of bytes from the front of the list.\n */\n consume(bytes: number): this {\n this._seal();\n\n const bufs = this._bufs;\n let i = 0;\n while (i < bufs.length && bytes >= bufs[i].length) {\n bytes -= bufs[i].length;\n this.length -= bufs[i].length;\n i++;\n }\n\n // A fresh array, so that a previously returned `getBuffers()` result\n // stays intact.\n this._bufs = bufs.slice(i);\n\n if (bytes > 0 && this._bufs.length) {\n this._bufs[0] = this._bufs[0].subarray(bytes);\n this.length -= bytes;\n }\n\n return this;\n }\n\n /**\n * Copies all appended and not yet consumed bytes into a new buffer.\n */\n slice(): Buffer {\n this._seal();\n\n const result = Buffer.allocUnsafe(this.length);\n let position = 0;\n for (const buffer of this._bufs) {\n position += buffer.copy(result, position);\n }\n\n return result;\n }\n\n writeUInt8(value: number) {\n this._ensure(1);\n this._open.writeUInt8(value, this._pos);\n this._pos += 1;\n this.length += 1;\n }\n\n writeUInt16LE(value: number) {\n this._ensure(2);\n this._open.writeUInt16LE(value, this._pos);\n this._pos += 2;\n this.length += 2;\n }\n\n writeUShort(value: number) {\n this.writeUInt16LE(value);\n }\n\n writeUInt16BE(value: number) {\n this._ensure(2);\n this._open.writeUInt16BE(value, this._pos);\n this._pos += 2;\n this.length += 2;\n }\n\n writeUInt24LE(value: number) {\n this._ensure(3);\n this._open[this._pos + 2] = (value >>> 16) & 0xff;\n this._open[this._pos + 1] = (value >>> 8) & 0xff;\n this._open[this._pos] = value & 0xff;\n this._pos += 3;\n this.length += 3;\n }\n\n writeUInt32LE(value: number) {\n this._ensure(4);\n this._open.writeUInt32LE(value, this._pos);\n this._pos += 4;\n this.length += 4;\n }\n\n writeBigInt64LE(value: bigint) {\n this._ensure(8);\n this._open.writeBigInt64LE(value, this._pos);\n this._pos += 8;\n this.length += 8;\n }\n\n writeInt64LE(value: number) {\n this.writeBigInt64LE(BigInt(value));\n }\n\n writeUInt64LE(value: number) {\n this.writeBigUInt64LE(BigInt(value));\n }\n\n writeBigUInt64LE(value: bigint) {\n this._ensure(8);\n this._open.writeBigUInt64LE(value, this._pos);\n this._pos += 8;\n this.length += 8;\n }\n\n writeUInt32BE(value: number) {\n this._ensure(4);\n this._open.writeUInt32BE(value, this._pos);\n this._pos += 4;\n this.length += 4;\n }\n\n writeUInt40LE(value: number) {\n // inspired by https://github.com/dpw/node-buffer-more-ints\n this.writeInt32LE(value & -1);\n this.writeUInt8(Math.floor(value * SHIFT_RIGHT_32));\n }\n\n writeInt8(value: number) {\n this._ensure(1);\n this._open.writeInt8(value, this._pos);\n this._pos += 1;\n this.length += 1;\n }\n\n writeInt16LE(value: number) {\n this._ensure(2);\n this._open.writeInt16LE(value, this._pos);\n this._pos += 2;\n this.length += 2;\n }\n\n writeInt16BE(value: number) {\n this._ensure(2);\n this._open.writeInt16BE(value, this._pos);\n this._pos += 2;\n this.length += 2;\n }\n\n writeInt32LE(value: number) {\n this._ensure(4);\n this._open.writeInt32LE(value, this._pos);\n this._pos += 4;\n this.length += 4;\n }\n\n writeInt32BE(value: number) {\n this._ensure(4);\n this._open.writeInt32BE(value, this._pos);\n this._pos += 4;\n this.length += 4;\n }\n\n writeFloatLE(value: number) {\n this._ensure(4);\n this._open.writeFloatLE(value, this._pos);\n this._pos += 4;\n this.length += 4;\n }\n\n writeDoubleLE(value: number) {\n this._ensure(8);\n this._open.writeDoubleLE(value, this._pos);\n this._pos += 8;\n this.length += 8;\n }\n\n writeString(value: string, encoding: Encoding) {\n // UCS-2 is two bytes per UTF-16 code unit.\n const length = encoding === 'ucs2' ? value.length * 2 : Buffer.byteLength(value, encoding);\n this._ensure(length);\n this._open.write(value, this._pos, encoding);\n this._pos += length;\n this.length += length;\n }\n\n writeBVarchar(value: string, encoding: Encoding) {\n this.writeUInt8(value.length);\n this.writeString(value, encoding);\n }\n\n writeUsVarchar(value: string, encoding: Encoding) {\n this.writeUInt16LE(value.length);\n this.writeString(value, encoding);\n }\n\n writeUsVarbyte(value: Buffer) {\n this.writeUInt16LE(value.length);\n this.writeBuffer(value);\n }\n\n /**\n * Appends a buffer. Buffers of at least `CHUNK_SIZE` bytes are referenced\n * rather than copied, and must not be modified until consumed.\n */\n writeBuffer(value: Buffer) {\n const length = value.length;\n if (length >= WritableTrackingBuffer.CHUNK_SIZE) {\n this._seal();\n this._bufs.push(value);\n } else {\n this._ensure(length);\n value.copy(this._open, this._pos);\n this._pos += length;\n }\n\n this.length += length;\n }\n}\n\nexport default WritableTrackingBuffer;\nmodule.exports = WritableTrackingBuffer;\n"],"mappings":"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","ignoreList":[]}