@jsprismarine/raknet 0.1.0-rc.53 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/LICENSE +373 -0
  2. package/dist/ClientSocket.cjs.js +3 -0
  3. package/dist/ClientSocket.es.js +2 -0
  4. package/dist/Constants.cjs.js +23 -0
  5. package/dist/Constants.d.ts +9 -0
  6. package/dist/Constants.d.ts.map +1 -0
  7. package/dist/Constants.es.js +13 -0
  8. package/dist/Protocol-B7Z_wJaK.js +51 -0
  9. package/dist/Protocol-Bik5hgGW.cjs +53 -0
  10. package/dist/RakNet.cjs.js +83 -0
  11. package/dist/RakNet.d.ts +12 -14
  12. package/dist/RakNet.d.ts.map +1 -1
  13. package/dist/RakNet.es.js +38 -0
  14. package/dist/ServerSocket.cjs.js +160 -0
  15. package/dist/ServerSocket.d.ts +5 -5
  16. package/dist/ServerSocket.d.ts.map +1 -1
  17. package/dist/ServerSocket.es.js +152 -0
  18. package/dist/Session.cjs.js +386 -0
  19. package/dist/Session.d.ts +5 -5
  20. package/dist/Session.d.ts.map +1 -1
  21. package/dist/Session.es.js +375 -0
  22. package/dist/protocol/ACK.cjs.js +18 -0
  23. package/dist/protocol/ACK.d.ts +2 -2
  24. package/dist/protocol/ACK.d.ts.map +1 -1
  25. package/dist/protocol/ACK.es.js +14 -0
  26. package/dist/protocol/AcknowledgePacket.cjs.js +75 -0
  27. package/dist/protocol/AcknowledgePacket.d.ts +1 -1
  28. package/dist/protocol/AcknowledgePacket.d.ts.map +1 -1
  29. package/dist/protocol/AcknowledgePacket.es.js +67 -0
  30. package/dist/protocol/BitFlags.cjs.js +15 -0
  31. package/dist/protocol/BitFlags.es.js +10 -0
  32. package/dist/protocol/DisconnectNotification.cjs.js +19 -0
  33. package/dist/protocol/DisconnectNotification.d.ts +1 -1
  34. package/dist/protocol/DisconnectNotification.d.ts.map +1 -1
  35. package/dist/protocol/DisconnectNotification.es.js +15 -0
  36. package/dist/protocol/Frame.cjs.js +110 -0
  37. package/dist/protocol/Frame.d.ts +2 -2
  38. package/dist/protocol/Frame.d.ts.map +1 -1
  39. package/dist/protocol/Frame.es.js +100 -0
  40. package/dist/protocol/FrameReliability.cjs.js +19 -0
  41. package/dist/protocol/FrameReliability.es.js +14 -0
  42. package/dist/protocol/FrameSet.cjs.js +45 -0
  43. package/dist/protocol/FrameSet.d.ts +3 -3
  44. package/dist/protocol/FrameSet.d.ts.map +1 -1
  45. package/dist/protocol/FrameSet.es.js +40 -0
  46. package/dist/protocol/MessageIdentifiers.cjs.js +47 -0
  47. package/dist/protocol/MessageIdentifiers.es.js +43 -0
  48. package/dist/protocol/NACK.cjs.js +18 -0
  49. package/dist/protocol/NACK.d.ts +2 -2
  50. package/dist/protocol/NACK.d.ts.map +1 -1
  51. package/dist/protocol/NACK.es.js +14 -0
  52. package/dist/protocol/OfflineHandler.cjs.js +110 -0
  53. package/dist/protocol/OfflineHandler.d.ts +4 -4
  54. package/dist/protocol/OfflineHandler.d.ts.map +1 -1
  55. package/dist/protocol/OfflineHandler.es.js +102 -0
  56. package/dist/protocol/OfflinePacket.cjs.js +25 -0
  57. package/dist/protocol/OfflinePacket.d.ts +1 -1
  58. package/dist/protocol/OfflinePacket.d.ts.map +1 -1
  59. package/dist/protocol/OfflinePacket.es.js +21 -0
  60. package/dist/protocol/Packet.cjs.js +67 -0
  61. package/dist/protocol/Packet.d.ts +2 -2
  62. package/dist/protocol/Packet.d.ts.map +1 -1
  63. package/dist/protocol/Packet.es.js +59 -0
  64. package/dist/protocol/PacketPool.cjs.js +45 -0
  65. package/dist/protocol/PacketPool.d.ts +3 -3
  66. package/dist/protocol/PacketPool.d.ts.map +1 -1
  67. package/dist/protocol/PacketPool.es.js +41 -0
  68. package/dist/protocol/Protocol.cjs.js +57 -0
  69. package/dist/protocol/Protocol.d.ts +23 -25
  70. package/dist/protocol/Protocol.d.ts.map +1 -1
  71. package/dist/protocol/Protocol.es.js +28 -0
  72. package/dist/protocol/connection/ConnectedPing.cjs.js +24 -0
  73. package/dist/protocol/connection/ConnectedPing.d.ts +2 -2
  74. package/dist/protocol/connection/ConnectedPing.d.ts.map +1 -1
  75. package/dist/protocol/connection/ConnectedPing.es.js +20 -0
  76. package/dist/protocol/connection/ConnectedPong.cjs.js +23 -0
  77. package/dist/protocol/connection/ConnectedPong.d.ts +1 -1
  78. package/dist/protocol/connection/ConnectedPong.d.ts.map +1 -1
  79. package/dist/protocol/connection/ConnectedPong.es.js +19 -0
  80. package/dist/protocol/connection/IncompatibleProtocolVersion.cjs.js +26 -0
  81. package/dist/protocol/connection/IncompatibleProtocolVersion.d.ts +1 -1
  82. package/dist/protocol/connection/IncompatibleProtocolVersion.d.ts.map +1 -1
  83. package/dist/protocol/connection/IncompatibleProtocolVersion.es.js +22 -0
  84. package/dist/protocol/connection/NewIncomingConnection.cjs.js +37 -0
  85. package/dist/protocol/connection/NewIncomingConnection.d.ts +3 -3
  86. package/dist/protocol/connection/NewIncomingConnection.d.ts.map +1 -1
  87. package/dist/protocol/connection/NewIncomingConnection.es.js +33 -0
  88. package/dist/protocol/connection/OpenConnectionReply1.cjs.js +33 -0
  89. package/dist/protocol/connection/OpenConnectionReply1.d.ts +2 -2
  90. package/dist/protocol/connection/OpenConnectionReply1.d.ts.map +1 -1
  91. package/dist/protocol/connection/OpenConnectionReply1.es.js +29 -0
  92. package/dist/protocol/connection/OpenConnectionReply2.cjs.js +36 -0
  93. package/dist/protocol/connection/OpenConnectionReply2.d.ts +3 -3
  94. package/dist/protocol/connection/OpenConnectionReply2.d.ts.map +1 -1
  95. package/dist/protocol/connection/OpenConnectionReply2.es.js +32 -0
  96. package/dist/protocol/connection/OpenConnectionRequest1.cjs.js +31 -0
  97. package/dist/protocol/connection/OpenConnectionRequest1.d.ts +2 -2
  98. package/dist/protocol/connection/OpenConnectionRequest1.d.ts.map +1 -1
  99. package/dist/protocol/connection/OpenConnectionRequest1.es.js +27 -0
  100. package/dist/protocol/connection/OpenConnectionRequest2.cjs.js +34 -0
  101. package/dist/protocol/connection/OpenConnectionRequest2.d.ts +3 -3
  102. package/dist/protocol/connection/OpenConnectionRequest2.d.ts.map +1 -1
  103. package/dist/protocol/connection/OpenConnectionRequest2.es.js +30 -0
  104. package/dist/protocol/login/ConnectionRequest.cjs.js +29 -0
  105. package/dist/protocol/login/ConnectionRequest.d.ts +2 -2
  106. package/dist/protocol/login/ConnectionRequest.d.ts.map +1 -1
  107. package/dist/protocol/login/ConnectionRequest.es.js +25 -0
  108. package/dist/protocol/login/ConnectionRequestAccepted.cjs.js +39 -0
  109. package/dist/protocol/login/ConnectionRequestAccepted.d.ts +3 -3
  110. package/dist/protocol/login/ConnectionRequestAccepted.d.ts.map +1 -1
  111. package/dist/protocol/login/ConnectionRequestAccepted.es.js +35 -0
  112. package/dist/protocol/offline/UnconnectedPing.cjs.js +29 -0
  113. package/dist/protocol/offline/UnconnectedPing.d.ts +2 -2
  114. package/dist/protocol/offline/UnconnectedPing.d.ts.map +1 -1
  115. package/dist/protocol/offline/UnconnectedPing.es.js +25 -0
  116. package/dist/protocol/offline/UnconnectedPong.cjs.js +34 -0
  117. package/dist/protocol/offline/UnconnectedPong.d.ts +2 -2
  118. package/dist/protocol/offline/UnconnectedPong.d.ts.map +1 -1
  119. package/dist/protocol/offline/UnconnectedPong.es.js +30 -0
  120. package/dist/utils/InetAddress.cjs.js +29 -0
  121. package/dist/utils/InetAddress.es.js +25 -0
  122. package/dist/utils/ServerName.cjs.js +83 -0
  123. package/dist/utils/ServerName.es.js +79 -0
  124. package/package.json +51 -29
  125. package/dist/ClientSocket.js +0 -3
  126. package/dist/ClientSocket.js.map +0 -1
  127. package/dist/RakNet.js +0 -15
  128. package/dist/RakNet.js.map +0 -1
  129. package/dist/ServerSocket.js +0 -129
  130. package/dist/ServerSocket.js.map +0 -1
  131. package/dist/Session.js +0 -408
  132. package/dist/Session.js.map +0 -1
  133. package/dist/protocol/ACK.js +0 -8
  134. package/dist/protocol/ACK.js.map +0 -1
  135. package/dist/protocol/AcknowledgePacket.js +0 -69
  136. package/dist/protocol/AcknowledgePacket.js.map +0 -1
  137. package/dist/protocol/BitFlags.js +0 -9
  138. package/dist/protocol/BitFlags.js.map +0 -1
  139. package/dist/protocol/DisconnectNotification.js +0 -8
  140. package/dist/protocol/DisconnectNotification.js.map +0 -1
  141. package/dist/protocol/Frame.js +0 -103
  142. package/dist/protocol/Frame.js.map +0 -1
  143. package/dist/protocol/FrameReliability.js +0 -14
  144. package/dist/protocol/FrameReliability.js.map +0 -1
  145. package/dist/protocol/FrameSet.js +0 -34
  146. package/dist/protocol/FrameSet.js.map +0 -1
  147. package/dist/protocol/MessageIdentifiers.js +0 -42
  148. package/dist/protocol/MessageIdentifiers.js.map +0 -1
  149. package/dist/protocol/NACK.js +0 -8
  150. package/dist/protocol/NACK.js.map +0 -1
  151. package/dist/protocol/OfflineHandler.js +0 -103
  152. package/dist/protocol/OfflineHandler.js.map +0 -1
  153. package/dist/protocol/OfflinePacket.js +0 -16
  154. package/dist/protocol/OfflinePacket.js.map +0 -1
  155. package/dist/protocol/Packet.js +0 -59
  156. package/dist/protocol/Packet.js.map +0 -1
  157. package/dist/protocol/PacketPool.js +0 -29
  158. package/dist/protocol/PacketPool.js.map +0 -1
  159. package/dist/protocol/Protocol.js +0 -26
  160. package/dist/protocol/Protocol.js.map +0 -1
  161. package/dist/protocol/connection/ConnectedPing.js +0 -15
  162. package/dist/protocol/connection/ConnectedPing.js.map +0 -1
  163. package/dist/protocol/connection/ConnectedPong.js +0 -14
  164. package/dist/protocol/connection/ConnectedPong.js.map +0 -1
  165. package/dist/protocol/connection/IncompatibleProtocolVersion.js +0 -15
  166. package/dist/protocol/connection/IncompatibleProtocolVersion.js.map +0 -1
  167. package/dist/protocol/connection/NewIncomingConnection.js +0 -30
  168. package/dist/protocol/connection/NewIncomingConnection.js.map +0 -1
  169. package/dist/protocol/connection/OpenConnectionReply1.js +0 -22
  170. package/dist/protocol/connection/OpenConnectionReply1.js.map +0 -1
  171. package/dist/protocol/connection/OpenConnectionReply2.js +0 -25
  172. package/dist/protocol/connection/OpenConnectionReply2.js.map +0 -1
  173. package/dist/protocol/connection/OpenConnectionRequest1.js +0 -20
  174. package/dist/protocol/connection/OpenConnectionRequest1.js.map +0 -1
  175. package/dist/protocol/connection/OpenConnectionRequest2.js +0 -23
  176. package/dist/protocol/connection/OpenConnectionRequest2.js.map +0 -1
  177. package/dist/protocol/login/ConnectionRequest.js +0 -20
  178. package/dist/protocol/login/ConnectionRequest.js.map +0 -1
  179. package/dist/protocol/login/ConnectionRequestAccepted.js +0 -31
  180. package/dist/protocol/login/ConnectionRequestAccepted.js.map +0 -1
  181. package/dist/protocol/offline/UnconnectedPing.js +0 -20
  182. package/dist/protocol/offline/UnconnectedPing.js.map +0 -1
  183. package/dist/protocol/offline/UnconnectedPong.js +0 -23
  184. package/dist/protocol/offline/UnconnectedPong.js.map +0 -1
  185. package/dist/tsconfig.tsbuildinfo +0 -1
  186. package/dist/utils/InetAddress.js +0 -23
  187. package/dist/utils/InetAddress.js.map +0 -1
  188. package/dist/utils/ServerName.js +0 -77
  189. package/dist/utils/ServerName.js.map +0 -1
