@infersec/conduit 1.72.0 → 1.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -13,7 +13,7 @@ import process$3, { platform, hrtime, execPath, execArgv } from 'node:process';
13
13
  import crypto from 'node:crypto';
14
14
  import require$$0$8, { Readable, Transform, PassThrough, getDefaultHighWaterMark, Duplex, Writable } from 'node:stream';
15
15
  import 'argon2';
16
- import require$$1$7, { setDefaultResultOrder } from 'node:dns';
16
+ import require$$1$8, { setDefaultResultOrder } from 'node:dns';
17
17
  import require$$0$6 from 'os';
18
18
  import require$$1$3, { realpathSync as realpathSync$1, readlinkSync, readdirSync, readdir as readdir$1, lstatSync } from 'fs';
19
19
  import require$$2$2 from 'util';
@@ -21,20 +21,21 @@ import require$$3$2 from 'assert';
21
21
  import require$$4$1 from 'events';
22
22
  import require$$1$2 from 'stream';
23
23
  import require$$0$7 from 'node:assert';
24
- import require$$0$9, { createServer } from 'node:net';
24
+ import require$$1$4, { createServer } from 'node:net';
25
25
  import require$$2$3 from 'node:http';
26
26
  import require$$5$1 from 'node:querystring';
27
- import require$$0$a from 'node:diagnostics_channel';
27
+ import require$$0$9 from 'node:diagnostics_channel';
28
28
  import require$$3$3, { debuglog, stripVTControlCharacters, inspect, promisify, callbackify, aborted as aborted$1, isDeepStrictEqual } from 'node:util';
29
29
  import require$$4$2 from 'node:tls';
30
- import require$$0$b, { Buffer as Buffer$1 } from 'node:buffer';
30
+ import require$$0$a, { Buffer as Buffer$1 } from 'node:buffer';
31
31
  import require$$3$4 from 'node:zlib';
32
32
  import require$$5$2 from 'node:perf_hooks';
33
33
  import require$$8 from 'node:util/types';
34
- import require$$1$4 from 'node:sqlite';
34
+ import require$$1$5 from 'node:sqlite';
35
35
  import require$$2$4 from 'node:worker_threads';
36
- import require$$1$5 from 'node:async_hooks';
37
- import require$$1$6 from 'node:console';
36
+ import require$$0$b, { fileURLToPath } from 'node:url';
37
+ import require$$1$6 from 'node:async_hooks';
38
+ import require$$1$7 from 'node:console';
38
39
  import require$$0$c, { realpath, readlink, readdir, lstat, mkdir, readFile, writeFile, stat, unlink, rename, rm } from 'node:fs/promises';
39
40
  import require$$2$5 from 'node:timers';
40
41
  import require$$0$d from 'path';
@@ -42,12 +43,11 @@ import require$$0$e from 'tty';
42
43
  import require$$4$3 from 'net';
43
44
  import require$$3$5 from 'zlib';
44
45
  import require$$0$f from 'buffer';
45
- import require$$1$8 from 'string_decoder';
46
+ import require$$1$9 from 'string_decoder';
46
47
  import require$$8$1 from 'querystring';
47
48
  import require$$0$g from 'url';
48
49
  import require$$0$h from 'http';
49
50
  import require$$0$i from 'crypto';
50
- import { fileURLToPath } from 'node:url';
51
51
  import { StringDecoder } from 'node:string_decoder';
52
52
  import { pipeline, finished } from 'node:stream/promises';
53
53
  import 'fs/promises';
@@ -23675,7 +23675,8 @@ function requireSymbols () {
23675
23675
  kPingInterval: Symbol('ping interval'),
23676
23676
  kNoProxyAgent: Symbol('no proxy agent'),
23677
23677
  kHttpProxyAgent: Symbol('http proxy agent'),
23678
- kHttpsProxyAgent: Symbol('https proxy agent')
23678
+ kHttpsProxyAgent: Symbol('https proxy agent'),
23679
+ kSocks5ProxyAgent: Symbol('socks5 proxy agent')
23679
23680
  };
23680
23681
  return symbols;
23681
23682
  }
@@ -24541,6 +24542,33 @@ function requireErrors () {
24541
24542
  }
24542
24543
  }
24543
24544
 
24545
+ class Socks5ProxyError extends UndiciError {
24546
+ constructor (message, code) {
24547
+ super(message);
24548
+ this.name = 'Socks5ProxyError';
24549
+ this.message = message || 'SOCKS5 proxy error';
24550
+ this.code = code || 'UND_ERR_SOCKS5';
24551
+ }
24552
+ }
24553
+
24554
+ const kMessageSizeExceededError = Symbol.for('undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED');
24555
+ class MessageSizeExceededError extends UndiciError {
24556
+ constructor (message) {
24557
+ super(message);
24558
+ this.name = 'MessageSizeExceededError';
24559
+ this.message = message || 'Max decompressed message size exceeded';
24560
+ this.code = 'UND_ERR_WS_MESSAGE_SIZE_EXCEEDED';
24561
+ }
24562
+
24563
+ static [Symbol.hasInstance] (instance) {
24564
+ return instance && instance[kMessageSizeExceededError] === true
24565
+ }
24566
+
24567
+ get [kMessageSizeExceededError] () {
24568
+ return true
24569
+ }
24570
+ }
24571
+
24544
24572
  errors = {
24545
24573
  AbortError,
24546
24574
  HTTPParserError,
@@ -24564,7 +24592,9 @@ function requireErrors () {
24564
24592
  RequestRetryError,
24565
24593
  ResponseError,
24566
24594
  SecureProxyConnectionError,
24567
- MaxOriginsReachedError
24595
+ MaxOriginsReachedError,
24596
+ Socks5ProxyError,
24597
+ MessageSizeExceededError
24568
24598
  };
24569
24599
  return errors;
24570
24600
  }
