pw-js-world 0.4.4 → 0.4.5-dev.85d024b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,691 +0,0 @@
1
- "use strict";
2
- /**
3
- * CREDIT: Anatoly for making this Buffer Reader so I don't have to!
4
- * Source: https://github.com/Anatoly03/pixelwalker.js/blob/9bb3c7e39a45006086a2abae8c515599bd3db835/src/util/buffer-reader.ts
5
- * License: ISC
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ComponentTypeHeader = void 0;
9
- /**
10
- * Data during the communication in the process is dynamic
11
- * typed. Every entry is followed by a byte identifying the
12
- * type, followed by data. The type header is noted by its'
13
- * 7-bit notation.
14
- */
15
- var ComponentTypeHeader;
16
- (function (ComponentTypeHeader) {
17
- ComponentTypeHeader[ComponentTypeHeader["String"] = 0] = "String";
18
- ComponentTypeHeader[ComponentTypeHeader["Byte"] = 1] = "Byte";
19
- ComponentTypeHeader[ComponentTypeHeader["Int16"] = 2] = "Int16";
20
- ComponentTypeHeader[ComponentTypeHeader["Int32"] = 3] = "Int32";
21
- ComponentTypeHeader[ComponentTypeHeader["Int64"] = 4] = "Int64";
22
- ComponentTypeHeader[ComponentTypeHeader["Float"] = 5] = "Float";
23
- ComponentTypeHeader[ComponentTypeHeader["Double"] = 6] = "Double";
24
- ComponentTypeHeader[ComponentTypeHeader["Boolean"] = 7] = "Boolean";
25
- ComponentTypeHeader[ComponentTypeHeader["ByteArray"] = 8] = "ByteArray";
26
- ComponentTypeHeader[ComponentTypeHeader["UInt32"] = 9] = "UInt32";
27
- })(ComponentTypeHeader || (exports.ComponentTypeHeader = ComponentTypeHeader = {}));
28
- /**
29
- * A Buffer reader is a special buffer extension made to perform
30
- * game-specific tasks in the field of communication.
31
- *
32
- * @implements Buffer
33
- */
34
- class BufferReader {
35
- /**
36
- *
37
- */
38
- constructor(buffer) {
39
- this.offset = 0;
40
- this.buffer = buffer;
41
- }
42
- //
43
- //
44
- // Static Methods
45
- //
46
- //
47
- /**
48
- *
49
- */
50
- static from(from) {
51
- if (from instanceof Buffer)
52
- return new BufferReader(from);
53
- return new BufferReader(Buffer.from(from));
54
- }
55
- /**
56
- *
57
- */
58
- static alloc(amount) {
59
- return BufferReader.from(Buffer.alloc(amount));
60
- }
61
- //
62
- //
63
- // Message Component Types
64
- //
65
- //
66
- /**
67
- * @param {string} value
68
- * @returns {Buffer}
69
- */
70
- static String(value = '') {
71
- const stringByteLen = Buffer.byteLength(value);
72
- const lengthByteCount = this.length7BitInt(stringByteLen);
73
- const buffer = BufferReader.alloc(1 + lengthByteCount + stringByteLen);
74
- buffer.writeUInt8(ComponentTypeHeader.String);
75
- buffer.write7BitInt(stringByteLen);
76
- buffer.write(value);
77
- return buffer.toBuffer();
78
- }
79
- /**
80
- * @param {number} value
81
- * @returns {Buffer}
82
- */
83
- static Byte(value = 0) {
84
- const buffer = BufferReader.alloc(2);
85
- buffer.writeUInt8(ComponentTypeHeader.Byte);
86
- buffer.writeUInt8(value);
87
- return buffer.toBuffer();
88
- }
89
- /**
90
- * @param {number} value
91
- * @returns {Buffer}
92
- */
93
- static Int16(value = 0) {
94
- const buffer = BufferReader.alloc(3);
95
- buffer.writeUInt8(ComponentTypeHeader.Int16);
96
- buffer.writeInt16BE(value);
97
- return buffer.toBuffer();
98
- }
99
- /**
100
- * @param {number} value
101
- * @returns {Buffer}
102
- */
103
- static Int32(value = 0) {
104
- const buffer = BufferReader.alloc(5);
105
- buffer.writeUInt8(ComponentTypeHeader.Int32);
106
- buffer.writeInt32BE(value);
107
- return buffer.toBuffer();
108
- }
109
- /**
110
- * @param {bigint} value
111
- * @returns {Buffer}
112
- */
113
- static Int64(value = BigInt(0).valueOf()) {
114
- const buffer = BufferReader.alloc(9);
115
- buffer.writeUInt8(ComponentTypeHeader.Int64);
116
- buffer.writeBigInt64BE(value);
117
- return buffer.toBuffer();
118
- }
119
- /**
120
- * @param {number} value
121
- * @returns {Buffer}
122
- */
123
- static Float(value = 0) {
124
- const buffer = BufferReader.alloc(5);
125
- buffer.writeUInt8(ComponentTypeHeader.Float);
126
- buffer.writeFloatBE(value);
127
- return buffer.toBuffer();
128
- }
129
- /**
130
- * @param {number} value
131
- * @returns {Buffer}
132
- */
133
- static Double(value = 0) {
134
- const buffer = BufferReader.alloc(9);
135
- buffer.writeUInt8(ComponentTypeHeader.Double);
136
- buffer.writeDoubleBE(value);
137
- return buffer.toBuffer();
138
- }
139
- /**
140
- * @param {boolean} value
141
- * @returns {Buffer}
142
- */
143
- static Boolean(value = false) {
144
- const buffer = BufferReader.alloc(2);
145
- buffer.writeUInt8(ComponentTypeHeader.Boolean);
146
- buffer.writeUInt8(value ? 1 : 0);
147
- return buffer.toBuffer();
148
- }
149
- /**
150
- * @param {Uint8Array} buffer
151
- * @returns {Buffer}
152
- */
153
- static ByteArray(buffer = Buffer.from([0])) {
154
- const bufferLength = Buffer.byteLength(buffer);
155
- const prefix = BufferReader.alloc(2);
156
- prefix.writeUInt8(ComponentTypeHeader.ByteArray);
157
- prefix.writeUInt8(bufferLength);
158
- return Buffer.concat([prefix.toBuffer(), buffer]);
159
- }
160
- /**
161
- * @param {number} value
162
- * @returns {Buffer}
163
- */
164
- static UInt32(value = 0) {
165
- const buffer = BufferReader.alloc(5);
166
- buffer.writeUInt8(ComponentTypeHeader.UInt32);
167
- buffer.writeUInt32BE(value);
168
- return buffer.toBuffer();
169
- }
170
- /**
171
- * @param {number} value
172
- * @returns {Buffer}
173
- */
174
- static Magic(value) {
175
- if (value === undefined)
176
- throw new Error('Received undefined magic byte');
177
- return Buffer.from([value]);
178
- }
179
- /**
180
- * @param {number} value
181
- * @returns {Buffer}
182
- */
183
- static Bit7(value = 0) {
184
- const buffer = BufferReader.alloc(this.length7BitInt(value));
185
- buffer.write7BitInt(value);
186
- return buffer.toBuffer();
187
- }
188
- /**
189
- * @param tt
190
- * @param value
191
- */
192
- static Dynamic(tt, value) {
193
- switch (tt) {
194
- case ComponentTypeHeader.String:
195
- return this.String(value);
196
- case ComponentTypeHeader.Byte:
197
- return this.Byte(value);
198
- case ComponentTypeHeader.Int16:
199
- return this.Int16(value);
200
- case ComponentTypeHeader.Int32:
201
- return this.Int32(value);
202
- case ComponentTypeHeader.Int64:
203
- return this.Int64(value);
204
- case ComponentTypeHeader.Float:
205
- return this.Float(value);
206
- case ComponentTypeHeader.Double:
207
- return this.Double(value);
208
- case ComponentTypeHeader.Boolean:
209
- return this.Boolean(value);
210
- case ComponentTypeHeader.ByteArray:
211
- return this.ByteArray(value);
212
- case ComponentTypeHeader.UInt32:
213
- return this.UInt32(value);
214
- }
215
- }
216
- //
217
- //
218
- // Overrides
219
- //
220
- //
221
- /**
222
- *
223
- */
224
- get length() {
225
- return this.buffer.length - this.offset;
226
- }
227
- /**
228
- *
229
- */
230
- subarray(start = this.offset, end = this.length) {
231
- return new BufferReader(this.buffer.subarray(start, this.offset + end));
232
- }
233
- /**
234
- *
235
- */
236
- write(value) {
237
- return (this.offset = this.buffer.write(value, this.offset));
238
- }
239
- /**
240
- *
241
- */
242
- writeBigInt64BE(value) {
243
- return (this.offset = this.buffer.writeBigInt64BE(value, this.offset));
244
- }
245
- /**
246
- *
247
- */
248
- writeBigInt64LE(value) {
249
- return (this.offset = this.buffer.writeBigInt64LE(value, this.offset));
250
- }
251
- /**
252
- *
253
- */
254
- writeUInt8(value) {
255
- return (this.offset = this.buffer.writeUInt8(value, this.offset));
256
- }
257
- /**
258
- *
259
- */
260
- writeUInt16LE(value) {
261
- return (this.offset = this.buffer.writeUInt16LE(value, this.offset));
262
- }
263
- /**
264
- *
265
- */
266
- writeUInt16BE(value) {
267
- return (this.offset = this.buffer.writeUInt16BE(value, this.offset));
268
- }
269
- /**
270
- *
271
- */
272
- writeUInt32LE(value) {
273
- return (this.offset = this.buffer.writeUInt32LE(value, this.offset));
274
- }
275
- /**
276
- *
277
- */
278
- writeUInt32BE(value) {
279
- return (this.offset = this.buffer.writeUInt32BE(value, this.offset));
280
- }
281
- /**
282
- *
283
- */
284
- writeInt8(value) {
285
- return (this.offset = this.buffer.writeInt8(value, this.offset));
286
- }
287
- /**
288
- *
289
- */
290
- writeInt16LE(value) {
291
- return (this.offset = this.buffer.writeInt16LE(value, this.offset));
292
- }
293
- /**
294
- *
295
- */
296
- writeInt16BE(value) {
297
- return (this.offset = this.buffer.writeInt16BE(value, this.offset));
298
- }
299
- /**
300
- *
301
- */
302
- writeInt32LE(value) {
303
- return (this.offset = this.buffer.writeInt32LE(value, this.offset));
304
- }
305
- /**
306
- *
307
- */
308
- writeInt32BE(value) {
309
- return (this.offset = this.buffer.writeInt32BE(value, this.offset));
310
- }
311
- /**
312
- *
313
- */
314
- writeFloatLE(value) {
315
- return (this.offset = this.buffer.writeFloatLE(value, this.offset));
316
- }
317
- /**
318
- *
319
- */
320
- writeFloatBE(value) {
321
- return (this.offset = this.buffer.writeFloatBE(value, this.offset));
322
- }
323
- /**
324
- *
325
- */
326
- writeDoubleLE(value) {
327
- return (this.offset = this.buffer.writeDoubleLE(value, this.offset));
328
- }
329
- /**
330
- *
331
- */
332
- writeDoubleBE(value) {
333
- return (this.offset = this.buffer.writeDoubleBE(value, this.offset));
334
- }
335
- /**
336
- *
337
- */
338
- readBigUInt64BE() {
339
- const tmp = this.buffer.readBigUInt64BE(this.offset);
340
- this.offset += 8;
341
- return tmp;
342
- }
343
- /**
344
- *
345
- */
346
- readBigUInt64LE() {
347
- const tmp = this.buffer.readBigUInt64LE(this.offset);
348
- this.offset += 8;
349
- return tmp;
350
- }
351
- /**
352
- *
353
- */
354
- readBigInt64BE() {
355
- const tmp = this.buffer.readBigInt64BE(this.offset);
356
- this.offset += 8;
357
- return tmp;
358
- }
359
- /**
360
- *
361
- */
362
- readBigInt64LE() {
363
- const tmp = this.buffer.readBigInt64LE(this.offset);
364
- this.offset += 8;
365
- return tmp;
366
- }
367
- // public readUIntLE() {
368
- // const tmp = this.buffer.readUIntLE(this.offset);
369
- // this.offset += 1;
370
- // return tmp;
371
- // }
372
- // public readUIntBE() {
373
- // const tmp = this.buffer.readUIntBE(this.offset);
374
- // this.offset += 1;
375
- // return tmp;
376
- // }
377
- // public readIntLE() {
378
- // const tmp = this.buffer.readIntLE(this.offset);
379
- // this.offset += 1;
380
- // return tmp;
381
- // }
382
- // public readIntBE() {
383
- // const tmp = this.buffer.readIntBE(this.offset);
384
- // this.offset += 1;
385
- // return tmp;
386
- // }
387
- /**
388
- *
389
- */
390
- expectUInt8(value) {
391
- const tmp = this.buffer.readUInt8(this.offset);
392
- this.offset += 1;
393
- if (tmp !== value)
394
- throw new Error(`Expected ${value} but got ${tmp}`);
395
- return tmp;
396
- }
397
- /**
398
- *
399
- */
400
- readUInt8() {
401
- const tmp = this.buffer.readUInt8(this.offset);
402
- this.offset += 1;
403
- return tmp;
404
- }
405
- /**
406
- *
407
- */
408
- readUInt16LE() {
409
- const tmp = this.buffer.readUInt16LE(this.offset);
410
- this.offset += 2;
411
- return tmp;
412
- }
413
- /**
414
- *
415
- */
416
- readUInt16BE() {
417
- const tmp = this.buffer.readUInt16BE(this.offset);
418
- this.offset += 2;
419
- return tmp;
420
- }
421
- /**
422
- *
423
- */
424
- readUInt32LE() {
425
- const tmp = this.buffer.readUInt32LE(this.offset);
426
- this.offset += 4;
427
- return tmp;
428
- }
429
- /**
430
- *
431
- */
432
- readUInt32BE() {
433
- const tmp = this.buffer.readUInt32BE(this.offset);
434
- this.offset += 4;
435
- return tmp;
436
- }
437
- /**
438
- *
439
- */
440
- readInt8() {
441
- const tmp = this.buffer.readInt8(this.offset);
442
- this.offset += 1;
443
- return tmp;
444
- }
445
- /**
446
- *
447
- */
448
- readInt16LE() {
449
- const tmp = this.buffer.readInt16LE(this.offset);
450
- this.offset += 2;
451
- return tmp;
452
- }
453
- /**
454
- *
455
- */
456
- readInt16BE() {
457
- const tmp = this.buffer.readInt16BE(this.offset);
458
- this.offset += 2;
459
- return tmp;
460
- }
461
- /**
462
- *
463
- */
464
- readInt32LE() {
465
- const tmp = this.buffer.readInt32LE(this.offset);
466
- this.offset += 4;
467
- return tmp;
468
- }
469
- /**
470
- *
471
- */
472
- readInt32BE() {
473
- const tmp = this.buffer.readInt32BE(this.offset);
474
- this.offset += 4;
475
- return tmp;
476
- }
477
- /**
478
- *
479
- */
480
- readFloatLE() {
481
- const tmp = this.buffer.readFloatLE(this.offset);
482
- this.offset += 4;
483
- return tmp;
484
- }
485
- /**
486
- *
487
- */
488
- readFloatBE() {
489
- const tmp = this.buffer.readFloatBE(this.offset);
490
- this.offset += 4;
491
- return tmp;
492
- }
493
- /**
494
- *
495
- */
496
- readDoubleLE() {
497
- const tmp = this.buffer.readDoubleLE(this.offset);
498
- this.offset += 8;
499
- return tmp;
500
- }
501
- /**
502
- *
503
- */
504
- readDoubleBE() {
505
- const tmp = this.buffer.readDoubleBE(this.offset);
506
- this.offset += 8;
507
- return tmp;
508
- }
509
- read(tt, little = true) {
510
- switch (tt) {
511
- case ComponentTypeHeader.String:
512
- return this.readDynamicBuffer().toString("ascii");
513
- case ComponentTypeHeader.Byte:
514
- return this.readUInt8();
515
- case ComponentTypeHeader.Int16:
516
- return little ? this.readInt16LE() : this.readInt16BE();
517
- case ComponentTypeHeader.Int32:
518
- return little ? this.readInt32LE() : this.readInt32BE();
519
- case ComponentTypeHeader.Int64:
520
- return little ? this.readBigInt64LE() : this.readBigInt64BE();
521
- case ComponentTypeHeader.Float:
522
- return little ? this.readFloatLE() : this.readFloatBE();
523
- case ComponentTypeHeader.Double:
524
- return little ? this.readDoubleLE() : this.readDoubleBE();
525
- case ComponentTypeHeader.Boolean:
526
- return !!this.readUInt8();
527
- case ComponentTypeHeader.ByteArray:
528
- return this.readDynamicBuffer();
529
- case ComponentTypeHeader.UInt32:
530
- return little ? this.readUInt32LE() : this.readUInt32BE();
531
- }
532
- }
533
- //
534
- //
535
- // Methods
536
- //
537
- //
538
- /**
539
- *
540
- */
541
- toBuffer() {
542
- return this.buffer;
543
- }
544
- /**
545
- * https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer
546
- */
547
- toArrayBuffer() {
548
- const arrayBuffer = new ArrayBuffer(this.length);
549
- const view = new Uint8Array(arrayBuffer);
550
- for (let i = 0; i < this.length; ++i) {
551
- view[i] = this.buffer[i];
552
- }
553
- return arrayBuffer;
554
- }
555
- /**
556
- *
557
- */
558
- at(idx) {
559
- return this.buffer[idx];
560
- }
561
- /**
562
- * Advanced the buffer reader by pffset.
563
- */
564
- advanceOffset(relativeOffset = 1) {
565
- this.offset += relativeOffset;
566
- return this;
567
- }
568
- /**
569
- * This function reads how many bytes a normal integer would take
570
- * as a 7-bit number
571
- *
572
- * 1(000 0001) 0(111 1110)
573
- */
574
- static length7BitInt(value) {
575
- let size = 0;
576
- do
577
- (value >>= 7), size++;
578
- while (value > 0);
579
- return size;
580
- }
581
- /**
582
- * Reads in an integer in 7-bit notation. A 7-bit integer
583
- * encoding splits a number into a variable size of bits,
584
- * in which the first bit is set while bytes are following.
585
- *
586
- * @example
587
- *
588
- * ```
589
- * 1111 0000 1010 1010 1000 0000 0000 0001 Reading In
590
- * ^--- ---- ^--- ---- ^--- ---- ^--- ----
591
- * 111 0000 010 1010 000 0000 000 0001 Writing Out
592
- * ```
593
- */
594
- read7BitInt() {
595
- let value = 0, shift = 0, byte = 0xff;
596
- while (byte & 0x80) {
597
- byte = this.readUInt8();
598
- value |= (byte & 0x7f) << shift;
599
- shift += 7;
600
- }
601
- return value;
602
- }
603
- /**
604
- * Write a normal integer value into buffer at offset.
605
- */
606
- write7BitInt(value) {
607
- while (value >= 128) {
608
- this.writeUInt8((value & 127) | 128);
609
- value >>= 7;
610
- }
611
- this.writeUInt8(value);
612
- }
613
- /**
614
- * Reads a dynamic buffer which is prepended by its' length
615
- * in 7-bit encoding.
616
- */
617
- readDynamicBuffer() {
618
- const length = this.read7BitInt();
619
- const value = this.subarray(this.offset, length);
620
- this.offset += length;
621
- return value.toBuffer();
622
- }
623
- /**
624
- * Append a buffer to the current buffer. Asserts the cursor
625
- * to be at the end of the current buffer.
626
- */
627
- append(buffer) {
628
- if (this.offset !== this.length - 1)
629
- throw new Error("Cursor hasn't finished reading yet.");
630
- this.buffer = Buffer.concat([this.buffer, buffer]);
631
- return this;
632
- }
633
- /**
634
- * Keep Deserializing the buffer for typed data until
635
- * you reach the end of the buffer. Typed data consists
636
- * of a type indicator in 7-bit-encoding and data following
637
- * accordingly.
638
- */
639
- deserialize() {
640
- const arr = [];
641
- while (this.length > 0) {
642
- const type = this.read7BitInt();
643
- switch (type) {
644
- case ComponentTypeHeader.String:
645
- arr.push(this.readDynamicBuffer().toString("ascii"));
646
- break;
647
- case ComponentTypeHeader.Byte:
648
- arr.push(this.readUInt8());
649
- break;
650
- case ComponentTypeHeader.Int16: // = Int16 (short)
651
- arr.push(this.readInt16BE());
652
- break;
653
- case ComponentTypeHeader.Int32: // = Int32
654
- arr.push(this.readInt32BE());
655
- break;
656
- case ComponentTypeHeader.Int64:
657
- arr.push(this.readBigInt64BE());
658
- break;
659
- case ComponentTypeHeader.Float:
660
- arr.push(this.readFloatBE());
661
- break;
662
- case ComponentTypeHeader.Double:
663
- arr.push(this.readDoubleBE());
664
- break;
665
- case ComponentTypeHeader.Boolean:
666
- arr.push(!!this.readUInt8()); // !! is truthy
667
- break;
668
- case ComponentTypeHeader.ByteArray:
669
- arr.push(this.readDynamicBuffer());
670
- break;
671
- case ComponentTypeHeader.UInt32:
672
- arr.push(this.readUInt32BE());
673
- break;
674
- default:
675
- throw new Error(`While serializing a buffer for data, an unexpected type 0x${type.toString(16)} was read. Expected one of 0-8`);
676
- }
677
- }
678
- return arr;
679
- }
680
- [Symbol.for("nodejs.util.inspect.custom")]() {
681
- let s = '<BufferReader';
682
- let copy = BufferReader.from(this.buffer);
683
- copy.offset = this.offset;
684
- for (let i = 0; i < 20 && this.offset + i < this.length - 1; i++) {
685
- s += ' ' + copy.readUInt8().toString(16).padStart(2, '0');
686
- }
687
- return s + '>';
688
- }
689
- }
690
- exports.default = BufferReader;
691
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVmZmVyUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0J1ZmZlclJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBRUg7Ozs7O0dBS0c7QUFDSCxJQUFZLG1CQVdYO0FBWEQsV0FBWSxtQkFBbUI7SUFDM0IsaUVBQVUsQ0FBQTtJQUNWLDZEQUFRLENBQUE7SUFDUiwrREFBUyxDQUFBO0lBQ1QsK0RBQVMsQ0FBQTtJQUNULCtEQUFTLENBQUE7SUFDVCwrREFBUyxDQUFBO0lBQ1QsaUVBQVUsQ0FBQTtJQUNWLG1FQUFXLENBQUE7SUFDWCx1RUFBYSxDQUFBO0lBQ2IsaUVBQVUsQ0FBQTtBQUNkLENBQUMsRUFYVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVc5QjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBcUIsWUFBWTtJQUk3Qjs7T0FFRztJQUNILFlBQW9CLE1BQWM7UUFMMUIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQU12QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQsRUFBRTtJQUNGLEVBQUU7SUFDRixpQkFBaUI7SUFDakIsRUFBRTtJQUNGLEVBQUU7SUFFRjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBeUI7UUFDeEMsSUFBSSxJQUFJLFlBQVksTUFBTTtZQUFFLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsT0FBTyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFjO1FBQzlCLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEVBQUU7SUFDRixFQUFFO0lBQ0YsMEJBQTBCO0lBQzFCLEVBQUU7SUFDRixFQUFFO0lBRUY7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFO1FBQ25DLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxlQUFlLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBZ0IsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFnQixDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQWdCLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBZ0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNuRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFnQixDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQWdCLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBaUIsS0FBSztRQUN4QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBaUIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBZ0IsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixPQUFPLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFhO1FBQzdCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFDekUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFnQixDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBdUIsRUFBRSxLQUFrRDtRQUM3RixRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ1QsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDeEMsS0FBSyxtQkFBbUIsQ0FBQyxJQUFJO2dCQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDdEMsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDdkMsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDdkMsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDdkMsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDdkMsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBZSxDQUFDLENBQUM7WUFDeEMsS0FBSyxtQkFBbUIsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBZ0IsQ0FBQyxDQUFDO1lBQzFDLEtBQUssbUJBQW1CLENBQUMsU0FBUztnQkFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1lBQzNDLEtBQUssbUJBQW1CLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDTCxDQUFDO0lBRUQsRUFBRTtJQUNGLEVBQUU7SUFDRixZQUFZO0lBQ1osRUFBRTtJQUNGLEVBQUU7SUFFRjs7T0FFRztJQUNILElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsUUFBZ0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFjLElBQUksQ0FBQyxNQUFNO1FBQ2xFLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBYTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLEtBQWE7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsS0FBYTtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsS0FBYTtRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxLQUFhO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYTtRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYTtRQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEtBQWE7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsS0FBYTtRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQWE7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZTtRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWM7UUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELHdCQUF3QjtJQUN4Qix1REFBdUQ7SUFDdkQsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixJQUFJO0lBRUosd0JBQXdCO0lBQ3hCLHVEQUF1RDtJQUN2RCx3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLElBQUk7SUFFSix1QkFBdUI7SUFDdkIsc0RBQXNEO0lBQ3RELHdCQUF3QjtJQUN4QixrQkFBa0I7SUFDbEIsSUFBSTtJQUVKLHVCQUF1QjtJQUN2QixzREFBc0Q7SUFDdEQsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixJQUFJO0lBRUo7O09BRUc7SUFDSSxXQUFXLENBQUMsS0FBYTtRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsSUFBSSxHQUFHLEtBQUssS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2RSxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDWixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDZCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNqQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQWFNLElBQUksQ0FBQyxFQUF1QixFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQzlDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDVCxLQUFLLG1CQUFtQixDQUFDLE1BQU07Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELEtBQUssbUJBQW1CLENBQUMsSUFBSTtnQkFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDNUIsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUQsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUQsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbEUsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUMxQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUQsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUQsS0FBSyxtQkFBbUIsQ0FBQyxPQUFPO2dCQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO2dCQUM5QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLEtBQUssbUJBQW1CLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xFLENBQUM7SUFDTCxDQUFDO0lBRUQsRUFBRTtJQUNGLEVBQUU7SUFDRixVQUFVO0lBQ1YsRUFBRTtJQUNGLEVBQUU7SUFFRjs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksRUFBRSxDQUFDLEdBQVc7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxjQUFjLEdBQUcsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWE7UUFDckMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2I7WUFBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztlQUNsQixLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxXQUFXO1FBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUNULEtBQUssR0FBRyxDQUFDLEVBQ1QsSUFBSSxHQUFHLElBQUksQ0FBQztRQUVoQixPQUFPLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUM7WUFDaEMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBYTtRQUM3QixPQUFPLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQjtRQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBYztRQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXO1FBQ2QsTUFBTSxHQUFHLEdBQW9ELEVBQUUsQ0FBQztRQUVoRSxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRWhDLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ1gsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNO29CQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsSUFBSTtvQkFDekIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztvQkFDM0IsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLEtBQUssRUFBRSxrQkFBa0I7b0JBQzlDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1YsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsVUFBVTtvQkFDdEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDN0IsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLEtBQUs7b0JBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLE1BQU07Z0JBQ1YsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO29CQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUM3QixNQUFNO2dCQUNWLEtBQUssbUJBQW1CLENBQUMsTUFBTTtvQkFDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztvQkFDOUIsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLE9BQU87b0JBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZTtvQkFDN0MsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLFNBQVM7b0JBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztvQkFDbkMsTUFBTTtnQkFDVixLQUFLLG1CQUFtQixDQUFDLE1BQU07b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1Y7b0JBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUN4SSxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQztRQUN4QixJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9ELENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztDQUNKO0FBN3VCRCwrQkE2dUJDIn0=