@@ -0,0 +1,386 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
4
+
5
+ const protocol_ACK = require('./protocol/ACK.cjs.js');
6
+ const BinaryStream = require('@jsprismarine/jsbinaryutils');
7
+ const protocol_BitFlags = require('./protocol/BitFlags.cjs.js');
8
+ const protocol_connection_ConnectedPing = require('./protocol/connection/ConnectedPing.cjs.js');
9
+ const protocol_connection_ConnectedPong = require('./protocol/connection/ConnectedPong.cjs.js');
10
+ const protocol_login_ConnectionRequest = require('./protocol/login/ConnectionRequest.cjs.js');
11
+ const protocol_login_ConnectionRequestAccepted = require('./protocol/login/ConnectionRequestAccepted.cjs.js');
12
+ const protocol_Frame = require('./protocol/Frame.cjs.js');
13
+ const protocol_FrameReliability = require('./protocol/FrameReliability.cjs.js');
14
+ const protocol_FrameSet = require('./protocol/FrameSet.cjs.js');
15
+ const utils_InetAddress = require('./utils/InetAddress.cjs.js');
16
+ const Constants = require('./Constants.cjs.js');
17
+ const protocol_MessageIdentifiers = require('./protocol/MessageIdentifiers.cjs.js');
18
+ const protocol_NACK = require('./protocol/NACK.cjs.js');
19
+ const assert = require('node:assert');
20
+ const protocol_PacketPool = require('./protocol/PacketPool.cjs.js');
21
+ require('./protocol/AcknowledgePacket.cjs.js');
22
+ require('./protocol/Packet.cjs.js');
23
+ require('assert');
24
+
25
+ const _interopDefault = e => e && e.__esModule ? e : { default: e };
26
+
27
+ const BinaryStream__default = /*#__PURE__*/_interopDefault(BinaryStream);
28
+ const assert__default = /*#__PURE__*/_interopDefault(assert);
29
+
30
+ var RakNetPriority = /* @__PURE__ */ ((RakNetPriority2) => {
31
+ RakNetPriority2[RakNetPriority2["NORMAL"] = 0] = "NORMAL";
32
+ RakNetPriority2[RakNetPriority2["IMMEDIATE"] = 1] = "IMMEDIATE";
33
+ return RakNetPriority2;
34
+ })(RakNetPriority || {});
35
+ var SessionStatus = /* @__PURE__ */ ((SessionStatus2) => {
36
+ SessionStatus2[SessionStatus2["CONNECTING"] = 0] = "CONNECTING";
37
+ SessionStatus2[SessionStatus2["CONNECTED"] = 1] = "CONNECTED";
38
+ SessionStatus2[SessionStatus2["DISCONNECTING"] = 2] = "DISCONNECTING";
39
+ SessionStatus2[SessionStatus2["DISCONNECTED"] = 3] = "DISCONNECTED";
40
+ return SessionStatus2;
41
+ })(SessionStatus || {});
42
+ class Session {
43
+ constructor(listener, mtuSize, rinfo, guid) {
44
+ this.listener = listener;
45
+ this.mtuSize = mtuSize;
46
+ this.rinfo = rinfo;
47
+ this.guid = guid;
48
+ this.lastUpdate = Date.now();
49
+ this.outputOrderIndex = new Array(Constants.MAX_CHANNELS).fill(0);
50
+ this.outputSequenceIndex = new Array(Constants.MAX_CHANNELS).fill(0);
51
+ this.inputOrderIndex = new Array(Constants.MAX_CHANNELS).fill(0);
52
+ for (let i = 0; i < Constants.MAX_CHANNELS; i++) {
53
+ this.inputOrderingQueue.set(i, /* @__PURE__ */ new Map());
54
+ }
55
+ this.inputHighestSequenceIndex = new Array(Constants.MAX_CHANNELS).fill(0);
56
+ }
57
+ state = 0 /* CONNECTING */;
58
+ outputFrameQueue = new protocol_FrameSet.default();
59
+ outputSequenceNumber = 0;
60
+ // TODO: find a better name
61
+ outputReliableIndex = 0;
62
+ outputBackupQueue = /* @__PURE__ */ new Map();
63
+ outputOrderIndex;
64
+ outputSequenceIndex;
65
+ receivedFrameSequences = /* @__PURE__ */ new Set();
66
+ lostFrameSequences = /* @__PURE__ */ new Set();
67
+ // Map holding fragments of fragmented packets
68
+ fragmentsQueue = /* @__PURE__ */ new Map();
69
+ outputFragmentIndex = 0;
70
+ lastInputSequenceNumber = -1;
71
+ inputHighestSequenceIndex;
72
+ inputOrderIndex;
73
+ inputOrderingQueue = /* @__PURE__ */ new Map();
74
+ // Last timestamp of packet received, helpful for timeout
75
+ lastUpdate = Date.now();
76
+ active = true;
77
+ // Packet pool is the best option to reduce allocations
78
+ packetPool = new protocol_PacketPool.default();
79
+ // Lookup table for packet handlers, always O(1) in average and worst case
80
+ packetHandlers = {
81
+ // 0x40 | 0xc0 = MessageHeaders.ACKNOWLEDGE_PACKET
82
+ [protocol_MessageIdentifiers.MessageIdentifiers.ACKNOWLEDGE_PACKET]: (buffer) => {
83
+ const ack = this.packetPool.getAckInstance();
84
+ ack.buffer = buffer;
85
+ ack.decode();
86
+ this.handleACK(ack);
87
+ },
88
+ [protocol_MessageIdentifiers.MessageIdentifiers.NACKNOWLEDGE_PACKET]: (buffer) => {
89
+ const nack = this.packetPool.getNackInstance();
90
+ nack.buffer = buffer;
91
+ nack.decode();
92
+ this.handleNACK(nack);
93
+ },
94
+ [protocol_BitFlags.BitFlags.VALID]: (buffer) => {
95
+ const frameSet = this.packetPool.getFrameSetInstance();
96
+ frameSet.buffer = buffer;
97
+ frameSet.decode();
98
+ this.handleFrameSet(frameSet);
99
+ }
100
+ };
101
+ update(timestamp) {
102
+ if (!this.isActive() && !this.isDisconnected() && this.lastUpdate + 1e4 < timestamp) {
103
+ this.disconnect("timeout");
104
+ return;
105
+ }
106
+ this.active = false;
107
+ if (this.receivedFrameSequences.size > 0) {
108
+ const ack = new protocol_ACK.default();
109
+ ack.sequenceNumbers = Array.from(this.receivedFrameSequences).map((seq) => {
110
+ this.receivedFrameSequences.delete(seq);
111
+ return seq;
112
+ });
113
+ this.sendPacket(ack);
114
+ }
115
+ if (this.lostFrameSequences.size > 0) {
116
+ const pk = new protocol_NACK.default();
117
+ pk.sequenceNumbers = Array.from(this.lostFrameSequences).map((seq) => {
118
+ this.lostFrameSequences.delete(seq);
119
+ return seq;
120
+ });
121
+ this.sendPacket(pk);
122
+ }
123
+ this.sendFrameQueue();
124
+ }
125
+ // https://github.com/facebookarchive/RakNet/blob/1a169895a900c9fc4841c556e16514182b75faf8/Source/ReliabilityLayer.cpp#L635
126
+ handle(buffer) {
127
+ this.active = true;
128
+ this.lastUpdate = Date.now();
129
+ const handler = this.packetHandlers[buffer[0] & 240];
130
+ if (handler) {
131
+ handler(buffer);
132
+ } else {
133
+ this.listener.getLogger().debug("Received an unknown packet type=%d", buffer[0]);
134
+ }
135
+ }
136
+ handleFrameSet(frameSet) {
137
+ if (this.receivedFrameSequences.has(frameSet.sequenceNumber)) {
138
+ this.listener.getLogger().debug("Discarded duplicated packet from client=%o", this.getAddress());
139
+ return;
140
+ }
141
+ this.lostFrameSequences.delete(frameSet.sequenceNumber);
142
+ if (frameSet.sequenceNumber < this.lastInputSequenceNumber || frameSet.sequenceNumber === this.lastInputSequenceNumber) {
143
+ return;
144
+ }
145
+ this.receivedFrameSequences.add(frameSet.sequenceNumber);
146
+ const diff = frameSet.sequenceNumber - this.lastInputSequenceNumber;
147
+ if (diff !== 1) {
148
+ for (let i = this.lastInputSequenceNumber + 1; i < frameSet.sequenceNumber; i++) {
149
+ if (!this.receivedFrameSequences.has(i)) {
150
+ this.lostFrameSequences.add(i);
151
+ }
152
+ }
153
+ }
154
+ this.lastInputSequenceNumber = frameSet.sequenceNumber;
155
+ for (const frame of frameSet.frames) {
156
+ this.handleFrame(frame);
157
+ }
158
+ }
159
+ handleACK(ack) {
160
+ for (const seq of ack.sequenceNumbers) {
161
+ this.outputBackupQueue.delete(seq);
162
+ }
163
+ }
164
+ handleNACK(nack) {
165
+ for (const seq of nack.sequenceNumbers) {
166
+ if (this.outputBackupQueue.has(seq)) {
167
+ const lostFrames = this.outputBackupQueue.get(seq);
168
+ for (const lostFrame of lostFrames) {
169
+ this.sendFrame(lostFrame, 1 /* IMMEDIATE */);
170
+ }
171
+ this.outputBackupQueue.delete(seq);
172
+ }
173
+ }
174
+ }
175
+ handleFrame(frame) {
176
+ if (frame.isFragmented()) {
177
+ this.handleFragment(frame);
178
+ return;
179
+ }
180
+ const orderChannel = frame.orderChannel;
181
+ const orderIndex = frame.orderIndex;
182
+ const sequenceIndex = frame.sequenceIndex;
183
+ if (frame.isSequenced()) {
184
+ if (sequenceIndex < this.inputHighestSequenceIndex[orderChannel] || orderIndex < this.inputOrderIndex[orderChannel]) {
185
+ return;
186
+ }
187
+ this.inputHighestSequenceIndex[orderChannel] = sequenceIndex + 1;
188
+ this.handlePacket(frame);
189
+ } else if (frame.isOrdered()) {
190
+ if (orderIndex === this.inputOrderIndex[orderChannel]) {
191
+ this.inputHighestSequenceIndex[orderChannel] = 0;
192
+ this.inputOrderIndex[orderChannel] = orderIndex + 1;
193
+ this.handlePacket(frame);
194
+ let i = this.inputOrderIndex[orderChannel];
195
+ const outOfOrderQueue = this.inputOrderingQueue.get(orderChannel);
196
+ for (; outOfOrderQueue.has(i); i++) {
197
+ this.handlePacket(outOfOrderQueue.get(i));
198
+ outOfOrderQueue.delete(i);
199
+ }
200
+ this.inputOrderingQueue.set(orderChannel, outOfOrderQueue);
201
+ this.inputOrderIndex[orderChannel] = i;
202
+ } else if (orderIndex > this.inputOrderIndex[orderChannel]) {
203
+ const unordered = this.inputOrderingQueue.get(orderChannel);
204
+ unordered.set(orderIndex, frame);
205
+ }
206
+ } else {
207
+ this.handlePacket(frame);
208
+ }
209
+ }
210
+ sendFrame(frame, flags = 0 /* NORMAL */) {
211
+ assert__default.default(typeof frame.orderChannel === "number", "Frame OrderChannel cannot be null");
212
+ if (frame.isSequenced()) {
213
+ frame.orderIndex = this.outputOrderIndex[frame.orderChannel];
214
+ frame.sequenceIndex = this.outputSequenceIndex[frame.orderChannel]++;
215
+ } else if (frame.isOrderedExclusive()) {
216
+ frame.orderIndex = this.outputOrderIndex[frame.orderChannel]++;
217
+ this.outputSequenceIndex[frame.orderChannel] = 0;
218
+ }
219
+ frame.reliableIndex = this.outputReliableIndex++;
220
+ const maxSize = this.getMTU() - protocol_FrameSet.DATAGRAM_HEADER_BYTE_LENGTH - protocol_Frame.MAX_FRAME_BYTE_LENGTH;
221
+ if (frame.content.byteLength > maxSize) {
222
+ const buffer = Buffer.from(frame.content);
223
+ const fragmentId = this.outputFragmentIndex++ % 65536;
224
+ for (let i = 0; i < buffer.byteLength; i += maxSize) {
225
+ if (i !== 0) {
226
+ frame.reliableIndex = this.outputReliableIndex++;
227
+ }
228
+ frame.content = buffer.slice(i, i + maxSize);
229
+ frame.fragmentIndex = i / maxSize;
230
+ frame.fragmentId = fragmentId;
231
+ frame.fragmentSize = Math.ceil(buffer.byteLength / maxSize);
232
+ this.addFrameToQueue(frame, flags | 1 /* IMMEDIATE */);
233
+ }
234
+ } else {
235
+ this.addFrameToQueue(frame, flags);
236
+ }
237
+ }
238
+ addFrameToQueue(frame, priority = 0 /* NORMAL */) {
239
+ let length = 4;
240
+ for (const queuedFrame of this.outputFrameQueue.frames) {
241
+ length += queuedFrame.getByteLength();
242
+ }
243
+ if (length + frame.getByteLength() > this.mtuSize - 36) {
244
+ this.sendFrameQueue();
245
+ }
246
+ this.outputFrameQueue.frames.push(frame);
247
+ if (priority === 1 /* IMMEDIATE */) {
248
+ this.sendFrameQueue();
249
+ }
250
+ }
251
+ handlePacket(packet) {
252
+ const id = packet.content[0];
253
+ if (this.state === 0 /* CONNECTING */) {
254
+ if (id === protocol_MessageIdentifiers.MessageIdentifiers.CONNECTION_REQUEST) {
255
+ this.handleConnectionRequest(packet.content).then(
256
+ (encapsulated) => this.sendFrame(encapsulated, 1 /* IMMEDIATE */),
257
+ () => {
258
+ }
259
+ );
260
+ } else if (id === protocol_MessageIdentifiers.MessageIdentifiers.NEW_INCOMING_CONNECTION) {
261
+ this.state = 1 /* CONNECTED */;
262
+ this.listener.emit("openConnection", this);
263
+ }
264
+ } else if (id === protocol_MessageIdentifiers.MessageIdentifiers.DISCONNECTION_NOTIFICATION) {
265
+ this.disconnect();
266
+ } else if (id === protocol_MessageIdentifiers.MessageIdentifiers.CONNECTED_PING) {
267
+ this.handleConnectedPing(packet.content).then(
268
+ (encapsulated) => this.sendFrame(encapsulated),
269
+ () => {
270
+ }
271
+ );
272
+ } else if (this.state === 1 /* CONNECTED */) {
273
+ this.listener.emit("encapsulated", packet, this.getAddress());
274
+ }
275
+ }
276
+ async handleConnectionRequest(buffer) {
277
+ const dataPacket = new protocol_login_ConnectionRequest.default(buffer);
278
+ dataPacket.decode();
279
+ const pk = new protocol_login_ConnectionRequestAccepted.default();
280
+ pk.clientAddress = this.getAddress();
281
+ pk.requestTimestamp = dataPacket.requestTimestamp;
282
+ pk.acceptedTimestamp = BigInt(Date.now());
283
+ pk.encode();
284
+ const sendPacket = new protocol_Frame.default();
285
+ sendPacket.reliability = protocol_FrameReliability.FrameReliability.UNRELIABLE;
286
+ sendPacket.orderChannel = 0;
287
+ sendPacket.content = pk.getBuffer();
288
+ return sendPacket;
289
+ }
290
+ async handleConnectedPing(buffer) {
291
+ const dataPacket = new protocol_connection_ConnectedPing.default(buffer);
292
+ dataPacket.decode();
293
+ const pk = new protocol_connection_ConnectedPong.default();
294
+ pk.clientTimestamp = dataPacket.clientTimestamp;
295
+ pk.serverTimestamp = BigInt(Date.now());
296
+ pk.encode();
297
+ const sendPacket = new protocol_Frame.default();
298
+ sendPacket.reliability = protocol_FrameReliability.FrameReliability.UNRELIABLE;
299
+ sendPacket.orderChannel = 0;
300
+ sendPacket.content = pk.getBuffer();
301
+ return sendPacket;
302
+ }
303
+ handleFragment(frame) {
304
+ if (!this.fragmentsQueue.has(frame.fragmentId)) {
305
+ this.fragmentsQueue.set(frame.fragmentId, /* @__PURE__ */ new Map([[frame.fragmentIndex, frame]]));
306
+ } else {
307
+ const value = this.fragmentsQueue.get(frame.fragmentId);
308
+ value.set(frame.fragmentIndex, frame);
309
+ if (value.size === frame.fragmentSize) {
310
+ const stream = new BinaryStream__default.default();
311
+ for (let i = 0; i < value.size; i++) {
312
+ const splitPacket = value.get(i);
313
+ stream.write(splitPacket.content);
314
+ }
315
+ const assembledFrame = new protocol_Frame.default();
316
+ assembledFrame.content = stream.getBuffer();
317
+ assembledFrame.reliability = frame.reliability;
318
+ assembledFrame.reliableIndex = frame.reliableIndex;
319
+ assembledFrame.sequenceIndex = frame.sequenceIndex;
320
+ assembledFrame.orderIndex = frame.orderIndex;
321
+ assembledFrame.orderChannel = frame.orderChannel;
322
+ this.fragmentsQueue.delete(frame.fragmentId);
323
+ this.handleFrame(assembledFrame);
324
+ }
325
+ }
326
+ }
327
+ sendFrameQueue() {
328
+ if (this.outputFrameQueue.frames.length > 0) {
329
+ this.outputFrameQueue.sequenceNumber = this.outputSequenceNumber++;
330
+ this.sendFrameSet(this.outputFrameQueue);
331
+ this.outputFrameQueue = new protocol_FrameSet.default();
332
+ }
333
+ }
334
+ sendFrameSet(frameSet) {
335
+ this.sendPacket(frameSet);
336
+ this.outputBackupQueue.set(
337
+ frameSet.sequenceNumber,
338
+ frameSet.frames.filter((frame) => frame.isReliable())
339
+ );
340
+ }
341
+ sendPacket(packet) {
342
+ this.listener.sendPacket(packet, this.rinfo);
343
+ }
344
+ close() {
345
+ const stream = new BinaryStream__default.default(Buffer.from("\0\0\b", "binary"));
346
+ this.addFrameToQueue(new protocol_Frame.default().fromBinary(stream), 1 /* IMMEDIATE */);
347
+ }
348
+ /**
349
+ * Kick a client
350
+ * @param reason the reason message, optional
351
+ */
352
+ disconnect(reason = "client disconnect") {
353
+ this.close();
354
+ this.state = 3 /* DISCONNECTED */;
355
+ this.update(Date.now());
356
+ this.listener.removeSession(this, reason);
357
+ }
358
+ getState() {
359
+ return this.state;
360
+ }
361
+ isActive() {
362
+ return this.active;
363
+ }
364
+ isDisconnected() {
365
+ return this.state === 3 /* DISCONNECTED */;
366
+ }
367
+ getListener() {
368
+ return this.listener;
369
+ }
370
+ /**
371
+ * Returns the maxmium transfer unit
372
+ * for this connection.
373
+ * @returns {number} the UDP adjusted.
374
+ */
375
+ getMTU() {
376
+ return this.mtuSize - Constants.UDP_HEADER_SIZE;
377
+ }
378
+ getAddress() {
379
+ return new utils_InetAddress.default(this.rinfo.address, this.rinfo.port, 4);
380
+ }
381
+ }
382
+
383
+ exports.RakNetPriority = RakNetPriority;
384
+ exports.SessionStatus = SessionStatus;
385
+ exports.default = Session;
386
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbi5janMuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9TZXNzaW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBQ0sgZnJvbSAnLi9wcm90b2NvbC9BQ0snO1xuaW1wb3J0IEJpbmFyeVN0cmVhbSBmcm9tICdAanNwcmlzbWFyaW5lL2pzYmluYXJ5dXRpbHMnO1xuaW1wb3J0IEJpdEZsYWdzIGZyb20gJy4vcHJvdG9jb2wvQml0RmxhZ3MnO1xuaW1wb3J0IENvbm5lY3RlZFBpbmcgZnJvbSAnLi9wcm90b2NvbC9jb25uZWN0aW9uL0Nvbm5lY3RlZFBpbmcnO1xuaW1wb3J0IENvbm5lY3RlZFBvbmcgZnJvbSAnLi9wcm90b2NvbC9jb25uZWN0aW9uL0Nvbm5lY3RlZFBvbmcnO1xuaW1wb3J0IENvbm5lY3Rpb25SZXF1ZXN0IGZyb20gJy4vcHJvdG9jb2wvbG9naW4vQ29ubmVjdGlvblJlcXVlc3QnO1xuaW1wb3J0IENvbm5lY3Rpb25SZXF1ZXN0QWNjZXB0ZWQgZnJvbSAnLi9wcm90b2NvbC9sb2dpbi9Db25uZWN0aW9uUmVxdWVzdEFjY2VwdGVkJztcbmltcG9ydCBGcmFtZSwgeyBNQVhfRlJBTUVfQllURV9MRU5HVEggfSBmcm9tICcuL3Byb3RvY29sL0ZyYW1lJztcbmltcG9ydCBGcmFtZVJlbGlhYmlsaXR5IGZyb20gJy4vcHJvdG9jb2wvRnJhbWVSZWxpYWJpbGl0eSc7XG5pbXBvcnQgRnJhbWVTZXQsIHsgREFUQUdSQU1fSEVBREVSX0JZVEVfTEVOR1RIIH0gZnJvbSAnLi9wcm90b2NvbC9GcmFtZVNldCc7XG5pbXBvcnQgSW5ldEFkZHJlc3MgZnJvbSAnLi91dGlscy9JbmV0QWRkcmVzcyc7XG5pbXBvcnQgeyBNQVhfQ0hBTk5FTFMsIFVEUF9IRUFERVJfU0laRSB9IGZyb20gJy4vQ29uc3RhbnRzJztcbmltcG9ydCB7IE1lc3NhZ2VJZGVudGlmaWVycyB9IGZyb20gJy4vcHJvdG9jb2wvTWVzc2FnZUlkZW50aWZpZXJzJztcbmltcG9ydCBOQUNLIGZyb20gJy4vcHJvdG9jb2wvTkFDSyc7XG5pbXBvcnQgUGFja2V0IGZyb20gJy4vcHJvdG9jb2wvUGFja2V0JztcbmltcG9ydCBSYWtOZXRMaXN0ZW5lciBmcm9tICcuL1NlcnZlclNvY2tldCc7XG5pbXBvcnQgeyB0eXBlIFJlbW90ZUluZm8gfSBmcm9tICdub2RlOmRncmFtJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuaW1wb3J0IFBhY2tldFBvb2wgZnJvbSAnLi9wcm90b2NvbC9QYWNrZXRQb29sJztcblxuZXhwb3J0IGVudW0gUmFrTmV0UHJpb3JpdHkge1xuICAgIE5PUk1BTCxcbiAgICBJTU1FRElBVEVcbn1cblxuZXhwb3J0IGVudW0gU2Vzc2lvblN0YXR1cyB7XG4gICAgQ09OTkVDVElORyxcbiAgICBDT05ORUNURUQsXG4gICAgRElTQ09OTkVDVElORyxcbiAgICBESVNDT05ORUNURURcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2Vzc2lvbiB7XG4gICAgcHJpdmF0ZSBzdGF0ZSA9IFNlc3Npb25TdGF0dXMuQ09OTkVDVElORztcblxuICAgIHByaXZhdGUgb3V0cHV0RnJhbWVRdWV1ZSA9IG5ldyBGcmFtZVNldCgpO1xuICAgIHByaXZhdGUgb3V0cHV0U2VxdWVuY2VOdW1iZXIgPSAwOyAvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIG5hbWVcbiAgICBwcml2YXRlIG91dHB1dFJlbGlhYmxlSW5kZXggPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3V0cHV0QmFja3VwUXVldWU6IE1hcDxudW1iZXIsIEZyYW1lW10+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXRPcmRlckluZGV4OiBudW1iZXJbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dFNlcXVlbmNlSW5kZXg6IG51bWJlcltdO1xuXG4gICAgcHJpdmF0ZSByZWNlaXZlZEZyYW1lU2VxdWVuY2VzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcml2YXRlIGxvc3RGcmFtZVNlcXVlbmNlczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBNYXAgaG9sZGluZyBmcmFnbWVudHMgb2YgZnJhZ21lbnRlZCBwYWNrZXRzXG4gICAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudHNRdWV1ZTogTWFwPG51bWJlciwgTWFwPG51bWJlciwgRnJhbWU+PiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIG91dHB1dEZyYWdtZW50SW5kZXggPSAwO1xuXG4gICAgcHJpdmF0ZSBsYXN0SW5wdXRTZXF1ZW5jZU51bWJlciA9IC0xO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5wdXRIaWdoZXN0U2VxdWVuY2VJbmRleDogbnVtYmVyW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dE9yZGVySW5kZXg6IG51bWJlcltdO1xuICAgIHByaXZhdGUgaW5wdXRPcmRlcmluZ1F1ZXVlOiBNYXA8bnVtYmVyLCBNYXA8bnVtYmVyLCBGcmFtZT4+ID0gbmV3IE1hcCgpO1xuXG4gICAgLy8gTGFzdCB0aW1lc3RhbXAgb2YgcGFja2V0IHJlY2VpdmVkLCBoZWxwZnVsIGZvciB0aW1lb3V0XG4gICAgcHJpdmF0ZSBsYXN0VXBkYXRlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgIHByaXZhdGUgYWN0aXZlID0gdHJ1ZTtcblxuICAgIC8vIFBhY2tldCBwb29sIGlzIHRoZSBiZXN0IG9wdGlvbiB0byByZWR1Y2UgYWxsb2NhdGlvbnNcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhY2tldFBvb2wgPSBuZXcgUGFja2V0UG9vbCgpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyOiBSYWtOZXRMaXN0ZW5lcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtdHVTaXplOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSByaW5mbzogUmVtb3RlSW5mbyxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGd1aWQ6IGJpZ2ludFxuICAgICkge1xuICAgICAgICB0aGlzLmxhc3RVcGRhdGUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIHRoaXMub3V0cHV0T3JkZXJJbmRleCA9IG5ldyBBcnJheShNQVhfQ0hBTk5FTFMpLmZpbGwoMCk7XG4gICAgICAgIHRoaXMub3V0cHV0U2VxdWVuY2VJbmRleCA9IG5ldyBBcnJheShNQVhfQ0hBTk5FTFMpLmZpbGwoMCk7XG5cbiAgICAgICAgdGhpcy5pbnB1dE9yZGVySW5kZXggPSBuZXcgQXJyYXkoTUFYX0NIQU5ORUxTKS5maWxsKDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0T3JkZXJpbmdRdWV1ZS5zZXQoaSwgbmV3IE1hcCgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRIaWdoZXN0U2VxdWVuY2VJbmRleCA9IG5ldyBBcnJheShNQVhfQ0hBTk5FTFMpLmZpbGwoMCk7XG4gICAgfVxuXG4gICAgLy8gTG9va3VwIHRhYmxlIGZvciBwYWNrZXQgaGFuZGxlcnMsIGFsd2F5cyBPKDEpIGluIGF2ZXJhZ2UgYW5kIHdvcnN0IGNhc2VcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhY2tldEhhbmRsZXJzOiBSZWNvcmQ8bnVtYmVyLCAoYnVmZmVyOiBCdWZmZXIpID0+IHZvaWQ+ID0ge1xuICAgICAgICAvLyAweDQwIHwgMHhjMCA9IE1lc3NhZ2VIZWFkZXJzLkFDS05PV0xFREdFX1BBQ0tFVFxuICAgICAgICBbTWVzc2FnZUlkZW50aWZpZXJzLkFDS05PV0xFREdFX1BBQ0tFVF06IChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWNrID0gdGhpcy5wYWNrZXRQb29sLmdldEFja0luc3RhbmNlKCk7XG4gICAgICAgICAgICAoYWNrIGFzIGFueSkuYnVmZmVyID0gYnVmZmVyO1xuICAgICAgICAgICAgYWNrLmRlY29kZSgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBQ0soYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgW01lc3NhZ2VJZGVudGlmaWVycy5OQUNLTk9XTEVER0VfUEFDS0VUXTogKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYWNrID0gdGhpcy5wYWNrZXRQb29sLmdldE5hY2tJbnN0YW5jZSgpO1xuICAgICAgICAgICAgKG5hY2sgYXMgYW55KS5idWZmZXIgPSBidWZmZXI7XG4gICAgICAgICAgICBuYWNrLmRlY29kZSgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVOQUNLKG5hY2spO1xuICAgICAgICB9LFxuICAgICAgICBbQml0RmxhZ3MuVkFMSURdOiAoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lU2V0ID0gdGhpcy5wYWNrZXRQb29sLmdldEZyYW1lU2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgIChmcmFtZVNldCBhcyBhbnkpLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgICAgICAgIGZyYW1lU2V0LmRlY29kZSgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGcmFtZVNldChmcmFtZVNldCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIHVwZGF0ZSh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSAmJiAhdGhpcy5pc0Rpc2Nvbm5lY3RlZCgpICYmIHRoaXMubGFzdFVwZGF0ZSArIDEwXzAwMCA8IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCd0aW1lb3V0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIFRPRE86IGEgcXVldWUganVzdCBmb3IgQUNLcyBzZXF1ZW5jZXMgdG8gYXZvaWQgZHVwbGljYXRlZHNcbiAgICAgICAgaWYgKHRoaXMucmVjZWl2ZWRGcmFtZVNlcXVlbmNlcy5zaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYWNrID0gbmV3IEFDSygpO1xuICAgICAgICAgICAgYWNrLnNlcXVlbmNlTnVtYmVycyA9IEFycmF5LmZyb20odGhpcy5yZWNlaXZlZEZyYW1lU2VxdWVuY2VzKS5tYXAoKHNlcSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjZWl2ZWRGcmFtZVNlcXVlbmNlcy5kZWxldGUoc2VxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRQYWNrZXQoYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxvc3RGcmFtZVNlcXVlbmNlcy5zaXplID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGsgPSBuZXcgTkFDSygpO1xuICAgICAgICAgICAgcGsuc2VxdWVuY2VOdW1iZXJzID0gQXJyYXkuZnJvbSh0aGlzLmxvc3RGcmFtZVNlcXVlbmNlcykubWFwKChzZXEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvc3RGcmFtZVNlcXVlbmNlcy5kZWxldGUoc2VxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VxO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRQYWNrZXQocGspO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZW5kRnJhbWVRdWV1ZSgpO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2FyY2hpdmUvUmFrTmV0L2Jsb2IvMWExNjk4OTVhOTAwYzlmYzQ4NDFjNTU2ZTE2NTE0MTgyYjc1ZmFmOC9Tb3VyY2UvUmVsaWFiaWxpdHlMYXllci5jcHAjTDYzNVxuICAgIHB1YmxpYyBoYW5kbGUoYnVmZmVyOiBCdWZmZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmxhc3RVcGRhdGUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIE1hc2sgdGhlIGxvd2VyIDQgYml0cyBvZiB0aGUgaGVhZGVyXG4gICAgICAgIC8vIHRvIGdldCB0aGUgcmFuZ2Ugb2YgaGVhZGVyIHZhbHVlc1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5wYWNrZXRIYW5kbGVyc1tidWZmZXJbMF0hICYgMHhmMF07XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgICBoYW5kbGVyKGJ1ZmZlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmdldExvZ2dlcigpLmRlYnVnKCdSZWNlaXZlZCBhbiB1bmtub3duIHBhY2tldCB0eXBlPSVkJywgYnVmZmVyWzBdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRnJhbWVTZXQoZnJhbWVTZXQ6IEZyYW1lU2V0KTogdm9pZCB7XG4gICAgICAgIC8vIFRPRE86IGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrc1xuICAgICAgICBpZiAodGhpcy5yZWNlaXZlZEZyYW1lU2VxdWVuY2VzLmhhcyhmcmFtZVNldC5zZXF1ZW5jZU51bWJlcikpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZ2V0TG9nZ2VyKCkuZGVidWcoJ0Rpc2NhcmRlZCBkdXBsaWNhdGVkIHBhY2tldCBmcm9tIGNsaWVudD0lbycsIHRoaXMuZ2V0QWRkcmVzcygpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGl0IHdhcyBtaXNzaW5nLCByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB3ZSByZWNlaXZlZCBpdCBub3dcbiAgICAgICAgdGhpcy5sb3N0RnJhbWVTZXF1ZW5jZXMuZGVsZXRlKGZyYW1lU2V0LnNlcXVlbmNlTnVtYmVyKTtcblxuICAgICAgICAvLyBGb3Igbm93IGlzIGdvb2QgbGlrZSB0aGF0XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGZyYW1lU2V0LnNlcXVlbmNlTnVtYmVyIDwgdGhpcy5sYXN0SW5wdXRTZXF1ZW5jZU51bWJlciB8fFxuICAgICAgICAgICAgZnJhbWVTZXQuc2VxdWVuY2VOdW1iZXIgPT09IHRoaXMubGFzdElucHV0U2VxdWVuY2VOdW1iZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgdGhlIGZyYW1lIHRvIHRoZSBBQ0sgcXVldWVcbiAgICAgICAgdGhpcy5yZWNlaXZlZEZyYW1lU2VxdWVuY2VzLmFkZChmcmFtZVNldC5zZXF1ZW5jZU51bWJlcik7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIG1pc3NpbmcgcGFja2V0cyBiZXR3ZWVuIHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIHRoZSBsYXN0IHJlY2VpdmVkIG9uZVxuICAgICAgICBjb25zdCBkaWZmID0gZnJhbWVTZXQuc2VxdWVuY2VOdW1iZXIgLSB0aGlzLmxhc3RJbnB1dFNlcXVlbmNlTnVtYmVyO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzZXF1ZW5jZSBoYXMgYSBob2xlIGR1ZSB0byBhIGxvc3QgcGFja2V0XG4gICAgICAgIGlmIChkaWZmICE9PSAxKSB7XG4gICAgICAgICAgICAvLyBBcyBpIHNhaWQgYmVmb3JlLCB0aGVyZSB3ZSBzZWFyY2ggZm9yIG1pc3NpbmcgcGFja2V0cyBpbiB0aGUgbGlzdCBvZiB0aGUgcmVjaWV2ZWQgb25lc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMubGFzdElucHV0U2VxdWVuY2VOdW1iZXIgKyAxOyBpIDwgZnJhbWVTZXQuc2VxdWVuY2VOdW1iZXI7IGkrKykge1xuICAgICAgICAgICAgICAgIC8vIEFkZGluZyB0aGUgcGFja2V0IHNlcXVlbmNlIG51bWJlciB0byB0aGUgTkFDSyBxdWV1ZSBhbmQgdGhlbiBzZW5kaW5nIGEgTkFDS1xuICAgICAgICAgICAgICAgIC8vIHdpbGwgbWFrZSB0aGUgQ2xpZW50IHNlbmRpbmcgYWdhaW4gdGhlIGxvc3QgcGFja2V0XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlY2VpdmVkRnJhbWVTZXF1ZW5jZXMuaGFzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9zdEZyYW1lU2VxdWVuY2VzLmFkZChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSByZWNlaXZlZCBhIGxvc3QgcGFja2V0IHdlIHNlbnQgaW4gTkFDSyBvciBhIG5vcm1hbCBzZXF1ZW5jZWQgb25lXG4gICAgICAgIHRoaXMubGFzdElucHV0U2VxdWVuY2VOdW1iZXIgPSBmcmFtZVNldC5zZXF1ZW5jZU51bWJlcjtcblxuICAgICAgICAvLyBIYW5kbGUgZW5jYXBzdWxhdGVkXG4gICAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgZnJhbWVTZXQuZnJhbWVzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZyYW1lKGZyYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQUNLKGFjazogQUNLKTogdm9pZCB7XG4gICAgICAgIC8vIFRPRE86IHBpbmcgY2FsY3VsYXRpb25cblxuICAgICAgICBmb3IgKGNvbnN0IHNlcSBvZiBhY2suc2VxdWVuY2VOdW1iZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dEJhY2t1cFF1ZXVlLmRlbGV0ZShzZXEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOQUNLKG5hY2s6IE5BQ0spOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBzZXEgb2YgbmFjay5zZXF1ZW5jZU51bWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dEJhY2t1cFF1ZXVlLmhhcyhzZXEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9zdEZyYW1lcyA9IHRoaXMub3V0cHV0QmFja3VwUXVldWUuZ2V0KHNlcSkhO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbG9zdEZyYW1lIG9mIGxvc3RGcmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kRnJhbWUobG9zdEZyYW1lLCBSYWtOZXRQcmlvcml0eS5JTU1FRElBVEUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm91dHB1dEJhY2t1cFF1ZXVlLmRlbGV0ZShzZXEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVGcmFtZShmcmFtZTogRnJhbWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZyYW1lLmlzRnJhZ21lbnRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZyYWdtZW50KGZyYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yZGVyQ2hhbm5lbCA9IGZyYW1lLm9yZGVyQ2hhbm5lbCE7XG4gICAgICAgIGNvbnN0IG9yZGVySW5kZXggPSBmcmFtZS5vcmRlckluZGV4ITtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VJbmRleCA9IGZyYW1lLnNlcXVlbmNlSW5kZXghO1xuXG4gICAgICAgIGlmIChmcmFtZS5pc1NlcXVlbmNlZCgpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VJbmRleCA8IHRoaXMuaW5wdXRIaWdoZXN0U2VxdWVuY2VJbmRleFtvcmRlckNoYW5uZWxdISB8fFxuICAgICAgICAgICAgICAgIG9yZGVySW5kZXggPCB0aGlzLmlucHV0T3JkZXJJbmRleFtvcmRlckNoYW5uZWxdIVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gU2VxdWVuY2VkIHBhY2tldCBpcyB0b28gb2xkLCBkaXNjYXJkIGl0XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlucHV0SGlnaGVzdFNlcXVlbmNlSW5kZXhbb3JkZXJDaGFubmVsXSA9IHNlcXVlbmNlSW5kZXggKyAxO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYWNrZXQoZnJhbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGZyYW1lLmlzT3JkZXJlZCgpKSB7XG4gICAgICAgICAgICBpZiAob3JkZXJJbmRleCA9PT0gdGhpcy5pbnB1dE9yZGVySW5kZXhbb3JkZXJDaGFubmVsXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIaWdoZXN0U2VxdWVuY2VJbmRleFtvcmRlckNoYW5uZWxdID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0T3JkZXJJbmRleFtvcmRlckNoYW5uZWxdID0gb3JkZXJJbmRleCArIDE7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhY2tldChmcmFtZSk7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSB0aGlzLmlucHV0T3JkZXJJbmRleFtvcmRlckNoYW5uZWxdITtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRPZk9yZGVyUXVldWUgPSB0aGlzLmlucHV0T3JkZXJpbmdRdWV1ZS5nZXQob3JkZXJDaGFubmVsKSE7XG4gICAgICAgICAgICAgICAgZm9yICg7IG91dE9mT3JkZXJRdWV1ZS5oYXMoaSk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhY2tldChvdXRPZk9yZGVyUXVldWUuZ2V0KGkpISk7XG4gICAgICAgICAgICAgICAgICAgIG91dE9mT3JkZXJRdWV1ZS5kZWxldGUoaSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSB1cGRhdGVkIHF1ZXVlXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dE9yZGVyaW5nUXVldWUuc2V0KG9yZGVyQ2hhbm5lbCwgb3V0T2ZPcmRlclF1ZXVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0T3JkZXJJbmRleFtvcmRlckNoYW5uZWxdID0gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JkZXJJbmRleCA+IHRoaXMuaW5wdXRPcmRlckluZGV4W29yZGVyQ2hhbm5lbF0hKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5vcmRlcmVkID0gdGhpcy5pbnB1dE9yZGVyaW5nUXVldWUuZ2V0KG9yZGVyQ2hhbm5lbCkhO1xuICAgICAgICAgICAgICAgIHVub3JkZXJlZC5zZXQob3JkZXJJbmRleCwgZnJhbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYWNrZXQoZnJhbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRGcmFtZShmcmFtZTogRnJhbWUsIGZsYWdzID0gUmFrTmV0UHJpb3JpdHkuTk9STUFMKTogdm9pZCB7XG4gICAgICAgIGFzc2VydCh0eXBlb2YgZnJhbWUub3JkZXJDaGFubmVsID09PSAnbnVtYmVyJywgJ0ZyYW1lIE9yZGVyQ2hhbm5lbCBjYW5ub3QgYmUgbnVsbCcpO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2thcmNoaXZlL1Jha05ldC9ibG9iLzFhMTY5ODk1YTkwMGM5ZmM0ODQxYzU1NmUxNjUxNDE4MmI3NWZhZjgvU291cmNlL1JlbGlhYmlsaXR5TGF5ZXIuY3BwI0wxNjI1XG4gICAgICAgIGlmIChmcmFtZS5pc1NlcXVlbmNlZCgpKSB7XG4gICAgICAgICAgICAvLyBTZXF1ZW5jZWQgcGFja2V0cyBkb24ndCBpbmNyZWFzZSB0aGUgb3JkZXJlZCBjaGFubmVsIGluZGV4XG4gICAgICAgICAgICBmcmFtZS5vcmRlckluZGV4ID0gdGhpcy5vdXRwdXRPcmRlckluZGV4W2ZyYW1lLm9yZGVyQ2hhbm5lbF0hO1xuICAgICAgICAgICAgZnJhbWUuc2VxdWVuY2VJbmRleCA9IHRoaXMub3V0cHV0U2VxdWVuY2VJbmRleFtmcmFtZS5vcmRlckNoYW5uZWxdKys7XG4gICAgICAgIH0gZWxzZSBpZiAoZnJhbWUuaXNPcmRlcmVkRXhjbHVzaXZlKCkpIHtcbiAgICAgICAgICAgIC8vIGltcGxpZXMgc2VxdWVuY2VkLCBidXQgd2UgaGF2ZSB0byBkaXN0aW5jdCB0aGVtXG4gICAgICAgICAgICBmcmFtZS5vcmRlckluZGV4ID0gdGhpcy5vdXRwdXRPcmRlckluZGV4W2ZyYW1lLm9yZGVyQ2hhbm5lbF0rKztcbiAgICAgICAgICAgIHRoaXMub3V0cHV0U2VxdWVuY2VJbmRleFtmcmFtZS5vcmRlckNoYW5uZWxdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyYW1lLnJlbGlhYmxlSW5kZXggPSB0aGlzLm91dHB1dFJlbGlhYmxlSW5kZXgrKztcblxuICAgICAgICAvLyBTcGxpdCBwYWNrZXQgaWYgYmlnZ2VyIHRoYW4gTVRVIHNpemVcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHRoaXMuZ2V0TVRVKCkgLSBEQVRBR1JBTV9IRUFERVJfQllURV9MRU5HVEggLSBNQVhfRlJBTUVfQllURV9MRU5HVEg7XG4gICAgICAgIGlmIChmcmFtZS5jb250ZW50LmJ5dGVMZW5ndGggPiBtYXhTaXplKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSB1c2UgdGhlIGZyYW1lIGFzIHJlZmVyZW5jZSwgd2UgaGF2ZSB0byBjb3B5IHNvbWV3aGVyZVxuICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGJ1ZmZlci4gVGhlbiB3ZSB3aWxsIHBvaW50IHRvIHRoaXMgYnVmZmVyIGNvbnRlbnRcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZyYW1lLmNvbnRlbnQpO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRJZCA9IHRoaXMub3V0cHV0RnJhZ21lbnRJbmRleCsrICUgNjU1MzY7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlci5ieXRlTGVuZ3RoOyBpICs9IG1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBMaWtlIHRoZSBvcmlnaW5hbCByYWtuZXQsIHdlIGxpa2UgdG8gdXNlIGEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWxcbiAgICAgICAgICAgICAgICAvLyBmcmFtZSwgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgYWJvdXQgc2lkZSBlZmZlY3RzIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgICAvLyBSYWtOZXQgd2lsbCBhbGxvY2F0ZSB0aGUgd2hvbGUgc3RyY3R1cmUgY29udGFpbmluZyBzcGxpdHMsXG4gICAgICAgICAgICAgICAgLy8gYnV0IGkgdGhpbmsgY2FjaGluZyBqdXN0IHRoZSBidWZmZXIgaXMgZW5vdWdoLlxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9va2FyY2hpdmUvUmFrTmV0L2Jsb2IvMWExNjk4OTVhOTAwYzlmYzQ4NDFjNTU2ZTE2NTE0MTgyYjc1ZmFmOC9Tb3VyY2UvUmVsaWFiaWxpdHlMYXllci5jcHAjTDI5NjNcblxuICAgICAgICAgICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IGluZGV4IGFzIGl0J3MgYWxyZWFkeSBpbmNyZWFzZWQgYnkgaXRzZWxmLlxuICAgICAgICAgICAgICAgIGlmIChpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lLnJlbGlhYmxlSW5kZXggPSB0aGlzLm91dHB1dFJlbGlhYmxlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcmFtZS5jb250ZW50ID0gYnVmZmVyLnNsaWNlKGksIGkgKyBtYXhTaXplKTtcbiAgICAgICAgICAgICAgICBmcmFtZS5mcmFnbWVudEluZGV4ID0gaSAvIG1heFNpemU7XG4gICAgICAgICAgICAgICAgZnJhbWUuZnJhZ21lbnRJZCA9IGZyYWdtZW50SWQ7XG4gICAgICAgICAgICAgICAgZnJhbWUuZnJhZ21lbnRTaXplID0gTWF0aC5jZWlsKGJ1ZmZlci5ieXRlTGVuZ3RoIC8gbWF4U2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGcmFtZVRvUXVldWUoZnJhbWUsIGZsYWdzIHwgUmFrTmV0UHJpb3JpdHkuSU1NRURJQVRFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRnJhbWVUb1F1ZXVlKGZyYW1lLCBmbGFncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEZyYW1lVG9RdWV1ZShmcmFtZTogRnJhbWUsIHByaW9yaXR5ID0gUmFrTmV0UHJpb3JpdHkuTk9STUFMKTogdm9pZCB7XG4gICAgICAgIGxldCBsZW5ndGggPSA0OyAvLyBkYXRhZ3JhbSBoZWFkZXIgc2l6ZVxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXVlZEZyYW1lIG9mIHRoaXMub3V0cHV0RnJhbWVRdWV1ZS5mcmFtZXMpIHtcbiAgICAgICAgICAgIGxlbmd0aCArPSBxdWV1ZWRGcmFtZS5nZXRCeXRlTGVuZ3RoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGVuZ3RoICsgZnJhbWUuZ2V0Qnl0ZUxlbmd0aCgpID4gdGhpcy5tdHVTaXplIC0gMzYpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZEZyYW1lUXVldWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3V0cHV0RnJhbWVRdWV1ZS5mcmFtZXMucHVzaChmcmFtZSk7XG5cbiAgICAgICAgaWYgKHByaW9yaXR5ID09PSBSYWtOZXRQcmlvcml0eS5JTU1FRElBVEUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZEZyYW1lUXVldWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUGFja2V0KHBhY2tldDogRnJhbWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaWQgPSBwYWNrZXQuY29udGVudFswXTtcblxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gU2Vzc2lvblN0YXR1cy5DT05ORUNUSU5HKSB7XG4gICAgICAgICAgICBpZiAoaWQgPT09IE1lc3NhZ2VJZGVudGlmaWVycy5DT05ORUNUSU9OX1JFUVVFU1QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3Rpb25SZXF1ZXN0KHBhY2tldC5jb250ZW50KS50aGVuKFxuICAgICAgICAgICAgICAgICAgICAoZW5jYXBzdWxhdGVkKSA9PiB0aGlzLnNlbmRGcmFtZShlbmNhcHN1bGF0ZWQsIFJha05ldFByaW9yaXR5LklNTUVESUFURSksXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHt9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09IE1lc3NhZ2VJZGVudGlmaWVycy5ORVdfSU5DT01JTkdfQ09OTkVDVElPTikge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IG9ubGluZSBtb2RlXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNlc3Npb25TdGF0dXMuQ09OTkVDVEVEO1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXIuZW1pdCgnb3BlbkNvbm5lY3Rpb24nLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gTWVzc2FnZUlkZW50aWZpZXJzLkRJU0NPTk5FQ1RJT05fTk9USUZJQ0FUSU9OKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gTWVzc2FnZUlkZW50aWZpZXJzLkNPTk5FQ1RFRF9QSU5HKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbm5lY3RlZFBpbmcocGFja2V0LmNvbnRlbnQpLnRoZW4oXG4gICAgICAgICAgICAgICAgKGVuY2Fwc3VsYXRlZCkgPT4gdGhpcy5zZW5kRnJhbWUoZW5jYXBzdWxhdGVkKSxcbiAgICAgICAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlID09PSBTZXNzaW9uU3RhdHVzLkNPTk5FQ1RFRCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5lbWl0KCdlbmNhcHN1bGF0ZWQnLCBwYWNrZXQsIHRoaXMuZ2V0QWRkcmVzcygpKTsgLy8gVG8gZml0IGluIHNvZnR3YXJlIG5lZWRzIGxhdGVyXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlQ29ubmVjdGlvblJlcXVlc3QoYnVmZmVyOiBCdWZmZXIpOiBQcm9taXNlPEZyYW1lPiB7XG4gICAgICAgIGNvbnN0IGRhdGFQYWNrZXQgPSBuZXcgQ29ubmVjdGlvblJlcXVlc3QoYnVmZmVyKTtcbiAgICAgICAgZGF0YVBhY2tldC5kZWNvZGUoKTtcblxuICAgICAgICBjb25zdCBwayA9IG5ldyBDb25uZWN0aW9uUmVxdWVzdEFjY2VwdGVkKCk7XG4gICAgICAgIHBrLmNsaWVudEFkZHJlc3MgPSB0aGlzLmdldEFkZHJlc3MoKTtcbiAgICAgICAgcGsucmVxdWVzdFRpbWVzdGFtcCA9IGRhdGFQYWNrZXQucmVxdWVzdFRpbWVzdGFtcDtcbiAgICAgICAgcGsuYWNjZXB0ZWRUaW1lc3RhbXAgPSBCaWdJbnQoRGF0ZS5ub3coKSk7XG4gICAgICAgIHBrLmVuY29kZSgpO1xuXG4gICAgICAgIGNvbnN0IHNlbmRQYWNrZXQgPSBuZXcgRnJhbWUoKTtcbiAgICAgICAgc2VuZFBhY2tldC5yZWxpYWJpbGl0eSA9IEZyYW1lUmVsaWFiaWxpdHkuVU5SRUxJQUJMRTtcbiAgICAgICAgc2VuZFBhY2tldC5vcmRlckNoYW5uZWwgPSAwO1xuICAgICAgICBzZW5kUGFja2V0LmNvbnRlbnQgPSBway5nZXRCdWZmZXIoKTtcblxuICAgICAgICByZXR1cm4gc2VuZFBhY2tldDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlQ29ubmVjdGVkUGluZyhidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8RnJhbWU+IHtcbiAgICAgICAgY29uc3QgZGF0YVBhY2tldCA9IG5ldyBDb25uZWN0ZWRQaW5nKGJ1ZmZlcik7XG4gICAgICAgIGRhdGFQYWNrZXQuZGVjb2RlKCk7XG5cbiAgICAgICAgY29uc3QgcGsgPSBuZXcgQ29ubmVjdGVkUG9uZygpO1xuICAgICAgICBway5jbGllbnRUaW1lc3RhbXAgPSBkYXRhUGFja2V0LmNsaWVudFRpbWVzdGFtcDtcbiAgICAgICAgcGsuc2VydmVyVGltZXN0YW1wID0gQmlnSW50KERhdGUubm93KCkpO1xuICAgICAgICBway5lbmNvZGUoKTtcblxuICAgICAgICBjb25zdCBzZW5kUGFja2V0ID0gbmV3IEZyYW1lKCk7XG4gICAgICAgIHNlbmRQYWNrZXQucmVsaWFiaWxpdHkgPSBGcmFtZVJlbGlhYmlsaXR5LlVOUkVMSUFCTEU7XG4gICAgICAgIHNlbmRQYWNrZXQub3JkZXJDaGFubmVsID0gMDtcbiAgICAgICAgc2VuZFBhY2tldC5jb250ZW50ID0gcGsuZ2V0QnVmZmVyKCk7XG5cbiAgICAgICAgcmV0dXJuIHNlbmRQYWNrZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZyYWdtZW50KGZyYW1lOiBGcmFtZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZnJhZ21lbnRzUXVldWUuaGFzKGZyYW1lLmZyYWdtZW50SWQpKSB7XG4gICAgICAgICAgICB0aGlzLmZyYWdtZW50c1F1ZXVlLnNldChmcmFtZS5mcmFnbWVudElkLCBuZXcgTWFwKFtbZnJhbWUuZnJhZ21lbnRJbmRleCwgZnJhbWVdXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZyYWdtZW50c1F1ZXVlLmdldChmcmFtZS5mcmFnbWVudElkKSE7XG4gICAgICAgICAgICB2YWx1ZS5zZXQoZnJhbWUuZnJhZ21lbnRJbmRleCwgZnJhbWUpO1xuXG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFsbCBwaWVjZXMsIHB1dCB0aGVtIHRvZ2V0aGVyXG4gICAgICAgICAgICBpZiAodmFsdWUuc2l6ZSA9PT0gZnJhbWUuZnJhZ21lbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbSgpO1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGJ1ZmZlciBvcmRlcnNcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLnNpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhY2tldCA9IHZhbHVlLmdldChpKSE7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZShzcGxpdFBhY2tldC5jb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhc3NlbWJsZWRGcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgICAgICAgICAgICAgIGFzc2VtYmxlZEZyYW1lLmNvbnRlbnQgPSBzdHJlYW0uZ2V0QnVmZmVyKCk7XG5cbiAgICAgICAgICAgICAgICBhc3NlbWJsZWRGcmFtZS5yZWxpYWJpbGl0eSA9IGZyYW1lLnJlbGlhYmlsaXR5O1xuICAgICAgICAgICAgICAgIGFzc2VtYmxlZEZyYW1lLnJlbGlhYmxlSW5kZXggPSBmcmFtZS5yZWxpYWJsZUluZGV4O1xuICAgICAgICAgICAgICAgIGFzc2VtYmxlZEZyYW1lLnNlcXVlbmNlSW5kZXggPSBmcmFtZS5zZXF1ZW5jZUluZGV4O1xuICAgICAgICAgICAgICAgIGFzc2VtYmxlZEZyYW1lLm9yZGVySW5kZXggPSBmcmFtZS5vcmRlckluZGV4O1xuICAgICAgICAgICAgICAgIGFzc2VtYmxlZEZyYW1lLm9yZGVyQ2hhbm5lbCA9IGZyYW1lLm9yZGVyQ2hhbm5lbDtcblxuICAgICAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRzUXVldWUuZGVsZXRlKGZyYW1lLmZyYWdtZW50SWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRnJhbWUoYXNzZW1ibGVkRnJhbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRGcmFtZVF1ZXVlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vdXRwdXRGcmFtZVF1ZXVlLmZyYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dEZyYW1lUXVldWUuc2VxdWVuY2VOdW1iZXIgPSB0aGlzLm91dHB1dFNlcXVlbmNlTnVtYmVyKys7XG4gICAgICAgICAgICB0aGlzLnNlbmRGcmFtZVNldCh0aGlzLm91dHB1dEZyYW1lUXVldWUpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRGcmFtZVF1ZXVlID0gbmV3IEZyYW1lU2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbmRGcmFtZVNldChmcmFtZVNldDogRnJhbWVTZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZW5kUGFja2V0KGZyYW1lU2V0KTtcbiAgICAgICAgdGhpcy5vdXRwdXRCYWNrdXBRdWV1ZS5zZXQoXG4gICAgICAgICAgICBmcmFtZVNldC5zZXF1ZW5jZU51bWJlcixcbiAgICAgICAgICAgIGZyYW1lU2V0LmZyYW1lcy5maWx0ZXIoKGZyYW1lKSA9PiBmcmFtZS5pc1JlbGlhYmxlKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZW5kUGFja2V0KHBhY2tldDogUGFja2V0KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdGVuZXIuc2VuZFBhY2tldChwYWNrZXQsIHRoaXMucmluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gbmV3IEJpbmFyeVN0cmVhbShCdWZmZXIuZnJvbSgnXFx1MDAwMFxcdTAwMDBcXHUwMDA4XFx1MDAxNScsICdiaW5hcnknKSk7XG4gICAgICAgIHRoaXMuYWRkRnJhbWVUb1F1ZXVlKG5ldyBGcmFtZSgpLmZyb21CaW5hcnkoc3RyZWFtKSwgUmFrTmV0UHJpb3JpdHkuSU1NRURJQVRFKTsgLy8gQ2xpZW50IGRpc2Njb25lY3QgcGFja2V0IDB4MTVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBLaWNrIGEgY2xpZW50XG4gICAgICogQHBhcmFtIHJlYXNvbiB0aGUgcmVhc29uIG1lc3NhZ2UsIG9wdGlvbmFsXG4gICAgICovXG4gICAgcHVibGljIGRpc2Nvbm5lY3QocmVhc29uID0gJ2NsaWVudCBkaXNjb25uZWN0Jyk6IHZvaWQge1xuICAgICAgICAvLyBUT0RPOiByZXdyaXRlLCB3b3JrcyBidXQgY2FuIGJlIGltcHJvdmVkXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgLy8gU2VuZCBkaXNjb25uZWN0IEFDS1xuICAgICAgICB0aGlzLnN0YXRlID0gU2Vzc2lvblN0YXR1cy5ESVNDT05ORUNURUQ7XG4gICAgICAgIHRoaXMudXBkYXRlKERhdGUubm93KCkpO1xuICAgICAgICB0aGlzLmxpc3RlbmVyLnJlbW92ZVNlc3Npb24odGhpcywgcmVhc29uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3RhdGUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRGlzY29ubmVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gU2Vzc2lvblN0YXR1cy5ESVNDT05ORUNURUQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExpc3RlbmVyKCk6IFJha05ldExpc3RlbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWF4bWl1bSB0cmFuc2ZlciB1bml0XG4gICAgICogZm9yIHRoaXMgY29ubmVjdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgVURQIGFkanVzdGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRNVFUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXR1U2l6ZSAtIFVEUF9IRUFERVJfU0laRTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWRkcmVzcygpOiBJbmV0QWRkcmVzcyB7XG4gICAgICAgIHJldHVybiBuZXcgSW5ldEFkZHJlc3ModGhpcy5yaW5mby5hZGRyZXNzLCB0aGlzLnJpbmZvLnBvcnQsIDQpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJSYWtOZXRQcmlvcml0eSIsIlNlc3Npb25TdGF0dXMiLCJNQVhfQ0hBTk5FTFMiLCJGcmFtZVNldCIsIlBhY2tldFBvb2wiLCJNZXNzYWdlSWRlbnRpZmllcnMiLCJCaXRGbGFncyIsIkFDSyIsIk5BQ0siLCJhc3NlcnQiLCJEQVRBR1JBTV9IRUFERVJfQllURV9MRU5HVEgiLCJNQVhfRlJBTUVfQllURV9MRU5HVEgiLCJDb25uZWN0aW9uUmVxdWVzdCIsIkNvbm5lY3Rpb25SZXF1ZXN0QWNjZXB0ZWQiLCJGcmFtZSIsIkZyYW1lUmVsaWFiaWxpdHkiLCJDb25uZWN0ZWRQaW5nIiwiQ29ubmVjdGVkUG9uZyIsIkJpbmFyeVN0cmVhbSIsIlVEUF9IRUFERVJfU0laRSIsIkluZXRBZGRyZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CWSxJQUFBLGNBQUEscUJBQUFBLGVBQUwsS0FBQTtBQUNILEVBQUFBLGVBQUEsQ0FBQSxlQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsUUFBQSxDQUFBO0FBQ0EsRUFBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxXQUFBLENBQUE7QUFGUSxFQUFBQSxPQUFBQSxlQUFBQSxDQUFBQTtBQUFBLENBQUEsRUFBQSxjQUFBLElBQUEsRUFBQSxFQUFBO0FBS0EsSUFBQSxhQUFBLHFCQUFBQyxjQUFMLEtBQUE7QUFDSCxFQUFBQSxjQUFBLENBQUEsY0FBQSxDQUFBLFlBQUEsQ0FBQSxHQUFBLENBQUEsQ0FBQSxHQUFBLFlBQUEsQ0FBQTtBQUNBLEVBQUFBLGNBQUEsQ0FBQSxjQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBQSxD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
package/dist/Session.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
- import Frame from './protocol/Frame.js';
4
- import InetAddress from './utils/InetAddress.js';
5
- import RakNetListener from './ServerSocket.js';
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import Frame from './protocol/Frame';
4
+ import InetAddress from './utils/InetAddress';
5
+ import RakNetListener from './ServerSocket';
6
6
  import { type RemoteInfo } from 'node:dgram';