@@ -24899,7 +24929,7 @@ function requireUtil$5 () {
24899
24929
  const { kDestroyed, kBodyUsed, kListeners, kBody } = requireSymbols();
24900
24930
  const { IncomingMessage } = require$$2$3;
24901
24931
  const stream = require$$0$8;
24902
- const net = require$$0$9;
24932
+ const net = require$$1$4;
24903
24933
  const { stringify } = require$$5$1;
24904
24934
  const { EventEmitter: EE } = require$$0$5;
24905
24935
  const timers = requireTimers();
@@ -25222,6 +25252,20 @@ function requireUtil$5 () {
25222
25252
  return !!(obj != null && (typeof obj[Symbol.iterator] === 'function' || typeof obj[Symbol.asyncIterator] === 'function'))
25223
25253
  }
25224
25254
 
25255
+ /**
25256
+ * Checks whether an object has a safe Symbol.iterator — i.e. one that is
25257
+ * either own or inherited from a non-Object.prototype chain. This prevents
25258
+ * prototype-pollution attacks from injecting a fake iterator on
25259
+ * Object.prototype.
25260
+ * @param {object} obj
25261
+ * @returns {boolean}
25262
+ */
25263
+ function hasSafeIterator (obj) {
25264
+ const prototype = Object.getPrototypeOf(obj);
25265
+ const ownIterator = Object.prototype.hasOwnProperty.call(obj, Symbol.iterator);
25266
+ return ownIterator || (prototype != null && prototype !== Object.prototype && typeof obj[Symbol.iterator] === 'function')
25267
+ }
25268
+
25225
25269
  /**
25226
25270
  * @param {Blob|Buffer|import ('stream').Stream} body
25227
25271
  * @returns {number|null}
@@ -25321,19 +25365,39 @@ function requireUtil$5 () {
25321
25365
  const key = headerNameToString(headers[i]);
25322
25366
  let val = obj[key];
25323
25367
 
25324
- if (val) {
25325
- if (typeof val === 'string') {
25326
- val = [val];
25327
- obj[key] = val;
25328
- }
25329
- val.push(headers[i + 1].toString('latin1'));
25330
- } else {
25331
- const headersValue = headers[i + 1];
25332
- if (typeof headersValue === 'string') {
25333
- obj[key] = headersValue;
25368
+ if (val !== undefined) {
25369
+ if (!Object.hasOwn(obj, key)) {
25370
+ const headersValue = typeof headers[i + 1] === 'string'
25371
+ ? headers[i + 1]
25372
+ : Array.isArray(headers[i + 1])
25373
+ ? headers[i + 1].map(x => x.toString('latin1'))
25374
+ : headers[i + 1].toString('latin1');
25375
+
25376
+ if (key === '__proto__') {
25377
+ Object.defineProperty(obj, key, {
25378
+ value: headersValue,
25379
+ enumerable: true,
25380
+ configurable: true,
25381
+ writable: true
25382
+ });
25383
+ } else {
25384
+ obj[key] = headersValue;
25385
+ }
25334
25386
  } else {
25335
- obj[key] = Array.isArray(headersValue) ? headersValue.map(x => x.toString('latin1')) : headersValue.toString('latin1');
25387
+ if (typeof val === 'string') {
25388
+ val = [val];
25389
+ obj[key] = val;
25390
+ }
25391
+ val.push(headers[i + 1].toString('latin1'));
25336
25392
  }
25393
+ } else {
25394
+ const headersValue = typeof headers[i + 1] === 'string'
25395
+ ? headers[i + 1]
25396
+ : Array.isArray(headers[i + 1])
25397
+ ? headers[i + 1].map(x => x.toString('latin1'))
25398
+ : headers[i + 1].toString('latin1');
25399
+
25400
+ obj[key] = headersValue;
25337
25401
  }
25338
25402
  }
25339
25403
 
@@ -25813,6 +25877,7 @@ function requireUtil$5 () {
25813
25877
  getServerName,
25814
25878
  isStream,
25815
25879
  isIterable,
25880
+ hasSafeIterator,
25816
25881
  isAsyncIterable,
25817
25882
  isDestroyed,
25818
25883
  headerNameToString,
@@ -25900,7 +25965,7 @@ function requireDiagnostics () {
25900
25965
  if (hasRequiredDiagnostics) return diagnostics;
25901
25966
  hasRequiredDiagnostics = 1;
25902
25967
 
25903
- const diagnosticsChannel = require$$0$a;
25968
+ const diagnosticsChannel = require$$0$9;
25904
25969
  const util = require$$3$3;
25905
25970
 
25906
25971
  const undiciDebugLog = util.debuglog('undici');
@@ -26077,10 +26142,12 @@ function requireDiagnostics () {
26077
26142
 
26078
26143
  diagnosticsChannel.subscribe('undici:websocket:open',
26079
26144
  evt => {
26080
- const {
26081
- address: { address, port }
26082
- } = evt;
26083
- debugLog('connection opened %s%s', address, port ? `:${port}` : '');
26145
+ if (evt.address != null) {
26146
+ const { address, port } = evt.address;
26147
+ debugLog('connection opened %s%s', address, port ? `:${port}` : '');
26148
+ } else {
26149
+ debugLog('connection opened');
26150
+ }
26084
26151
  });
26085
26152
 
26086
26153
  diagnosticsChannel.subscribe('undici:websocket:close',
@@ -26146,6 +26213,7 @@ function requireRequest$2 () {
26146
26213
  isBuffer,
26147
26214
  isFormDataLike,
26148
26215
  isIterable,
26216
+ hasSafeIterator,
26149
26217
  isBlobLike,
26150
26218
  serializePathWithQuery,
26151
26219
  assertRequestHandler,
@@ -26159,6 +26227,21 @@ function requireRequest$2 () {
26159
26227
  // Verifies that a given path is valid does not contain control chars \x00 to \x20
26160
26228
  const invalidPathRegex = /[^\u0021-\u00ff]/;
26161
26229
 
26230
+ function isValidContentLengthHeaderValue (val) {
26231
+ if (typeof val !== 'string' || val.length === 0) {
26232
+ return false
26233
+ }
26234
+
26235
+ for (let i = 0; i < val.length; i++) {
26236
+ const charCode = val.charCodeAt(i);
26237
+ if (charCode < 48 || charCode > 57) {
26238
+ return false
26239
+ }
26240
+ }
26241
+
26242
+ return true
26243
+ }
26244
+
26162
26245
  const kHandler = Symbol('handler');
26163
26246
 
26164
26247
  class Request {
@@ -26177,7 +26260,8 @@ function requireRequest$2 () {
26177
26260
  expectContinue,
26178
26261
  servername,
26179
26262
  throwOnError,
26180
- maxRedirections
26263
+ maxRedirections,
26264
+ typeOfService
26181
26265
  }, handler) {
26182
26266
  if (typeof path !== 'string') {
26183
26267
  throw new InvalidArgumentError('path must be a string')
@@ -26201,6 +26285,10 @@ function requireRequest$2 () {
26201
26285
  throw new InvalidArgumentError('upgrade must be a string')
26202
26286
  }
26203
26287
 
26288
+ if (upgrade && !isValidHeaderValue(upgrade)) {
26289
+ throw new InvalidArgumentError('invalid upgrade header')
26290
+ }
26291
+
26204
26292
  if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {
26205
26293
  throw new InvalidArgumentError('invalid headersTimeout')
26206
26294
  }
@@ -26225,12 +26313,18 @@ function requireRequest$2 () {
26225
26313
  throw new InvalidArgumentError('maxRedirections is not supported, use the redirect interceptor')
26226
26314
  }
26227
26315
 
26316
+ if (typeOfService != null && (!Number.isInteger(typeOfService) || typeOfService < 0 || typeOfService > 255)) {
26317
+ throw new InvalidArgumentError('typeOfService must be an integer between 0 and 255')
26318
+ }
26319
+
26228
26320
  this.headersTimeout = headersTimeout;
26229
26321
 
26230
26322
  this.bodyTimeout = bodyTimeout;
26231
26323
 
26232
26324
  this.method = method;
26233
26325
 
26326
+ this.typeOfService = typeOfService ?? 0;
26327
+
26234
26328
  this.abort = null;
26235
26329
 
26236
26330
  if (body == null) {
@@ -26307,7 +26401,7 @@ function requireRequest$2 () {
26307
26401
  processHeader(this, headers[i], headers[i + 1]);
26308
26402
  }
26309
26403
  } else if (headers && typeof headers === 'object') {
26310
- if (headers[Symbol.iterator]) {
26404
+ if (hasSafeIterator(headers)) {
26311
26405
  for (const header of headers) {
26312
26406
  if (!Array.isArray(header) || header.length !== 2) {
26313
26407
  throw new InvalidArgumentError('headers must be in key-value pair format')
@@ -26510,30 +26604,44 @@ function requireRequest$2 () {
26510
26604
  val = `${val}`;
26511
26605
  }
26512
26606
 
26513
- if (request.host === null && headerName === 'host') {
26607
+ if (headerName === 'host') {
26608
+ if (request.host !== null) {
26609
+ throw new InvalidArgumentError('duplicate host header')
26610
+ }
26514
26611
  if (typeof val !== 'string') {
26515
26612
  throw new InvalidArgumentError('invalid host header')
26516
26613
  }
26517
26614
  // Consumed by Client
26518
26615
  request.host = val;
26519
- } else if (request.contentLength === null && headerName === 'content-length') {
26520
- request.contentLength = parseInt(val, 10);
26521
- if (!Number.isFinite(request.contentLength)) {
26616
+ } else if (headerName === 'content-length') {
26617
+ if (request.contentLength !== null) {
26618
+ throw new InvalidArgumentError('duplicate content-length header')
26619
+ }
26620
+ if (!isValidContentLengthHeaderValue(val)) {
26522
26621
  throw new InvalidArgumentError('invalid content-length header')
26523
26622
  }
26623
+ request.contentLength = parseInt(val, 10);
26524
26624
  } else if (request.contentType === null && headerName === 'content-type') {
26525
26625
  request.contentType = val;
26526
26626
  request.headers.push(key, val);
26527
26627
  } else if (headerName === 'transfer-encoding' || headerName === 'keep-alive' || headerName === 'upgrade') {
26528
26628
  throw new InvalidArgumentError(`invalid ${headerName} header`)
26529
26629
  } else if (headerName === 'connection') {
26530
- const value = typeof val === 'string' ? val.toLowerCase() : null;
26531
- if (value !== 'close' && value !== 'keep-alive') {
26630
+ // Per RFC 7230 Section 6.1, Connection header can contain
26631
+ // a comma-separated list of connection option tokens (header names)
26632
+ const value = typeof val === 'string' ? val : null;
26633
+ if (value === null) {
26532
26634
  throw new InvalidArgumentError('invalid connection header')
26533
26635
  }
26534
26636
 
26535
- if (value === 'close') {
26536
- request.reset = true;
26637
+ for (const token of value.toLowerCase().split(',')) {
26638
+ const trimmed = token.trim();
26639
+ if (!isValidHTTPToken(trimmed)) {
26640
+ throw new InvalidArgumentError('invalid connection header')
26641
+ }
26642
+ if (trimmed === 'close') {
26643
+ request.reset = true;
26644
+ }
26537
26645
  }
26538
26646
  } else if (headerName === 'expect') {
26539
26647
  throw new NotSupportedError('expect header not supported')
@@ -26573,6 +26681,10 @@ function requireWrapHandler () {
26573
26681
  return this.#handler.onConnect?.(abort, context)
26574
26682
  }
26575
26683
 
26684
+ onResponseStarted () {
26685
+ return this.#handler.onResponseStarted?.()
26686
+ }
26687
+
26576
26688
  onHeaders (statusCode, rawHeaders, resume, statusMessage) {
26577
26689
  return this.#handler.onHeaders?.(statusCode, rawHeaders, resume, statusMessage)
26578
26690
  }
@@ -26606,7 +26718,7 @@ function requireWrapHandler () {
26606
26718
  onRequestUpgrade (controller, statusCode, headers, socket) {
26607
26719
  const rawHeaders = [];
26608
26720
  for (const [key, val] of Object.entries(headers)) {
26609
- rawHeaders.push(Buffer.from(key), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(val));
26721
+ rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val));
26610
26722
  }
26611
26723
 
26612
26724
  this.#handler.onUpgrade?.(statusCode, rawHeaders, socket);
@@ -26615,7 +26727,7 @@ function requireWrapHandler () {
26615
26727
  onResponseStart (controller, statusCode, headers, statusMessage) {
26616
26728
  const rawHeaders = [];
26617
26729
  for (const [key, val] of Object.entries(headers)) {
26618
- rawHeaders.push(Buffer.from(key), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(val));
26730
+ rawHeaders.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val));
26619
26731
  }
26620
26732
 
26621
26733
  if (this.#handler.onHeaders?.(statusCode, rawHeaders, () => controller.resume(), statusMessage) === false) {
@@ -26632,7 +26744,7 @@ function requireWrapHandler () {
26632
26744
  onResponseEnd (controller, trailers) {
26633
26745
  const rawTrailers = [];
26634
26746
  for (const [key, val] of Object.entries(trailers)) {
26635
- rawTrailers.push(Buffer.from(key), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(val));
26747
+ rawTrailers.push(Buffer.from(key, 'latin1'), toRawHeaderValue(val));
26636
26748
  }
26637
26749
 
26638
26750
  this.#handler.onComplete?.(rawTrailers);
@@ -26646,6 +26758,12 @@ function requireWrapHandler () {
26646
26758
  this.#handler.onError?.(err);
26647
26759
  }
26648
26760
  };
26761
+
26762
+ function toRawHeaderValue (value) {
26763
+ return Array.isArray(value)
26764
+ ? value.map((item) => Buffer.from(item, 'latin1'))
26765
+ : Buffer.from(value, 'latin1')
26766
+ }
26649
26767
  return wrapHandler;
26650
26768
  }
26651
26769
 
@@ -26725,6 +26843,9 @@ function requireUnwrapHandler () {
26725
26843
 
26726
26844
  [kResume] = null
26727
26845
 
26846
+ rawHeaders = null
26847
+ rawTrailers = null
26848
+
26728
26849
  constructor (abort) {
26729
26850
  this.#abort = abort;
26730
26851
  }
@@ -26779,12 +26900,18 @@ function requireUnwrapHandler () {
26779
26900
  this.#handler.onRequestStart?.(this.#controller, context);
26780
26901
  }
26781
26902
 
26903
+ onResponseStarted () {
26904
+ return this.#handler.onResponseStarted?.()
26905
+ }
26906
+
26782
26907
  onUpgrade (statusCode, rawHeaders, socket) {
26908
+ this.#controller.rawHeaders = rawHeaders;
26783
26909
  this.#handler.onRequestUpgrade?.(this.#controller, statusCode, parseHeaders(rawHeaders), socket);
26784
26910
  }
26785
26911
 
26786
26912
  onHeaders (statusCode, rawHeaders, resume, statusMessage) {
26787
26913
  this.#controller[kResume] = resume;
26914
+ this.#controller.rawHeaders = rawHeaders;
26788
26915
  this.#handler.onResponseStart?.(this.#controller, statusCode, parseHeaders(rawHeaders), statusMessage);
26789
26916
  return !this.#controller.paused
26790
26917
  }
@@ -26795,6 +26922,7 @@ function requireUnwrapHandler () {
26795
26922
  }
26796
26923
 
26797
26924
  onComplete (rawTrailers) {
26925
+ this.#controller.rawTrailers = rawTrailers;
26798
26926
  this.#handler.onResponseEnd?.(this.#controller, parseHeaders(rawTrailers));
26799
26927
  }
26800
26928
 
@@ -26827,6 +26955,7 @@ function requireDispatcherBase () {
26827
26955
 
26828
26956
  const kOnDestroyed = Symbol('onDestroyed');
26829
26957
  const kOnClosed = Symbol('onClosed');
26958
+ const kWebSocketOptions = Symbol('webSocketOptions');
26830
26959
 
26831
26960
  class DispatcherBase extends Dispatcher {
26832
26961
  /** @type {boolean} */
@@ -26841,6 +26970,24 @@ function requireDispatcherBase () {
26841
26970
  /** @type {Array<Function>|null} */
26842
26971
  [kOnClosed] = null
26843
26972
 
26973
+ /**
26974
+ * @param {import('../../types/dispatcher').DispatcherOptions} [opts]
26975
+ */
26976
+ constructor (opts) {
26977
+ super();
26978
+ this[kWebSocketOptions] = opts?.webSocket ?? {};
26979
+ }
26980
+
26981
+ /**
26982
+ * @returns {import('../../types/dispatcher').WebSocketOptions}
26983
+ */
26984
+ get webSocketOptions () {
26985
+ return {
26986
+ maxFragments: this[kWebSocketOptions].maxFragments ?? 131072,
26987
+ maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 // 128 MB default
26988
+ }
26989
+ }
26990
+
26844
26991
  /** @returns {boolean} */
26845
26992
  get destroyed () {
26846
26993
  return this[kDestroyed]
@@ -26989,7 +27136,7 @@ function requireConnect () {
26989
27136
  if (hasRequiredConnect) return connect;
26990
27137
  hasRequiredConnect = 1;
26991
27138
 
26992
- const net = require$$0$9;
27139
+ const net = require$$1$4;
26993
27140
  const assert = require$$0$7;
26994
27141
  const util = requireUtil$5();
26995
27142
  const { InvalidArgumentError } = requireErrors();
@@ -27027,6 +27174,22 @@ function requireConnect () {
27027
27174
  return
27028
27175
  }
27029
27176
 
27177
+ if (this._sessionCache.has(sessionKey)) {
27178
+ this._sessionCache.delete(sessionKey);
27179
+ } else if (this._sessionCache.size >= this._maxCachedSessions) {
27180
+ for (const [key, ref] of this._sessionCache) {
27181
+ if (ref.deref() === undefined) {
27182
+ this._sessionCache.delete(key);
27183
+ return
27184
+ }
27185
+ }
27186
+
27187
+ const oldest = this._sessionCache.keys().next();
27188
+ if (!oldest.done) {
27189
+ this._sessionCache.delete(oldest.value);
27190
+ }
27191
+ }
27192
+
27030
27193
  this._sessionCache.set(sessionKey, new WeakRef(session));
27031
27194
  this._sessionRegistry.register(session, sessionKey);
27032
27195
  }
@@ -27701,7 +27864,7 @@ function requireLlhttpWasm () {
27701
27864
  hasRequiredLlhttpWasm = 1;
27702
27865
  (function (module) {
27703
27866
 
27704
- const { Buffer } = require$$0$b;
27867
+ const { Buffer } = require$$0$a;
27705
27868
 
27706
27869
  const wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==';
27707
27870
 
@@ -27729,7 +27892,7 @@ function requireLlhttp_simdWasm () {
27729
27892
  hasRequiredLlhttp_simdWasm = 1;
27730
27893
  (function (module) {
27731
27894
 
27732
- const { Buffer } = require$$0$b;
27895
+ const { Buffer } = require$$0$a;
27733
27896
 
27734
27897
  const wasmBase64 = 'AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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DAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANA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BTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==';
27735
27898
 
@@ -28829,7 +28992,7 @@ function requireRuntimeFeatures () {
28829
28992
  const lazyLoaders = {
28830
28993
  __proto__: null,
28831
28994
  'node:crypto': () => crypto,
28832
- 'node:sqlite': () => require$$1$4,
28995
+ 'node:sqlite': () => require$$1$5,
28833
28996
  'node:worker_threads': () => require$$2$4,
28834
28997
  'node:zlib': () => require$$3$4
28835
28998
  };
@@ -29145,10 +29308,10 @@ function requireWebidl () {
29145
29308
  } else {
29146
29309
  // 3. Otherwise:
29147
29310
 
29148
- // 1. Let lowerBound be -2^bitLength − 1.
29149
- lowerBound = Math.pow(-2, bitLength) - 1;
29311
+ // 1. Let lowerBound be -2^(bitLength − 1).
29312
+ lowerBound = -Math.pow(2, bitLength - 1);
29150
29313
 
29151
- // 2. Let upperBound be 2^bitLength − 1 − 1.
29314
+ // 2. Let upperBound be 2^(bitLength − 1) − 1.
29152
29315
  upperBound = Math.pow(2, bitLength - 1) - 1;
29153
29316
  }
29154
29317
 
@@ -29227,9 +29390,9 @@ function requireWebidl () {
29227
29390
  // 10. Set x to x modulo 2^bitLength.
29228
29391
  x = x % Math.pow(2, bitLength);
29229
29392
 
29230
- // 11. If signedness is "signed" and x ≥ 2^bitLength − 1,
29393
+ // 11. If signedness is "signed" and x ≥ 2^(bitLength − 1),
29231
29394
  // then return x − 2^bitLength.
29232
- if (signedness === 'signed' && x >= Math.pow(2, bitLength) - 1) {
29395
+ if (signedness === 'signed' && x >= Math.pow(2, bitLength - 1)) {
29233
29396
  return x - Math.pow(2, bitLength)
29234
29397
  }
29235
29398
 
@@ -29407,6 +29570,9 @@ function requireWebidl () {
29407
29570
  };
29408
29571
 
29409
29572
  webidl.dictionaryConverter = function (converters) {
29573
+ // "For each dictionary member member declared on dictionary, in lexicographical order:"
29574
+ converters.sort((a, b) => (a.key > b.key) - (a.key < b.key));
29575
+
29410
29576
  return (dictionary, prefix, argument) => {
29411
29577
  const dict = {};
29412
29578
 
@@ -31412,8 +31578,10 @@ function requireUtil$4 () {
31412
31578
  * @param {object|string} navigable
31413
31579
  */
31414
31580
  function isTraversableNavigable (navigable) {
31415
- // TODO
31416
- return true
31581
+ // Returns true only if we have an actual traversable navigable object
31582
+ // that can prompt the user for credentials. In Node.js, this will always
31583
+ // be false since there's no Window object or navigable.
31584
+ return navigable != null && navigable !== 'client' && navigable !== 'no-traversable'
31417
31585
  }
31418
31586
 
31419
31587
  class EnvironmentSettingsObjectBase {
@@ -31764,10 +31932,10 @@ function requireFormdataParser () {
31764
31932
  const { webidl } = requireWebidl();
31765
31933
  const assert = require$$0$7;
31766
31934
  const { isomorphicDecode } = requireInfra();
31767
- const { utf8DecodeBytes } = requireEncoding$1();
31768
31935
 
31769
31936
  const dd = Buffer.from('--');
31770
31937
  const decoder = new TextDecoder();
31938
+ const decoderIgnoreBOM = new TextDecoder('utf-8', { ignoreBOM: true });
31771
31939
 
31772
31940
  /**
31773
31941
  * @param {string} chars
@@ -31946,7 +32114,7 @@ function requireFormdataParser () {
31946
32114
  // 5.11. Otherwise:
31947
32115
 
31948
32116
  // 5.11.1. Let value be the UTF-8 decoding without BOM of body.
31949
- value = utf8DecodeBytes(Buffer.from(body));
32117
+ value = decoderIgnoreBOM.decode(Buffer.from(body));
31950
32118
  }
31951
32119
 
31952
32120
  // 5.12. Assert: name is a scalar value string and value is either a scalar value string or a File object.
@@ -31962,7 +32130,7 @@ function requireFormdataParser () {
31962
32130
  * Parses content-disposition attributes (e.g., name="value" or filename*=utf-8''encoded)
31963
32131
  * @param {Buffer} input
31964
32132
  * @param {{ position: number }} position
31965
- * @returns {{ name: string, value: string }}
32133
+ * @returns {{ name: string, value: string, extended: boolean } | null}
31966
32134
  */
31967
32135
  function parseContentDispositionAttribute (input, position) {
31968
32136
  // Skip leading semicolon and whitespace
@@ -32062,7 +32230,7 @@ function requireFormdataParser () {
32062
32230
  value = decoder.decode(tokenValue);
32063
32231
  }
32064
32232
 
32065
- return { name: attrNameStr, value }
32233
+ return { name: attrNameStr, value, extended: isExtended }
32066
32234
  }
32067
32235
 
32068
32236
  /**
@@ -32126,6 +32294,9 @@ function requireFormdataParser () {
32126
32294
  switch (bufferToLowerCasedHeaderName(headerName)) {
32127
32295
  case 'content-disposition': {
32128
32296
  name = filename = null;
32297
+ // Track whether filename was set from the extended (RFC 5987) form so
32298
+ // a subsequent legacy `filename` attribute does not override it.
32299
+ let filenameIsExtended = false;
32129
32300
 
32130
32301
  // Collect the disposition type (should be "form-data")
32131
32302
  const dispositionType = collectASequenceOfBytes(
@@ -32141,8 +32312,8 @@ function requireFormdataParser () {
32141
32312
  // Parse attributes recursively until CRLF
32142
32313
  while (
32143
32314
  position.position < input.length &&
32144
- input[position.position] !== 0x0d &&
32145
- input[position.position + 1] !== 0x0a
32315
+ (input[position.position] !== 0x0d ||
32316
+ input[position.position + 1] !== 0x0a)
32146
32317
  ) {
32147
32318
  const attribute = parseContentDispositionAttribute(input, position);
32148
32319
 
@@ -32153,7 +32324,15 @@ function requireFormdataParser () {
32153
32324
  if (attribute.name === 'name') {
32154
32325
  name = attribute.value;
32155
32326
  } else if (attribute.name === 'filename') {
32156
- filename = attribute.value;
32327
+ // Per RFC 5987 §4.1, when both legacy and extended forms of the
32328
+ // same parameter are present, the extended (filename*) form takes
32329
+ // precedence regardless of the order they appear in.
32330
+ if (attribute.extended) {
32331
+ filename = attribute.value;
32332
+ filenameIsExtended = true;
32333
+ } else if (!filenameIsExtended) {
32334
+ filename = attribute.value;
32335
+ }
32157
32336
  }
32158
32337
  }
32159
32338
 
@@ -32206,7 +32385,7 @@ function requireFormdataParser () {
32206
32385
 
32207
32386
  // 2.9. If position does not point to a sequence of bytes starting with 0x0D 0x0A
32208
32387
  // (CR LF), return failure. Otherwise, advance position by 2 (past the newline).
32209
- if (input[position.position] !== 0x0d && input[position.position + 1] !== 0x0a) {
32388
+ if (input[position.position] !== 0x0d || input[position.position + 1] !== 0x0a) {
32210
32389
  throw parsingError('expected CRLF')
32211
32390
  } else {
32212
32391
  position.position += 2;
@@ -32951,6 +33130,9 @@ function requireClientH1 () {
32951
33130
  const EMPTY_BUF = Buffer.alloc(0);
32952
33131
  const FastBuffer = Buffer[Symbol.species];
32953
33132
  const removeAllListeners = util.removeAllListeners;
33133
+ const kIdleSocketValidation = Symbol('kIdleSocketValidation');
33134
+ const kIdleSocketValidationTimeout = Symbol('kIdleSocketValidationTimeout');
33135
+ const kSocketUsed = Symbol('kSocketUsed');
32954
33136
 
32955
33137
  let extractBody;
32956
33138
 
@@ -32963,9 +33145,9 @@ function requireClientH1 () {
32963
33145
  let useWasmSIMD = process.arch !== 'ppc64';
32964
33146
  // The Env Variable UNDICI_NO_WASM_SIMD allows explicitly overriding the default behavior
32965
33147
  if (process.env.UNDICI_NO_WASM_SIMD === '1') {
32966
- useWasmSIMD = true;
32967
- } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {
32968
33148
  useWasmSIMD = false;
33149
+ } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {
33150
+ useWasmSIMD = true;
32969
33151
  }
32970
33152
 
32971
33153
  if (useWasmSIMD) {
@@ -33110,6 +33292,7 @@ function requireClientH1 () {
33110
33292
  */
33111
33293
  this.socket = socket;
33112
33294
  this.timeout = null;
33295
+ this.timeoutWeakRef = new WeakRef(this);
33113
33296
  this.timeoutValue = null;
33114
33297
  this.timeoutType = null;
33115
33298
  this.statusCode = 0;
@@ -33147,9 +33330,9 @@ function requireClientH1 () {
33147
33330
 
33148
33331
  if (delay) {
33149
33332
  if (type & USE_FAST_TIMER) {
33150
- this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this));
33333
+ this.timeout = timers.setFastTimeout(onParserTimeout, delay, this.timeoutWeakRef);
33151
33334
  } else {
33152
- this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this));
33335
+ this.timeout = setTimeout(onParserTimeout, delay, this.timeoutWeakRef);
33153
33336
  this.timeout?.unref();
33154
33337
  }
33155
33338
  }
@@ -33243,16 +33426,7 @@ function requireClientH1 () {
33243
33426
  this.paused = true;
33244
33427
  socket.unshift(data);
33245
33428
  } else {
33246
- const ptr = llhttp.llhttp_get_error_reason(this.ptr);
33247
- let message = '';
33248
- if (ptr) {
33249
- const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
33250
- message =
33251
- 'Response does not match the HTTP/1.1 protocol (' +
33252
- Buffer.from(llhttp.memory.buffer, ptr, len).toString() +
33253
- ')';
33254
- }
33255
- throw new HTTPParserError(message, constants.ERROR[ret], data)
33429
+ throw this.createError(ret, data)
33256
33430
  }
33257
33431
  }
33258
33432
  } catch (err) {
@@ -33260,6 +33434,54 @@ function requireClientH1 () {
33260
33434
  }
33261
33435
  }
33262
33436
 
33437
+ finish () {
33438
+ assert(currentParser === null);
33439
+ assert(this.ptr != null);
33440
+ assert(!this.paused);
33441
+
33442
+ const { llhttp } = this;
33443
+
33444
+ let ret;
33445
+
33446
+ try {
33447
+ currentParser = this;
33448
+ ret = llhttp.llhttp_finish(this.ptr);
33449
+ } finally {
33450
+ currentParser = null;
33451
+ }
33452
+
33453
+ if (ret === constants.ERROR.OK) {
33454
+ return null
33455
+ }
33456
+
33457
+ if (ret === constants.ERROR.PAUSED || ret === constants.ERROR.PAUSED_UPGRADE) {
33458
+ this.paused = true;
33459
+ return null
33460
+ }
33461
+
33462
+ return this.createError(ret, EMPTY_BUF)
33463
+ }
33464
+
33465
+ createError (ret, data) {
33466
+ const { llhttp, contentLength, bytesRead } = this;
33467
+
33468
+ if (contentLength && bytesRead !== parseInt(contentLength, 10)) {
33469
+ return new ResponseContentLengthMismatchError()
33470
+ }
33471
+
33472
+ const ptr = llhttp.llhttp_get_error_reason(this.ptr);
33473
+ let message = '';
33474
+ if (ptr) {
33475
+ const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
33476
+ message =
33477
+ 'Response does not match the HTTP/1.1 protocol (' +
33478
+ Buffer.from(llhttp.memory.buffer, ptr, len).toString() +
33479
+ ')';
33480
+ }
33481
+
33482
+ return new HTTPParserError(message, constants.ERROR[ret], data)
33483
+ }
33484
+
33263
33485
  destroy () {
33264
33486
  assert(currentParser === null);
33265
33487
  assert(this.ptr != null);
@@ -33294,6 +33516,11 @@ function requireClientH1 () {
33294
33516
  return -1
33295
33517
  }
33296
33518
 
33519
+ if (client[kRunning] === 0) {
33520
+ util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)));
33521
+ return -1
33522
+ }
33523
+
33297
33524
  const request = client[kQueue][client[kRunningIdx]];
33298
33525
  if (!request) {
33299
33526
  return -1
@@ -33422,6 +33649,11 @@ function requireClientH1 () {
33422
33649
  return -1
33423
33650
  }
33424
33651
 
33652
+ if (client[kRunning] === 0) {
33653
+ util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)));
33654
+ return -1
33655
+ }
33656
+
33425
33657
  const request = client[kQueue][client[kRunningIdx]];
33426
33658
 
33427
33659
  if (!request) {
@@ -33600,6 +33832,7 @@ function requireClientH1 () {
33600
33832
  request.onComplete(headers);
33601
33833
 
33602
33834
  client[kQueue][client[kRunningIdx]++] = null;
33835
+ socket[kSocketUsed] = client[kPending] === 0;
33603
33836
 
33604
33837
  if (socket[kWriting]) {
33605
33838
  assert(client[kRunning] === 0);
@@ -33676,6 +33909,9 @@ function requireClientH1 () {
33676
33909
  socket[kWriting] = false;
33677
33910
  socket[kReset] = false;
33678
33911
  socket[kBlocking] = false;
33912
+ socket[kIdleSocketValidation] = 0;
33913
+ socket[kIdleSocketValidationTimeout] = null;
33914
+ socket[kSocketUsed] = false;
33679
33915
  socket[kParser] = new Parser(client, socket, llhttpInstance);
33680
33916
 
33681
33917
  util.addListener(socket, 'error', onHttpSocketError);
@@ -33718,7 +33954,7 @@ function requireClientH1 () {
33718
33954
  * @returns {boolean}
33719
33955
  */
33720
33956
  busy (request) {
33721
- if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {
33957
+ if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
33722
33958
  return true
33723
33959
  }
33724
33960
 
@@ -33764,8 +34000,11 @@ function requireClientH1 () {
33764
34000
  // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded
33765
34001
  // to the user.
33766
34002
  if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {
33767
- // We treat all incoming data so for as a valid response.
33768
- parser.onMessageComplete();
34003
+ const parserErr = parser.finish();
34004
+ if (parserErr) {
34005
+ this[kError] = parserErr;
34006
+ this[kClient][kOnError](parserErr);
34007
+ }
33769
34008
  return
33770
34009
  }
33771
34010
 
@@ -33782,8 +34021,10 @@ function requireClientH1 () {
33782
34021
  const parser = this[kParser];
33783
34022
 
33784
34023
  if (parser.statusCode && !parser.shouldKeepAlive) {
33785
- // We treat all incoming data so far as a valid response.
33786
- parser.onMessageComplete();
34024
+ const parserErr = parser.finish();
34025
+ if (parserErr) {
34026
+ util.destroy(this, parserErr);
34027
+ }
33787
34028
  return
33788
34029
  }
33789
34030
 
@@ -33793,10 +34034,11 @@ function requireClientH1 () {
33793
34034
  function onHttpSocketClose () {
33794
34035
  const parser = this[kParser];
33795
34036
 
34037
+ clearIdleSocketValidation(this);
34038
+
33796
34039
  if (parser) {
33797
34040
  if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
33798
- // We treat all incoming data so far as a valid response.
33799
- parser.onMessageComplete();
34041
+ this[kError] = parser.finish() || this[kError];
33800
34042
  }
33801
34043
 
33802
34044
  this[kParser].destroy();
@@ -33840,6 +34082,28 @@ function requireClientH1 () {
33840
34082
  this[kClosed] = true;
33841
34083
  }
33842
34084
 
34085
+ function clearIdleSocketValidation (socket) {
34086
+ if (socket[kIdleSocketValidationTimeout]) {
34087
+ clearTimeout(socket[kIdleSocketValidationTimeout]);
34088
+ socket[kIdleSocketValidationTimeout] = null;
34089
+ }
34090
+
34091
+ socket[kIdleSocketValidation] = 0;
34092
+ }
34093
+
34094
+ function scheduleIdleSocketValidation (client, socket) {
34095
+ socket[kIdleSocketValidation] = 1;
34096
+ socket[kIdleSocketValidationTimeout] = setTimeout(() => {
34097
+ socket[kIdleSocketValidationTimeout] = null;
34098
+ socket[kIdleSocketValidation] = 2;
34099
+
34100
+ if (client[kSocket] === socket && !socket.destroyed) {
34101
+ client[kResume]();
34102
+ }
34103
+ }, 0);
34104
+ socket[kIdleSocketValidationTimeout].unref?.();
34105
+ }
34106
+
33843
34107
  /**
33844
34108
  * @param {import('./client.js')} client
33845
34109
  */
@@ -33857,6 +34121,32 @@ function requireClientH1 () {
33857
34121
  socket[kNoRef] = false;
33858
34122
  }
33859
34123
 
34124
+ if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {
34125
+ if (socket[kIdleSocketValidation] === 0) {
34126
+ scheduleIdleSocketValidation(client, socket);
34127
+ socket[kParser].readMore();
34128
+ if (socket.destroyed) {
34129
+ return
34130
+ }
34131
+ return
34132
+ }
34133
+
34134
+ if (socket[kIdleSocketValidation] === 1) {
34135
+ socket[kParser].readMore();
34136
+ if (socket.destroyed) {
34137
+ return
34138
+ }
34139
+ return
34140
+ }
34141
+ }
34142
+
34143
+ if (client[kRunning] === 0) {
34144
+ socket[kParser].readMore();
34145
+ if (socket.destroyed) {
34146
+ return
34147
+ }
34148
+ }
34149
+
33860
34150
  if (client[kSize] === 0) {
33861
34151
  if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
33862
34152
  socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE);
@@ -33955,6 +34245,7 @@ function requireClientH1 () {
33955
34245
  }
33956
34246
 
33957
34247
  const socket = client[kSocket];
34248
+ clearIdleSocketValidation(socket);
33958
34249
 
33959
34250
  /**
33960
34251
  * @param {Error} [err]
@@ -34008,6 +34299,10 @@ function requireClientH1 () {
34008
34299
  socket[kBlocking] = true;
34009
34300
  }
34010
34301
 
34302
+ if (socket.setTypeOfService) {
34303
+ socket.setTypeOfService(request.typeOfService);
34304
+ }
34305
+
34011
34306
  let header = `${method} ${path} HTTP/1.1\r\n`;
34012
34307
 
34013
34308
  if (typeof host === 'string') {
@@ -35208,12 +35503,16 @@ function requireClientH2 () {
35208
35503
  if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), '') === false) {
35209
35504
  stream.pause();
35210
35505
  }
35211
- });
35212
35506
 
35213
- stream.on('data', (chunk) => {
35214
- if (request.onData(chunk) === false) {
35215
- stream.pause();
35216
- }
35507
+ stream.on('data', (chunk) => {
35508
+ if (request.aborted || request.completed) {
35509
+ return
35510
+ }
35511
+
35512
+ if (request.onData(chunk) === false) {
35513
+ stream.pause();
35514
+ }
35515
+ });
35217
35516
  });
35218
35517
 
35219
35518
  stream.once('end', () => {
@@ -35275,6 +35574,7 @@ function requireClientH2 () {
35275
35574
  return
35276
35575
  }
35277
35576
 
35577
+ stream.removeAllListeners('data');
35278
35578
  request.onComplete(trailers);
35279
35579
  });
35280
35580
 
@@ -35507,7 +35807,7 @@ function requireClient () {
35507
35807
  hasRequiredClient = 1;
35508
35808
 
35509
35809
  const assert = require$$0$7;
35510
- const net = require$$0$9;
35810
+ const net = require$$1$4;
35511
35811
  const http = require$$2$3;
35512
35812
  const util = requireUtil$5();
35513
35813
  const { ClientStats } = requireStats();
@@ -35575,7 +35875,7 @@ function requireClient () {
35575
35875
  ? () => http.maxHeaderSize
35576
35876
  : () => { throw new InvalidArgumentError('http module not available or http.maxHeaderSize invalid') };
35577
35877
 
35578
- const noop = () => {};
35878
+ const noop = () => { };
35579
35879
 
35580
35880
  function getPipelining (client) {
35581
35881
  return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1
@@ -35620,7 +35920,8 @@ function requireClient () {
35620
35920
  useH2c,
35621
35921
  initialWindowSize,
35622
35922
  connectionWindowSize,
35623
- pingInterval
35923
+ pingInterval,
35924
+ webSocket
35624
35925
  } = {}) {
35625
35926
  if (keepAlive !== undefined) {
35626
35927
  throw new InvalidArgumentError('unsupported keepAlive, use pipelining=0 instead')
@@ -35728,7 +36029,7 @@ function requireClient () {
35728
36029
  throw new InvalidArgumentError('pingInterval must be a positive integer, greater or equal to 0')
35729
36030
  }
35730
36031
 
35731
- super();
36032
+ super({ webSocket });
35732
36033
 
35733
36034
  if (typeof connect !== 'function') {
35734
36035
  connect = buildConnector({
@@ -35741,6 +36042,13 @@ function requireClient () {
35741
36042
  ...(typeof autoSelectFamily === 'boolean' ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : undefined),
35742
36043
  ...connect
35743
36044
  });
36045
+ } else {
36046
+ const customConnect = connect;
36047
+ connect = (opts, callback) => customConnect({
36048
+ ...opts,
36049
+ ...(socketPath != null ? { socketPath } : null),
36050
+ ...(allowH2 != null ? { allowH2 } : null)
36051
+ }, callback);
35744
36052
  }
35745
36053
 
35746
36054
  this[kUrl] = util.parseOrigin(url);
@@ -35953,65 +36261,70 @@ function requireClient () {
35953
36261
  });
35954
36262
  }
35955
36263
 
35956
- client[kConnector]({
35957
- host,
35958
- hostname,
35959
- protocol,
35960
- port,
35961
- servername: client[kServerName],
35962
- localAddress: client[kLocalAddress]
35963
- }, (err, socket) => {
35964
- if (err) {
35965
- handleConnectError(client, err, { host, hostname, protocol, port });
35966
- client[kResume]();
35967
- return
35968
- }
36264
+ try {
36265
+ client[kConnector]({
36266
+ host,
36267
+ hostname,
36268
+ protocol,
36269
+ port,
36270
+ servername: client[kServerName],
36271
+ localAddress: client[kLocalAddress]
36272
+ }, (err, socket) => {
36273
+ if (err) {
36274
+ handleConnectError(client, err, { host, hostname, protocol, port });
36275
+ client[kResume]();
36276
+ return
36277
+ }
35969
36278
 
35970
- if (client.destroyed) {
35971
- util.destroy(socket.on('error', noop), new ClientDestroyedError());
35972
- client[kResume]();
35973
- return
35974
- }
36279
+ if (client.destroyed) {
36280
+ util.destroy(socket.on('error', noop), new ClientDestroyedError());
36281
+ client[kResume]();
36282
+ return
36283
+ }
35975
36284
 
35976
- assert(socket);
36285
+ assert(socket);
35977
36286
 
35978
- try {
35979
- client[kHTTPContext] = socket.alpnProtocol === 'h2'
35980
- ? connectH2(client, socket)
35981
- : connectH1(client, socket);
35982
- } catch (err) {
35983
- socket.destroy().on('error', noop);
35984
- handleConnectError(client, err, { host, hostname, protocol, port });
35985
- client[kResume]();
35986
- return
35987
- }
36287
+ try {
36288
+ client[kHTTPContext] = socket.alpnProtocol === 'h2'
36289
+ ? connectH2(client, socket)
36290
+ : connectH1(client, socket);
36291
+ } catch (err) {
36292
+ socket.destroy().on('error', noop);
36293
+ handleConnectError(client, err, { host, hostname, protocol, port });
36294
+ client[kResume]();
36295
+ return
36296
+ }
35988
36297
 
35989
- client[kConnecting] = false;
36298
+ client[kConnecting] = false;
35990
36299
 
35991
- socket[kCounter] = 0;
35992
- socket[kMaxRequests] = client[kMaxRequests];
35993
- socket[kClient] = client;
35994
- socket[kError] = null;
36300
+ socket[kCounter] = 0;
36301
+ socket[kMaxRequests] = client[kMaxRequests];
36302
+ socket[kClient] = client;
36303
+ socket[kError] = null;
35995
36304
 
35996
- if (channels.connected.hasSubscribers) {
35997
- channels.connected.publish({
35998
- connectParams: {
35999
- host,
36000
- hostname,
36001
- protocol,
36002
- port,
36003
- version: client[kHTTPContext]?.version,
36004
- servername: client[kServerName],
36005
- localAddress: client[kLocalAddress]
36006
- },
36007
- connector: client[kConnector],
36008
- socket
36009
- });
36010
- }
36305
+ if (channels.connected.hasSubscribers) {
36306
+ channels.connected.publish({
36307
+ connectParams: {
36308
+ host,
36309
+ hostname,
36310
+ protocol,
36311
+ port,
36312
+ version: client[kHTTPContext]?.version,
36313
+ servername: client[kServerName],
36314
+ localAddress: client[kLocalAddress]
36315
+ },
36316
+ connector: client[kConnector],
36317
+ socket
36318
+ });
36319
+ }
36011
36320
 
36012
- client.emit('connect', client[kUrl], [client]);
36321
+ client.emit('connect', client[kUrl], [client]);
36322
+ client[kResume]();
36323
+ });
36324
+ } catch (err) {
36325
+ handleConnectError(client, err, { host, hostname, protocol, port });
36013
36326
  client[kResume]();
36014
- });
36327
+ }
36015
36328
  }
36016
36329
 
36017
36330
  function handleConnectError (client, err, { host, hostname, protocol, port }) {
@@ -36111,6 +36424,10 @@ function requireClient () {
36111
36424
 
36112
36425
  const request = client[kQueue][client[kPendingIdx]];
36113
36426
 
36427
+ if (request === null) {
36428
+ return
36429
+ }
36430
+
36114
36431
  if (client[kUrl].protocol === 'https:' && client[kServerName] !== request.servername) {
36115
36432
  if (client[kRunning] > 0) {
36116
36433
  return
@@ -36587,11 +36904,11 @@ function requirePool () {
36587
36904
  });
36588
36905
  }
36589
36906
 
36590
- super();
36907
+ super(options);
36591
36908
 
36592
36909
  this[kConnections] = connections || null;
36593
36910
  this[kUrl] = util.parseOrigin(origin);
36594
- this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl };
36911
+ this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath };
36595
36912
  this[kOptions].interceptors = options.interceptors
36596
36913
  ? { ...options.interceptors }
36597
36914
  : undefined;
@@ -36664,7 +36981,7 @@ function requireBalancedPool () {
36664
36981
  } = requirePoolBase();
36665
36982
  const Pool = requirePool();
36666
36983
  const { kUrl } = requireSymbols();
36667
- const { parseOrigin } = requireUtil$5();
36984
+ const util = requireUtil$5();
36668
36985
  const kFactory = Symbol('factory');
36669
36986
 
36670
36987
  const kOptions = Symbol('options');
@@ -36704,9 +37021,12 @@ function requireBalancedPool () {
36704
37021
  throw new InvalidArgumentError('factory must be a function.')
36705
37022
  }
36706
37023
 
36707
- super();
37024
+ super(opts);
36708
37025
 
36709
- this[kOptions] = opts;
37026
+ this[kOptions] = { ...util.deepClone(opts) };
37027
+ this[kOptions].interceptors = opts.interceptors
37028
+ ? { ...opts.interceptors }
37029
+ : undefined;
36710
37030
  this[kIndex] = -1;
36711
37031
  this[kCurrentWeight] = 0;
36712
37032
 
@@ -36726,7 +37046,7 @@ function requireBalancedPool () {
36726
37046
  }
36727
37047
 
36728
37048
  addUpstream (upstream) {
36729
- const upstreamOrigin = parseOrigin(upstream).origin;
37049
+ const upstreamOrigin = util.parseOrigin(upstream).origin;
36730
37050
 
36731
37051
  if (this[kClients].find((pool) => (
36732
37052
  pool[kUrl].origin === upstreamOrigin &&
@@ -36735,7 +37055,7 @@ function requireBalancedPool () {
36735
37055
  ))) {
36736
37056
  return this
36737
37057
  }
36738
- const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]));
37058
+ const pool = this[kFactory](upstreamOrigin, this[kOptions]);
36739
37059
 
36740
37060
  this[kAddClient](pool);
36741
37061
  pool.on('connect', () => {
@@ -36775,7 +37095,7 @@ function requireBalancedPool () {
36775
37095
  }
36776
37096
 
36777
37097
  removeUpstream (upstream) {
36778
- const upstreamOrigin = parseOrigin(upstream).origin;
37098
+ const upstreamOrigin = util.parseOrigin(upstream).origin;
36779
37099
 
36780
37100
  const pool = this[kClients].find((pool) => (
36781
37101
  pool[kUrl].origin === upstreamOrigin &&
@@ -36791,7 +37111,7 @@ function requireBalancedPool () {
36791
37111
  }
36792
37112
 
36793
37113
  getUpstream (upstream) {
36794
- const upstreamOrigin = parseOrigin(upstream).origin;
37114
+ const upstreamOrigin = util.parseOrigin(upstream).origin;
36795
37115
 
36796
37116
  return this[kClients].find((pool) => (
36797
37117
  pool[kUrl].origin === upstreamOrigin &&
@@ -36942,7 +37262,7 @@ function requireRoundRobinPool () {
36942
37262
 
36943
37263
  this[kConnections] = connections || null;
36944
37264
  this[kUrl] = util.parseOrigin(origin);
36945
- this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl };
37265
+ this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl, socketPath };
36946
37266
  this[kOptions].interceptors = options.interceptors
36947
37267
  ? { ...options.interceptors }
36948
37268
  : undefined;
@@ -37054,7 +37374,7 @@ function requireAgent () {
37054
37374
  throw new InvalidArgumentError('maxOrigins must be a number greater than 0')
37055
37375
  }
37056
37376
 
37057
- super();
37377
+ super(options);
37058
37378
 
37059
37379
  if (connect && typeof connect !== 'function') {
37060
37380
  connect = { ...connect };
@@ -37178,6 +37498,924 @@ function requireAgent () {
37178
37498
  return agent;
37179
37499
  }
37180
37500
 
37501
+ var socks5Utils;
37502
+ var hasRequiredSocks5Utils;
37503
+
37504
+ function requireSocks5Utils () {
37505
+ if (hasRequiredSocks5Utils) return socks5Utils;
37506
+ hasRequiredSocks5Utils = 1;
37507
+
37508
+ const { Buffer } = require$$0$a;
37509
+ const net = require$$1$4;
37510
+ const { InvalidArgumentError } = requireErrors();
37511
+
37512
+ /**
37513
+ * Parse an address and determine its type
37514
+ * @param {string} address - The address to parse
37515
+ * @returns {{type: number, buffer: Buffer}} Address type and buffer
37516
+ */
37517
+ function parseAddress (address) {
37518
+ // Check if it's an IPv4 address
37519
+ if (net.isIPv4(address)) {
37520
+ const parts = address.split('.').map(Number);
37521
+ return {
37522
+ type: 0x01, // IPv4
37523
+ buffer: Buffer.from(parts)
37524
+ }
37525
+ }
37526
+
37527
+ // Check if it's an IPv6 address
37528
+ if (net.isIPv6(address)) {
37529
+ return {
37530
+ type: 0x04, // IPv6
37531
+ buffer: parseIPv6(address)
37532
+ }
37533
+ }
37534
+
37535
+ // Otherwise, treat as domain name
37536
+ const domainBuffer = Buffer.from(address, 'utf8');
37537
+ if (domainBuffer.length > 255) {
37538
+ throw new InvalidArgumentError('Domain name too long (max 255 bytes)')
37539
+ }
37540
+
37541
+ return {
37542
+ type: 0x03, // Domain
37543
+ buffer: Buffer.concat([Buffer.from([domainBuffer.length]), domainBuffer])
37544
+ }
37545
+ }
37546
+
37547
+ /**
37548
+ * Parse IPv6 address to buffer
37549
+ * @param {string} address - IPv6 address string
37550
+ * @returns {Buffer} 16-byte buffer
37551
+ */
37552
+ function parseIPv6 (address) {
37553
+ const buffer = Buffer.alloc(16);
37554
+ let normalizedAddress = address;
37555
+
37556
+ // Expand an embedded IPv4 tail into the last two IPv6 groups.
37557
+ if (address.includes('.')) {
37558
+ const lastColonIndex = address.lastIndexOf(':');
37559
+ const ipv4Part = address.slice(lastColonIndex + 1);
37560
+
37561
+ if (net.isIPv4(ipv4Part)) {
37562
+ const octets = ipv4Part.split('.').map(Number);
37563
+ const high = ((octets[0] << 8) | octets[1]).toString(16);
37564
+ const low = ((octets[2] << 8) | octets[3]).toString(16);
37565
+ normalizedAddress = `${address.slice(0, lastColonIndex)}:${high}:${low}`;
37566
+ }
37567
+ }
37568
+
37569
+ // Handle compressed notation (::)
37570
+ const doubleColonIndex = normalizedAddress.indexOf('::');
37571
+ if (doubleColonIndex !== -1) {
37572
+ const before = normalizedAddress.slice(0, doubleColonIndex);
37573
+ const after = normalizedAddress.slice(doubleColonIndex + 2);
37574
+ const beforeParts = before === '' ? [] : before.split(':');
37575
+ const afterParts = after === '' ? [] : after.split(':');
37576
+
37577
+ let bufferIndex = 0;
37578
+ for (const part of beforeParts) {
37579
+ buffer.writeUInt16BE(parseInt(part, 16), bufferIndex);
37580
+ bufferIndex += 2;
37581
+ }
37582
+ bufferIndex = 16 - afterParts.length * 2;
37583
+ for (const part of afterParts) {
37584
+ buffer.writeUInt16BE(parseInt(part, 16), bufferIndex);
37585
+ bufferIndex += 2;
37586
+ }
37587
+ } else {
37588
+ const parts = normalizedAddress.split(':');
37589
+ for (let i = 0; i < parts.length; i++) {
37590
+ buffer.writeUInt16BE(parseInt(parts[i], 16), i * 2);
37591
+ }
37592
+ }
37593
+
37594
+ return buffer
37595
+ }
37596
+
37597
+ /**
37598
+ * Build a SOCKS5 address buffer
37599
+ * @param {number} type - Address type (1=IPv4, 3=Domain, 4=IPv6)
37600
+ * @param {Buffer} addressBuffer - The address data
37601
+ * @param {number} port - Port number
37602
+ * @returns {Buffer} Complete address buffer including type, address, and port
37603
+ */
37604
+ function buildAddressBuffer (type, addressBuffer, port) {
37605
+ const portBuffer = Buffer.allocUnsafe(2);
37606
+ portBuffer.writeUInt16BE(port, 0);
37607
+
37608
+ return Buffer.concat([
37609
+ Buffer.from([type]),
37610
+ addressBuffer,
37611
+ portBuffer
37612
+ ])
37613
+ }
37614
+
37615
+ /**
37616
+ * Parse address from SOCKS5 response
37617
+ * @param {Buffer} buffer - Buffer containing the address
37618
+ * @param {number} offset - Starting offset in buffer
37619
+ * @returns {{address: string, port: number, bytesRead: number}}
37620
+ */
37621
+ function parseResponseAddress (buffer, offset = 0) {
37622
+ if (buffer.length < offset + 1) {
37623
+ throw new InvalidArgumentError('Buffer too small to contain address type')
37624
+ }
37625
+
37626
+ const addressType = buffer[offset];
37627
+ let address;
37628
+ let currentOffset = offset + 1;
37629
+
37630
+ switch (addressType) {
37631
+ case 0x01: { // IPv4
37632
+ if (buffer.length < currentOffset + 6) {
37633
+ throw new InvalidArgumentError('Buffer too small for IPv4 address')
37634
+ }
37635
+ address = Array.from(buffer.subarray(currentOffset, currentOffset + 4)).join('.');
37636
+ currentOffset += 4;
37637
+ break
37638
+ }
37639
+
37640
+ case 0x03: { // Domain
37641
+ if (buffer.length < currentOffset + 1) {
37642
+ throw new InvalidArgumentError('Buffer too small for domain length')
37643
+ }
37644
+ const domainLength = buffer[currentOffset];
37645
+ currentOffset += 1;
37646
+
37647
+ if (buffer.length < currentOffset + domainLength + 2) {
37648
+ throw new InvalidArgumentError('Buffer too small for domain address')
37649
+ }
37650
+ address = buffer.subarray(currentOffset, currentOffset + domainLength).toString('utf8');
37651
+ currentOffset += domainLength;
37652
+ break
37653
+ }
37654
+
37655
+ case 0x04: { // IPv6
37656
+ if (buffer.length < currentOffset + 18) {
37657
+ throw new InvalidArgumentError('Buffer too small for IPv6 address')
37658
+ }
37659
+ // Convert buffer to IPv6 string
37660
+ const parts = [];
37661
+ for (let i = 0; i < 8; i++) {
37662
+ const value = buffer.readUInt16BE(currentOffset + i * 2);
37663
+ parts.push(value.toString(16));
37664
+ }
37665
+ address = parts.join(':');
37666
+ currentOffset += 16;
37667
+ break
37668
+ }
37669
+
37670
+ default:
37671
+ throw new InvalidArgumentError(`Invalid address type: ${addressType}`)
37672
+ }
37673
+
37674
+ // Parse port
37675
+ if (buffer.length < currentOffset + 2) {
37676
+ throw new InvalidArgumentError('Buffer too small for port')
37677
+ }
37678
+ const port = buffer.readUInt16BE(currentOffset);
37679
+ currentOffset += 2;
37680
+
37681
+ return {
37682
+ address,
37683
+ port,
37684
+ bytesRead: currentOffset - offset
37685
+ }
37686
+ }
37687
+
37688
+ /**
37689
+ * Create error for SOCKS5 reply code
37690
+ * @param {number} replyCode - SOCKS5 reply code
37691
+ * @returns {Error} Appropriate error object
37692
+ */
37693
+ function createReplyError (replyCode) {
37694
+ const messages = {
37695
+ 0x01: 'General SOCKS server failure',
37696
+ 0x02: 'Connection not allowed by ruleset',
37697
+ 0x03: 'Network unreachable',
37698
+ 0x04: 'Host unreachable',
37699
+ 0x05: 'Connection refused',
37700
+ 0x06: 'TTL expired',
37701
+ 0x07: 'Command not supported',
37702
+ 0x08: 'Address type not supported'
37703
+ };
37704
+
37705
+ const message = messages[replyCode] || `Unknown SOCKS5 error code: ${replyCode}`;
37706
+ const error = new Error(message);
37707
+ error.code = `SOCKS5_${replyCode}`;
37708
+ return error
37709
+ }
37710
+
37711
+ socks5Utils = {
37712
+ parseAddress,
37713
+ parseIPv6,
37714
+ buildAddressBuffer,
37715
+ parseResponseAddress,
37716
+ createReplyError
37717
+ };
37718
+ return socks5Utils;
37719
+ }
37720
+
37721
+ var socks5Client;
37722
+ var hasRequiredSocks5Client;
37723
+
37724
+ function requireSocks5Client () {
37725
+ if (hasRequiredSocks5Client) return socks5Client;
37726
+ hasRequiredSocks5Client = 1;
37727
+
37728
+ const { EventEmitter } = require$$0$5;
37729
+ const { Buffer } = require$$0$a;
37730
+ const { InvalidArgumentError, Socks5ProxyError } = requireErrors();
37731
+ const { debuglog } = require$$3$3;
37732
+ const { parseAddress } = requireSocks5Utils();
37733
+
37734
+ const debug = debuglog('undici:socks5');
37735
+ const EMPTY_BUFFER = Buffer.alloc(0);
37736
+
37737
+ // SOCKS5 constants
37738
+ const SOCKS_VERSION = 0x05;
37739
+
37740
+ // Authentication methods
37741
+ const AUTH_METHODS = {
37742
+ NO_AUTH: 0x00,
37743
+ GSSAPI: 0x01,
37744
+ USERNAME_PASSWORD: 0x02,
37745
+ NO_ACCEPTABLE: 0xFF
37746
+ };
37747
+
37748
+ // SOCKS5 commands
37749
+ const COMMANDS = {
37750
+ CONNECT: 0x01,
37751
+ BIND: 0x02,
37752
+ UDP_ASSOCIATE: 0x03
37753
+ };
37754
+
37755
+ // Address types
37756
+ const ADDRESS_TYPES = {
37757
+ IPV4: 0x01,
37758
+ DOMAIN: 0x03,
37759
+ IPV6: 0x04
37760
+ };
37761
+
37762
+ // Reply codes
37763
+ const REPLY_CODES = {
37764
+ SUCCEEDED: 0x00,
37765
+ GENERAL_FAILURE: 0x01,
37766
+ CONNECTION_NOT_ALLOWED: 0x02,
37767
+ NETWORK_UNREACHABLE: 0x03,
37768
+ HOST_UNREACHABLE: 0x04,
37769
+ CONNECTION_REFUSED: 0x05,
37770
+ TTL_EXPIRED: 0x06,
37771
+ COMMAND_NOT_SUPPORTED: 0x07,
37772
+ ADDRESS_TYPE_NOT_SUPPORTED: 0x08
37773
+ };
37774
+
37775
+ // State machine states
37776
+ const STATES = {
37777
+ INITIAL: 'initial',
37778
+ HANDSHAKING: 'handshaking',
37779
+ AUTHENTICATING: 'authenticating',
37780
+ AUTHENTICATED: 'authenticated',
37781
+ CONNECTING: 'connecting',
37782
+ CONNECTED: 'connected',
37783
+ ERROR: 'error',
37784
+ CLOSED: 'closed'
37785
+ };
37786
+
37787
+ /**
37788
+ * SOCKS5 client implementation
37789
+ * Handles SOCKS5 protocol negotiation and connection establishment
37790
+ */
37791
+ class Socks5Client extends EventEmitter {
37792
+ constructor (socket, options = {}) {
37793
+ super();
37794
+
37795
+ if (!socket) {
37796
+ throw new InvalidArgumentError('socket is required')
37797
+ }
37798
+
37799
+ this.socket = socket;
37800
+ this.options = options;
37801
+ this.state = STATES.INITIAL;
37802
+ this.buffer = EMPTY_BUFFER;
37803
+ this.onSocketData = this.onData.bind(this);
37804
+ this.onSocketError = this.onError.bind(this);
37805
+ this.onSocketClose = this.onClose.bind(this);
37806
+
37807
+ // Authentication settings
37808
+ this.authMethods = [];
37809
+ if (options.username && options.password) {
37810
+ this.authMethods.push(AUTH_METHODS.USERNAME_PASSWORD);
37811
+ }
37812
+ this.authMethods.push(AUTH_METHODS.NO_AUTH);
37813
+
37814
+ // Socket event handlers
37815
+ this.socket.on('data', this.onSocketData);
37816
+ this.socket.on('error', this.onSocketError);
37817
+ this.socket.on('close', this.onSocketClose);
37818
+ }
37819
+
37820
+ /**
37821
+ * Handle incoming data from the socket
37822
+ */
37823
+ onData (data) {
37824
+ debug('received data', data.length, 'bytes in state', this.state);
37825
+ this.buffer = Buffer.concat([this.buffer, data]);
37826
+
37827
+ try {
37828
+ switch (this.state) {
37829
+ case STATES.HANDSHAKING:
37830
+ this.handleHandshakeResponse();
37831
+ break
37832
+ case STATES.AUTHENTICATING:
37833
+ this.handleAuthResponse();
37834
+ break
37835
+ case STATES.CONNECTING:
37836
+ this.handleConnectResponse();
37837
+ break
37838
+ }
37839
+ } catch (err) {
37840
+ this.onError(err);
37841
+ }
37842
+ }
37843
+
37844
+ /**
37845
+ * Handle socket errors
37846
+ */
37847
+ onError (err) {
37848
+ debug('socket error', err);
37849
+ this.state = STATES.ERROR;
37850
+ this.emit('error', err);
37851
+ this.destroy();
37852
+ }
37853
+
37854
+ /**
37855
+ * Handle socket close
37856
+ */
37857
+ onClose () {
37858
+ debug('socket closed');
37859
+ this.state = STATES.CLOSED;
37860
+ this.emit('close');
37861
+ }
37862
+
37863
+ /**
37864
+ * Destroy the client and underlying socket
37865
+ */
37866
+ destroy () {
37867
+ if (this.socket && !this.socket.destroyed) {
37868
+ this.socket.destroy();
37869
+ }
37870
+ }
37871
+
37872
+ markAuthenticated () {
37873
+ this.state = STATES.AUTHENTICATED;
37874
+ this.emit('authenticated');
37875
+ }
37876
+
37877
+ /**
37878
+ * Start the SOCKS5 handshake
37879
+ */
37880
+ handshake () {
37881
+ if (this.state !== STATES.INITIAL) {
37882
+ throw new InvalidArgumentError('Handshake already started')
37883
+ }
37884
+
37885
+ debug('starting handshake with', this.authMethods.length, 'auth methods');
37886
+ this.state = STATES.HANDSHAKING;
37887
+
37888
+ // Build handshake request
37889
+ // +----+----------+----------+
37890
+ // |VER | NMETHODS | METHODS |
37891
+ // +----+----------+----------+
37892
+ // | 1 | 1 | 1 to 255 |
37893
+ // +----+----------+----------+
37894
+ const request = Buffer.alloc(2 + this.authMethods.length);
37895
+ request[0] = SOCKS_VERSION;
37896
+ request[1] = this.authMethods.length;
37897
+ this.authMethods.forEach((method, i) => {
37898
+ request[2 + i] = method;
37899
+ });
37900
+
37901
+ this.socket.write(request);
37902
+ }
37903
+
37904
+ /**
37905
+ * Handle handshake response from server
37906
+ */
37907
+ handleHandshakeResponse () {
37908
+ if (this.buffer.length < 2) {
37909
+ return // Not enough data yet
37910
+ }
37911
+
37912
+ const version = this.buffer[0];
37913
+ const method = this.buffer[1];
37914
+
37915
+ if (version !== SOCKS_VERSION) {
37916
+ throw new Socks5ProxyError(`Invalid SOCKS version: ${version}`, 'UND_ERR_SOCKS5_VERSION')
37917
+ }
37918
+
37919
+ if (method === AUTH_METHODS.NO_ACCEPTABLE) {
37920
+ throw new Socks5ProxyError('No acceptable authentication method', 'UND_ERR_SOCKS5_AUTH_REJECTED')
37921
+ }
37922
+
37923
+ this.buffer = this.buffer.subarray(2);
37924
+ debug('server selected auth method', method);
37925
+
37926
+ if (method === AUTH_METHODS.NO_AUTH) {
37927
+ this.markAuthenticated();
37928
+ } else if (method === AUTH_METHODS.USERNAME_PASSWORD) {
37929
+ this.state = STATES.AUTHENTICATING;
37930
+ this.sendAuthRequest();
37931
+ } else {
37932
+ throw new Socks5ProxyError(`Unsupported authentication method: ${method}`, 'UND_ERR_SOCKS5_AUTH_METHOD')
37933
+ }
37934
+ }
37935
+
37936
+ /**
37937
+ * Send username/password authentication request
37938
+ */
37939
+ sendAuthRequest () {
37940
+ const { username, password } = this.options;
37941
+
37942
+ if (!username || !password) {
37943
+ throw new InvalidArgumentError('Username and password required for authentication')
37944
+ }
37945
+
37946
+ debug('sending username/password auth');
37947
+
37948
+ // Username/Password authentication request (RFC 1929)
37949
+ // +----+------+----------+------+----------+
37950
+ // |VER | ULEN | UNAME | PLEN | PASSWD |
37951
+ // +----+------+----------+------+----------+
37952
+ // | 1 | 1 | 1 to 255 | 1 | 1 to 255 |
37953
+ // +----+------+----------+------+----------+
37954
+ const usernameBuffer = Buffer.from(username);
37955
+ const passwordBuffer = Buffer.from(password);
37956
+
37957
+ if (usernameBuffer.length > 255 || passwordBuffer.length > 255) {
37958
+ throw new InvalidArgumentError('Username or password too long')
37959
+ }
37960
+
37961
+ const request = Buffer.alloc(3 + usernameBuffer.length + passwordBuffer.length);
37962
+ request[0] = 0x01; // Sub-negotiation version
37963
+ request[1] = usernameBuffer.length;
37964
+ usernameBuffer.copy(request, 2);
37965
+ request[2 + usernameBuffer.length] = passwordBuffer.length;
37966
+ passwordBuffer.copy(request, 3 + usernameBuffer.length);
37967
+
37968
+ this.socket.write(request);
37969
+ }
37970
+
37971
+ /**
37972
+ * Handle authentication response
37973
+ */
37974
+ handleAuthResponse () {
37975
+ if (this.buffer.length < 2) {
37976
+ return // Not enough data yet
37977
+ }
37978
+
37979
+ const version = this.buffer[0];
37980
+ const status = this.buffer[1];
37981
+
37982
+ if (version !== 0x01) {
37983
+ throw new Socks5ProxyError(`Invalid auth sub-negotiation version: ${version}`, 'UND_ERR_SOCKS5_AUTH_VERSION')
37984
+ }
37985
+
37986
+ if (status !== 0x00) {
37987
+ throw new Socks5ProxyError('Authentication failed', 'UND_ERR_SOCKS5_AUTH_FAILED')
37988
+ }
37989
+
37990
+ this.buffer = this.buffer.subarray(2);
37991
+ debug('authentication successful');
37992
+ this.markAuthenticated();
37993
+ }
37994
+
37995
+ /**
37996
+ * Send CONNECT command
37997
+ * @param {string} address - Target address (IP or domain)
37998
+ * @param {number} port - Target port
37999
+ */
38000
+ connect (address, port) {
38001
+ if (this.state === STATES.CONNECTING || this.state === STATES.CONNECTED) {
38002
+ throw new InvalidArgumentError('Connection already in progress')
38003
+ }
38004
+
38005
+ if (this.state !== STATES.AUTHENTICATED) {
38006
+ throw new InvalidArgumentError('Client must be authenticated before CONNECT')
38007
+ }
38008
+
38009
+ debug('connecting to', address, port);
38010
+ this.state = STATES.CONNECTING;
38011
+
38012
+ const request = this.buildConnectRequest(COMMANDS.CONNECT, address, port);
38013
+ this.socket.write(request);
38014
+ }
38015
+
38016
+ /**
38017
+ * Build a SOCKS5 request
38018
+ */
38019
+ buildConnectRequest (command, address, port) {
38020
+ // Parse address to determine type and buffer
38021
+ const { type: addressType, buffer: addressBuffer } = parseAddress(address);
38022
+
38023
+ // Build request
38024
+ // +----+-----+-------+------+----------+----------+
38025
+ // |VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
38026
+ // +----+-----+-------+------+----------+----------+
38027
+ // | 1 | 1 | X'00' | 1 | Variable | 2 |
38028
+ // +----+-----+-------+------+----------+----------+
38029
+ const request = Buffer.alloc(4 + addressBuffer.length + 2);
38030
+ request[0] = SOCKS_VERSION;
38031
+ request[1] = command;
38032
+ request[2] = 0x00; // Reserved
38033
+ request[3] = addressType;
38034
+ addressBuffer.copy(request, 4);
38035
+ request.writeUInt16BE(port, 4 + addressBuffer.length);
38036
+
38037
+ return request
38038
+ }
38039
+
38040
+ /**
38041
+ * Handle CONNECT response
38042
+ */
38043
+ handleConnectResponse () {
38044
+ if (this.buffer.length < 4) {
38045
+ return // Not enough data for header
38046
+ }
38047
+
38048
+ const version = this.buffer[0];
38049
+ const reply = this.buffer[1];
38050
+ const addressType = this.buffer[3];
38051
+
38052
+ if (version !== SOCKS_VERSION) {
38053
+ throw new Socks5ProxyError(`Invalid SOCKS version in reply: ${version}`, 'UND_ERR_SOCKS5_REPLY_VERSION')
38054
+ }
38055
+
38056
+ // Calculate the expected response length
38057
+ let responseLength = 4; // VER + REP + RSV + ATYP
38058
+ if (addressType === ADDRESS_TYPES.IPV4) {
38059
+ responseLength += 4 + 2; // IPv4 + port
38060
+ } else if (addressType === ADDRESS_TYPES.DOMAIN) {
38061
+ if (this.buffer.length < 5) {
38062
+ return // Need domain length byte
38063
+ }
38064
+ responseLength += 1 + this.buffer[4] + 2; // length byte + domain + port
38065
+ } else if (addressType === ADDRESS_TYPES.IPV6) {
38066
+ responseLength += 16 + 2; // IPv6 + port
38067
+ } else {
38068
+ throw new Socks5ProxyError(`Invalid address type in reply: ${addressType}`, 'UND_ERR_SOCKS5_ADDR_TYPE')
38069
+ }
38070
+
38071
+ if (this.buffer.length < responseLength) {
38072
+ return // Not enough data for full response
38073
+ }
38074
+
38075
+ if (reply !== REPLY_CODES.SUCCEEDED) {
38076
+ const errorMessage = this.getReplyErrorMessage(reply);
38077
+ throw new Socks5ProxyError(`SOCKS5 connection failed: ${errorMessage}`, `UND_ERR_SOCKS5_REPLY_${reply}`)
38078
+ }
38079
+
38080
+ // Parse bound address and port
38081
+ let boundAddress;
38082
+ let offset = 4;
38083
+
38084
+ if (addressType === ADDRESS_TYPES.IPV4) {
38085
+ boundAddress = Array.from(this.buffer.subarray(offset, offset + 4)).join('.');
38086
+ offset += 4;
38087
+ } else if (addressType === ADDRESS_TYPES.DOMAIN) {
38088
+ const domainLength = this.buffer[offset];
38089
+ offset += 1;
38090
+ boundAddress = this.buffer.subarray(offset, offset + domainLength).toString();
38091
+ offset += domainLength;
38092
+ } else if (addressType === ADDRESS_TYPES.IPV6) {
38093
+ // Parse IPv6 address from 16-byte buffer
38094
+ const parts = [];
38095
+ for (let i = 0; i < 8; i++) {
38096
+ const value = this.buffer.readUInt16BE(offset + i * 2);
38097
+ parts.push(value.toString(16));
38098
+ }
38099
+ boundAddress = parts.join(':');
38100
+ offset += 16;
38101
+ }
38102
+
38103
+ const boundPort = this.buffer.readUInt16BE(offset);
38104
+
38105
+ this.buffer = EMPTY_BUFFER;
38106
+ this.state = STATES.CONNECTED;
38107
+ this.socket.removeListener('data', this.onSocketData);
38108
+
38109
+ debug('connected, bound address:', boundAddress, 'port:', boundPort);
38110
+ this.emit('connected', { address: boundAddress, port: boundPort });
38111
+ }
38112
+
38113
+ /**
38114
+ * Get human-readable error message for reply code
38115
+ */
38116
+ getReplyErrorMessage (reply) {
38117
+ switch (reply) {
38118
+ case REPLY_CODES.GENERAL_FAILURE:
38119
+ return 'General SOCKS server failure'
38120
+ case REPLY_CODES.CONNECTION_NOT_ALLOWED:
38121
+ return 'Connection not allowed by ruleset'
38122
+ case REPLY_CODES.NETWORK_UNREACHABLE:
38123
+ return 'Network unreachable'
38124
+ case REPLY_CODES.HOST_UNREACHABLE:
38125
+ return 'Host unreachable'
38126
+ case REPLY_CODES.CONNECTION_REFUSED:
38127
+ return 'Connection refused'
38128
+ case REPLY_CODES.TTL_EXPIRED:
38129
+ return 'TTL expired'
38130
+ case REPLY_CODES.COMMAND_NOT_SUPPORTED:
38131
+ return 'Command not supported'
38132
+ case REPLY_CODES.ADDRESS_TYPE_NOT_SUPPORTED:
38133
+ return 'Address type not supported'
38134
+ default:
38135
+ return `Unknown error code: ${reply}`
38136
+ }
38137
+ }
38138
+ }
38139
+
38140
+ socks5Client = {
38141
+ Socks5Client,
38142
+ AUTH_METHODS,
38143
+ COMMANDS,
38144
+ ADDRESS_TYPES,
38145
+ REPLY_CODES,
38146
+ STATES
38147
+ };
38148
+ return socks5Client;
38149
+ }
38150
+
38151
+ var socks5ProxyAgent;
38152
+ var hasRequiredSocks5ProxyAgent;
38153
+
38154
+ function requireSocks5ProxyAgent () {
38155
+ if (hasRequiredSocks5ProxyAgent) return socks5ProxyAgent;
38156
+ hasRequiredSocks5ProxyAgent = 1;
38157
+
38158
+ const { URL } = require$$0$b;
38159
+
38160
+ let tls; // include tls conditionally since it is not always available
38161
+ const DispatcherBase = requireDispatcherBase();
38162
+ const { InvalidArgumentError } = requireErrors();
38163
+ const { Socks5Client, STATES } = requireSocks5Client();
38164
+ const { kDispatch, kClose, kDestroy } = requireSymbols();
38165
+ const Pool = requirePool();
38166
+ const buildConnector = requireConnect();
38167
+ const { debuglog } = require$$3$3;
38168
+
38169
+ const debug = debuglog('undici:socks5-proxy');
38170
+
38171
+ const kProxyUrl = Symbol('proxy url');
38172
+ const kProxyHeaders = Symbol('proxy headers');
38173
+ const kProxyAuth = Symbol('proxy auth');
38174
+ const kProxyProtocol = Symbol('proxy protocol');
38175
+ const kPools = Symbol('pools');
38176
+ const kConnector = Symbol('connector');
38177
+ const kRequestTls = Symbol('request tls settings');
38178
+
38179
+ // Static flag to ensure warning is only emitted once per process
38180
+ let experimentalWarningEmitted = false;
38181
+
38182
+ /**
38183
+ * SOCKS5 proxy agent for dispatching requests through a SOCKS5 proxy
38184
+ */
38185
+ class Socks5ProxyAgent extends DispatcherBase {
38186
+ constructor (proxyUrl, options = {}) {
38187
+ super();
38188
+
38189
+ // Emit experimental warning only once
38190
+ if (!experimentalWarningEmitted) {
38191
+ process.emitWarning(
38192
+ 'SOCKS5 proxy support is experimental and subject to change',
38193
+ 'ExperimentalWarning'
38194
+ );
38195
+ experimentalWarningEmitted = true;
38196
+ }
38197
+
38198
+ if (!proxyUrl) {
38199
+ throw new InvalidArgumentError('Proxy URL is mandatory')
38200
+ }
38201
+
38202
+ // Parse proxy URL
38203
+ const url = typeof proxyUrl === 'string' ? new URL(proxyUrl) : proxyUrl;
38204
+
38205
+ if (url.protocol !== 'socks5:' && url.protocol !== 'socks:') {
38206
+ throw new InvalidArgumentError('Proxy URL must use socks5:// or socks:// protocol')
38207
+ }
38208
+
38209
+ this[kProxyUrl] = url;
38210
+ this[kProxyHeaders] = options.headers || {};
38211
+ this[kProxyProtocol] = options.proxyTls ? 'https:' : 'http:';
38212
+ this[kRequestTls] = options.requestTls;
38213
+
38214
+ // Extract auth from URL or options
38215
+ this[kProxyAuth] = {
38216
+ username: options.username || (url.username ? decodeURIComponent(url.username) : null),
38217
+ password: options.password || (url.password ? decodeURIComponent(url.password) : null)
38218
+ };
38219
+
38220
+ // Create connector for proxy connection
38221
+ this[kConnector] = options.connect || buildConnector({
38222
+ ...options.proxyTls,
38223
+ servername: options.proxyTls?.servername || url.hostname
38224
+ });
38225
+
38226
+ // Pools for the actual HTTP connections (with SOCKS5 tunnel connect function), keyed by origin
38227
+ this[kPools] = new Map();
38228
+ }
38229
+
38230
+ /**
38231
+ * Create a SOCKS5 connection to the proxy
38232
+ */
38233
+ async createSocks5Connection (targetHost, targetPort) {
38234
+ const proxyHost = this[kProxyUrl].hostname;
38235
+ const proxyPort = parseInt(this[kProxyUrl].port) || 1080;
38236
+
38237
+ debug('creating SOCKS5 connection to', proxyHost, proxyPort);
38238
+
38239
+ // Connect to the SOCKS5 proxy
38240
+ const socket = await new Promise((resolve, reject) => {
38241
+ this[kConnector]({
38242
+ hostname: proxyHost,
38243
+ host: proxyHost,
38244
+ port: proxyPort,
38245
+ protocol: this[kProxyProtocol]
38246
+ }, (err, socket) => {
38247
+ if (err) {
38248
+ reject(err);
38249
+ } else {
38250
+ resolve(socket);
38251
+ }
38252
+ });
38253
+ });
38254
+
38255
+ // Create SOCKS5 client
38256
+ const socks5Client = new Socks5Client(socket, this[kProxyAuth]);
38257
+
38258
+ // Handle SOCKS5 errors
38259
+ socks5Client.on('error', (err) => {
38260
+ debug('SOCKS5 error:', err);
38261
+ socket.destroy();
38262
+ });
38263
+
38264
+ // Perform SOCKS5 handshake
38265
+ await socks5Client.handshake();
38266
+
38267
+ // Wait for authentication (if required)
38268
+ await new Promise((resolve, reject) => {
38269
+ const timeout = setTimeout(() => {
38270
+ reject(new Error('SOCKS5 authentication timeout'));
38271
+ }, 5000);
38272
+
38273
+ const onAuthenticated = () => {
38274
+ clearTimeout(timeout);
38275
+ socks5Client.removeListener('error', onError);
38276
+ resolve();
38277
+ };
38278
+
38279
+ const onError = (err) => {
38280
+ clearTimeout(timeout);
38281
+ socks5Client.removeListener('authenticated', onAuthenticated);
38282
+ reject(err);
38283
+ };
38284
+
38285
+ // Check if already authenticated (for NO_AUTH method)
38286
+ if (socks5Client.state === STATES.AUTHENTICATED) {
38287
+ clearTimeout(timeout);
38288
+ resolve();
38289
+ } else {
38290
+ socks5Client.once('authenticated', onAuthenticated);
38291
+ socks5Client.once('error', onError);
38292
+ }
38293
+ });
38294
+
38295
+ // Send CONNECT command
38296
+ await socks5Client.connect(targetHost, targetPort);
38297
+
38298
+ // Wait for connection
38299
+ await new Promise((resolve, reject) => {
38300
+ const timeout = setTimeout(() => {
38301
+ reject(new Error('SOCKS5 connection timeout'));
38302
+ }, 5000);
38303
+
38304
+ const onConnected = (info) => {
38305
+ debug('SOCKS5 tunnel established to', targetHost, targetPort, 'via', info);
38306
+ clearTimeout(timeout);
38307
+ socks5Client.removeListener('error', onError);
38308
+ resolve();
38309
+ };
38310
+
38311
+ const onError = (err) => {
38312
+ clearTimeout(timeout);
38313
+ socks5Client.removeListener('connected', onConnected);
38314
+ reject(err);
38315
+ };
38316
+
38317
+ socks5Client.once('connected', onConnected);
38318
+ socks5Client.once('error', onError);
38319
+ });
38320
+
38321
+ return socket
38322
+ }
38323
+
38324
+ /**
38325
+ * Dispatch a request through the SOCKS5 proxy
38326
+ */
38327
+ [kDispatch] (opts, handler) {
38328
+ const { origin } = opts;
38329
+
38330
+ debug('dispatching request to', origin, 'via SOCKS5');
38331
+
38332
+ try {
38333
+ const originKey = String(origin);
38334
+ let pool = this[kPools].get(originKey);
38335
+ // Create a Pool per origin so requests are not routed to the wrong host
38336
+ if (!pool || pool.destroyed || pool.closed) {
38337
+ pool = new Pool(origin, {
38338
+ pipelining: opts.pipelining,
38339
+ connections: opts.connections,
38340
+ connect: async (connectOpts, callback) => {
38341
+ try {
38342
+ const url = new URL(origin);
38343
+ const targetHost = url.hostname;
38344
+ const targetPort = parseInt(url.port) || (url.protocol === 'https:' ? 443 : 80);
38345
+
38346
+ debug('establishing SOCKS5 connection to', targetHost, targetPort);
38347
+
38348
+ // Create SOCKS5 tunnel
38349
+ const socket = await this.createSocks5Connection(targetHost, targetPort);
38350
+
38351
+ // Handle TLS if needed
38352
+ let finalSocket = socket;
38353
+ if (url.protocol === 'https:') {
38354
+ if (!tls) {
38355
+ tls = require('node:tls');
38356
+ }
38357
+ debug('upgrading to TLS');
38358
+ finalSocket = tls.connect({
38359
+ ...this[kRequestTls],
38360
+ socket,
38361
+ servername: this[kRequestTls]?.servername || targetHost
38362
+ });
38363
+
38364
+ await new Promise((resolve, reject) => {
38365
+ finalSocket.once('secureConnect', resolve);
38366
+ finalSocket.once('error', reject);
38367
+ });
38368
+ }
38369
+
38370
+ callback(null, finalSocket);
38371
+ } catch (err) {
38372
+ debug('SOCKS5 connection error:', err);
38373
+ callback(err);
38374
+ }
38375
+ }
38376
+ });
38377
+ this[kPools].set(originKey, pool);
38378
+ }
38379
+
38380
+ // Dispatch the request through the per-origin pool
38381
+ return pool[kDispatch](opts, handler)
38382
+ } catch (err) {
38383
+ debug('dispatch error:', err);
38384
+ if (typeof handler.onResponseError === 'function') {
38385
+ handler.onResponseError(null, err);
38386
+ return false
38387
+ } else if (typeof handler.onError === 'function') {
38388
+ handler.onError(err);
38389
+ return false
38390
+ } else {
38391
+ throw err
38392
+ }
38393
+ }
38394
+ }
38395
+
38396
+ async [kClose] () {
38397
+ const closePromises = [];
38398
+ for (const pool of this[kPools].values()) {
38399
+ closePromises.push(pool.close());
38400
+ }
38401
+ this[kPools].clear();
38402
+ await Promise.all(closePromises);
38403
+ }
38404
+
38405
+ async [kDestroy] (err) {
38406
+ const destroyPromises = [];
38407
+ for (const pool of this[kPools].values()) {
38408
+ destroyPromises.push(pool.destroy(err));
38409
+ }
38410
+ this[kPools].clear();
38411
+ await Promise.all(destroyPromises);
38412
+ }
38413
+ }
38414
+
38415
+ socks5ProxyAgent = Socks5ProxyAgent;
38416
+ return socks5ProxyAgent;
38417
+ }
38418
+
37181
38419
  var proxyAgent;
37182
38420
  var hasRequiredProxyAgent;
37183
38421
 
@@ -37193,6 +38431,7 @@ function requireProxyAgent () {
37193
38431
  const buildConnector = requireConnect();
37194
38432
  const Client = requireClient();
37195
38433
  const { channels } = requireDiagnostics();
38434
+ const Socks5ProxyAgent = requireSocks5ProxyAgent();
37196
38435
 
37197
38436
  const kAgent = Symbol('proxy agent');
37198
38437
  const kClient = Symbol('proxy client');
@@ -37317,6 +38556,20 @@ function requireProxyAgent () {
37317
38556
  const agentFactory = opts.factory || defaultAgentFactory;
37318
38557
  const factory = (origin, options) => {
37319
38558
  const { protocol } = new URL(origin);
38559
+
38560
+ // Handle SOCKS5 proxy
38561
+ if (this[kProxy].protocol === 'socks5:' || this[kProxy].protocol === 'socks:') {
38562
+ return new Socks5ProxyAgent(this[kProxy].uri, {
38563
+ headers: this[kProxyHeaders],
38564
+ connect,
38565
+ factory: agentFactory,
38566
+ username: opts.username || username,
38567
+ password: opts.password || password,
38568
+ proxyTls: opts.proxyTls,
38569
+ requestTls: opts.requestTls
38570
+ })
38571
+ }
38572
+
37320
38573
  if (!this[kTunnelProxy] && protocol === 'http:' && this[kProxy].protocol === 'http:') {
37321
38574
  return new Http1ProxyWrapper(this[kProxy].uri, {
37322
38575
  headers: this[kProxyHeaders],
@@ -37326,11 +38579,26 @@ function requireProxyAgent () {
37326
38579
  }
37327
38580
  return agentFactory(origin, options)
37328
38581
  };
37329
- this[kClient] = clientFactory(url, { connect });
38582
+
38583
+ // For SOCKS5 proxies, we don't need a client to the proxy itself
38584
+ // The SOCKS5 connection is handled within Socks5ProxyAgent
38585
+ if (protocol === 'socks5:' || protocol === 'socks:') {
38586
+ this[kClient] = null;
38587
+ } else {
38588
+ this[kClient] = clientFactory(url, { connect });
38589
+ }
38590
+
37330
38591
  this[kAgent] = new Agent({
37331
38592
  ...opts,
37332
38593
  factory,
37333
38594
  connect: async (opts, callback) => {
38595
+ // SOCKS5 proxies handle their own connections via Socks5ProxyAgent,
38596
+ // so this connect function should never be called for them.
38597
+ if (!this[kClient]) {
38598
+ callback(new InvalidArgumentError('Cannot establish tunnel connection without a proxy client'));
38599
+ return
38600
+ }
38601
+
37334
38602
  let requestedPath = opts.host;
37335
38603
  if (!opts.port) {
37336
38604
  requestedPath += `:${defaultProtocolPort(opts.protocol)}`;
@@ -37418,17 +38686,19 @@ function requireProxyAgent () {
37418
38686
  }
37419
38687
 
37420
38688
  [kClose] () {
37421
- return Promise.all([
37422
- this[kAgent].close(),
37423
- this[kClient].close()
37424
- ])
38689
+ const promises = [this[kAgent].close()];
38690
+ if (this[kClient]) {
38691
+ promises.push(this[kClient].close());
38692
+ }
38693
+ return Promise.all(promises)
37425
38694
  }
37426
38695
 
37427
38696
  [kDestroy] () {
37428
- return Promise.all([
37429
- this[kAgent].destroy(),
37430
- this[kClient].destroy()
37431
- ])
38697
+ const promises = [this[kAgent].destroy()];
38698
+ if (this[kClient]) {
38699
+ promises.push(this[kClient].destroy());
38700
+ }
38701
+ return Promise.all(promises)
37432
38702
  }
37433
38703
  }
37434
38704
 
@@ -38094,7 +39364,7 @@ function requireH2cClient () {
38094
39364
  )
38095
39365
  }
38096
39366
 
38097
- const { connect, maxConcurrentStreams, pipelining, ...opts } =
39367
+ const { maxConcurrentStreams, pipelining, ...opts } =
38098
39368
  clientOpts ?? {};
38099
39369
  let defaultMaxConcurrentStreams = 100;
38100
39370
  let defaultPipelining = 100;
@@ -38730,7 +40000,7 @@ function requireApiRequest () {
38730
40000
  hasRequiredApiRequest = 1;
38731
40001
 
38732
40002
  const assert = require$$0$7;
38733
- const { AsyncResource } = require$$1$5;
40003
+ const { AsyncResource } = require$$1$6;
38734
40004
  const { Readable } = requireReadable();
38735
40005
  const { InvalidArgumentError, RequestAbortedError } = requireErrors();
38736
40006
  const util = requireUtil$5();
@@ -38750,7 +40020,7 @@ function requireApiRequest () {
38750
40020
  throw new InvalidArgumentError('invalid callback')
38751
40021
  }
38752
40022
 
38753
- if (highWaterMark && (typeof highWaterMark !== 'number' || highWaterMark < 0)) {
40023
+ if (highWaterMark != null && (!Number.isFinite(highWaterMark) || highWaterMark < 0)) {
38754
40024
  throw new InvalidArgumentError('invalid highWaterMark')
38755
40025
  }
38756
40026
 
@@ -39020,7 +40290,7 @@ function requireApiStream () {
39020
40290
 
39021
40291
  const assert = require$$0$7;
39022
40292
  const { finished } = require$$0$8;
39023
- const { AsyncResource } = require$$1$5;
40293
+ const { AsyncResource } = require$$1$6;
39024
40294
  const { InvalidArgumentError, InvalidReturnValueError } = requireErrors();
39025
40295
  const util = requireUtil$5();
39026
40296
  const { addSignal, removeSignal } = requireAbortSignal();
@@ -39241,7 +40511,7 @@ function requireApiPipeline () {
39241
40511
  PassThrough
39242
40512
  } = require$$0$8;
39243
40513
  const assert = require$$0$7;
39244
- const { AsyncResource } = require$$1$5;
40514
+ const { AsyncResource } = require$$1$6;
39245
40515
  const {
39246
40516
  InvalidArgumentError,
39247
40517
  InvalidReturnValueError,
@@ -39496,7 +40766,7 @@ function requireApiUpgrade () {
39496
40766
  hasRequiredApiUpgrade = 1;
39497
40767
 
39498
40768
  const { InvalidArgumentError, SocketError } = requireErrors();
39499
- const { AsyncResource } = require$$1$5;
40769
+ const { AsyncResource } = require$$1$6;
39500
40770
  const assert = require$$0$7;
39501
40771
  const util = requireUtil$5();
39502
40772
  const { kHTTP2Stream } = requireSymbols();
@@ -39615,7 +40885,7 @@ function requireApiConnect () {
39615
40885
  hasRequiredApiConnect = 1;
39616
40886
 
39617
40887
  const assert = require$$0$7;
39618
- const { AsyncResource } = require$$1$5;
40888
+ const { AsyncResource } = require$$1$6;
39619
40889
  const { InvalidArgumentError, SocketError } = requireErrors();
39620
40890
  const util = requireUtil$5();
39621
40891
  const { addSignal, removeSignal } = requireAbortSignal();
@@ -39810,7 +41080,8 @@ function requireMockSymbols () {
39810
41080
  kMockAgentAddCallHistoryLog: Symbol('mock agent add call history log'),
39811
41081
  kMockAgentIsCallHistoryEnabled: Symbol('mock agent is call history enabled'),
39812
41082
  kMockAgentAcceptsNonStandardSearchParameters: Symbol('mock agent accepts non standard search parameters'),
39813
- kMockCallHistoryAddLog: Symbol('mock call history add log')
41083
+ kMockCallHistoryAddLog: Symbol('mock call history add log'),
41084
+ kTotalDispatchCount: Symbol('total dispatch count')
39814
41085
  };
39815
41086
  return mockSymbols;
39816
41087
  }
@@ -39828,7 +41099,8 @@ function requireMockUtils () {
39828
41099
  kMockAgent,
39829
41100
  kOriginalDispatch,
39830
41101
  kOrigin,
39831
- kGetNetConnect
41102
+ kGetNetConnect,
41103
+ kTotalDispatchCount
39832
41104
  } = requireMockSymbols();
39833
41105
  const { serializePathWithQuery } = requireUtil$5();
39834
41106
  const { STATUS_CODES } = require$$2$3;
@@ -40028,6 +41300,8 @@ function requireMockUtils () {
40028
41300
  const replyData = typeof data === 'function' ? { callback: data } : { ...data };
40029
41301
  const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } };
40030
41302
  mockDispatches.push(newMockDispatch);
41303
+ // Track total number of intercepts ever registered for better error messages
41304
+ mockDispatches[kTotalDispatchCount] = (mockDispatches[kTotalDispatchCount] || 0) + 1;
40031
41305
  return newMockDispatch
40032
41306
  }
40033
41307
 
@@ -40223,13 +41497,16 @@ function requireMockUtils () {
40223
41497
  } catch (error) {
40224
41498
  if (error.code === 'UND_MOCK_ERR_MOCK_NOT_MATCHED') {
40225
41499
  const netConnect = agent[kGetNetConnect]();
41500
+ const totalInterceptsCount = this[kDispatches][kTotalDispatchCount] || this[kDispatches].length;
41501
+ const pendingInterceptsCount = this[kDispatches].filter(({ consumed }) => !consumed).length;
41502
+ const interceptsMessage = `, ${pendingInterceptsCount} interceptor(s) remaining out of ${totalInterceptsCount} defined`;
40226
41503
  if (netConnect === false) {
40227
- throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`)
41504
+ throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)${interceptsMessage}`)
40228
41505
  }
40229
41506
  if (checkNetConnect(netConnect, origin)) {
40230
41507
  originalDispatch.call(this, opts, handler);
40231
41508
  } else {
40232
- throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`)
41509
+ throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)${interceptsMessage}`)
40233
41510
  }
40234
41511
  } else {
40235
41512
  throw error
@@ -40608,14 +41885,14 @@ function requireMockCallHistory () {
40608
41885
  const { kMockCallHistoryAddLog } = requireMockSymbols();
40609
41886
  const { InvalidArgumentError } = requireErrors();
40610
41887
 
40611
- function handleFilterCallsWithOptions (criteria, options, handler, store) {
41888
+ function handleFilterCallsWithOptions (criteria, options, handler, store, allLogs) {
40612
41889
  switch (options.operator) {
40613
41890
  case 'OR':
40614
- store.push(...handler(criteria));
41891
+ store.push(...handler(criteria, allLogs));
40615
41892
 
40616
41893
  return store
40617
41894
  case 'AND':
40618
- return handler.call({ logs: store }, criteria)
41895
+ return handler(criteria, store)
40619
41896
  default:
40620
41897
  // guard -- should never happens because buildAndValidateFilterCallsOptions is called before
40621
41898
  throw new InvalidArgumentError('options.operator must to be a case insensitive string equal to \'OR\' or \'AND\'')
@@ -40640,14 +41917,14 @@ function requireMockCallHistory () {
40640
41917
  }
40641
41918
 
40642
41919
  function makeFilterCalls (parameterName) {
40643
- return (parameterValue) => {
41920
+ return (parameterValue, logs) => {
40644
41921
  if (typeof parameterValue === 'string' || parameterValue == null) {
40645
- return this.logs.filter((log) => {
41922
+ return logs.filter((log) => {
40646
41923
  return log[parameterName] === parameterValue
40647
41924
  })
40648
41925
  }
40649
41926
  if (parameterValue instanceof RegExp) {
40650
- return this.logs.filter((log) => {
41927
+ return logs.filter((log) => {
40651
41928
  return parameterValue.test(log[parameterName])
40652
41929
  })
40653
41930
  }
@@ -40780,30 +42057,30 @@ function requireMockCallHistory () {
40780
42057
 
40781
42058
  const finalOptions = { operator: 'OR', ...buildAndValidateFilterCallsOptions(options) };
40782
42059
 
40783
- let maybeDuplicatedLogsFiltered = [];
42060
+ let maybeDuplicatedLogsFiltered = finalOptions.operator === 'AND' ? this.logs : [];
40784
42061
  if ('protocol' in criteria) {
40785
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered);
42062
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered, this.logs);
40786
42063
  }
40787
42064
  if ('host' in criteria) {
40788
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered);
42065
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered, this.logs);
40789
42066
  }
40790
42067
  if ('port' in criteria) {
40791
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered);
42068
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered, this.logs);
40792
42069
  }
40793
42070
  if ('origin' in criteria) {
40794
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered);
42071
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered, this.logs);
40795
42072
  }
40796
42073
  if ('path' in criteria) {
40797
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered);
42074
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered, this.logs);
40798
42075
  }
40799
42076
  if ('hash' in criteria) {
40800
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered);
42077
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered, this.logs);
40801
42078
  }
40802
42079
  if ('fullUrl' in criteria) {
40803
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered);
42080
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered, this.logs);
40804
42081
  }
40805
42082
  if ('method' in criteria) {
40806
- maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered);
42083
+ maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered, this.logs);
40807
42084
  }
40808
42085
 
40809
42086
  const uniqLogsFiltered = [...new Set(maybeDuplicatedLogsFiltered)];
@@ -40938,7 +42215,7 @@ function requirePendingInterceptorsFormatter () {
40938
42215
  hasRequiredPendingInterceptorsFormatter = 1;
40939
42216
 
40940
42217
  const { Transform } = require$$0$8;
40941
- const { Console } = require$$1$6;
42218
+ const { Console } = require$$1$7;
40942
42219
 
40943
42220
  const PERSISTENT = process.versions.icu ? '✅' : 'Y ';
40944
42221
  const NOT_PERSISTENT = process.versions.icu ? '❌' : 'N ';
@@ -42353,7 +43630,8 @@ function requireGlobal () {
42353
43630
 
42354
43631
  // We include a version number for the Dispatcher API. In case of breaking changes,
42355
43632
  // this version number must be increased to avoid conflicts.
42356
- const globalDispatcher = Symbol.for('undici.globalDispatcher.1');
43633
+ const globalDispatcher = Symbol.for('undici.globalDispatcher.2');
43634
+ const legacyGlobalDispatcher = Symbol.for('undici.globalDispatcher.1');
42357
43635
  const { InvalidArgumentError } = requireErrors();
42358
43636
  const Agent = requireAgent();
42359
43637
 
@@ -42365,16 +43643,24 @@ function requireGlobal () {
42365
43643
  if (!agent || typeof agent.dispatch !== 'function') {
42366
43644
  throw new InvalidArgumentError('Argument agent must implement Agent')
42367
43645
  }
43646
+
42368
43647
  Object.defineProperty(globalThis, globalDispatcher, {
42369
43648
  value: agent,
42370
43649
  writable: true,
42371
43650
  enumerable: false,
42372
43651
  configurable: false
42373
43652
  });
43653
+
43654
+ Object.defineProperty(globalThis, legacyGlobalDispatcher, {
43655
+ value: agent,
43656
+ writable: true,
43657
+ enumerable: false,
43658
+ configurable: false
43659
+ });
42374
43660
  }
42375
43661
 
42376
43662
  function getGlobalDispatcher () {
42377
- return globalThis[globalDispatcher]
43663
+ return globalThis[legacyGlobalDispatcher]
42378
43664
  }
42379
43665
 
42380
43666
  // These are the globals that can be installed by undici.install().
@@ -42688,7 +43974,8 @@ function requireRedirectHandler () {
42688
43974
  }
42689
43975
  }
42690
43976
  } else if (headers && typeof headers === 'object') {
42691
- const entries = typeof headers[Symbol.iterator] === 'function' ? headers : Object.entries(headers);
43977
+ const entries = util.hasSafeIterator(headers) ? headers : Object.entries(headers);
43978
+
42692
43979
  for (const [key, value] of entries) {
42693
43980
  if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {
42694
43981
  ret.push(key, value);
@@ -42989,12 +44276,111 @@ var hasRequiredDns;
42989
44276
  function requireDns () {
42990
44277
  if (hasRequiredDns) return dns;
42991
44278
  hasRequiredDns = 1;
42992
- const { isIP } = require$$0$9;
42993
- const { lookup } = require$$1$7;
44279
+ const { isIP } = require$$1$4;
44280
+ const { lookup } = require$$1$8;
42994
44281
  const DecoratorHandler = requireDecoratorHandler();
42995
44282
  const { InvalidArgumentError, InformationalError } = requireErrors();
42996
44283
  const maxInt = Math.pow(2, 31) - 1;
42997
44284
 
44285
+ function hasSafeIterator (headers) {
44286
+ const prototype = Object.getPrototypeOf(headers);
44287
+ const ownIterator = Object.prototype.hasOwnProperty.call(headers, Symbol.iterator);
44288
+ return ownIterator || (prototype != null && prototype !== Object.prototype && typeof headers[Symbol.iterator] === 'function')
44289
+ }
44290
+
44291
+ function isHostHeader (key) {
44292
+ return typeof key === 'string' && key.toLowerCase() === 'host'
44293
+ }
44294
+
44295
+ function normalizeHeaders (headers) {
44296
+ if (headers == null) {
44297
+ return null
44298
+ }
44299
+
44300
+ if (Array.isArray(headers)) {
44301
+ if (headers.length === 0 || !Array.isArray(headers[0])) {
44302
+ return headers
44303
+ }
44304
+
44305
+ const normalized = [];
44306
+ for (const header of headers) {
44307
+ if (Array.isArray(header) && header.length === 2) {
44308
+ normalized.push(header[0], header[1]);
44309
+ } else {
44310
+ normalized.push(header);
44311
+ }
44312
+ }
44313
+
44314
+ return normalized
44315
+ }
44316
+
44317
+ if (typeof headers === 'object' && hasSafeIterator(headers)) {
44318
+ const normalized = [];
44319
+ for (const header of headers) {
44320
+ if (Array.isArray(header) && header.length === 2) {
44321
+ normalized.push(header[0], header[1]);
44322
+ } else {
44323
+ normalized.push(header);
44324
+ }
44325
+ }
44326
+
44327
+ return normalized
44328
+ }
44329
+
44330
+ return headers
44331
+ }
44332
+
44333
+ function hasHostHeader (headers) {
44334
+ if (headers == null) {
44335
+ return false
44336
+ }
44337
+
44338
+ if (Array.isArray(headers)) {
44339
+ if (headers.length === 0) {
44340
+ return false
44341
+ }
44342
+
44343
+ for (let i = 0; i < headers.length; i += 2) {
44344
+ if (isHostHeader(headers[i])) {
44345
+ return true
44346
+ }
44347
+ }
44348
+
44349
+ return false
44350
+ }
44351
+
44352
+ if (typeof headers === 'object') {
44353
+ for (const key in headers) {
44354
+ if (isHostHeader(key)) {
44355
+ return true
44356
+ }
44357
+ }
44358
+ }
44359
+
44360
+ return false
44361
+ }
44362
+
44363
+ function withHostHeader (host, headers) {
44364
+ const normalizedHeaders = normalizeHeaders(headers);
44365
+
44366
+ if (hasHostHeader(normalizedHeaders)) {
44367
+ return normalizedHeaders
44368
+ }
44369
+
44370
+ if (Array.isArray(normalizedHeaders)) {
44371
+ return ['host', host, ...normalizedHeaders]
44372
+ }
44373
+
44374
+ if (normalizedHeaders && typeof normalizedHeaders === 'object') {
44375
+ return {
44376
+ host,
44377
+ ...normalizedHeaders
44378
+ }
44379
+ }
44380
+
44381
+ return { host }
44382
+ }
44383
+
42998
44384
  class DNSStorage {
42999
44385
  #maxItems = 0
43000
44386
  #records = new Map()
@@ -43323,8 +44709,9 @@ function requireDns () {
43323
44709
  const dispatchOpts = {
43324
44710
  ...this.#opts,
43325
44711
  origin: `${this.#origin.protocol}//${
43326
- ip.family === 6 ? `[${ip.address}]` : ip.address
43327
- }${port}`
44712
+ ip.family === 6 ? `[${ip.address}]` : ip.address
44713
+ }${port}`,
44714
+ headers: withHostHeader(this.#origin.host, this.#opts.headers)
43328
44715
  };
43329
44716
  this.#dispatch(dispatchOpts, this);
43330
44717
  return
@@ -43443,10 +44830,7 @@ function requireDns () {
43443
44830
  ...origDispatchOpts,
43444
44831
  servername: origin.hostname, // For SNI on TLS
43445
44832
  origin: newOrigin.origin,
43446
- headers: {
43447
- host: origin.host,
43448
- ...origDispatchOpts.headers
43449
- }
44833
+ headers: withHostHeader(origin.host, origDispatchOpts.headers)
43450
44834
  };
43451
44835
 
43452
44836
  dispatch(
@@ -43474,7 +44858,8 @@ function requireCache$2 () {
43474
44858
 
43475
44859
  const {
43476
44860
  safeHTTPMethods,
43477
- pathHasQueryOrFragment
44861
+ pathHasQueryOrFragment,
44862
+ hasSafeIterator
43478
44863
  } = requireUtil$5();
43479
44864
 
43480
44865
  const { serializePathWithQuery } = requireUtil$5();
@@ -43489,7 +44874,7 @@ function requireCache$2 () {
43489
44874
 
43490
44875
  let fullPath = opts.path || '/';
43491
44876
 
43492
- if (opts.query && !pathHasQueryOrFragment(opts.path)) {
44877
+ if (opts.query && !pathHasQueryOrFragment(fullPath)) {
43493
44878
  fullPath = serializePathWithQuery(fullPath, opts.query);
43494
44879
  }
43495
44880
 
@@ -43509,23 +44894,24 @@ function requireCache$2 () {
43509
44894
  let headers;
43510
44895
  if (opts.headers == null) {
43511
44896
  headers = {};
43512
- } else if (typeof opts.headers[Symbol.iterator] === 'function') {
43513
- headers = {};
43514
- for (const x of opts.headers) {
43515
- if (!Array.isArray(x)) {
43516
- throw new Error('opts.headers is not a valid header map')
43517
- }
43518
- const [key, val] = x;
43519
- if (typeof key !== 'string' || typeof val !== 'string') {
43520
- throw new Error('opts.headers is not a valid header map')
43521
- }
43522
- headers[key.toLowerCase()] = val;
43523
- }
43524
44897
  } else if (typeof opts.headers === 'object') {
43525
44898
  headers = {};
43526
44899
 
43527
- for (const key of Object.keys(opts.headers)) {
43528
- headers[key.toLowerCase()] = opts.headers[key];
44900
+ if (hasSafeIterator(opts.headers)) {
44901
+ for (const x of opts.headers) {
44902
+ if (!Array.isArray(x)) {
44903
+ throw new Error('opts.headers is not a valid header map')
44904
+ }
44905
+ const [key, val] = x;
44906
+ if (typeof key !== 'string' || typeof val !== 'string') {
44907
+ throw new Error('opts.headers is not a valid header map')
44908
+ }
44909
+ headers[key.toLowerCase()] = val;
44910
+ }
44911
+ } else {
44912
+ for (const key of Object.keys(opts.headers)) {
44913
+ headers[key.toLowerCase()] = opts.headers[key];
44914
+ }
43529
44915
  }
43530
44916
  } else {
43531
44917
  throw new Error('opts.headers is not an object')
@@ -43698,6 +45084,10 @@ function requireCache$2 () {
43698
45084
  headers[headers.length - 1] = lastHeader;
43699
45085
  }
43700
45086
 
45087
+ for (let j = 0; j < headers.length; j++) {
45088
+ headers[j] = headers[j].trim();
45089
+ }
45090
+
43701
45091
  if (key in output) {
43702
45092
  output[key] = output[key].concat(headers);
43703
45093
  } else {
@@ -43706,10 +45096,12 @@ function requireCache$2 () {
43706
45096
  }
43707
45097
  } else {
43708
45098
  // Something like `no-cache="some-header"`
45099
+ const fieldName = value.trim();
45100
+
43709
45101
  if (key in output) {
43710
- output[key] = output[key].concat(value);
45102
+ output[key] = output[key].concat(fieldName);
43711
45103
  } else {
43712
- output[key] = [value];
45104
+ output[key] = [fieldName];
43713
45105
  }
43714
45106
  }
43715
45107
 
@@ -43844,9 +45236,11 @@ function requireCache$2 () {
43844
45236
  * @returns {string}
43845
45237
  */
43846
45238
  function makeDeduplicationKey (cacheKey, excludeHeaders) {
43847
- // Create a deterministic string key from the cache key
43848
- // Include origin, method, path, and sorted headers
43849
- let key = `${cacheKey.origin}:${cacheKey.method}:${cacheKey.path}`;
45239
+ // Use JSON.stringify to produce a collision-resistant key.
45240
+ // Previous format used `:` and `=` delimiters without escaping, which
45241
+ // allowed different header sets to produce identical keys (e.g.
45242
+ // {a:"x:b=y"} vs {a:"x", b:"y"}). See: https://github.com/nodejs/undici/issues/5012
45243
+ const headers = {};
43850
45244
 
43851
45245
  if (cacheKey.headers) {
43852
45246
  const sortedHeaders = Object.keys(cacheKey.headers).sort();
@@ -43855,12 +45249,11 @@ function requireCache$2 () {
43855
45249
  if (excludeHeaders?.has(header.toLowerCase())) {
43856
45250
  continue
43857
45251
  }
43858
- const value = cacheKey.headers[header];
43859
- key += `:${header}=${Array.isArray(value) ? value.join(',') : value}`;
45252
+ headers[header] = cacheKey.headers[header];
43860
45253
  }
43861
45254
  }
43862
45255
 
43863
- return key
45256
+ return JSON.stringify([cacheKey.origin, cacheKey.method, cacheKey.path, headers])
43864
45257
  }
43865
45258
 
43866
45259
  cache$2 = {
@@ -44681,7 +46074,7 @@ function requireCacheHandler () {
44681
46074
  }
44682
46075
 
44683
46076
  const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {};
44684
- if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives)) {
46077
+ if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives, this.#cacheKey.headers)) {
44685
46078
  return downstreamOnHeaders()
44686
46079
  }
44687
46080
 
@@ -44886,8 +46279,9 @@ function requireCacheHandler () {
44886
46279
  * @param {number} statusCode
44887
46280
  * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders
44888
46281
  * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives
46282
+ * @param {import('../../types/header.d.ts').IncomingHttpHeaders} [reqHeaders]
44889
46283
  */
44890
- function canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives) {
46284
+ function canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives, reqHeaders) {
44891
46285
  // Status code must be final and understood.
44892
46286
  if (statusCode < 200 || NOT_UNDERSTOOD_STATUS_CODES.includes(statusCode)) {
44893
46287
  return false
@@ -44918,8 +46312,16 @@ function requireCacheHandler () {
44918
46312
  }
44919
46313
 
44920
46314
  // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen
44921
- if (resHeaders.authorization) {
44922
- if (!cacheControlDirectives.public || typeof resHeaders.authorization !== 'string') {
46315
+ if (reqHeaders?.authorization) {
46316
+ if (
46317
+ !cacheControlDirectives.public &&
46318
+ !cacheControlDirectives['s-maxage'] &&
46319
+ !cacheControlDirectives['must-revalidate']
46320
+ ) {
46321
+ return false
46322
+ }
46323
+
46324
+ if (typeof reqHeaders.authorization !== 'string') {
44923
46325
  return false
44924
46326
  }
44925
46327
 
@@ -45039,10 +46441,18 @@ function requireCacheHandler () {
45039
46441
  staleIfError = staleAt + (cacheControlDirectives['stale-if-error'] * 1000);
45040
46442
  }
45041
46443
 
45042
- if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {
46444
+ if (cacheControlDirectives.immutable && staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {
45043
46445
  immutable = now + 31536000000;
45044
46446
  }
45045
46447
 
46448
+ // When no stale directives or immutable flag, add a revalidation buffer
46449
+ // equal to the freshness lifetime so the entry survives past staleAt long
46450
+ // enough to be revalidated instead of silently disappearing.
46451
+ if (staleWhileRevalidate === -Infinity && staleIfError === -Infinity && immutable === -Infinity) {
46452
+ const freshnessLifetime = staleAt - now;
46453
+ return staleAt + freshnessLifetime
46454
+ }
46455
+
45046
46456
  return Math.max(staleAt, staleWhileRevalidate, staleIfError, immutable)
45047
46457
  }
45048
46458
 
@@ -46259,12 +47669,26 @@ function requireDeduplicationHandler () {
46259
47669
  if (hasRequiredDeduplicationHandler) return deduplicationHandler;
46260
47670
  hasRequiredDeduplicationHandler = 1;
46261
47671
 
47672
+ const { RequestAbortedError } = requireErrors();
47673
+
46262
47674
  /**
46263
47675
  * @typedef {import('../../types/dispatcher.d.ts').default.DispatchHandler} DispatchHandler
46264
47676
  */
46265
47677
 
47678
+ const DEFAULT_MAX_BUFFER_SIZE = 5 * 1024 * 1024;
47679
+
47680
+ /**
47681
+ * @typedef {Object} WaitingHandler
47682
+ * @property {DispatchHandler} handler
47683
+ * @property {import('../../types/dispatcher.d.ts').default.DispatchController} controller
47684
+ * @property {Buffer[]} bufferedChunks
47685
+ * @property {number} bufferedBytes
47686
+ * @property {object | null} pendingTrailers
47687
+ * @property {boolean} done
47688
+ */
47689
+
46266
47690
  /**
46267
- * Handler that buffers response data and notifies multiple waiting handlers.
47691
+ * Handler that forwards response events to multiple waiting handlers.
46268
47692
  * Used for request deduplication.
46269
47693
  *
46270
47694
  * @implements {DispatchHandler}
@@ -46276,14 +47700,14 @@ function requireDeduplicationHandler () {
46276
47700
  #primaryHandler
46277
47701
 
46278
47702
  /**
46279
- * @type {DispatchHandler[]}
47703
+ * @type {WaitingHandler[]}
46280
47704
  */
46281
47705
  #waitingHandlers = []
46282
47706
 
46283
47707
  /**
46284
- * @type {Buffer[]}
47708
+ * @type {number}
46285
47709
  */
46286
- #chunks = []
47710
+ #maxBufferSize = DEFAULT_MAX_BUFFER_SIZE
46287
47711
 
46288
47712
  /**
46289
47713
  * @type {number}
@@ -46305,6 +47729,21 @@ function requireDeduplicationHandler () {
46305
47729
  */
46306
47730
  #aborted = false
46307
47731
 
47732
+ /**
47733
+ * @type {boolean}
47734
+ */
47735
+ #responseStarted = false
47736
+
47737
+ /**
47738
+ * @type {boolean}
47739
+ */
47740
+ #responseDataStarted = false
47741
+
47742
+ /**
47743
+ * @type {boolean}
47744
+ */
47745
+ #completed = false
47746
+
46308
47747
  /**
46309
47748
  * @type {import('../../types/dispatcher.d.ts').default.DispatchController | null}
46310
47749
  */
@@ -46318,22 +47757,60 @@ function requireDeduplicationHandler () {
46318
47757
  /**
46319
47758
  * @param {DispatchHandler} primaryHandler The primary handler
46320
47759
  * @param {() => void} onComplete Callback when request completes
47760
+ * @param {number} [maxBufferSize] Maximum paused buffer size per waiting handler
46321
47761
  */
46322
- constructor (primaryHandler, onComplete) {
47762
+ constructor (primaryHandler, onComplete, maxBufferSize = DEFAULT_MAX_BUFFER_SIZE) {
46323
47763
  this.#primaryHandler = primaryHandler;
46324
47764
  this.#onComplete = onComplete;
47765
+ this.#maxBufferSize = maxBufferSize;
46325
47766
  }
46326
47767
 
46327
47768
  /**
46328
- * Add a waiting handler that will receive the buffered response
47769
+ * Add a waiting handler that will receive response events.
47770
+ * Returns false if deduplication can no longer safely attach this handler.
47771
+ *
46329
47772
  * @param {DispatchHandler} handler
47773
+ * @returns {boolean}
46330
47774
  */
46331
47775
  addWaitingHandler (handler) {
46332
- this.#waitingHandlers.push(handler);
47776
+ if (this.#completed || this.#responseDataStarted) {
47777
+ return false
47778
+ }
47779
+
47780
+ const waitingHandler = this.#createWaitingHandler(handler);
47781
+ const waitingController = waitingHandler.controller;
47782
+
47783
+ try {
47784
+ handler.onRequestStart?.(waitingController, null);
47785
+
47786
+ if (waitingController.aborted) {
47787
+ waitingHandler.done = true;
47788
+ return true
47789
+ }
47790
+
47791
+ if (this.#responseStarted) {
47792
+ handler.onResponseStart?.(
47793
+ waitingController,
47794
+ this.#statusCode,
47795
+ this.#headers,
47796
+ this.#statusMessage
47797
+ );
47798
+ }
47799
+ } catch {
47800
+ // Ignore errors from waiting handlers
47801
+ waitingHandler.done = true;
47802
+ return true
47803
+ }
47804
+
47805
+ if (!waitingController.aborted) {
47806
+ this.#waitingHandlers.push(waitingHandler);
47807
+ }
47808
+
47809
+ return true
46333
47810
  }
46334
47811
 
46335
47812
  /**
46336
- * @param {() => void} abort
47813
+ * @param {import('../../types/dispatcher.d.ts').default.DispatchController} controller
46337
47814
  * @param {any} context
46338
47815
  */
46339
47816
  onRequestStart (controller, context) {
@@ -46358,10 +47835,38 @@ function requireDeduplicationHandler () {
46358
47835
  * @param {string} statusMessage
46359
47836
  */
46360
47837
  onResponseStart (controller, statusCode, headers, statusMessage) {
47838
+ this.#responseStarted = true;
46361
47839
  this.#statusCode = statusCode;
46362
47840
  this.#headers = headers;
46363
47841
  this.#statusMessage = statusMessage;
47842
+
46364
47843
  this.#primaryHandler.onResponseStart?.(controller, statusCode, headers, statusMessage);
47844
+
47845
+ for (const waitingHandler of this.#waitingHandlers) {
47846
+ const { handler, controller: waitingController } = waitingHandler;
47847
+
47848
+ if (waitingHandler.done || waitingController.aborted) {
47849
+ waitingHandler.done = true;
47850
+ continue
47851
+ }
47852
+
47853
+ try {
47854
+ handler.onResponseStart?.(
47855
+ waitingController,
47856
+ statusCode,
47857
+ headers,
47858
+ statusMessage
47859
+ );
47860
+ } catch {
47861
+ // Ignore errors from waiting handlers
47862
+ }
47863
+
47864
+ if (waitingController.aborted) {
47865
+ waitingHandler.done = true;
47866
+ }
47867
+ }
47868
+
47869
+ this.#pruneDoneWaitingHandlers();
46365
47870
  }
46366
47871
 
46367
47872
  /**
@@ -46369,9 +47874,41 @@ function requireDeduplicationHandler () {
46369
47874
  * @param {Buffer} chunk
46370
47875
  */
46371
47876
  onResponseData (controller, chunk) {
46372
- // Buffer the chunk for waiting handlers
46373
- this.#chunks.push(Buffer.from(chunk));
47877
+ if (this.#aborted || this.#completed) {
47878
+ return
47879
+ }
47880
+
47881
+ this.#responseDataStarted = true;
47882
+
46374
47883
  this.#primaryHandler.onResponseData?.(controller, chunk);
47884
+
47885
+ for (const waitingHandler of this.#waitingHandlers) {
47886
+ const { handler, controller: waitingController } = waitingHandler;
47887
+
47888
+ if (waitingHandler.done || waitingController.aborted) {
47889
+ waitingHandler.done = true;
47890
+ continue
47891
+ }
47892
+
47893
+ if (waitingController.paused) {
47894
+ this.#bufferWaitingChunk(waitingHandler, chunk);
47895
+ continue
47896
+ }
47897
+
47898
+ try {
47899
+ handler.onResponseData?.(waitingController, chunk);
47900
+ } catch {
47901
+ // Ignore errors from waiting handlers
47902
+ }
47903
+
47904
+ if (waitingController.aborted) {
47905
+ waitingHandler.done = true;
47906
+ waitingHandler.bufferedChunks = [];
47907
+ waitingHandler.bufferedBytes = 0;
47908
+ }
47909
+ }
47910
+
47911
+ this.#pruneDoneWaitingHandlers();
46375
47912
  }
46376
47913
 
46377
47914
  /**
@@ -46379,8 +47916,41 @@ function requireDeduplicationHandler () {
46379
47916
  * @param {object} trailers
46380
47917
  */
46381
47918
  onResponseEnd (controller, trailers) {
47919
+ if (this.#aborted || this.#completed) {
47920
+ return
47921
+ }
47922
+
47923
+ this.#completed = true;
46382
47924
  this.#primaryHandler.onResponseEnd?.(controller, trailers);
46383
- this.#notifyWaitingHandlers();
47925
+
47926
+ for (const waitingHandler of this.#waitingHandlers) {
47927
+ if (waitingHandler.done || waitingHandler.controller.aborted) {
47928
+ waitingHandler.done = true;
47929
+ continue
47930
+ }
47931
+
47932
+ this.#flushWaitingHandler(waitingHandler);
47933
+
47934
+ if (waitingHandler.done || waitingHandler.controller.aborted) {
47935
+ waitingHandler.done = true;
47936
+ continue
47937
+ }
47938
+
47939
+ if (waitingHandler.controller.paused && waitingHandler.bufferedChunks.length > 0) {
47940
+ waitingHandler.pendingTrailers = trailers;
47941
+ continue
47942
+ }
47943
+
47944
+ try {
47945
+ waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, trailers);
47946
+ } catch {
47947
+ // Ignore errors from waiting handlers
47948
+ }
47949
+
47950
+ waitingHandler.done = true;
47951
+ }
47952
+
47953
+ this.#pruneDoneWaitingHandlers();
46384
47954
  this.#onComplete?.();
46385
47955
  }
46386
47956
 
@@ -46389,86 +47959,170 @@ function requireDeduplicationHandler () {
46389
47959
  * @param {Error} err
46390
47960
  */
46391
47961
  onResponseError (controller, err) {
47962
+ if (this.#completed) {
47963
+ return
47964
+ }
47965
+
46392
47966
  this.#aborted = true;
47967
+ this.#completed = true;
47968
+
46393
47969
  this.#primaryHandler.onResponseError?.(controller, err);
46394
- this.#notifyWaitingHandlersError(err);
47970
+
47971
+ for (const waitingHandler of this.#waitingHandlers) {
47972
+ this.#errorWaitingHandler(waitingHandler, err);
47973
+ }
47974
+
47975
+ this.#waitingHandlers = [];
46395
47976
  this.#onComplete?.();
46396
47977
  }
46397
47978
 
46398
47979
  /**
46399
- * Notify all waiting handlers with the buffered response
47980
+ * @param {DispatchHandler} handler
47981
+ * @returns {WaitingHandler}
46400
47982
  */
46401
- #notifyWaitingHandlers () {
46402
- const body = Buffer.concat(this.#chunks);
46403
-
46404
- for (const handler of this.#waitingHandlers) {
46405
- // Create a simple controller for each waiting handler
46406
- const waitingController = {
46407
- resume () {},
46408
- pause () {},
46409
- get paused () { return false },
46410
- get aborted () { return false },
46411
- get reason () { return null },
46412
- abort () {}
46413
- };
47983
+ #createWaitingHandler (handler) {
47984
+ /** @type {WaitingHandler} */
47985
+ const waitingHandler = {
47986
+ handler,
47987
+ controller: null,
47988
+ bufferedChunks: [],
47989
+ bufferedBytes: 0,
47990
+ pendingTrailers: null,
47991
+ done: false
47992
+ };
46414
47993
 
46415
- try {
46416
- handler.onRequestStart?.(waitingController, null);
47994
+ const state = {
47995
+ aborted: false,
47996
+ paused: false,
47997
+ reason: null
47998
+ };
46417
47999
 
46418
- if (waitingController.aborted) {
46419
- continue
48000
+ waitingHandler.controller = {
48001
+ resume: () => {
48002
+ if (state.aborted) {
48003
+ return
46420
48004
  }
46421
48005
 
46422
- handler.onResponseStart?.(
46423
- waitingController,
46424
- this.#statusCode,
46425
- this.#headers,
46426
- this.#statusMessage
46427
- );
48006
+ state.paused = false;
48007
+ this.#flushWaitingHandler(waitingHandler);
46428
48008
 
46429
- if (waitingController.aborted) {
46430
- continue
46431
- }
48009
+ if (
48010
+ this.#completed &&
48011
+ waitingHandler.pendingTrailers &&
48012
+ waitingHandler.bufferedChunks.length === 0 &&
48013
+ !state.paused &&
48014
+ !state.aborted
48015
+ ) {
48016
+ try {
48017
+ waitingHandler.handler.onResponseEnd?.(waitingHandler.controller, waitingHandler.pendingTrailers);
48018
+ } catch {
48019
+ // Ignore errors from waiting handlers
48020
+ }
46432
48021
 
46433
- if (body.length > 0) {
46434
- handler.onResponseData?.(waitingController, body);
48022
+ waitingHandler.pendingTrailers = null;
48023
+ waitingHandler.done = true;
46435
48024
  }
46436
48025
 
46437
- handler.onResponseEnd?.(waitingController, {});
46438
- } catch {
46439
- // Ignore errors from waiting handlers
48026
+ this.#pruneDoneWaitingHandlers();
48027
+ },
48028
+ pause: () => {
48029
+ if (!state.aborted) {
48030
+ state.paused = true;
48031
+ }
48032
+ },
48033
+ get paused () { return state.paused },
48034
+ get aborted () { return state.aborted },
48035
+ get reason () { return state.reason },
48036
+ abort: (reason) => {
48037
+ state.aborted = true;
48038
+ state.reason = reason ?? null;
48039
+ waitingHandler.done = true;
48040
+ waitingHandler.pendingTrailers = null;
48041
+ waitingHandler.bufferedChunks = [];
48042
+ waitingHandler.bufferedBytes = 0;
46440
48043
  }
48044
+ };
48045
+
48046
+ return waitingHandler
48047
+ }
48048
+
48049
+ /**
48050
+ * @param {WaitingHandler} waitingHandler
48051
+ * @param {Buffer} chunk
48052
+ */
48053
+ #bufferWaitingChunk (waitingHandler, chunk) {
48054
+ if (waitingHandler.done || waitingHandler.controller.aborted) {
48055
+ waitingHandler.done = true;
48056
+ waitingHandler.bufferedChunks = [];
48057
+ waitingHandler.bufferedBytes = 0;
48058
+ return
46441
48059
  }
46442
48060
 
46443
- this.#waitingHandlers = [];
46444
- this.#chunks = [];
48061
+ const bufferedChunk = Buffer.from(chunk);
48062
+ waitingHandler.bufferedChunks.push(bufferedChunk);
48063
+ waitingHandler.bufferedBytes += bufferedChunk.length;
48064
+
48065
+ if (waitingHandler.bufferedBytes > this.#maxBufferSize) {
48066
+ const err = new RequestAbortedError(`Deduplicated waiting handler exceeded maxBufferSize (${this.#maxBufferSize} bytes) while paused`);
48067
+ this.#errorWaitingHandler(waitingHandler, err);
48068
+ }
46445
48069
  }
46446
48070
 
46447
48071
  /**
46448
- * Notify all waiting handlers of an error
46449
- * @param {Error} err
48072
+ * @param {WaitingHandler} waitingHandler
46450
48073
  */
46451
- #notifyWaitingHandlersError (err) {
46452
- for (const handler of this.#waitingHandlers) {
46453
- const waitingController = {
46454
- resume () {},
46455
- pause () {},
46456
- get paused () { return false },
46457
- get aborted () { return true },
46458
- get reason () { return err },
46459
- abort () {}
46460
- };
48074
+ #flushWaitingHandler (waitingHandler) {
48075
+ const { handler, controller } = waitingHandler;
48076
+
48077
+ while (
48078
+ !waitingHandler.done &&
48079
+ !controller.aborted &&
48080
+ !controller.paused &&
48081
+ waitingHandler.bufferedChunks.length > 0
48082
+ ) {
48083
+ const bufferedChunk = waitingHandler.bufferedChunks.shift();
48084
+ waitingHandler.bufferedBytes -= bufferedChunk.length;
46461
48085
 
46462
48086
  try {
46463
- handler.onRequestStart?.(waitingController, null);
46464
- handler.onResponseError?.(waitingController, err);
48087
+ handler.onResponseData?.(controller, bufferedChunk);
46465
48088
  } catch {
46466
48089
  // Ignore errors from waiting handlers
46467
48090
  }
48091
+
48092
+ if (controller.aborted) {
48093
+ waitingHandler.done = true;
48094
+ waitingHandler.pendingTrailers = null;
48095
+ waitingHandler.bufferedChunks = [];
48096
+ waitingHandler.bufferedBytes = 0;
48097
+ break
48098
+ }
46468
48099
  }
48100
+ }
46469
48101
 
46470
- this.#waitingHandlers = [];
46471
- this.#chunks = [];
48102
+ /**
48103
+ * @param {WaitingHandler} waitingHandler
48104
+ * @param {Error} err
48105
+ */
48106
+ #errorWaitingHandler (waitingHandler, err) {
48107
+ if (waitingHandler.done) {
48108
+ return
48109
+ }
48110
+
48111
+ waitingHandler.done = true;
48112
+ waitingHandler.pendingTrailers = null;
48113
+ waitingHandler.bufferedChunks = [];
48114
+ waitingHandler.bufferedBytes = 0;
48115
+
48116
+ try {
48117
+ waitingHandler.controller.abort(err);
48118
+ waitingHandler.handler.onResponseError?.(waitingHandler.controller, err);
48119
+ } catch {
48120
+ // Ignore errors from waiting handlers
48121
+ }
48122
+ }
48123
+
48124
+ #pruneDoneWaitingHandlers () {
48125
+ this.#waitingHandlers = this.#waitingHandlers.filter(waitingHandler => waitingHandler.done === false);
46472
48126
  }
46473
48127
  }
46474
48128
 
@@ -46483,7 +48137,7 @@ function requireDeduplicate () {
46483
48137
  if (hasRequiredDeduplicate) return deduplicate;
46484
48138
  hasRequiredDeduplicate = 1;
46485
48139
 
46486
- const diagnosticsChannel = require$$0$a;
48140
+ const diagnosticsChannel = require$$0$9;
46487
48141
  const util = requireUtil$5();
46488
48142
  const DeduplicationHandler = requireDeduplicationHandler();
46489
48143
  const { normalizeHeaders, makeCacheKey, makeDeduplicationKey } = requireCache$2();
@@ -46498,7 +48152,8 @@ function requireDeduplicate () {
46498
48152
  const {
46499
48153
  methods = ['GET'],
46500
48154
  skipHeaderNames = [],
46501
- excludeHeaderNames = []
48155
+ excludeHeaderNames = [],
48156
+ maxBufferSize = 5 * 1024 * 1024
46502
48157
  } = opts;
46503
48158
 
46504
48159
  if (typeof opts !== 'object' || opts === null) {
@@ -46523,6 +48178,10 @@ function requireDeduplicate () {
46523
48178
  throw new TypeError(`expected opts.excludeHeaderNames to be an array, got ${typeof excludeHeaderNames}`)
46524
48179
  }
46525
48180
 
48181
+ if (!Number.isFinite(maxBufferSize) || maxBufferSize <= 0) {
48182
+ throw new TypeError(`expected opts.maxBufferSize to be a positive finite number, got ${maxBufferSize}`)
48183
+ }
48184
+
46526
48185
  // Convert to lowercase Set for case-insensitive header matching
46527
48186
  const skipHeaderNamesSet = new Set(skipHeaderNames.map(name => name.toLowerCase()));
46528
48187
 
@@ -46561,9 +48220,13 @@ function requireDeduplicate () {
46561
48220
  // Check if there's already a pending request for this key
46562
48221
  const pendingHandler = pendingRequests.get(dedupeKey);
46563
48222
  if (pendingHandler) {
46564
- // Add this handler to the waiting list
46565
- pendingHandler.addWaitingHandler(handler);
46566
- return true
48223
+ // Add this handler to the waiting list when safe.
48224
+ // If body streaming has already started, this request must be sent independently.
48225
+ if (pendingHandler.addWaitingHandler(handler)) {
48226
+ return true
48227
+ }
48228
+
48229
+ return dispatch(opts, handler)
46567
48230
  }
46568
48231
 
46569
48232
  // Create a new deduplication handler
@@ -46575,7 +48238,8 @@ function requireDeduplicate () {
46575
48238
  if (pendingRequestsChannel.hasSubscribers) {
46576
48239
  pendingRequestsChannel.publish({ size: pendingRequests.size, key: dedupeKey, type: 'removed' });
46577
48240
  }
46578
- }
48241
+ },
48242
+ maxBufferSize
46579
48243
  );
46580
48244
 
46581
48245
  // Register the pending request
@@ -46708,7 +48372,7 @@ function requireSqliteCacheStore () {
46708
48372
  }
46709
48373
 
46710
48374
  if (!DatabaseSync) {
46711
- DatabaseSync = require$$1$4.DatabaseSync;
48375
+ DatabaseSync = require$$1$5.DatabaseSync;
46712
48376
  }
46713
48377
  this.#db = new DatabaseSync(opts?.location ?? ':memory:');
46714
48378
 
@@ -46814,7 +48478,7 @@ function requireSqliteCacheStore () {
46814
48478
  SELECT
46815
48479
  id
46816
48480
  FROM cacheInterceptorV${VERSION}
46817
- ORDER BY cachedAt DESC
48481
+ ORDER BY cachedAt ASC
46818
48482
  LIMIT ?
46819
48483
  )
46820
48484
  `);
@@ -46881,7 +48545,6 @@ function requireSqliteCacheStore () {
46881
48545
  existingValue.id
46882
48546
  );
46883
48547
  } else {
46884
- this.#prune();
46885
48548
  // New response, let's insert it
46886
48549
  this.#insertValueQuery.run(
46887
48550
  url,
@@ -46897,6 +48560,7 @@ function requireSqliteCacheStore () {
46897
48560
  value.cachedAt,
46898
48561
  value.staleAt
46899
48562
  );
48563
+ this.#prune();
46900
48564
  }
46901
48565
  }
46902
48566
 
@@ -47007,7 +48671,7 @@ function requireSqliteCacheStore () {
47007
48671
  const now = Date.now();
47008
48672
  for (const value of values) {
47009
48673
  if (now >= value.deleteAt && !canBeExpired) {
47010
- return undefined
48674
+ continue
47011
48675
  }
47012
48676
 
47013
48677
  let matches = true;
@@ -50128,7 +51792,10 @@ function requireFetch () {
50128
51792
  request,
50129
51793
  processResponseEndOfBody: handleFetchDone,
50130
51794
  processResponse,
50131
- dispatcher: getRequestDispatcher(requestObject) // undici
51795
+ dispatcher: getRequestDispatcher(requestObject), // undici
51796
+ // Keep requestObject alive to prevent its AbortController from being GC'd
51797
+ // See https://github.com/nodejs/undici/issues/4627
51798
+ requestObject
50132
51799
  });
50133
51800
 
50134
51801
  // 14. Return p.
@@ -50247,7 +51914,8 @@ function requireFetch () {
50247
51914
  processResponseEndOfBody,
50248
51915
  processResponseConsumeBody,
50249
51916
  useParallelQueue = false,
50250
- dispatcher = getGlobalDispatcher() // undici
51917
+ dispatcher = getGlobalDispatcher(), // undici
51918
+ requestObject = null // Keep alive to prevent AbortController GC, see #4627
50251
51919
  }) {
50252
51920
  // Ensure that the dispatcher is set accordingly
50253
51921
  assert(dispatcher);
@@ -50301,7 +51969,9 @@ function requireFetch () {
50301
51969
  processResponseConsumeBody,
50302
51970
  processResponseEndOfBody,
50303
51971
  taskDestination,
50304
- crossOriginIsolatedCapability
51972
+ crossOriginIsolatedCapability,
51973
+ // Keep requestObject alive to prevent its AbortController from being GC'd
51974
+ requestObject
50305
51975
  };
50306
51976
 
50307
51977
  // 7. If request’s body is a byte sequence, then set request’s body to
@@ -50665,7 +52335,7 @@ function requireFetch () {
50665
52335
  }
50666
52336
  case 'blob:': {
50667
52337
  if (!resolveObjectURL) {
50668
- resolveObjectURL = require$$0$b.resolveObjectURL;
52338
+ resolveObjectURL = require$$0$a.resolveObjectURL;
50669
52339
  }
50670
52340
 
50671
52341
  // 1. Let blobURLEntry be request’s current URL’s blob URL entry.
@@ -50897,7 +52567,7 @@ function requireFetch () {
50897
52567
  let responseStatus = 0;
50898
52568
 
50899
52569
  // 7. If fetchParams’s request’s mode is not "navigate" or response’s has-cross-origin-redirects is false:
50900
- if (fetchParams.request.mode !== 'navigator' || !response.hasCrossOriginRedirects) {
52570
+ if (fetchParams.request.mode !== 'navigate' || !response.hasCrossOriginRedirects) {
50901
52571
  // 1. Set responseStatus to response’s status.
50902
52572
  responseStatus = response.status;
50903
52573
 
@@ -51289,7 +52959,10 @@ function requireFetch () {
51289
52959
  // 8. If contentLengthHeaderValue is non-null, then append
51290
52960
  // `Content-Length`/contentLengthHeaderValue to httpRequest’s header
51291
52961
  // list.
51292
- if (contentLengthHeaderValue != null) {
52962
+ if (
52963
+ contentLengthHeaderValue != null &&
52964
+ !httpRequest.headersList.contains('content-length', true)
52965
+ ) {
51293
52966
  httpRequest.headersList.append('content-length', contentLengthHeaderValue, true);
51294
52967
  }
51295
52968
 
@@ -51486,12 +53159,25 @@ function requireFetch () {
51486
53159
  // 14. If response’s status is 401, httpRequest’s response tainting is not "cors",
51487
53160
  // includeCredentials is true, and request’s traversable for user prompts is
51488
53161
  // a traversable navigable:
51489
- if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && isTraversableNavigable(request.traversableForUserPrompts)) {
53162
+ //
53163
+ // In Node.js there is no traversable navigable to prompt the user, but we
53164
+ // still need to handle URL-embedded credentials so authentication retries
53165
+ // for WebSocket handshakes continue to work.
53166
+ if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && (
53167
+ request.useURLCredentials !== undefined ||
53168
+ isTraversableNavigable(request.traversableForUserPrompts)
53169
+ )) {
51490
53170
  // 2. If request’s body is non-null, then:
51491
53171
  if (request.body != null) {
51492
53172
  // 1. If request’s body’s source is null, then return a network error.
51493
53173
  if (request.body.source == null) {
51494
- return makeNetworkError('expected non-null body source')
53174
+ // Note: In Node.js, this code path should not be reached because
53175
+ // isTraversableNavigable() returns false for non-navigable contexts.
53176
+ // However, we handle it gracefully by returning the response instead of
53177
+ // a network error, as we won't actually retry the request.
53178
+ // This aligns with the Fetch spec discussion in whatwg/fetch#1132,
53179
+ // which allows implementations flexibility when credentials can't be obtained.
53180
+ return response
51495
53181
  }
51496
53182
 
51497
53183
  // 2. Set request’s body to the body of the result of safely extracting
@@ -51947,9 +53633,12 @@ function requireFetch () {
51947
53633
  /** @type {import('../../..').Agent} */
51948
53634
  const agent = fetchParams.controller.dispatcher;
51949
53635
 
53636
+ const path = url.pathname + url.search;
53637
+ const hasTrailingQuestionMark = url.search.length === 0 && url.href[url.href.length - url.hash.length - 1] === '?';
53638
+
51950
53639
  return new Promise((resolve, reject) => agent.dispatch(
51951
53640
  {
51952
- path: url.pathname + url.search,
53641
+ path: hasTrailingQuestionMark ? `${path}?` : path,
51953
53642
  origin: url.origin,
51954
53643
  method: request.method,
51955
53644
  body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,
@@ -51999,7 +53688,15 @@ function requireFetch () {
51999
53688
  const headersList = new HeadersList();
52000
53689
 
52001
53690
  for (let i = 0; i < rawHeaders.length; i += 2) {
52002
- headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true);
53691
+ const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i]);
53692
+ const value = rawHeaders[i + 1];
53693
+ if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {
53694
+ for (const val of value) {
53695
+ headersList.append(nameStr, val.toString('latin1'), true);
53696
+ }
53697
+ } else {
53698
+ headersList.append(nameStr, value.toString('latin1'), true);
53699
+ }
52003
53700
  }
52004
53701
  const location = headersList.get('location', true);
52005
53702
 
@@ -52168,7 +53865,15 @@ function requireFetch () {
52168
53865
  const headersList = new HeadersList();
52169
53866
 
52170
53867
  for (let i = 0; i < rawHeaders.length; i += 2) {
52171
- headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true);
53868
+ const nameStr = bufferToLowerCasedHeaderName(rawHeaders[i]);
53869
+ const value = rawHeaders[i + 1];
53870
+ if (Array.isArray(value) && !Buffer.isBuffer(rawHeaders[i + 1])) {
53871
+ for (const val of value) {
53872
+ headersList.append(nameStr, val.toString('latin1'), true);
53873
+ }
53874
+ } else {
53875
+ headersList.append(nameStr, value.toString('latin1'), true);
53876
+ }
52172
53877
  }
52173
53878
 
52174
53879
  resolve({
@@ -53600,7 +55305,6 @@ function requireParse$2 () {
53600
55305
  const { maxNameValuePairSize, maxAttributeValueSize } = requireConstants$1();
53601
55306
  const { isCTLExcludingHtab } = requireUtil$2();
53602
55307
  const assert = require$$0$7;
53603
- const { unescape: qsUnescape } = require$$5$1;
53604
55308
 
53605
55309
  /**
53606
55310
  * @description Parses the field-value attributes of a set-cookie header string.
@@ -53678,7 +55382,7 @@ function requireParse$2 () {
53678
55382
  // store arbitrary data in a cookie-value SHOULD encode that data, for
53679
55383
  // example, using Base64 [RFC4648].
53680
55384
  return {
53681
- name, value: qsUnescape(value), ...parseUnparsedAttributes(unparsedAttributes)
55385
+ name, value, ...parseUnparsedAttributes(unparsedAttributes)
53682
55386
  }
53683
55387
  }
53684
55388
 
@@ -53876,32 +55580,25 @@ function requireParse$2 () {
53876
55580
  // If the attribute-name case-insensitively matches the string
53877
55581
  // "SameSite", the user agent MUST process the cookie-av as follows:
53878
55582
 
53879
- // 1. Let enforcement be "Default".
53880
- let enforcement = 'Default';
53881
-
53882
55583
  const attributeValueLowercase = attributeValue.toLowerCase();
53883
- // 2. If cookie-av's attribute-value is a case-insensitive match for
53884
- // "None", set enforcement to "None".
53885
- if (attributeValueLowercase.includes('none')) {
53886
- enforcement = 'None';
53887
- }
53888
-
53889
- // 3. If cookie-av's attribute-value is a case-insensitive match for
53890
- // "Strict", set enforcement to "Strict".
53891
- if (attributeValueLowercase.includes('strict')) {
53892
- enforcement = 'Strict';
53893
- }
53894
55584
 
53895
- // 4. If cookie-av's attribute-value is a case-insensitive match for
53896
- // "Lax", set enforcement to "Lax".
53897
- if (attributeValueLowercase.includes('lax')) {
53898
- enforcement = 'Lax';
55585
+ // 1. If cookie-av's attribute-value is a case-insensitive match for
55586
+ // "None", append an attribute to the cookie-attribute-list with an
55587
+ // attribute-name of "SameSite" and an attribute-value of "None".
55588
+ if (attributeValueLowercase === 'none') {
55589
+ cookieAttributeList.sameSite = 'None';
55590
+ } else if (attributeValueLowercase === 'strict') {
55591
+ // 2. If cookie-av's attribute-value is a case-insensitive match for
55592
+ // "Strict", append an attribute to the cookie-attribute-list with
55593
+ // an attribute-name of "SameSite" and an attribute-value of
55594
+ // "Strict".
55595
+ cookieAttributeList.sameSite = 'Strict';
55596
+ } else if (attributeValueLowercase === 'lax') {
55597
+ // 3. If cookie-av's attribute-value is a case-insensitive match for
55598
+ // "Lax", append an attribute to the cookie-attribute-list with an
55599
+ // attribute-name of "SameSite" and an attribute-value of "Lax".
55600
+ cookieAttributeList.sameSite = 'Lax';
53899
55601
  }
53900
-
53901
- // 5. Append an attribute to the cookie-attribute-list with an
53902
- // attribute-name of "SameSite" and an attribute-value of
53903
- // enforcement.
53904
- cookieAttributeList.sameSite = enforcement;
53905
55602
  } else {
53906
55603
  cookieAttributeList.unparsed ??= [];
53907
55604
 
@@ -54607,7 +56304,7 @@ function requireUtil$1 () {
54607
56304
  hasRequiredUtil$1 = 1;
54608
56305
 
54609
56306
  const { states, opcodes } = requireConstants();
54610
- const { isUtf8 } = require$$0$b;
56307
+ const { isUtf8 } = require$$0$a;
54611
56308
  const { removeHTTPWhitespace } = requireDataUrl();
54612
56309
  const { collectASequenceOfCodePointsFast } = requireInfra();
54613
56310
 
@@ -54833,6 +56530,12 @@ function requireUtil$1 () {
54833
56530
  * @returns {boolean}
54834
56531
  */
54835
56532
  function isValidClientWindowBits (value) {
56533
+ // Must have at least one character
56534
+ if (value.length === 0) {
56535
+ return false
56536
+ }
56537
+
56538
+ // Check all characters are ASCII digits
54836
56539
  for (let i = 0; i < value.length; i++) {
54837
56540
  const byte = value.charCodeAt(i);
54838
56541
 
@@ -54841,7 +56544,9 @@ function requireUtil$1 () {
54841
56544
  }
54842
56545
  }
54843
56546
 
54844
- return true
56547
+ // Check numeric range: zlib requires windowBits in range 8-15
56548
+ const num = Number.parseInt(value, 10);
56549
+ return num >= 8 && num <= 15
54845
56550
  }
54846
56551
 
54847
56552
  /**
@@ -55431,6 +57136,7 @@ function requirePermessageDeflate () {
55431
57136
 
55432
57137
  const { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require$$3$4;
55433
57138
  const { isValidClientWindowBits } = requireUtil$1();
57139
+ const { MessageSizeExceededError } = requireErrors();
55434
57140
 
55435
57141
  const tail = Buffer.from([0x00, 0x00, 0xff, 0xff]);
55436
57142
  const kBuffer = Symbol('kBuffer');
@@ -55442,17 +57148,29 @@ function requirePermessageDeflate () {
55442
57148
 
55443
57149
  #options = {}
55444
57150
 
55445
- constructor (extensions) {
57151
+ #maxPayloadSize = 0
57152
+
57153
+ /**
57154
+ * @param {Map<string, string>} extensions
57155
+ */
57156
+ constructor (extensions, options) {
55446
57157
  this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover');
55447
57158
  this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits');
57159
+
57160
+ this.#maxPayloadSize = options.maxPayloadSize;
55448
57161
  }
55449
57162
 
57163
+ /**
57164
+ * Decompress a compressed payload.
57165
+ * @param {Buffer} chunk Compressed data
57166
+ * @param {boolean} fin Final fragment flag
57167
+ * @param {Function} callback Callback function
57168
+ */
55450
57169
  decompress (chunk, fin, callback) {
55451
57170
  // An endpoint uses the following algorithm to decompress a message.
55452
57171
  // 1. Append 4 octets of 0x00 0x00 0xff 0xff to the tail end of the
55453
57172
  // payload of the message.
55454
57173
  // 2. Decompress the resulting data using DEFLATE.
55455
-
55456
57174
  if (!this.#inflate) {
55457
57175
  let windowBits = Z_DEFAULT_WINDOWBITS;
55458
57176
 
@@ -55465,13 +57183,26 @@ function requirePermessageDeflate () {
55465
57183
  windowBits = Number.parseInt(this.#options.serverMaxWindowBits);
55466
57184
  }
55467
57185
 
55468
- this.#inflate = createInflateRaw({ windowBits });
57186
+ try {
57187
+ this.#inflate = createInflateRaw({ windowBits });
57188
+ } catch (err) {
57189
+ callback(err);
57190
+ return
57191
+ }
55469
57192
  this.#inflate[kBuffer] = [];
55470
57193
  this.#inflate[kLength] = 0;
55471
57194
 
55472
57195
  this.#inflate.on('data', (data) => {
55473
- this.#inflate[kBuffer].push(data);
55474
57196
  this.#inflate[kLength] += data.length;
57197
+
57198
+ if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) {
57199
+ callback(new MessageSizeExceededError());
57200
+ this.#inflate.removeAllListeners();
57201
+ this.#inflate = null;
57202
+ return
57203
+ }
57204
+
57205
+ this.#inflate[kBuffer].push(data);
55475
57206
  });
55476
57207
 
55477
57208
  this.#inflate.on('error', (err) => {
@@ -55486,6 +57217,10 @@ function requirePermessageDeflate () {
55486
57217
  }
55487
57218
 
55488
57219
  this.#inflate.flush(() => {
57220
+ if (!this.#inflate) {
57221
+ return
57222
+ }
57223
+
55489
57224
  const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength]);
55490
57225
 
55491
57226
  this.#inflate[kBuffer].length = 0;
@@ -55522,6 +57257,7 @@ function requireReceiver () {
55522
57257
  const { failWebsocketConnection } = requireConnection();
55523
57258
  const { WebsocketFrameSend } = requireFrame();
55524
57259
  const { PerMessageDeflate } = requirePermessageDeflate();
57260
+ const { MessageSizeExceededError } = requireErrors();
55525
57261
 
55526
57262
  // This code was influenced by ws released under the MIT license.
55527
57263
  // Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
@@ -55545,14 +57281,27 @@ function requireReceiver () {
55545
57281
  /** @type {import('./websocket').Handler} */
55546
57282
  #handler
55547
57283
 
55548
- constructor (handler, extensions) {
57284
+ /** @type {number} */
57285
+ #maxFragments
57286
+
57287
+ /** @type {number} */
57288
+ #maxPayloadSize
57289
+
57290
+ /**
57291
+ * @param {import('./websocket').Handler} handler
57292
+ * @param {Map<string, string>|null} extensions
57293
+ * @param {{ maxFragments?: number, maxPayloadSize?: number }} [options]
57294
+ */
57295
+ constructor (handler, extensions, options = {}) {
55549
57296
  super();
55550
57297
 
55551
57298
  this.#handler = handler;
55552
57299
  this.#extensions = extensions == null ? new Map() : extensions;
57300
+ this.#maxFragments = options.maxFragments ?? 0;
57301
+ this.#maxPayloadSize = options.maxPayloadSize ?? 0;
55553
57302
 
55554
57303
  if (this.#extensions.has('permessage-deflate')) {
55555
- this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions));
57304
+ this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions, options));
55556
57305
  }
55557
57306
  }
55558
57307
 
@@ -55568,6 +57317,19 @@ function requireReceiver () {
55568
57317
  this.run(callback);
55569
57318
  }
55570
57319
 
57320
+ #validatePayloadLength () {
57321
+ if (
57322
+ this.#maxPayloadSize > 0 &&
57323
+ !isControlFrame(this.#info.opcode) &&
57324
+ this.#info.payloadLength + this.#fragmentsBytes > this.#maxPayloadSize
57325
+ ) {
57326
+ failWebsocketConnection(this.#handler, 1009, 'Payload size exceeds maximum allowed size');
57327
+ return false
57328
+ }
57329
+
57330
+ return true
57331
+ }
57332
+
55571
57333
  /**
55572
57334
  * Runs whenever a new chunk is received.
55573
57335
  * Callback is called whenever there are no more chunks buffering,
@@ -55656,6 +57418,10 @@ function requireReceiver () {
55656
57418
  if (payloadLength <= 125) {
55657
57419
  this.#info.payloadLength = payloadLength;
55658
57420
  this.#state = parserStates.READ_DATA;
57421
+
57422
+ if (!this.#validatePayloadLength()) {
57423
+ return
57424
+ }
55659
57425
  } else if (payloadLength === 126) {
55660
57426
  this.#state = parserStates.PAYLOADLENGTH_16;
55661
57427
  } else if (payloadLength === 127) {
@@ -55680,6 +57446,10 @@ function requireReceiver () {
55680
57446
 
55681
57447
  this.#info.payloadLength = buffer.readUInt16BE(0);
55682
57448
  this.#state = parserStates.READ_DATA;
57449
+
57450
+ if (!this.#validatePayloadLength()) {
57451
+ return
57452
+ }
55683
57453
  } else if (this.#state === parserStates.PAYLOADLENGTH_64) {
55684
57454
  if (this.#byteOffset < 8) {
55685
57455
  return callback()
@@ -55687,6 +57457,7 @@ function requireReceiver () {
55687
57457
 
55688
57458
  const buffer = this.consume(8);
55689
57459
  const upper = buffer.readUInt32BE(0);
57460
+ const lower = buffer.readUInt32BE(4);
55690
57461
 
55691
57462
  // 2^31 is the maximum bytes an arraybuffer can contain
55692
57463
  // on 32-bit systems. Although, on 64-bit systems, this is
@@ -55694,15 +57465,17 @@ function requireReceiver () {
55694
57465
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Invalid_array_length
55695
57466
  // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/common/globals.h;drc=1946212ac0100668f14eb9e2843bdd846e510a1e;bpv=1;bpt=1;l=1275
55696
57467
  // https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/js-array-buffer.h;l=34;drc=1946212ac0100668f14eb9e2843bdd846e510a1e
55697
- if (upper > 2 ** 31 - 1) {
57468
+ if (upper !== 0 || lower > 2 ** 31 - 1) {
55698
57469
  failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.');
55699
57470
  return
55700
57471
  }
55701
57472
 
55702
- const lower = buffer.readUInt32BE(4);
55703
-
55704
- this.#info.payloadLength = (upper << 8) + lower;
57473
+ this.#info.payloadLength = lower;
55705
57474
  this.#state = parserStates.READ_DATA;
57475
+
57476
+ if (!this.#validatePayloadLength()) {
57477
+ return
57478
+ }
55706
57479
  } else if (this.#state === parserStates.READ_DATA) {
55707
57480
  if (this.#byteOffset < this.#info.payloadLength) {
55708
57481
  return callback()
@@ -55715,7 +57488,9 @@ function requireReceiver () {
55715
57488
  this.#state = parserStates.INFO;
55716
57489
  } else {
55717
57490
  if (!this.#info.compressed) {
55718
- this.writeFragments(body);
57491
+ if (!this.writeFragments(body)) {
57492
+ return
57493
+ }
55719
57494
 
55720
57495
  // If the frame is not fragmented, a message has been received.
55721
57496
  // If the frame is fragmented, it will terminate with a fin bit set
@@ -55727,27 +57502,41 @@ function requireReceiver () {
55727
57502
 
55728
57503
  this.#state = parserStates.INFO;
55729
57504
  } else {
55730
- this.#extensions.get('permessage-deflate').decompress(body, this.#info.fin, (error, data) => {
55731
- if (error) {
55732
- failWebsocketConnection(this.#handler, 1007, error.message);
55733
- return
55734
- }
57505
+ this.#extensions.get('permessage-deflate').decompress(
57506
+ body,
57507
+ this.#info.fin,
57508
+ (error, data) => {
57509
+ if (error) {
57510
+ const code = error instanceof MessageSizeExceededError ? 1009 : 1007;
57511
+ failWebsocketConnection(this.#handler, code, error.message);
57512
+ return
57513
+ }
55735
57514
 
55736
- this.writeFragments(data);
57515
+ if (!this.writeFragments(data)) {
57516
+ return
57517
+ }
55737
57518
 
55738
- if (!this.#info.fin) {
55739
- this.#state = parserStates.INFO;
55740
- this.#loop = true;
55741
- this.run(callback);
55742
- return
55743
- }
57519
+ // Check cumulative fragment size
57520
+ if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) {
57521
+ failWebsocketConnection(this.#handler, 1009, new MessageSizeExceededError().message);
57522
+ return
57523
+ }
55744
57524
 
55745
- websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments());
57525
+ if (!this.#info.fin) {
57526
+ this.#state = parserStates.INFO;
57527
+ this.#loop = true;
57528
+ this.run(callback);
57529
+ return
57530
+ }
55746
57531
 
55747
- this.#loop = true;
55748
- this.#state = parserStates.INFO;
55749
- this.run(callback);
55750
- });
57532
+ websocketMessageReceived(this.#handler, this.#info.binaryType, this.consumeFragments());
57533
+
57534
+ this.#loop = true;
57535
+ this.#state = parserStates.INFO;
57536
+ this.run(callback);
57537
+ },
57538
+ this.#fragmentsBytes
57539
+ );
55751
57540
 
55752
57541
  this.#loop = false;
55753
57542
  break
@@ -55806,8 +57595,17 @@ function requireReceiver () {
55806
57595
  }
55807
57596
 
55808
57597
  writeFragments (fragment) {
57598
+ if (
57599
+ this.#maxFragments > 0 &&
57600
+ this.#fragments.length === this.#maxFragments
57601
+ ) {
57602
+ failWebsocketConnection(this.#handler, 1008, 'Too many message fragments');
57603
+ return false
57604
+ }
57605
+
55809
57606
  this.#fragmentsBytes += fragment.length;
55810
57607
  this.#fragments.push(fragment);
57608
+ return true
55811
57609
  }
55812
57610
 
55813
57611
  consumeFragments () {
@@ -56101,6 +57899,18 @@ function requireWebsocket () {
56101
57899
  const { WebsocketFrameSend } = requireFrame();
56102
57900
  const { channels } = requireDiagnostics();
56103
57901
 
57902
+ function getSocketAddress (socket) {
57903
+ if (typeof socket?.address === 'function') {
57904
+ return socket.address()
57905
+ }
57906
+
57907
+ if (typeof socket?.session?.socket?.address === 'function') {
57908
+ return socket.session.socket.address()
57909
+ }
57910
+
57911
+ return null
57912
+ }
57913
+
56104
57914
  /**
56105
57915
  * @typedef {object} Handler
56106
57916
  * @property {(response: any, extensions?: string[]) => void} onConnectionEstablished
@@ -56528,11 +58338,18 @@ function requireWebsocket () {
56528
58338
  * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
56529
58339
  */
56530
58340
  #onConnectionEstablished (response, parsedExtensions) {
56531
- // processResponse is called when the "responses header list has been received and initialized."
58341
+ // processResponse is called when the "response's header list has been received and initialized."
56532
58342
  // once this happens, the connection is open
56533
58343
  this.#handler.socket = response.socket;
56534
58344
 
56535
- const parser = new ByteParser(this.#handler, parsedExtensions);
58345
+ const webSocketOptions = this.#handler.controller.dispatcher?.webSocketOptions;
58346
+ const maxFragments = webSocketOptions?.maxFragments;
58347
+ const maxPayloadSize = webSocketOptions?.maxPayloadSize;
58348
+
58349
+ const parser = new ByteParser(this.#handler, parsedExtensions, {
58350
+ maxFragments,
58351
+ maxPayloadSize
58352
+ });
56536
58353
  parser.on('drain', () => this.#handler.onParserDrain());
56537
58354
  parser.on('error', (err) => this.#handler.onParserError(err));
56538
58355
 
@@ -56567,7 +58384,7 @@ function requireWebsocket () {
56567
58384
  // Convert headers to a plain object for the event
56568
58385
  const headers = response.headersList.entries;
56569
58386
  channels.open.publish({
56570
- address: response.socket.address(),
58387
+ address: getSocketAddress(response.socket),
56571
58388
  protocol: this.#protocol,
56572
58389
  extensions: this.#extensions,
56573
58390
  websocket: this,
@@ -57193,7 +59010,14 @@ function requireWebsocketstream () {
57193
59010
  #onConnectionEstablished (response, parsedExtensions) {
57194
59011
  this.#handler.socket = response.socket;
57195
59012
 
57196
- const parser = new ByteParser(this.#handler, parsedExtensions);
59013
+ // Get options from dispatcher options
59014
+ const maxFragments = this.#handler.controller.dispatcher?.webSocketOptions?.maxFragments;
59015
+ const maxPayloadSize = this.#handler.controller.dispatcher?.webSocketOptions?.maxPayloadSize;
59016
+
59017
+ const parser = new ByteParser(this.#handler, parsedExtensions, {
59018
+ maxFragments,
59019
+ maxPayloadSize
59020
+ });
57197
59021
  parser.on('drain', () => this.#handler.onParserDrain());
57198
59022
  parser.on('error', (err) => this.#handler.onParserError(err));
57199
59023
 
@@ -57219,12 +59043,6 @@ function requireWebsocketstream () {
57219
59043
  start: (controller) => {
57220
59044
  this.#readableStreamController = controller;
57221
59045
  },
57222
- pull (controller) {
57223
- let chunk;
57224
- while (controller.desiredSize > 0 && (chunk = response.socket.read()) !== null) {
57225
- controller.enqueue(chunk);
57226
- }
57227
- },
57228
59046
  cancel: (reason) => this.#cancel(reason)
57229
59047
  });
57230
59048
 
@@ -57273,7 +59091,7 @@ function requireWebsocketstream () {
57273
59091
  try {
57274
59092
  chunk = utf8Decode(data);
57275
59093
  } catch {
57276
- failWebsocketConnection(this.#handler, 'Received invalid UTF-8 in text frame.');
59094
+ failWebsocketConnection(this.#handler, 1007, 'Received invalid UTF-8 in text frame.');
57277
59095
  return
57278
59096
  }
57279
59097
  } else if (type === opcodes.BINARY) {
@@ -58402,6 +60220,7 @@ function requireUndici () {
58402
60220
  const RoundRobinPool = requireRoundRobinPool();
58403
60221
  const Agent = requireAgent();
58404
60222
  const ProxyAgent = requireProxyAgent();
60223
+ const Socks5ProxyAgent = requireSocks5ProxyAgent();
58405
60224
  const EnvHttpProxyAgent = requireEnvHttpProxyAgent();
58406
60225
  const RetryAgent = requireRetryAgent();
58407
60226
  const H2CClient = requireH2cClient();
@@ -58430,6 +60249,7 @@ function requireUndici () {
58430
60249
  module.exports.RoundRobinPool = RoundRobinPool;
58431
60250
  module.exports.Agent = Agent;
58432
60251
  module.exports.ProxyAgent = ProxyAgent;
60252
+ module.exports.Socks5ProxyAgent = Socks5ProxyAgent;
58433
60253
  module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent;
58434
60254
  module.exports.RetryAgent = RetryAgent;
58435
60255
  module.exports.H2CClient = H2CClient;
@@ -62124,7 +63944,7 @@ function requireInternal () {
62124
63944
  //------------------------------------------------------------------------------
62125
63945
 
62126
63946
  // We use node.js internal decoder. Its signature is the same as ours.
62127
- var StringDecoder = require$$1$8.StringDecoder;
63947
+ var StringDecoder = require$$1$9.StringDecoder;
62128
63948
 
62129
63949
  if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.
62130
63950
  StringDecoder.prototype.end = function() {};
@@ -85652,11 +87472,7 @@ function requireJson () {
85652
87472
  var partial = '';
85653
87473
 
85654
87474
  if (index !== -1) {
85655
- partial = str.substring(0, index) + JSON_SYNTAX_CHAR;
85656
-
85657
- for (var i = index + 1; i < str.length; i++) {
85658
- partial += JSON_SYNTAX_CHAR;
85659
- }
87475
+ partial = str.substring(0, index) + new Array(str.length - index + 1).join(JSON_SYNTAX_CHAR);
85660
87476
  }
85661
87477
 
85662
87478
  try {
@@ -88049,6 +89865,8 @@ function requireUtils$1 () {
88049
89865
  var newIndex = getMaxIndex(target) + 1;
88050
89866
  target[newIndex] = source;
88051
89867
  setMaxIndex(target, newIndex);
89868
+ } else if (options && options.strictMerge) {
89869
+ return [target, source];
88052
89870
  } else if (
88053
89871
  (options && (options.plainObjects || options.allowPrototypes))
88054
89872
  || !has.call(Object.prototype, source)
@@ -88430,7 +90248,7 @@ function requireStringify () {
88430
90248
 
88431
90249
  if (obj === null) {
88432
90250
  if (strictNullHandling) {
88433
- return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;
90251
+ return formatter(encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix);
88434
90252
  }
88435
90253
 
88436
90254
  obj = '';
@@ -88454,7 +90272,9 @@ function requireStringify () {
88454
90272
  if (generateArrayPrefix === 'comma' && isArray(obj)) {
88455
90273
  // we need to join elements in
88456
90274
  if (encodeValuesOnly && encoder) {
88457
- obj = utils.maybeMap(obj, encoder);
90275
+ obj = utils.maybeMap(obj, function (v) {
90276
+ return v == null ? v : encoder(v);
90277
+ });
88458
90278
  }
88459
90279
  objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];
88460
90280
  } else if (isArray(filter)) {
@@ -88624,6 +90444,11 @@ function requireStringify () {
88624
90444
  var sideChannel = getSideChannel();
88625
90445
  for (var i = 0; i < objKeys.length; ++i) {
88626
90446
  var key = objKeys[i];
90447
+
90448
+ if (typeof key === 'undefined' || key === null) {
90449
+ continue;
90450
+ }
90451
+
88627
90452
  var value = obj[key];
88628
90453
 
88629
90454
  if (options.skipNulls && value === null) {
@@ -88657,10 +90482,10 @@ function requireStringify () {
88657
90482
  if (options.charsetSentinel) {
88658
90483
  if (options.charset === 'iso-8859-1') {
88659
90484
  // encodeURIComponent('&#10003;'), the "numeric entity" representation of a checkmark
88660
- prefix += 'utf8=%26%2310003%3B&';
90485
+ prefix += 'utf8=%26%2310003%3B' + options.delimiter;
88661
90486
  } else {
88662
90487
  // encodeURIComponent('✓')
88663
- prefix += 'utf8=%E2%9C%93&';
90488
+ prefix += 'utf8=%E2%9C%93' + options.delimiter;
88664
90489
  }
88665
90490
  }
88666
90491
 
@@ -88701,6 +90526,7 @@ function requireParse$1 () {
88701
90526
  parseArrays: true,
88702
90527
  plainObjects: false,
88703
90528
  strictDepth: false,
90529
+ strictMerge: true,
88704
90530
  strictNullHandling: false,
88705
90531
  throwOnLimitExceeded: false
88706
90532
  };
@@ -88742,10 +90568,10 @@ function requireParse$1 () {
88742
90568
  var limit = options.parameterLimit === Infinity ? void undefined : options.parameterLimit;
88743
90569
  var parts = cleanStr.split(
88744
90570
  options.delimiter,
88745
- options.throwOnLimitExceeded ? limit + 1 : limit
90571
+ options.throwOnLimitExceeded && typeof limit !== 'undefined' ? limit + 1 : limit
88746
90572
  );
88747
90573
 
88748
- if (options.throwOnLimitExceeded && parts.length > limit) {
90574
+ if (options.throwOnLimitExceeded && typeof limit !== 'undefined' && parts.length > limit) {
88749
90575
  throw new RangeError('Parameter limit exceeded. Only ' + limit + ' parameter' + (limit === 1 ? '' : 's') + ' allowed.');
88750
90576
  }
88751
90577
 
@@ -88815,7 +90641,7 @@ function requireParse$1 () {
88815
90641
 
88816
90642
  if (key !== null) {
88817
90643
  var existing = has.call(obj, key);
88818
- if (existing && options.duplicates === 'combine') {
90644
+ if (existing && (options.duplicates === 'combine' || part.indexOf('[]=') > -1)) {
88819
90645
  obj[key] = utils.combine(
88820
90646
  obj[key],
88821
90647
  val,
@@ -88889,9 +90715,12 @@ function requireParse$1 () {
88889
90715
  return leaf;
88890
90716
  };
88891
90717
 
88892
- var splitKeyIntoSegments = function splitKeyIntoSegments(givenKey, options) {
88893
- var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey;
90718
+ // Split a key like "a[b][c[]]" into ['a', '[b]', '[c[]]'] while preserving
90719
+ // qs parse semantics for depth/prototype guards.
90720
+ var splitKeyIntoSegments = function splitKeyIntoSegments(originalKey, options) {
90721
+ var key = options.allowDots ? originalKey.replace(/\.([^.[]+)/g, '[$1]') : originalKey;
88894
90722
 
90723
+ // depth <= 0 keeps the whole key as one segment
88895
90724
  if (options.depth <= 0) {
88896
90725
  if (!options.plainObjects && has.call(Object.prototype, key)) {
88897
90726
  if (!options.allowPrototypes) {
@@ -88902,14 +90731,11 @@ function requireParse$1 () {
88902
90731
  return [key];
88903
90732
  }
88904
90733
 
88905
- var brackets = /(\[[^[\]]*])/;
88906
- var child = /(\[[^[\]]*])/g;
88907
-
88908
- var segment = brackets.exec(key);
88909
- var parent = segment ? key.slice(0, segment.index) : key;
88910
-
88911
- var keys = [];
90734
+ var segments = [];
88912
90735
 
90736
+ // parent before the first '[' (may be empty if key starts with '[')
90737
+ var first = key.indexOf('[');
90738
+ var parent = first >= 0 ? key.slice(0, first) : key;
88913
90739
  if (parent) {
88914
90740
  if (!options.plainObjects && has.call(Object.prototype, parent)) {
88915
90741
  if (!options.allowPrototypes) {
@@ -88917,32 +90743,62 @@ function requireParse$1 () {
88917
90743
  }
88918
90744
  }
88919
90745
 
88920
- keys[keys.length] = parent;
90746
+ segments[segments.length] = parent;
88921
90747
  }
88922
90748
 
88923
- var i = 0;
88924
- while ((segment = child.exec(key)) !== null && i < options.depth) {
88925
- i += 1;
90749
+ var n = key.length;
90750
+ var open = first;
90751
+ var collected = 0;
88926
90752
 
88927
- var segmentContent = segment[1].slice(1, -1);
88928
- if (!options.plainObjects && has.call(Object.prototype, segmentContent)) {
88929
- if (!options.allowPrototypes) {
88930
- return;
90753
+ while (open >= 0 && collected < options.depth) {
90754
+ var level = 1;
90755
+ var i = open + 1;
90756
+ var close = -1;
90757
+
90758
+ // balance nested '[' and ']' inside this bracket group using a nesting level counter
90759
+ while (i < n && close < 0) {
90760
+ var cu = key.charCodeAt(i);
90761
+ if (cu === 0x5B) { // '['
90762
+ level += 1;
90763
+ } else if (cu === 0x5D) { // ']'
90764
+ level -= 1;
90765
+ if (level === 0) {
90766
+ close = i; // found matching close; loop will exit by condition
90767
+ }
88931
90768
  }
90769
+ i += 1;
90770
+ }
90771
+
90772
+ if (close < 0) {
90773
+ // Unterminated group: wrap the raw remainder in one bracket pair so it stays
90774
+ // a single literal segment (e.g. "[[]b" -> "[[]b]"); we do not infer missing ']'.
90775
+ segments[segments.length] = '[' + key.slice(open) + ']';
90776
+ return segments;
88932
90777
  }
88933
90778
 
88934
- keys[keys.length] = segment[1];
90779
+ var seg = key.slice(open, close + 1);
90780
+ // prototype guard for the content of this group
90781
+ var content = seg.slice(1, -1);
90782
+ if (!options.plainObjects && has.call(Object.prototype, content) && !options.allowPrototypes) {
90783
+ return;
90784
+ }
90785
+
90786
+ segments[segments.length] = seg;
90787
+ collected += 1;
90788
+
90789
+ // find the next '[' after this balanced group
90790
+ open = key.indexOf('[', close + 1);
88935
90791
  }
88936
90792
 
88937
- if (segment) {
90793
+ if (open >= 0) {
88938
90794
  if (options.strictDepth === true) {
88939
90795
  throw new RangeError('Input depth exceeded depth option of ' + options.depth + ' and strictDepth is true');
88940
90796
  }
88941
90797
 
88942
- keys[keys.length] = '[' + key.slice(segment.index) + ']';
90798
+ segments[segments.length] = '[' + key.slice(open) + ']';
88943
90799
  }
88944
90800
 
88945
- return keys;
90801
+ return segments;
88946
90802
  };
88947
90803
 
88948
90804
  var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {
@@ -89015,6 +90871,7 @@ function requireParse$1 () {
89015
90871
  parseArrays: opts.parseArrays !== false,
89016
90872
  plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,
89017
90873
  strictDepth: typeof opts.strictDepth === 'boolean' ? !!opts.strictDepth : defaults.strictDepth,
90874
+ strictMerge: typeof opts.strictMerge === 'boolean' ? !!opts.strictMerge : defaults.strictMerge,
89018
90875
  strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,
89019
90876
  throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === 'boolean' ? opts.throwOnLimitExceeded : false
89020
90877
  };
@@ -89280,16 +91137,15 @@ function requireUrlencoded () {
89280
91137
 
89281
91138
  function parameterCount (body, limit) {
89282
91139
  var count = 0;
89283
- var index = 0;
91140
+ var index = -1;
89284
91141
 
89285
- while ((index = body.indexOf('&', index)) !== -1) {
91142
+ do {
89286
91143
  count++;
89287
- index++;
89288
-
89289
- if (count === limit) {
91144
+ if (count > limit) {
89290
91145
  return undefined
89291
91146
  }
89292
- }
91147
+ index = body.indexOf('&', index + 1);
91148
+ } while (index !== -1)
89293
91149
 
89294
91150
  return count
89295
91151
  }
@@ -90674,6 +92530,7 @@ function requirePathToRegexp () {
90674
92530
  pos = offset + match.length;
90675
92531
 
90676
92532
  if (match === '*') {
92533
+ backtrack = '';
90677
92534
  extraOffset += 3;
90678
92535
  return '(.*)';
90679
92536
  }
@@ -90703,6 +92560,7 @@ function requirePathToRegexp () {
90703
92560
  + ')'
90704
92561
  + optional;
90705
92562
 
92563
+ backtrack = '';
90706
92564
  extraOffset += result.length - match.length;
90707
92565
 
90708
92566
  return result;
@@ -99225,7 +101083,8 @@ function requireUtils () {
99225
101083
 
99226
101084
  function parseExtendedQueryString(str) {
99227
101085
  return qs.parse(str, {
99228
- allowPrototypes: true
101086
+ allowPrototypes: true,
101087
+ arrayLimit: 1000
99229
101088
  });
99230
101089
  }
99231
101090
 
@@ -151830,7 +153689,7 @@ async function loadCheckpoint(filePath) {
151830
153689
  }
151831
153690
  }
151832
153691
  async function saveCheckpoint(filePath, checkpoint) {
151833
- await writeFile(filePath, JSON.stringify(checkpoint), "utf-8");
153692
+ await writeFile(filePath, JSON.stringify(checkpoint, null, 4), "utf-8");
151834
153693
  }
151835
153694
  async function removeCheckpoint(filePath) {
151836
153695
  try {
@@ -153712,21 +155571,21 @@ async function provisionResources(options) {
153712
155571
  }
153713
155572
  const modelData = (await modelRes.json());
153714
155573
  const modelID = modelData.id;
153715
- const enginesRes = await fetch(`${apiUrl}/api/v1/engines`, {
155574
+ const engineRes = await fetch(`${apiUrl}/api/v1/engines`, {
155575
+ body: JSON.stringify({
155576
+ name: `inftest_eng_${shortSlug}`,
155577
+ type: options.engine
155578
+ }),
153716
155579
  headers,
153717
- method: "GET",
155580
+ method: "POST",
153718
155581
  signal: AbortSignal.timeout(60_000)
153719
155582
  });
153720
- if (!enginesRes.ok) {
153721
- const text = await enginesRes.text();
153722
- throw new Error(`Failed to list engines: ${enginesRes.status} ${text}`);
155583
+ if (!engineRes.ok) {
155584
+ const text = await engineRes.text();
155585
+ throw new Error(`Failed to create engine: ${engineRes.status} ${text}`);
153723
155586
  }
153724
- const enginesData = (await enginesRes.json());
153725
- const engine = enginesData.results.find(e => e.type === options.engine);
153726
- if (!engine) {
153727
- throw new Error(`No engine of type "${options.engine}" found for account`);
153728
- }
153729
- const engineId = engine.id;
155587
+ const engineData = (await engineRes.json());
155588
+ const engineId = engineData.id;
153730
155589
  const sourceIDs = [];
153731
155590
  for (let i = 0; i < parallelism; i++) {
153732
155591
  const sourceBody = {
@@ -153767,7 +155626,7 @@ async function provisionResources(options) {
153767
155626
  }
153768
155627
  const endpointData = (await endpointRes.json());
153769
155628
  const endpointID = endpointData.id;
153770
- return { endpointID, modelID, sourceIDs };
155629
+ return { endpointID, engineID: engineId, modelID, sourceIDs };
153771
155630
  }
153772
155631
 
153773
155632
  async function teardownResources(options) {
@@ -153798,6 +155657,16 @@ async function teardownResources(options) {
153798
155657
  })
153799
155658
  .catch(err => console.error("Failed to delete source:", asError(err).message));
153800
155659
  }
155660
+ await fetch(`${apiUrl}/api/v1/engines/${options.engineID}`, {
155661
+ headers,
155662
+ method: "DELETE"
155663
+ })
155664
+ .then(res => {
155665
+ if (!res.ok) {
155666
+ console.error(`Failed to delete engine: ${res.status} ${res.statusText}`);
155667
+ }
155668
+ })
155669
+ .catch(err => console.error("Failed to delete engine:", asError(err).message));
153801
155670
  await fetch(`${apiUrl}/api/v1/models/${options.modelID}`, {
153802
155671
  headers,
153803
155672
  method: "DELETE"
@@ -153975,7 +155844,7 @@ async function runSingleBenchmark(options) {
153975
155844
  quantization: entry.quantization,
153976
155845
  slug: entry.slug
153977
155846
  });
153978
- console.log(` → Provisioned 1 model, ${parallelism} source(s), 1 endpoint`);
155847
+ console.log(` → Provisioned 1 model, 1 engine, ${parallelism} source(s), 1 endpoint`);
153979
155848
  const sampler = createMemorySampler();
153980
155849
  console.log(" → Sampling memory baseline...");
153981
155850
  await sampler.start();
@@ -154164,6 +156033,7 @@ async function runSingleBenchmark(options) {
154164
156033
  apiKey,
154165
156034
  apiUrl,
154166
156035
  endpointID: resources.endpointID,
156036
+ engineID: resources.engineID,
154167
156037
  modelID: resources.modelID,
154168
156038
  sourceIDs: resources.sourceIDs
154169
156039
  });