7
7
  export declare enum RakNetPriority {
8
8
  NORMAL = 0,
@@ -1 +1 @@
1
- {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":";;AAOA,OAAO,KAAgC,MAAM,qBAAqB,CAAC;AAGnE,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAKjD,OAAO,cAAc,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,oBAAY,cAAc;IACtB,MAAM,IAAA;IACN,SAAS,IAAA;CACZ;AAED,oBAAY,aAAa;IACrB,UAAU,IAAA;IACV,SAAS,IAAA;IACT,aAAa,IAAA;IACb,YAAY,IAAA;CACf;AAED,MAAM,CAAC,OAAO,OAAO,OAAO;IA+BpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,KAAK,EAAE,UAAU;aACjB,IAAI,EAAE,MAAM;IAjChC,OAAO,CAAC,KAAK,CAA4B;IAEzC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IAErE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAW;IAE/C,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,kBAAkB,CAA0B;IAGpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8C;IAC7E,OAAO,CAAC,mBAAmB,CAAK;IAEhC,OAAO,CAAC,uBAAuB,CAAM;IACrC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAW;IAC3C,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAQ;IAGtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAG1B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM;IAgBhC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAoB7B;IAEK,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA+B/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAcnC,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,WAAW;IA8CZ,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,iBAAwB,GAAG,IAAI;IA6CnE,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,YAAY;IA0BP,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAkBvD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAiBzD,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA+BlC,cAAc,IAAI,IAAI;IAQ7B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAIX,KAAK,IAAI,IAAI;IAKpB;;;OAGG;IACI,UAAU,CAAC,MAAM,SAAsB,GAAG,IAAI;IAS9C,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,OAAO;IAInB,cAAc,IAAI,OAAO;IAIzB,WAAW,IAAI,cAAc;IAIpC;;;;OAIG;IACI,MAAM,IAAI,MAAM;IAIhB,UAAU,IAAI,WAAW;CAGnC"}
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../src/Session.ts"],"names":[],"mappings":";;AAOA,OAAO,KAAgC,MAAM,kBAAkB,CAAC;AAGhE,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAK9C,OAAO,cAAc,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,oBAAY,cAAc;IACtB,MAAM,IAAA;IACN,SAAS,IAAA;CACZ;AAED,oBAAY,aAAa;IACrB,UAAU,IAAA;IACV,SAAS,IAAA;IACT,aAAa,IAAA;IACb,YAAY,IAAA;CACf;AAED,MAAM,CAAC,OAAO,OAAO,OAAO;IA+BpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;aACR,KAAK,EAAE,UAAU;aACjB,IAAI,EAAE,MAAM;IAjChC,OAAO,CAAC,KAAK,CAA4B;IAEzC,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IAErE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAW;IAE/C,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,kBAAkB,CAA0B;IAGpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8C;IAC7E,OAAO,CAAC,mBAAmB,CAAK;IAEhC,OAAO,CAAC,uBAAuB,CAAM;IACrC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAW;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAW;IAC3C,OAAO,CAAC,kBAAkB,CAA8C;IAGxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAQ;IAGtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;gBAG1B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,MAAM;IAgBhC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAoB7B;IAEK,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA+B/B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAcnC,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,WAAW;IA8CZ,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,iBAAwB,GAAG,IAAI;IA6CnE,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,YAAY;IA0BP,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAkBvD,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAiBzD,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA+BlC,cAAc,IAAI,IAAI;IAQ7B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,UAAU;IAIX,KAAK,IAAI,IAAI;IAKpB;;;OAGG;IACI,UAAU,CAAC,MAAM,SAAsB,GAAG,IAAI;IAS9C,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,OAAO;IAInB,cAAc,IAAI,OAAO;IAIzB,WAAW,IAAI,cAAc;IAIpC;;;;OAIG;IACI,MAAM,IAAI,MAAM;IAIhB,UAAU,IAAI,WAAW;CAGnC"}