tedious 20.0.4 → 20.0.6

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.
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _decimaln = _interopRequireDefault(require("./decimaln"));
8
- var _writableTrackingBuffer = _interopRequireDefault(require("../tracking-buffer/writable-tracking-buffer"));
9
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
9
  const NULL_LENGTH = Buffer.from([0x00]);
11
10
  const Decimal = {
@@ -64,32 +63,39 @@ const Decimal = {
64
63
  return;
65
64
  }
66
65
  const sign = parameter.value < 0 ? 0 : 1;
67
- const value = Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale)));
68
66
  const precision = parameter.precision;
67
+
68
+ // Number of bytes used to encode the unsigned magnitude for the resolved precision.
69
+ let dataLength;
69
70
  if (precision <= 9) {
70
- const buffer = Buffer.alloc(5);
71
- buffer.writeUInt8(sign, 0);
72
- buffer.writeUInt32LE(value, 1);
73
- yield buffer;
71
+ dataLength = 4;
74
72
  } else if (precision <= 19) {
75
- const buffer = new _writableTrackingBuffer.default(9);
76
- buffer.writeUInt8(sign);
77
- buffer.writeUInt64LE(value);
78
- yield buffer.data;
73
+ dataLength = 8;
79
74
  } else if (precision <= 28) {
80
- const buffer = new _writableTrackingBuffer.default(13);
81
- buffer.writeUInt8(sign);
82
- buffer.writeUInt64LE(value);
83
- buffer.writeUInt32LE(0x00000000);
84
- yield buffer.data;
75
+ dataLength = 12;
85
76
  } else {
86
- const buffer = new _writableTrackingBuffer.default(17);
87
- buffer.writeUInt8(sign);
88
- buffer.writeUInt64LE(value);
89
- buffer.writeUInt32LE(0x00000000);
90
- buffer.writeUInt32LE(0x00000000);
91
- yield buffer.data;
77
+ dataLength = 16;
78
+ }
79
+
80
+ // Encode the scaled magnitude as a little-endian unsigned integer spanning the
81
+ // full width. Using a BigInt avoids the `RangeError` that was thrown when the
82
+ // scaled value exceeded 2^64 for high-precision columns, and correctly fills the
83
+ // high-order words instead of hardcoding them to zero.
84
+ // See https://github.com/tediousjs/tedious/issues/1733
85
+ let magnitude = BigInt(Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale))));
86
+
87
+ // Guard against values that overflow the field: throwing here surfaces a
88
+ // catchable error to the caller instead of silently truncating the magnitude.
89
+ if (magnitude >= 1n << BigInt(8 * dataLength)) {
90
+ throw new RangeError(`Value ${parameter.value} is out of range for DECIMAL(${precision}, ${parameter.scale}).`);
91
+ }
92
+ const buffer = Buffer.alloc(1 + dataLength);
93
+ buffer.writeUInt8(sign, 0);
94
+ for (let i = 1; i <= dataLength; i++) {
95
+ buffer[i] = Number(magnitude & 0xffn);
96
+ magnitude >>= 8n;
92
97
  }
98
+ yield buffer;
93
99
  },
94
100
  validate: function (value) {
95
101
  if (value == null) {
@@ -104,4 +110,4 @@ const Decimal = {
104
110
  };
105
111
  var _default = exports.default = Decimal;
106
112
  module.exports = Decimal;
107
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVjaW1hbG4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTlVMTF9MRU5HVEgiLCJCdWZmZXIiLCJmcm9tIiwiRGVjaW1hbCIsImlkIiwidHlwZSIsIm5hbWUiLCJkZWNsYXJhdGlvbiIsInBhcmFtZXRlciIsInJlc29sdmVQcmVjaXNpb24iLCJyZXNvbHZlU2NhbGUiLCJwcmVjaXNpb24iLCJ2YWx1ZSIsInNjYWxlIiwiZ2VuZXJhdGVUeXBlSW5mbyIsIl9vcHRpb25zIiwiRGVjaW1hbE4iLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsIm9wdGlvbnMiLCJnZW5lcmF0ZVBhcmFtZXRlckRhdGEiLCJzaWduIiwiTWF0aCIsInJvdW5kIiwiYWJzIiwicG93IiwiYnVmZmVyIiwiYWxsb2MiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVSW50MzJMRSIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVJbnQ2NExFIiwiZGF0YSIsInZhbGlkYXRlIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiVHlwZUVycm9yIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvZGVjaW1hbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcbmltcG9ydCBEZWNpbWFsTiBmcm9tICcuL2RlY2ltYWxuJztcbmltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4uL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuXG5jb25zdCBOVUxMX0xFTkdUSCA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7XG5cbmNvbnN0IERlY2ltYWw6IERhdGFUeXBlICYgeyByZXNvbHZlUHJlY2lzaW9uOiBOb25OdWxsYWJsZTxEYXRhVHlwZVsncmVzb2x2ZVByZWNpc2lvbiddPiwgcmVzb2x2ZVNjYWxlOiBOb25OdWxsYWJsZTxEYXRhVHlwZVsncmVzb2x2ZVNjYWxlJ10+IH0gPSB7XG4gIGlkOiAweDM3LFxuICB0eXBlOiAnREVDSU1BTCcsXG4gIG5hbWU6ICdEZWNpbWFsJyxcblxuICBkZWNsYXJhdGlvbjogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuICdkZWNpbWFsKCcgKyAodGhpcy5yZXNvbHZlUHJlY2lzaW9uKHBhcmFtZXRlcikpICsgJywgJyArICh0aGlzLnJlc29sdmVTY2FsZShwYXJhbWV0ZXIpKSArICcpJztcbiAgfSxcblxuICByZXNvbHZlUHJlY2lzaW9uOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyLnByZWNpc2lvbjtcbiAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAxODtcbiAgICB9XG4gIH0sXG5cbiAgcmVzb2x2ZVNjYWxlOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICBpZiAocGFyYW1ldGVyLnNjYWxlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXIuc2NhbGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSxcblxuICBnZW5lcmF0ZVR5cGVJbmZvKHBhcmFtZXRlciwgX29wdGlvbnMpIHtcbiAgICBsZXQgcHJlY2lzaW9uO1xuICAgIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uISA8PSA5KSB7XG4gICAgICBwcmVjaXNpb24gPSAweDA1O1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gMTkpIHtcbiAgICAgIHByZWNpc2lvbiA9IDB4MDk7XG4gICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uISA8PSAyOCkge1xuICAgICAgcHJlY2lzaW9uID0gMHgwRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlY2lzaW9uID0gMHgxMTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oW0RlY2ltYWxOLmlkLCBwcmVjaXNpb24sIHBhcmFtZXRlci5wcmVjaXNpb24hLCBwYXJhbWV0ZXIuc2NhbGUhXSk7XG4gIH0sXG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgocGFyYW1ldGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhcmFtZXRlci52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gTlVMTF9MRU5HVEg7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlY2lzaW9uID0gcGFyYW1ldGVyLnByZWNpc2lvbiE7XG4gICAgaWYgKHByZWNpc2lvbiA8PSA5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDVdKTtcbiAgICB9IGVsc2UgaWYgKHByZWNpc2lvbiA8PSAxOSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDA5XSk7XG4gICAgfSBlbHNlIGlmIChwcmVjaXNpb24gPD0gMjgpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwRF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MTFdKTtcbiAgICB9XG4gIH0sXG5cbiAgKiBnZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhcmFtZXRlci52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbiA9IHBhcmFtZXRlci52YWx1ZSA8IDAgPyAwIDogMTtcbiAgICBjb25zdCB2YWx1ZSA9IE1hdGgucm91bmQoTWF0aC5hYnMocGFyYW1ldGVyLnZhbHVlICogTWF0aC5wb3coMTAsIHBhcmFtZXRlci5zY2FsZSEpKSk7XG4gICAgY29uc3QgcHJlY2lzaW9uID0gcGFyYW1ldGVyLnByZWNpc2lvbiE7XG4gICAgaWYgKHByZWNpc2lvbiA8PSA5KSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoNSk7XG4gICAgICBidWZmZXIud3JpdGVVSW50OChzaWduLCAwKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKHZhbHVlLCAxKTtcbiAgICAgIHlpZWxkIGJ1ZmZlcjtcbiAgICB9IGVsc2UgaWYgKHByZWNpc2lvbiA8PSAxOSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoOSk7XG4gICAgICBidWZmZXIud3JpdGVVSW50OChzaWduKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ2NExFKHZhbHVlKTtcbiAgICAgIHlpZWxkIGJ1ZmZlci5kYXRhO1xuICAgIH0gZWxzZSBpZiAocHJlY2lzaW9uIDw9IDI4KSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcigxMyk7XG4gICAgICBidWZmZXIud3JpdGVVSW50OChzaWduKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ2NExFKHZhbHVlKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKDB4MDAwMDAwMDApO1xuICAgICAgeWllbGQgYnVmZmVyLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDE3KTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHNpZ24pO1xuICAgICAgYnVmZmVyLndyaXRlVUludDY0TEUodmFsdWUpO1xuICAgICAgYnVmZmVyLndyaXRlVUludDMyTEUoMHgwMDAwMDAwMCk7XG4gICAgICBidWZmZXIud3JpdGVVSW50MzJMRSgweDAwMDAwMDAwKTtcbiAgICAgIHlpZWxkIGJ1ZmZlci5kYXRhO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBudW1iZXIuJyk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgRGVjaW1hbDtcbm1vZHVsZS5leHBvcnRzID0gRGVjaW1hbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsU0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsdUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFpRixTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVqRixNQUFNRyxXQUFXLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFdkMsTUFBTUMsT0FBd0ksR0FBRztFQUMvSUMsRUFBRSxFQUFFLElBQUk7RUFDUkMsSUFBSSxFQUFFLFNBQVM7RUFDZkMsSUFBSSxFQUFFLFNBQVM7RUFFZkMsV0FBVyxFQUFFLFNBQUFBLENBQVNDLFNBQVMsRUFBRTtJQUMvQixPQUFPLFVBQVUsR0FBSSxJQUFJLENBQUNDLGdCQUFnQixDQUFDRCxTQUFTLENBQUUsR0FBRyxJQUFJLEdBQUksSUFBSSxDQUFDRSxZQUFZLENBQUNGLFNBQVMsQ0FBRSxHQUFHLEdBQUc7RUFDdEcsQ0FBQztFQUVEQyxnQkFBZ0IsRUFBRSxTQUFBQSxDQUFTRCxTQUFTLEVBQUU7SUFDcEMsSUFBSUEsU0FBUyxDQUFDRyxTQUFTLElBQUksSUFBSSxFQUFFO01BQy9CLE9BQU9ILFNBQVMsQ0FBQ0csU0FBUztJQUM1QixDQUFDLE1BQU0sSUFBSUgsU0FBUyxDQUFDSSxLQUFLLEtBQUssSUFB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
113
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVjaW1hbG4iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTExfTEVOR1RIIiwiQnVmZmVyIiwiZnJvbSIsIkRlY2ltYWwiLCJpZCIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJwYXJhbWV0ZXIiLCJyZXNvbHZlUHJlY2lzaW9uIiwicmVzb2x2ZVNjYWxlIiwicHJlY2lzaW9uIiwidmFsdWUiLCJzY2FsZSIsImdlbmVyYXRlVHlwZUluZm8iLCJfb3B0aW9ucyIsIkRlY2ltYWxOIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJvcHRpb25zIiwiZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhIiwic2lnbiIsImRhdGFMZW5ndGgiLCJtYWduaXR1ZGUiLCJCaWdJbnQiLCJNYXRoIiwicm91bmQiLCJhYnMiLCJwb3ciLCJSYW5nZUVycm9yIiwiYnVmZmVyIiwiYWxsb2MiLCJ3cml0ZVVJbnQ4IiwiaSIsIk51bWJlciIsInZhbGlkYXRlIiwicGFyc2VGbG9hdCIsImlzTmFOIiwiVHlwZUVycm9yIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvZGVjaW1hbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcbmltcG9ydCBEZWNpbWFsTiBmcm9tICcuL2RlY2ltYWxuJztcblxuY29uc3QgTlVMTF9MRU5HVEggPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG5jb25zdCBEZWNpbWFsOiBEYXRhVHlwZSAmIHsgcmVzb2x2ZVByZWNpc2lvbjogTm9uTnVsbGFibGU8RGF0YVR5cGVbJ3Jlc29sdmVQcmVjaXNpb24nXT4sIHJlc29sdmVTY2FsZTogTm9uTnVsbGFibGU8RGF0YVR5cGVbJ3Jlc29sdmVTY2FsZSddPiB9ID0ge1xuICBpZDogMHgzNyxcbiAgdHlwZTogJ0RFQ0lNQUwnLFxuICBuYW1lOiAnRGVjaW1hbCcsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIHJldHVybiAnZGVjaW1hbCgnICsgKHRoaXMucmVzb2x2ZVByZWNpc2lvbihwYXJhbWV0ZXIpKSArICcsICcgKyAodGhpcy5yZXNvbHZlU2NhbGUocGFyYW1ldGVyKSkgKyAnKSc7XG4gIH0sXG5cbiAgcmVzb2x2ZVByZWNpc2lvbjogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgaWYgKHBhcmFtZXRlci5wcmVjaXNpb24gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlci5wcmVjaXNpb247XG4gICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMTg7XG4gICAgfVxuICB9LFxuXG4gIHJlc29sdmVTY2FsZTogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgaWYgKHBhcmFtZXRlci5zY2FsZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyLnNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH0sXG5cbiAgZ2VuZXJhdGVUeXBlSW5mbyhwYXJhbWV0ZXIsIF9vcHRpb25zKSB7XG4gICAgbGV0IHByZWNpc2lvbjtcbiAgICBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gOSkge1xuICAgICAgcHJlY2lzaW9uID0gMHgwNTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci5wcmVjaXNpb24hIDw9IDE5KSB7XG4gICAgICBwcmVjaXNpb24gPSAweDA5O1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gMjgpIHtcbiAgICAgIHByZWNpc2lvbiA9IDB4MEQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWNpc2lvbiA9IDB4MTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtEZWNpbWFsTi5pZCwgcHJlY2lzaW9uLCBwYXJhbWV0ZXIucHJlY2lzaW9uISwgcGFyYW1ldGVyLnNjYWxlIV0pO1xuICB9LFxuXG4gIGdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5VTExfTEVOR1RIO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWNpc2lvbiA9IHBhcmFtZXRlci5wcmVjaXNpb24hO1xuICAgIGlmIChwcmVjaXNpb24gPD0gOSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDA1XSk7XG4gICAgfSBlbHNlIGlmIChwcmVjaXNpb24gPD0gMTkpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwOV0pO1xuICAgIH0gZWxzZSBpZiAocHJlY2lzaW9uIDw9IDI4KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MERdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDExXSk7XG4gICAgfVxuICB9LFxuXG4gICogZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ24gPSBwYXJhbWV0ZXIudmFsdWUgPCAwID8gMCA6IDE7XG4gICAgY29uc3QgcHJlY2lzaW9uID0gcGFyYW1ldGVyLnByZWNpc2lvbiE7XG5cbiAgICAvLyBOdW1iZXIgb2YgYnl0ZXMgdXNlZCB0byBlbmNvZGUgdGhlIHVuc2lnbmVkIG1hZ25pdHVkZSBmb3IgdGhlIHJlc29sdmVkIHByZWNpc2lvbi5cbiAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICBpZiAocHJlY2lzaW9uIDw9IDkpIHtcbiAgICAgIGRhdGFMZW5ndGggPSA0O1xuICAgIH0gZWxzZSBpZiAocHJlY2lzaW9uIDw9IDE5KSB7XG4gICAgICBkYXRhTGVuZ3RoID0gODtcbiAgICB9IGVsc2UgaWYgKHByZWNpc2lvbiA8PSAyOCkge1xuICAgICAgZGF0YUxlbmd0aCA9IDEyO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhTGVuZ3RoID0gMTY7XG4gICAgfVxuXG4gICAgLy8gRW5jb2RlIHRoZSBzY2FsZWQgbWFnbml0dWRlIGFzIGEgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnRlZ2VyIHNwYW5uaW5nIHRoZVxuICAgIC8vIGZ1bGwgd2lkdGguIFVzaW5nIGEgQmlnSW50IGF2b2lkcyB0aGUgYFJhbmdlRXJyb3JgIHRoYXQgd2FzIHRocm93biB3aGVuIHRoZVxuICAgIC8vIHNjYWxlZCB2YWx1ZSBleGNlZWRlZCAyXjY0IGZvciBoaWdoLXByZWNpc2lvbiBjb2x1bW5zLCBhbmQgY29ycmVjdGx5IGZpbGxzIHRoZVxuICAgIC8vIGhpZ2gtb3JkZXIgd29yZHMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZW0gdG8gemVyby5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlZGlvdXNqcy90ZWRpb3VzL2lzc3Vlcy8xNzMzXG4gICAgbGV0IG1hZ25pdHVkZSA9IEJpZ0ludChNYXRoLnJvdW5kKE1hdGguYWJzKHBhcmFtZXRlci52YWx1ZSAqIE1hdGgucG93KDEwLCBwYXJhbWV0ZXIuc2NhbGUhKSkpKTtcblxuICAgIC8vIEd1YXJkIGFnYWluc3QgdmFsdWVzIHRoYXQgb3ZlcmZsb3cgdGhlIGZpZWxkOiB0aHJvd2luZyBoZXJlIHN1cmZhY2VzIGFcbiAgICAvLyBjYXRjaGFibGUgZXJyb3IgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIHNpbGVudGx5IHRydW5jYXRpbmcgdGhlIG1hZ25pdHVkZS5cbiAgICBpZiAobWFnbml0dWRlID49ICgxbiA8PCBCaWdJbnQoOCAqIGRhdGFMZW5ndGgpKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlICR7cGFyYW1ldGVyLnZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgZm9yIERFQ0lNQUwoJHtwcmVjaXNpb259LCAke3BhcmFtZXRlci5zY2FsZX0pLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxICsgZGF0YUxlbmd0aCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgoc2lnbiwgMCk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gZGF0YUxlbmd0aDsgaSsrKSB7XG4gICAgICBidWZmZXJbaV0gPSBOdW1iZXIobWFnbml0dWRlICYgMHhmZm4pO1xuICAgICAgbWFnbml0dWRlID4+PSA4bjtcbiAgICB9XG4gICAgeWllbGQgYnVmZmVyO1xuICB9LFxuXG4gIHZhbGlkYXRlOiBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG51bWJlci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEZWNpbWFsO1xubW9kdWxlLmV4cG9ydHMgPSBEZWNpbWFsO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxTQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBa0MsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFbEMsTUFBTUcsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXZDLE1BQU1DLE9BQXdJLEdBQUc7RUFDL0lDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLElBQUksRUFBRSxTQUFT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
@@ -1 +1 @@
1
- {"version":3,"file":"decimal.js","names":["_decimaln","_interopRequireDefault","require","_writableTrackingBuffer","e","__esModule","default","NULL_LENGTH","Buffer","from","Decimal","id","type","name","declaration","parameter","resolvePrecision","resolveScale","precision","value","scale","generateTypeInfo","_options","DecimalN","generateParameterLength","options","generateParameterData","sign","Math","round","abs","pow","buffer","alloc","writeUInt8","writeUInt32LE","WritableTrackingBuffer","writeUInt64LE","data","validate","parseFloat","isNaN","TypeError","_default","exports","module"],"sources":["../../src/data-types/decimal.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport DecimalN from './decimaln';\nimport WritableTrackingBuffer from '../tracking-buffer/writable-tracking-buffer';\n\nconst NULL_LENGTH = Buffer.from([0x00]);\n\nconst Decimal: DataType & { resolvePrecision: NonNullable<DataType['resolvePrecision']>, resolveScale: NonNullable<DataType['resolveScale']> } = {\n id: 0x37,\n type: 'DECIMAL',\n name: 'Decimal',\n\n declaration: function(parameter) {\n return 'decimal(' + (this.resolvePrecision(parameter)) + ', ' + (this.resolveScale(parameter)) + ')';\n },\n\n resolvePrecision: function(parameter) {\n if (parameter.precision != null) {\n return parameter.precision;\n } else if (parameter.value === null) {\n return 1;\n } else {\n return 18;\n }\n },\n\n resolveScale: function(parameter) {\n if (parameter.scale != null) {\n return parameter.scale;\n } else {\n return 0;\n }\n },\n\n generateTypeInfo(parameter, _options) {\n let precision;\n if (parameter.precision! <= 9) {\n precision = 0x05;\n } else if (parameter.precision! <= 19) {\n precision = 0x09;\n } else if (parameter.precision! <= 28) {\n precision = 0x0D;\n } else {\n precision = 0x11;\n }\n\n return Buffer.from([DecimalN.id, precision, parameter.precision!, parameter.scale!]);\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n const precision = parameter.precision!;\n if (precision <= 9) {\n return Buffer.from([0x05]);\n } else if (precision <= 19) {\n return Buffer.from([0x09]);\n } else if (precision <= 28) {\n return Buffer.from([0x0D]);\n } else {\n return Buffer.from([0x11]);\n }\n },\n\n * generateParameterData(parameter, options) {\n if (parameter.value == null) {\n return;\n }\n\n const sign = parameter.value < 0 ? 0 : 1;\n const value = Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale!)));\n const precision = parameter.precision!;\n if (precision <= 9) {\n const buffer = Buffer.alloc(5);\n buffer.writeUInt8(sign, 0);\n buffer.writeUInt32LE(value, 1);\n yield buffer;\n } else if (precision <= 19) {\n const buffer = new WritableTrackingBuffer(9);\n buffer.writeUInt8(sign);\n buffer.writeUInt64LE(value);\n yield buffer.data;\n } else if (precision <= 28) {\n const buffer = new WritableTrackingBuffer(13);\n buffer.writeUInt8(sign);\n buffer.writeUInt64LE(value);\n buffer.writeUInt32LE(0x00000000);\n yield buffer.data;\n } else {\n const buffer = new WritableTrackingBuffer(17);\n buffer.writeUInt8(sign);\n buffer.writeUInt64LE(value);\n buffer.writeUInt32LE(0x00000000);\n buffer.writeUInt32LE(0x00000000);\n yield buffer.data;\n }\n },\n\n validate: function(value): number | null {\n if (value == null) {\n return null;\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n throw new TypeError('Invalid number.');\n }\n return value;\n }\n};\n\nexport default Decimal;\nmodule.exports = Decimal;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"decimal.js","names":["_decimaln","_interopRequireDefault","require","e","__esModule","default","NULL_LENGTH","Buffer","from","Decimal","id","type","name","declaration","parameter","resolvePrecision","resolveScale","precision","value","scale","generateTypeInfo","_options","DecimalN","generateParameterLength","options","generateParameterData","sign","dataLength","magnitude","BigInt","Math","round","abs","pow","RangeError","buffer","alloc","writeUInt8","i","Number","validate","parseFloat","isNaN","TypeError","_default","exports","module"],"sources":["../../src/data-types/decimal.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport DecimalN from './decimaln';\n\nconst NULL_LENGTH = Buffer.from([0x00]);\n\nconst Decimal: DataType & { resolvePrecision: NonNullable<DataType['resolvePrecision']>, resolveScale: NonNullable<DataType['resolveScale']> } = {\n id: 0x37,\n type: 'DECIMAL',\n name: 'Decimal',\n\n declaration: function(parameter) {\n return 'decimal(' + (this.resolvePrecision(parameter)) + ', ' + (this.resolveScale(parameter)) + ')';\n },\n\n resolvePrecision: function(parameter) {\n if (parameter.precision != null) {\n return parameter.precision;\n } else if (parameter.value === null) {\n return 1;\n } else {\n return 18;\n }\n },\n\n resolveScale: function(parameter) {\n if (parameter.scale != null) {\n return parameter.scale;\n } else {\n return 0;\n }\n },\n\n generateTypeInfo(parameter, _options) {\n let precision;\n if (parameter.precision! <= 9) {\n precision = 0x05;\n } else if (parameter.precision! <= 19) {\n precision = 0x09;\n } else if (parameter.precision! <= 28) {\n precision = 0x0D;\n } else {\n precision = 0x11;\n }\n\n return Buffer.from([DecimalN.id, precision, parameter.precision!, parameter.scale!]);\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n const precision = parameter.precision!;\n if (precision <= 9) {\n return Buffer.from([0x05]);\n } else if (precision <= 19) {\n return Buffer.from([0x09]);\n } else if (precision <= 28) {\n return Buffer.from([0x0D]);\n } else {\n return Buffer.from([0x11]);\n }\n },\n\n * generateParameterData(parameter, options) {\n if (parameter.value == null) {\n return;\n }\n\n const sign = parameter.value < 0 ? 0 : 1;\n const precision = parameter.precision!;\n\n // Number of bytes used to encode the unsigned magnitude for the resolved precision.\n let dataLength;\n if (precision <= 9) {\n dataLength = 4;\n } else if (precision <= 19) {\n dataLength = 8;\n } else if (precision <= 28) {\n dataLength = 12;\n } else {\n dataLength = 16;\n }\n\n // Encode the scaled magnitude as a little-endian unsigned integer spanning the\n // full width. Using a BigInt avoids the `RangeError` that was thrown when the\n // scaled value exceeded 2^64 for high-precision columns, and correctly fills the\n // high-order words instead of hardcoding them to zero.\n // See https://github.com/tediousjs/tedious/issues/1733\n let magnitude = BigInt(Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale!))));\n\n // Guard against values that overflow the field: throwing here surfaces a\n // catchable error to the caller instead of silently truncating the magnitude.\n if (magnitude >= (1n << BigInt(8 * dataLength))) {\n throw new RangeError(`Value ${parameter.value} is out of range for DECIMAL(${precision}, ${parameter.scale}).`);\n }\n\n const buffer = Buffer.alloc(1 + dataLength);\n buffer.writeUInt8(sign, 0);\n for (let i = 1; i <= dataLength; i++) {\n buffer[i] = Number(magnitude & 0xffn);\n magnitude >>= 8n;\n }\n yield buffer;\n },\n\n validate: function(value): number | null {\n if (value == null) {\n return null;\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n throw new TypeError('Invalid number.');\n }\n return value;\n }\n};\n\nexport default Decimal;\nmodule.exports = Decimal;\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _numericn = _interopRequireDefault(require("./numericn"));
8
- var _writableTrackingBuffer = _interopRequireDefault(require("../tracking-buffer/writable-tracking-buffer"));
9
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
9
  const NULL_LENGTH = Buffer.from([0x00]);
11
10
  const Numeric = {
@@ -64,31 +63,39 @@ const Numeric = {
64
63
  return;
65
64
  }
66
65
  const sign = parameter.value < 0 ? 0 : 1;
67
- const value = Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale)));
68
- if (parameter.precision <= 9) {
69
- const buffer = Buffer.alloc(5);
70
- buffer.writeUInt8(sign, 0);
71
- buffer.writeUInt32LE(value, 1);
72
- yield buffer;
73
- } else if (parameter.precision <= 19) {
74
- const buffer = new _writableTrackingBuffer.default(10);
75
- buffer.writeUInt8(sign);
76
- buffer.writeUInt64LE(value);
77
- yield buffer.data;
78
- } else if (parameter.precision <= 28) {
79
- const buffer = new _writableTrackingBuffer.default(14);
80
- buffer.writeUInt8(sign);
81
- buffer.writeUInt64LE(value);
82
- buffer.writeUInt32LE(0x00000000);
83
- yield buffer.data;
66
+ const precision = parameter.precision;
67
+
68
+ // Number of bytes used to encode the unsigned magnitude for the resolved precision.
69
+ let dataLength;
70
+ if (precision <= 9) {
71
+ dataLength = 4;
72
+ } else if (precision <= 19) {
73
+ dataLength = 8;
74
+ } else if (precision <= 28) {
75
+ dataLength = 12;
84
76
  } else {
85
- const buffer = new _writableTrackingBuffer.default(18);
86
- buffer.writeUInt8(sign);
87
- buffer.writeUInt64LE(value);
88
- buffer.writeUInt32LE(0x00000000);
89
- buffer.writeUInt32LE(0x00000000);
90
- yield buffer.data;
77
+ dataLength = 16;
78
+ }
79
+
80
+ // Encode the scaled magnitude as a little-endian unsigned integer spanning the
81
+ // full width. Using a BigInt avoids the `RangeError` that was thrown when the
82
+ // scaled value exceeded 2^64 for high-precision columns, and correctly fills the
83
+ // high-order words instead of hardcoding them to zero.
84
+ // See https://github.com/tediousjs/tedious/issues/1733
85
+ let magnitude = BigInt(Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale))));
86
+
87
+ // Guard against values that overflow the field: throwing here surfaces a
88
+ // catchable error to the caller instead of silently truncating the magnitude.
89
+ if (magnitude >= 1n << BigInt(8 * dataLength)) {
90
+ throw new RangeError(`Value ${parameter.value} is out of range for NUMERIC(${precision}, ${parameter.scale}).`);
91
+ }
92
+ const buffer = Buffer.alloc(1 + dataLength);
93
+ buffer.writeUInt8(sign, 0);
94
+ for (let i = 1; i <= dataLength; i++) {
95
+ buffer[i] = Number(magnitude & 0xffn);
96
+ magnitude >>= 8n;
91
97
  }
98
+ yield buffer;
92
99
  },
93
100
  validate: function (value) {
94
101
  if (value == null) {
@@ -103,4 +110,4 @@ const Numeric = {
103
110
  };
104
111
  var _default = exports.default = Numeric;
105
112
  module.exports = Numeric;
106
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbnVtZXJpY24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTlVMTF9MRU5HVEgiLCJCdWZmZXIiLCJmcm9tIiwiTnVtZXJpYyIsImlkIiwidHlwZSIsIm5hbWUiLCJkZWNsYXJhdGlvbiIsInBhcmFtZXRlciIsInJlc29sdmVQcmVjaXNpb24iLCJyZXNvbHZlU2NhbGUiLCJwcmVjaXNpb24iLCJ2YWx1ZSIsInNjYWxlIiwiZ2VuZXJhdGVUeXBlSW5mbyIsIk51bWVyaWNOIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJvcHRpb25zIiwiZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhIiwic2lnbiIsIk1hdGgiLCJyb3VuZCIsImFicyIsInBvdyIsImJ1ZmZlciIsImFsbG9jIiwid3JpdGVVSW50OCIsIndyaXRlVUludDMyTEUiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50NjRMRSIsImRhdGEiLCJ2YWxpZGF0ZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsIlR5cGVFcnJvciIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL251bWVyaWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5pbXBvcnQgTnVtZXJpY04gZnJvbSAnLi9udW1lcmljbic7XG5pbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3QgTlVMTF9MRU5HVEggPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG5jb25zdCBOdW1lcmljOiBEYXRhVHlwZSAmIHsgcmVzb2x2ZVNjYWxlOiBOb25OdWxsYWJsZTxEYXRhVHlwZVsncmVzb2x2ZVNjYWxlJ10+LCByZXNvbHZlUHJlY2lzaW9uOiBOb25OdWxsYWJsZTxEYXRhVHlwZVsncmVzb2x2ZVByZWNpc2lvbiddPiB9ID0ge1xuICBpZDogMHgzRixcbiAgdHlwZTogJ05VTUVSSUMnLFxuICBuYW1lOiAnTnVtZXJpYycsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIHJldHVybiAnbnVtZXJpYygnICsgKHRoaXMucmVzb2x2ZVByZWNpc2lvbihwYXJhbWV0ZXIpKSArICcsICcgKyAodGhpcy5yZXNvbHZlU2NhbGUocGFyYW1ldGVyKSkgKyAnKSc7XG4gIH0sXG5cbiAgcmVzb2x2ZVByZWNpc2lvbjogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgaWYgKHBhcmFtZXRlci5wcmVjaXNpb24gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlci5wcmVjaXNpb247XG4gICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMTg7XG4gICAgfVxuICB9LFxuXG4gIHJlc29sdmVTY2FsZTogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgaWYgKHBhcmFtZXRlci5zY2FsZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyLnNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH0sXG5cbiAgZ2VuZXJhdGVUeXBlSW5mbyhwYXJhbWV0ZXIpIHtcbiAgICBsZXQgcHJlY2lzaW9uO1xuICAgIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uISA8PSA5KSB7XG4gICAgICBwcmVjaXNpb24gPSAweDA1O1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gMTkpIHtcbiAgICAgIHByZWNpc2lvbiA9IDB4MDk7XG4gICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uISA8PSAyOCkge1xuICAgICAgcHJlY2lzaW9uID0gMHgwRDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlY2lzaW9uID0gMHgxMTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oW051bWVyaWNOLmlkLCBwcmVjaXNpb24sIHBhcmFtZXRlci5wcmVjaXNpb24hLCBwYXJhbWV0ZXIuc2NhbGUhXSk7XG4gIH0sXG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgocGFyYW1ldGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhcmFtZXRlci52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gTlVMTF9MRU5HVEg7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlY2lzaW9uID0gcGFyYW1ldGVyLnByZWNpc2lvbiE7XG4gICAgaWYgKHByZWNpc2lvbiA8PSA5KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDVdKTtcbiAgICB9IGVsc2UgaWYgKHByZWNpc2lvbiA8PSAxOSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDA5XSk7XG4gICAgfSBlbHNlIGlmIChwcmVjaXNpb24gPD0gMjgpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwRF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MTFdKTtcbiAgICB9XG4gIH0sXG5cbiAgKiBnZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhcmFtZXRlci52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbiA9IHBhcmFtZXRlci52YWx1ZSA8IDAgPyAwIDogMTtcbiAgICBjb25zdCB2YWx1ZSA9IE1hdGgucm91bmQoTWF0aC5hYnMocGFyYW1ldGVyLnZhbHVlICogTWF0aC5wb3coMTAsIHBhcmFtZXRlci5zY2FsZSEpKSk7XG4gICAgaWYgKHBhcmFtZXRlci5wcmVjaXNpb24hIDw9IDkpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg1KTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHNpZ24sIDApO1xuICAgICAgYnVmZmVyLndyaXRlVUludDMyTEUodmFsdWUsIDEpO1xuICAgICAgeWllbGQgYnVmZmVyO1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gMTkpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHNpZ24pO1xuICAgICAgYnVmZmVyLndyaXRlVUludDY0TEUodmFsdWUpO1xuICAgICAgeWllbGQgYnVmZmVyLmRhdGE7XG4gICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uISA8PSAyOCkge1xuICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoMTQpO1xuICAgICAgYnVmZmVyLndyaXRlVUludDgoc2lnbik7XG4gICAgICBidWZmZXIud3JpdGVVSW50NjRMRSh2YWx1ZSk7XG4gICAgICBidWZmZXIud3JpdGVVSW50MzJMRSgweDAwMDAwMDAwKTtcbiAgICAgIHlpZWxkIGJ1ZmZlci5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgV3JpdGFibGVUcmFja2luZ0J1ZmZlcigxOCk7XG4gICAgICBidWZmZXIud3JpdGVVSW50OChzaWduKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ2NExFKHZhbHVlKTtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKDB4MDAwMDAwMDApO1xuICAgICAgYnVmZmVyLndyaXRlVUludDMyTEUoMHgwMDAwMDAwMCk7XG4gICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGU6IGZ1bmN0aW9uKHZhbHVlKTogbnVsbCB8IG51bWJlciB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbnVtYmVyLicpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE51bWVyaWM7XG5tb2R1bGUuZXhwb3J0cyA9IE51bWVyaWM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFNBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLHVCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFBaUYsU0FBQUQsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakYsTUFBTUcsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXZDLE1BQU1DLE9BQXdJLEdBQUc7RUFDL0lDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLElBQUksRUFBRSxTQUFTO0VBRWZDLFdBQVcsRUFBRSxTQUFBQSxDQUFTQyxTQUFTLEVBQUU7SUFDL0IsT0FBTyxVQUFVLEdBQUksSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ0QsU0FBUyxDQUFFLEdBQUcsSUFBSSxHQUFJLElBQUksQ0FBQ0UsWUFBWSxDQUFDRixTQUFTLENBQUUsR0FBRyxHQUFHO0VBQ3RHLENBQUM7RUFFREMsZ0JBQWdCLEVBQUUsU0FBQUEsQ0FBU0QsU0FBUyxFQUFFO0lBQ3BDLElBQUlBLFNBQVMsQ0FBQ0csU0FBUyxJQUFJLElBQUksRUFBRTtNQUMvQixPQUFPSCxTQUFTLENBQUNHLFNBQVM7SUFDNUIsQ0FBQyxNQUFNLElBQUlILFNBQVMsQ0FBQ0ksS0FBSyxLQUFLLElBQUksRUFBRTtNQUNuQyxPQUFPLENBQUM7SUFDVixDQUFD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
113
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbnVtZXJpY24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk5VTExfTEVOR1RIIiwiQnVmZmVyIiwiZnJvbSIsIk51bWVyaWMiLCJpZCIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJwYXJhbWV0ZXIiLCJyZXNvbHZlUHJlY2lzaW9uIiwicmVzb2x2ZVNjYWxlIiwicHJlY2lzaW9uIiwidmFsdWUiLCJzY2FsZSIsImdlbmVyYXRlVHlwZUluZm8iLCJOdW1lcmljTiIsImdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoIiwib3B0aW9ucyIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInNpZ24iLCJkYXRhTGVuZ3RoIiwibWFnbml0dWRlIiwiQmlnSW50IiwiTWF0aCIsInJvdW5kIiwiYWJzIiwicG93IiwiUmFuZ2VFcnJvciIsImJ1ZmZlciIsImFsbG9jIiwid3JpdGVVSW50OCIsImkiLCJOdW1iZXIiLCJ2YWxpZGF0ZSIsInBhcnNlRmxvYXQiLCJpc05hTiIsIlR5cGVFcnJvciIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL251bWVyaWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5pbXBvcnQgTnVtZXJpY04gZnJvbSAnLi9udW1lcmljbic7XG5cbmNvbnN0IE5VTExfTEVOR1RIID0gQnVmZmVyLmZyb20oWzB4MDBdKTtcblxuY29uc3QgTnVtZXJpYzogRGF0YVR5cGUgJiB7IHJlc29sdmVTY2FsZTogTm9uTnVsbGFibGU8RGF0YVR5cGVbJ3Jlc29sdmVTY2FsZSddPiwgcmVzb2x2ZVByZWNpc2lvbjogTm9uTnVsbGFibGU8RGF0YVR5cGVbJ3Jlc29sdmVQcmVjaXNpb24nXT4gfSA9IHtcbiAgaWQ6IDB4M0YsXG4gIHR5cGU6ICdOVU1FUklDJyxcbiAgbmFtZTogJ051bWVyaWMnLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICByZXR1cm4gJ251bWVyaWMoJyArICh0aGlzLnJlc29sdmVQcmVjaXNpb24ocGFyYW1ldGVyKSkgKyAnLCAnICsgKHRoaXMucmVzb2x2ZVNjYWxlKHBhcmFtZXRlcikpICsgJyknO1xuICB9LFxuXG4gIHJlc29sdmVQcmVjaXNpb246IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIGlmIChwYXJhbWV0ZXIucHJlY2lzaW9uICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXIucHJlY2lzaW9uO1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDE4O1xuICAgIH1cbiAgfSxcblxuICByZXNvbHZlU2NhbGU6IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIGlmIChwYXJhbWV0ZXIuc2NhbGUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlci5zY2FsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9LFxuXG4gIGdlbmVyYXRlVHlwZUluZm8ocGFyYW1ldGVyKSB7XG4gICAgbGV0IHByZWNpc2lvbjtcbiAgICBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gOSkge1xuICAgICAgcHJlY2lzaW9uID0gMHgwNTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci5wcmVjaXNpb24hIDw9IDE5KSB7XG4gICAgICBwcmVjaXNpb24gPSAweDA5O1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnByZWNpc2lvbiEgPD0gMjgpIHtcbiAgICAgIHByZWNpc2lvbiA9IDB4MEQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWNpc2lvbiA9IDB4MTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtOdW1lcmljTi5pZCwgcHJlY2lzaW9uLCBwYXJhbWV0ZXIucHJlY2lzaW9uISwgcGFyYW1ldGVyLnNjYWxlIV0pO1xuICB9LFxuXG4gIGdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5VTExfTEVOR1RIO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWNpc2lvbiA9IHBhcmFtZXRlci5wcmVjaXNpb24hO1xuICAgIGlmIChwcmVjaXNpb24gPD0gOSkge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDA1XSk7XG4gICAgfSBlbHNlIGlmIChwcmVjaXNpb24gPD0gMTkpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwOV0pO1xuICAgIH0gZWxzZSBpZiAocHJlY2lzaW9uIDw9IDI4KSB7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MERdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDExXSk7XG4gICAgfVxuICB9LFxuXG4gICogZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ24gPSBwYXJhbWV0ZXIudmFsdWUgPCAwID8gMCA6IDE7XG4gICAgY29uc3QgcHJlY2lzaW9uID0gcGFyYW1ldGVyLnByZWNpc2lvbiE7XG5cbiAgICAvLyBOdW1iZXIgb2YgYnl0ZXMgdXNlZCB0byBlbmNvZGUgdGhlIHVuc2lnbmVkIG1hZ25pdHVkZSBmb3IgdGhlIHJlc29sdmVkIHByZWNpc2lvbi5cbiAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICBpZiAocHJlY2lzaW9uIDw9IDkpIHtcbiAgICAgIGRhdGFMZW5ndGggPSA0O1xuICAgIH0gZWxzZSBpZiAocHJlY2lzaW9uIDw9IDE5KSB7XG4gICAgICBkYXRhTGVuZ3RoID0gODtcbiAgICB9IGVsc2UgaWYgKHByZWNpc2lvbiA8PSAyOCkge1xuICAgICAgZGF0YUxlbmd0aCA9IDEyO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhTGVuZ3RoID0gMTY7XG4gICAgfVxuXG4gICAgLy8gRW5jb2RlIHRoZSBzY2FsZWQgbWFnbml0dWRlIGFzIGEgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnRlZ2VyIHNwYW5uaW5nIHRoZVxuICAgIC8vIGZ1bGwgd2lkdGguIFVzaW5nIGEgQmlnSW50IGF2b2lkcyB0aGUgYFJhbmdlRXJyb3JgIHRoYXQgd2FzIHRocm93biB3aGVuIHRoZVxuICAgIC8vIHNjYWxlZCB2YWx1ZSBleGNlZWRlZCAyXjY0IGZvciBoaWdoLXByZWNpc2lvbiBjb2x1bW5zLCBhbmQgY29ycmVjdGx5IGZpbGxzIHRoZVxuICAgIC8vIGhpZ2gtb3JkZXIgd29yZHMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZW0gdG8gemVyby5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlZGlvdXNqcy90ZWRpb3VzL2lzc3Vlcy8xNzMzXG4gICAgbGV0IG1hZ25pdHVkZSA9IEJpZ0ludChNYXRoLnJvdW5kKE1hdGguYWJzKHBhcmFtZXRlci52YWx1ZSAqIE1hdGgucG93KDEwLCBwYXJhbWV0ZXIuc2NhbGUhKSkpKTtcblxuICAgIC8vIEd1YXJkIGFnYWluc3QgdmFsdWVzIHRoYXQgb3ZlcmZsb3cgdGhlIGZpZWxkOiB0aHJvd2luZyBoZXJlIHN1cmZhY2VzIGFcbiAgICAvLyBjYXRjaGFibGUgZXJyb3IgdG8gdGhlIGNhbGxlciBpbnN0ZWFkIG9mIHNpbGVudGx5IHRydW5jYXRpbmcgdGhlIG1hZ25pdHVkZS5cbiAgICBpZiAobWFnbml0dWRlID49ICgxbiA8PCBCaWdJbnQoOCAqIGRhdGFMZW5ndGgpKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlICR7cGFyYW1ldGVyLnZhbHVlfSBpcyBvdXQgb2YgcmFuZ2UgZm9yIE5VTUVSSUMoJHtwcmVjaXNpb259LCAke3BhcmFtZXRlci5zY2FsZX0pLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxICsgZGF0YUxlbmd0aCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgoc2lnbiwgMCk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gZGF0YUxlbmd0aDsgaSsrKSB7XG4gICAgICBidWZmZXJbaV0gPSBOdW1iZXIobWFnbml0dWRlICYgMHhmZm4pO1xuICAgICAgbWFnbml0dWRlID4+PSA4bjtcbiAgICB9XG4gICAgeWllbGQgYnVmZmVyO1xuICB9LFxuXG4gIHZhbGlkYXRlOiBmdW5jdGlvbih2YWx1ZSk6IG51bGwgfCBudW1iZXIge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG51bWJlci4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBOdW1lcmljO1xubW9kdWxlLmV4cG9ydHMgPSBOdW1lcmljO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxTQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBa0MsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFbEMsTUFBTUcsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRXZDLE1BQU1DLE9BQXdJLEdBQUc7RUFDL0lDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxTQUFTO0VBQ2ZDLElBQUksRUFBRSxTQUFTO0VBRWZDLFdBQVcsRUFBRSxTQUFB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QUcsQ0FBQztJQUNoQixDQUFDLE1BQU0sSUFBSVQsU0FBUyxJQUFJLEVBQUUsRUFBRTtNQUMxQlMsVUFBVSxHQUFHLEVBQUU7SUFDakIsQ0FBQyxNQUFNO01BQ0xBLFVBQVUsR0FBRyxFQUFFO0lBQ2pCOztJQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQSxJQUFJQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxLQUFLLENBQUNELElBQUksQ0FBQ0UsR0FBRyxDQUFDakIsU0FBUyxDQUFDSSxLQUFLLEdBQUdXLElBQUksQ0FBQ0csR0FBRyxDQUFDLEVBQUUsRUFBRWxCLFNBQVMsQ0FBQ0ssS0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDOztJQUU5RjtJQUNBO0lBQ0EsSUFBSVEsU0FBUyxJQUFLLEVBQUUsSUFBSUMsTUFBTSxDQUFDLENBQUMsR0FBR0YsVUFBVSxDQUFFLEVBQUU7TUFDL0MsTUFBTSxJQUFJTyxVQUFVLENBQUMsU0FBU25CLFNBQVMsQ0FBQ0ksS0FBSyxnQ0FBZ0NELFNBQVMsS0FBS0gsU0FBUyxDQUFDSyxLQUFLLElBQUksQ0FBQztJQUNqSDtJQUVBLE1BQU1lLE1BQU0sR0FBRzNCLE1BQU0sQ0FBQzRCLEtBQUssQ0FBQyxDQUFDLEdBQUdULFVBQVUsQ0FBQztJQUMzQ1EsTUFBTSxDQUFDRSxVQUFVLENBQUNYLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUIsS0FBSyxJQUFJWSxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLElBQUlYLFVBQVUsRUFBRVcsQ0FBQyxFQUFFLEVBQUU7TUFDcENILE1BQU0sQ0FBQ0csQ0FBQyxDQUFDLEdBQUdDLE1BQU0sQ0FBQ1gsU0FBUyxHQUFHLEtBQUssQ0FBQztNQUNyQ0EsU0FBUyxLQUFLLEVBQUU7SUFDbEI7SUFDQSxNQUFNTyxNQUFNO0VBQ2QsQ0FBQztFQUVESyxRQUFRLEVBQUUsU0FBQUEsQ0FBU3JCLEtBQUssRUFBaUI7SUFDdkMsSUFBSUEsS0FBSyxJQUFJLElBQUksRUFBRTtNQUNqQixPQUFPLElBQUk7SUFDYjtJQUNBQSxLQUFLLEdBQUdzQixVQUFVLENBQUN0QixLQUFLLENBQUM7SUFDekIsSUFBSXVCLEtBQUssQ0FBQ3ZCLEtBQUssQ0FBQyxFQUFFO01BQ2hCLE1BQU0sSUFBSXdCLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QztJQUNBLE9BQU94QixLQUFLO0VBQ2Q7QUFDRixDQUFDO0FBQUMsSUFBQXlCLFFBQUEsR0FBQUMsT0FBQSxDQUFBdkMsT0FBQSxHQUVhSSxPQUFPO0FBQ3RCb0MsTUFBTSxDQUFDRCxPQUFPLEdBQUduQyxPQUFPIiwiaWdub3JlTGlzdCI6W119
@@ -1 +1 @@
1
- {"version":3,"file":"numeric.js","names":["_numericn","_interopRequireDefault","require","_writableTrackingBuffer","e","__esModule","default","NULL_LENGTH","Buffer","from","Numeric","id","type","name","declaration","parameter","resolvePrecision","resolveScale","precision","value","scale","generateTypeInfo","NumericN","generateParameterLength","options","generateParameterData","sign","Math","round","abs","pow","buffer","alloc","writeUInt8","writeUInt32LE","WritableTrackingBuffer","writeUInt64LE","data","validate","parseFloat","isNaN","TypeError","_default","exports","module"],"sources":["../../src/data-types/numeric.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport NumericN from './numericn';\nimport WritableTrackingBuffer from '../tracking-buffer/writable-tracking-buffer';\n\nconst NULL_LENGTH = Buffer.from([0x00]);\n\nconst Numeric: DataType & { resolveScale: NonNullable<DataType['resolveScale']>, resolvePrecision: NonNullable<DataType['resolvePrecision']> } = {\n id: 0x3F,\n type: 'NUMERIC',\n name: 'Numeric',\n\n declaration: function(parameter) {\n return 'numeric(' + (this.resolvePrecision(parameter)) + ', ' + (this.resolveScale(parameter)) + ')';\n },\n\n resolvePrecision: function(parameter) {\n if (parameter.precision != null) {\n return parameter.precision;\n } else if (parameter.value === null) {\n return 1;\n } else {\n return 18;\n }\n },\n\n resolveScale: function(parameter) {\n if (parameter.scale != null) {\n return parameter.scale;\n } else {\n return 0;\n }\n },\n\n generateTypeInfo(parameter) {\n let precision;\n if (parameter.precision! <= 9) {\n precision = 0x05;\n } else if (parameter.precision! <= 19) {\n precision = 0x09;\n } else if (parameter.precision! <= 28) {\n precision = 0x0D;\n } else {\n precision = 0x11;\n }\n\n return Buffer.from([NumericN.id, precision, parameter.precision!, parameter.scale!]);\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n const precision = parameter.precision!;\n if (precision <= 9) {\n return Buffer.from([0x05]);\n } else if (precision <= 19) {\n return Buffer.from([0x09]);\n } else if (precision <= 28) {\n return Buffer.from([0x0D]);\n } else {\n return Buffer.from([0x11]);\n }\n },\n\n * generateParameterData(parameter, options) {\n if (parameter.value == null) {\n return;\n }\n\n const sign = parameter.value < 0 ? 0 : 1;\n const value = Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale!)));\n if (parameter.precision! <= 9) {\n const buffer = Buffer.alloc(5);\n buffer.writeUInt8(sign, 0);\n buffer.writeUInt32LE(value, 1);\n yield buffer;\n } else if (parameter.precision! <= 19) {\n const buffer = new WritableTrackingBuffer(10);\n buffer.writeUInt8(sign);\n buffer.writeUInt64LE(value);\n yield buffer.data;\n } else if (parameter.precision! <= 28) {\n const buffer = new WritableTrackingBuffer(14);\n buffer.writeUInt8(sign);\n buffer.writeUInt64LE(value);\n buffer.writeUInt32LE(0x00000000);\n yield buffer.data;\n } else {\n const buffer = new WritableTrackingBuffer(18);\n buffer.writeUInt8(sign);\n buffer.writeUInt64LE(value);\n buffer.writeUInt32LE(0x00000000);\n buffer.writeUInt32LE(0x00000000);\n yield buffer.data;\n }\n },\n\n validate: function(value): null | number {\n if (value == null) {\n return null;\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n throw new TypeError('Invalid number.');\n }\n return value;\n }\n};\n\nexport default Numeric;\nmodule.exports = Numeric;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"numeric.js","names":["_numericn","_interopRequireDefault","require","e","__esModule","default","NULL_LENGTH","Buffer","from","Numeric","id","type","name","declaration","parameter","resolvePrecision","resolveScale","precision","value","scale","generateTypeInfo","NumericN","generateParameterLength","options","generateParameterData","sign","dataLength","magnitude","BigInt","Math","round","abs","pow","RangeError","buffer","alloc","writeUInt8","i","Number","validate","parseFloat","isNaN","TypeError","_default","exports","module"],"sources":["../../src/data-types/numeric.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport NumericN from './numericn';\n\nconst NULL_LENGTH = Buffer.from([0x00]);\n\nconst Numeric: DataType & { resolveScale: NonNullable<DataType['resolveScale']>, resolvePrecision: NonNullable<DataType['resolvePrecision']> } = {\n id: 0x3F,\n type: 'NUMERIC',\n name: 'Numeric',\n\n declaration: function(parameter) {\n return 'numeric(' + (this.resolvePrecision(parameter)) + ', ' + (this.resolveScale(parameter)) + ')';\n },\n\n resolvePrecision: function(parameter) {\n if (parameter.precision != null) {\n return parameter.precision;\n } else if (parameter.value === null) {\n return 1;\n } else {\n return 18;\n }\n },\n\n resolveScale: function(parameter) {\n if (parameter.scale != null) {\n return parameter.scale;\n } else {\n return 0;\n }\n },\n\n generateTypeInfo(parameter) {\n let precision;\n if (parameter.precision! <= 9) {\n precision = 0x05;\n } else if (parameter.precision! <= 19) {\n precision = 0x09;\n } else if (parameter.precision! <= 28) {\n precision = 0x0D;\n } else {\n precision = 0x11;\n }\n\n return Buffer.from([NumericN.id, precision, parameter.precision!, parameter.scale!]);\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n const precision = parameter.precision!;\n if (precision <= 9) {\n return Buffer.from([0x05]);\n } else if (precision <= 19) {\n return Buffer.from([0x09]);\n } else if (precision <= 28) {\n return Buffer.from([0x0D]);\n } else {\n return Buffer.from([0x11]);\n }\n },\n\n * generateParameterData(parameter, options) {\n if (parameter.value == null) {\n return;\n }\n\n const sign = parameter.value < 0 ? 0 : 1;\n const precision = parameter.precision!;\n\n // Number of bytes used to encode the unsigned magnitude for the resolved precision.\n let dataLength;\n if (precision <= 9) {\n dataLength = 4;\n } else if (precision <= 19) {\n dataLength = 8;\n } else if (precision <= 28) {\n dataLength = 12;\n } else {\n dataLength = 16;\n }\n\n // Encode the scaled magnitude as a little-endian unsigned integer spanning the\n // full width. Using a BigInt avoids the `RangeError` that was thrown when the\n // scaled value exceeded 2^64 for high-precision columns, and correctly fills the\n // high-order words instead of hardcoding them to zero.\n // See https://github.com/tediousjs/tedious/issues/1733\n let magnitude = BigInt(Math.round(Math.abs(parameter.value * Math.pow(10, parameter.scale!))));\n\n // Guard against values that overflow the field: throwing here surfaces a\n // catchable error to the caller instead of silently truncating the magnitude.\n if (magnitude >= (1n << BigInt(8 * dataLength))) {\n throw new RangeError(`Value ${parameter.value} is out of range for NUMERIC(${precision}, ${parameter.scale}).`);\n }\n\n const buffer = Buffer.alloc(1 + dataLength);\n buffer.writeUInt8(sign, 0);\n for (let i = 1; i <= dataLength; i++) {\n buffer[i] = Number(magnitude & 0xffn);\n magnitude >>= 8n;\n }\n yield buffer;\n },\n\n validate: function(value): null | number {\n if (value == null) {\n return null;\n }\n value = parseFloat(value);\n if (isNaN(value)) {\n throw new TypeError('Invalid number.');\n }\n return value;\n }\n};\n\nexport default Numeric;\nmodule.exports = Numeric;\n"],"mappings":";;;;;;AACA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAkC,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElC,MAAMG,WAAW,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvC,MAAMC,OAAwI,GAAG;EAC/IC,EAAE,EAAE,IAAI;EACRC,IAAI,EAAE,SAAS;EACfC,IAAI,EAAE,SAAS;EAEfC,WAAW,EAAE,SAAAA,CAASC,SAAS,EAAE;IAC/B,OAAO,UAAU,GAAI,IAAI,CAACC,gBAAgB,CAACD,SAAS,CAAE,GAAG,IAAI,GAAI,IAAI,CAACE,YAAY,CAACF,SAAS,CAAE,GAAG,GAAG;EACtG,CAAC;EAEDC,gBAAgB,EAAE,SAAAA,CAASD,SAAS,EAAE;IACpC,IAAIA,SAAS,CAACG,SAAS,IAAI,IAAI,EAAE;MAC/B,OAAOH,SAAS,CAACG,SAAS;IAC5B,CAAC,MAAM,IAAIH,SAAS,CAACI,KAAK,KAAK,IAAI,EAAE;MACnC,OAAO,CAAC;IACV,CAAC,MAAM;MACL,OAAO,EAAE;IACX;EACF,CAAC;EAEDF,YAAY,EAAE,SAAAA,CAASF,SAAS,EAAE;IAChC,IAAIA,SAAS,CAACK,KAAK,IAAI,IAAI,EAAE;MAC3B,OAAOL,SAAS,CAACK,KAAK;IACxB,CAAC,MAAM;MACL,OAAO,CAAC;IACV;EACF,CAAC;EAEDC,gBAAgBA,CAACN,SAAS,EAAE;IAC1B,IAAIG,SAAS;IACb,IAAIH,SAAS,CAACG,SAAS,IAAK,CAAC,EAAE;MAC7BA,SAAS,GAAG,IAAI;IAClB,CAAC,MAAM,IAAIH,SAAS,CAACG,SAAS,IAAK,EAAE,EAAE;MACrCA,SAAS,GAAG,IAAI;IAClB,CAAC,MAAM,IAAIH,SAAS,CAACG,SAAS,IAAK,EAAE,EAAE;MACrCA,SAAS,GAAG,IAAI;IAClB,CAAC,MAAM;MACLA,SAAS,GAAG,IAAI;IAClB;IAEA,OAAOV,MAAM,CAACC,IAAI,CAAC,CAACa,iBAAQ,CAACX,EAAE,EAAEO,SAAS,EAAEH,SAAS,CAACG,SAAS,EAAGH,SAAS,CAACK,KAAK,CAAE,CAAC;EACtF,CAAC;EAEDG,uBAAuBA,CAACR,SAAS,EAAES,OAAO,EAAE;IAC1C,IAAIT,SAAS,CAACI,KAAK,IAAI,IAAI,EAAE;MAC3B,OAAOZ,WAAW;IACpB;IAEA,MAAMW,SAAS,GAAGH,SAAS,CAACG,SAAU;IACtC,IAAIA,SAAS,IAAI,CAAC,EAAE;MAClB,OAAOV,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,MAAM,IAAIS,SAAS,IAAI,EAAE,EAAE;MAC1B,OAAOV,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,MAAM,IAAIS,SAAS,IAAI,EAAE,EAAE;MAC1B,OAAOV,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,MAAM;MACL,OAAOD,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B;EACF,CAAC;EAED,CAAEgB,qBAAqBA,CAACV,SAAS,EAAES,OAAO,EAAE;IAC1C,IAAIT,SAAS,CAACI,KAAK,IAAI,IAAI,EAAE;MAC3B;IACF;IAEA,MAAMO,IAAI,GAAGX,SAAS,CAACI,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACxC,MAAMD,SAAS,GAAGH,SAAS,CAACG,SAAU;;IAEtC;IACA,IAAIS,UAAU;IACd,IAAIT,SAAS,IAAI,CAAC,EAAE;MAClBS,UAAU,GAAG,CAAC;IAChB,CAAC,MAAM,IAAIT,SAAS,IAAI,EAAE,EAAE;MAC1BS,UAAU,GAAG,CAAC;IAChB,CAAC,MAAM,IAAIT,SAAS,IAAI,EAAE,EAAE;MAC1BS,UAAU,GAAG,EAAE;IACjB,CAAC,MAAM;MACLA,UAAU,GAAG,EAAE;IACjB;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAIC,SAAS,GAAGC,MAAM,CAACC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,GAAG,CAACjB,SAAS,CAACI,KAAK,GAAGW,IAAI,CAACG,GAAG,CAAC,EAAE,EAAElB,SAAS,CAACK,KAAM,CAAC,CAAC,CAAC,CAAC;;IAE9F;IACA;IACA,IAAIQ,SAAS,IAAK,EAAE,IAAIC,MAAM,CAAC,CAAC,GAAGF,UAAU,CAAE,EAAE;MAC/C,MAAM,IAAIO,UAAU,CAAC,SAASnB,SAAS,CAACI,KAAK,gCAAgCD,SAAS,KAAKH,SAAS,CAACK,KAAK,IAAI,CAAC;IACjH;IAEA,MAAMe,MAAM,GAAG3B,MAAM,CAAC4B,KAAK,CAAC,CAAC,GAAGT,UAAU,CAAC;IAC3CQ,MAAM,CAACE,UAAU,CAACX,IAAI,EAAE,CAAC,CAAC;IAC1B,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIX,UAAU,EAAEW,CAAC,EAAE,EAAE;MACpCH,MAAM,CAACG,CAAC,CAAC,GAAGC,MAAM,CAACX,SAAS,GAAG,KAAK,CAAC;MACrCA,SAAS,KAAK,EAAE;IAClB;IACA,MAAMO,MAAM;EACd,CAAC;EAEDK,QAAQ,EAAE,SAAAA,CAASrB,KAAK,EAAiB;IACvC,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI;IACb;IACAA,KAAK,GAAGsB,UAAU,CAACtB,KAAK,CAAC;IACzB,IAAIuB,KAAK,CAACvB,KAAK,CAAC,EAAE;MAChB,MAAM,IAAIwB,SAAS,CAAC,iBAAiB,CAAC;IACxC;IACA,OAAOxB,KAAK;EACd;AACF,CAAC;AAAC,IAAAyB,QAAA,GAAAC,OAAA,CAAAvC,OAAA,GAEaI,OAAO;AACtBoC,MAAM,CAACD,OAAO,GAAGnC,OAAO","ignoreList":[]}
package/lib/message-io.js CHANGED
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _nativeDuplexpair = _interopRequireDefault(require("native-duplexpair"));
8
8
  var tls = _interopRequireWildcard(require("tls"));
9
+ var _net = require("net");
9
10
  var _events = require("events");
10
11
  var _message = _interopRequireDefault(require("./message"));
11
12
  var _packet = require("./packet");
@@ -50,7 +51,13 @@ class MessageIO extends _events.EventEmitter {
50
51
  const securePair = this.securePair = {
51
52
  cleartext: tls.connect({
52
53
  socket: duplexpair.socket1,
53
- servername: hostname,
54
+ // The `host` is used to verify the server's certificate identity.
55
+ // It is not used to establish a connection as a `socket` is
56
+ // specified.
57
+ host: hostname,
58
+ // RFC 6066 does not allow IP addresses to be used as the server
59
+ // name, so omit the SNI extension in that case.
60
+ servername: (0, _net.isIP)(hostname) ? '' : hostname,
54
61
  secureContext: secureContext,
55
62
  rejectUnauthorized: !trustServerCertificate
56
63
  }),
@@ -149,4 +156,4 @@ class MessageIO extends _events.EventEmitter {
149
156
  }
150
157
  var _default = exports.default = MessageIO;
151
158
  module.exports = MessageIO;
152
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbmF0aXZlRHVwbGV4cGFpciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwidGxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfZXZlbnRzIiwiX21lc3NhZ2UiLCJfcGFja2V0IiwiX2luY29taW5nTWVzc2FnZVN0cmVhbSIsIl9vdXRnb2luZ01lc3NhZ2VTdHJlYW0iLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNZXNzYWdlSU8iLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsInNvY2tldCIsInBhY2tldFNpemUiLCJkZWJ1ZyIsInRsc05lZ290aWF0aW9uQ29tcGxldGUiLCJpbmNvbWluZ01lc3NhZ2VTdHJlYW0iLCJJbmNvbWluZ01lc3NhZ2VTdHJlYW0iLCJpbmNvbWluZ01lc3NhZ2VJdGVyYXRvciIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJvdXRnb2luZ01lc3NhZ2VTdHJlYW0iLCJPdXRnb2luZ01lc3NhZ2VTdHJlYW0iLCJwaXBlIiwiYXJncyIsImxlbmd0aCIsImxvZyIsInNlY3VyZVBhaXIiLCJjbGVhcnRleHQiLCJzZXRNYXhTZW5kRnJhZ21lbnQiLCJzdGFydFRscyIsImNyZWRlbnRpYWxzRGV0YWlscyIsImhvc3RuYW1lIiwidHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZSIsIm1heFZlcnNpb24iLCJpbmNsdWRlcyIsInNlY3VyZUNvbnRleHQiLCJjcmVhdGVTZWN1cmVDb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkdXBsZXhwYWlyIiwiRHVwbGV4UGFpciIsImNvbm5lY3QiLCJzb2NrZXQxIiwic2VydmVybmFtZSIsInJlamVjdFVuYXV0aG9yaXplZCIsImVuY3J5cHRlZCIsInNvY2tldDIiLCJvblNlY3VyZUNvbm5lY3QiLCJyZW1vdmVMaXN0ZW5lciIsIm9uUmVhZGFibGUiLCJvbkVycm9yIiwib25jZSIsImVyciIsImRlc3Ryb3kiLCJjaXBoZXIiLCJnZXRDaXBoZXIiLCJuYW1lIiwidmVyc2lvbiIsImVtaXQiLCJ1bnBpcGUiLCJtZXNzYWdlIiwiTWVzc2FnZSIsInR5cGUiLCJUWVBFIiwiUFJFTE9HSU4iLCJyZXNldENvbm5lY3Rpb24iLCJjaHVuayIsInJlYWQiLCJ3cml0ZSIsImVuZCIsInJlYWRNZXNzYWdlIiwidGhlbiIsInJlc3BvbnNlIiwiZGF0YSIsImNhdGNoIiwic2VuZE1lc3NhZ2UiLCJwYWNrZXRUeXBlIiwicmVzdWx0IiwibmV4dCIsImRvbmUiLCJFcnJvciIsInZhbHVlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL21lc3NhZ2UtaW8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IER1cGxleFBhaXIgZnJvbSAnbmF0aXZlLWR1cGxleHBhaXInO1xuXG5pbXBvcnQgeyBEdXBsZXggfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgdGxzIGZyb20gJ3Rscyc7XG5pbXBvcnQgeyBTb2NrZXQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IERlYnVnIGZyb20gJy4vZGVidWcnO1xuXG5pbXBvcnQgTWVzc2FnZSBmcm9tICcuL21lc3NhZ2UnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vcGFja2V0JztcblxuaW1wb3J0IEluY29taW5nTWVzc2FnZVN0cmVhbSBmcm9tICcuL2luY29taW5nLW1lc3NhZ2Utc3RyZWFtJztcbmltcG9ydCBPdXRnb2luZ01lc3NhZ2VTdHJlYW0gZnJvbSAnLi9vdXRnb2luZy1tZXNzYWdlLXN0cmVhbSc7XG5cbmNsYXNzIE1lc3NhZ2VJTyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRlY2xhcmUgc29ja2V0OiBTb2NrZXQ7XG4gIGRlY2xhcmUgZGVidWc6IERlYnVnO1xuXG4gIGRlY2xhcmUgdGxzTmVnb3RpYXRpb25Db21wbGV0ZTogYm9vbGVhbjtcblxuICBkZWNsYXJlIHByaXZhdGUgaW5jb21pbmdNZXNzYWdlU3RyZWFtOiBJbmNvbWluZ01lc3NhZ2VTdHJlYW07XG4gIGRlY2xhcmUgb3V0Z29pbmdNZXNzYWdlU3RyZWFtOiBPdXRnb2luZ01lc3NhZ2VTdHJlYW07XG5cbiAgZGVjbGFyZSBzZWN1cmVQYWlyPzoge1xuICAgIGNsZWFydGV4dDogdGxzLlRMU1NvY2tldDtcbiAgICBlbmNyeXB0ZWQ6IER1cGxleDtcbiAgfTtcblxuICBkZWNsYXJlIGluY29taW5nTWVzc2FnZUl0ZXJhdG9yOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8TWVzc2FnZT47XG5cbiAgY29uc3RydWN0b3Ioc29ja2V0OiBTb2NrZXQsIHBhY2tldFNpemU6IG51bWJlciwgZGVidWc6IERlYnVnKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIHRoaXMudGxzTmVnb3RpYXRpb25Db21wbGV0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0gPSBuZXcgSW5jb21pbmdNZXNzYWdlU3RyZWFtKHRoaXMuZGVidWcpO1xuICAgIHRoaXMuaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IgPSB0aGlzLmluY29taW5nTWVzc2FnZVN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtID0gbmV3IE91dGdvaW5nTWVzc2FnZVN0cmVhbSh0aGlzLmRlYnVnLCB7IHBhY2tldFNpemU6IHBhY2tldFNpemUgfSk7XG5cbiAgICB0aGlzLnNvY2tldC5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcbiAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5waXBlKHRoaXMuc29ja2V0KTtcbiAgfVxuXG4gIHBhY2tldFNpemUoLi4uYXJnczogW251bWJlcl0pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYWNrZXRTaXplID0gYXJnc1swXTtcbiAgICAgIHRoaXMuZGVidWcubG9nKCdQYWNrZXQgc2l6ZSBjaGFuZ2VkIGZyb20gJyArIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUgKyAnIHRvICcgKyBwYWNrZXRTaXplKTtcbiAgICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUgPSBwYWNrZXRTaXplO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlY3VyZVBhaXIpIHtcbiAgICAgIHRoaXMuc2VjdXJlUGFpci5jbGVhcnRleHQuc2V0TWF4U2VuZEZyYWdtZW50KHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplO1xuICB9XG5cbiAgLy8gTmVnb3RpYXRlIFRMUyBlbmNyeXB0aW9uLlxuICBzdGFydFRscyhjcmVkZW50aWFsc0RldGFpbHM6IHRscy5TZWN1cmVDb250ZXh0T3B0aW9ucywgaG9zdG5hbWU6IHN0cmluZywgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZTogYm9vbGVhbikge1xuICAgIGlmICghY3JlZGVudGlhbHNEZXRhaWxzLm1heFZlcnNpb24gfHwgIVsnVExTdjEuMicsICdUTFN2MS4xJywgJ1RMU3YxJ10uaW5jbHVkZXMoY3JlZGVudGlhbHNEZXRhaWxzLm1heFZlcnNpb24pKSB7XG4gICAgICBjcmVkZW50aWFsc0RldGFpbHMubWF4VmVyc2lvbiA9ICdUTFN2MS4yJztcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cmVDb250ZXh0ID0gdGxzLmNyZWF0ZVNlY3VyZUNvbnRleHQoY3JlZGVudGlhbHNEZXRhaWxzKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBkdXBsZXhwYWlyID0gbmV3IER1cGxleFBhaXIoKTtcbiAgICAgIGNvbnN0IHNlY3VyZVBhaXIgPSB0aGlzLnNlY3VyZVBhaXIgPSB7XG4gICAgICAgIGNsZWFydGV4dDogdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgIHNvY2tldDogZHVwbGV4cGFpci5zb2NrZXQxIGFzIFNvY2tldCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBob3N0bmFtZSxcbiAgICAgICAgICBzZWN1cmVDb250ZXh0OiBzZWN1cmVDb250ZXh0LFxuICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogIXRydXN0U2VydmVyQ2VydGlmaWNhdGVcbiAgICAgICAgfSksXG4gICAgICAgIGVuY3J5cHRlZDogZHVwbGV4cGFpci5zb2NrZXQyXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblNlY3VyZUNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvblNlY3VyZUNvbm5lY3QpO1xuXG4gICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhbnkgZXJyb3JzIGZyb20gdGhpcyBwb2ludCBvbixcbiAgICAgICAgLy8gd2UganVzdCBmb3J3YXJkIHRoZW0gdG8gdGhlIGFjdHVhbCBuZXR3b3JrIHNvY2tldC5cbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQub25jZSgnZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQuZGVzdHJveShlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjaXBoZXIgPSBzZWN1cmVQYWlyLmNsZWFydGV4dC5nZXRDaXBoZXIoKTtcbiAgICAgICAgaWYgKGNpcGhlcikge1xuICAgICAgICAgIHRoaXMuZGVidWcubG9nKCdUTFMgbmVnb3RpYXRlZCAoJyArIGNpcGhlci5uYW1lICsgJywgJyArIGNpcGhlci52ZXJzaW9uICsgJyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgnc2VjdXJlJywgc2VjdXJlUGFpci5jbGVhcnRleHQpO1xuXG4gICAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LnNldE1heFNlbmRGcmFnbWVudCh0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplKTtcblxuICAgICAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS51bnBpcGUodGhpcy5zb2NrZXQpO1xuICAgICAgICB0aGlzLnNvY2tldC51bnBpcGUodGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0pO1xuXG4gICAgICAgIHRoaXMuc29ja2V0LnBpcGUoc2VjdXJlUGFpci5lbmNyeXB0ZWQpO1xuICAgICAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5waXBlKHRoaXMuc29ja2V0KTtcblxuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcbiAgICAgICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGlwZShzZWN1cmVQYWlyLmNsZWFydGV4dCk7XG5cbiAgICAgICAgdGhpcy50bHNOZWdvdGlhdGlvbkNvbXBsZXRlID0gdHJ1ZTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkVycm9yID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvblNlY3VyZUNvbm5lY3QpO1xuXG4gICAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgc2VjdXJlUGFpci5lbmNyeXB0ZWQuZGVzdHJveSgpO1xuXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25SZWFkYWJsZSA9ICgpID0+IHtcbiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBoYW5kc2hha2UgZGF0YSBvbiB0aGUgZW5jcnlwdGVkIHN0cmVhbSBvZiB0aGUgc2VjdXJlIHBhaXIsXG4gICAgICAgIC8vIHdlIHdyYXAgaXQgaW50byBhIGBQUkVMT0dJTmAgbWVzc2FnZSBhbmQgc2VuZCBpdCB0byB0aGUgc2VydmVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBGb3IgZWFjaCBgUFJFTE9HSU5gIG1lc3NhZ2Ugd2Ugc2VudCB3ZSBnZXQgYmFjayBleGFjdGx5IG9uZSByZXNwb25zZSBtZXNzYWdlXG4gICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNlcnZlcidzIGhhbmRzaGFrZSByZXNwb25zZSBkYXRhLlxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoeyB0eXBlOiBUWVBFLlBSRUxPR0lOLCByZXNldENvbm5lY3Rpb246IGZhbHNlIH0pO1xuXG4gICAgICAgIGxldCBjaHVuaztcbiAgICAgICAgd2hpbGUgKGNodW5rID0gc2VjdXJlUGFpci5lbmNyeXB0ZWQucmVhZCgpKSB7XG4gICAgICAgICAgbWVzc2FnZS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG5cbiAgICAgICAgdGhpcy5yZWFkTWVzc2FnZSgpLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgLy8gU2V0dXAgcmVhZGFibGUgaGFuZGxlciBmb3IgdGhlIG5leHQgcm91bmQgb2YgaGFuZHNoYWtpbmcuXG4gICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgYHNlY3VyZUNvbm5lY3RgIG9uIHRoZSBjbGVhcnRleHQgc2lkZVxuICAgICAgICAgIC8vIG9mIHRoZSBzZWN1cmUgcGFpciwgdGhlIGByZWFkYWJsZWAgaGFuZGxlciBpcyBjbGVhcmVkXG4gICAgICAgICAgLy8gYW5kIG5vIGZ1cnRoZXIgaGFuZHNoYWtlIGhhbmRsaW5nIHdpbGwgaGFwcGVuLlxuICAgICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLm9uY2UoJ3JlYWRhYmxlJywgb25SZWFkYWJsZSk7XG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIFdlIGZlZWQgdGhlIHNlcnZlcidzIGhhbmRzaGFrZSByZXNwb25zZSBiYWNrIGludG8gdGhlXG4gICAgICAgICAgICAvLyBlbmNyeXB0ZWQgZW5kIG9mIHRoZSBzZWN1cmUgcGFpci5cbiAgICAgICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLndyaXRlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2gob25FcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQub25jZSgnc2VjdXJlQ29ubmVjdCcsIG9uU2VjdXJlQ29ubmVjdCk7XG4gICAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5vbmNlKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVE9ETyBsaXN0ZW4gZm9yICdkcmFpbicgZXZlbnQgd2hlbiBzb2NrZXQud3JpdGUgcmV0dXJucyBmYWxzZS5cbiAgLy8gVE9ETyBpbXBsZW1lbnQgaW5jb21wbGV0ZSByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoMi4yLjEuNilcbiAgc2VuZE1lc3NhZ2UocGFja2V0VHlwZTogbnVtYmVyLCBkYXRhPzogQnVmZmVyLCByZXNldENvbm5lY3Rpb24/OiBib29sZWFuKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogcGFja2V0VHlwZSwgcmVzZXRDb25uZWN0aW9uOiByZXNldENvbm5lY3Rpb24gfSk7XG4gICAgbWVzc2FnZS5lbmQoZGF0YSk7XG4gICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCB0aGUgbmV4dCBpbmNvbWluZyBtZXNzYWdlIGZyb20gdGhlIHNvY2tldC5cbiAgICovXG4gIGFzeW5jIHJlYWRNZXNzYWdlKCk6IFByb21pc2U8TWVzc2FnZT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IubmV4dCgpO1xuXG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZW5kIG9mIG1lc3NhZ2Ugc3RyZWFtJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlSU87XG5tb2R1bGUuZXhwb3J0cyA9IE1lc3NhZ2VJTztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLEdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUlBLElBQUFJLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUws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V0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU9DLFFBQVEsSUFBSztVQUMxQztVQUNBO1VBQ0E7VUFDQTtVQUNBL0MsVUFBVSxDQUFDb0IsU0FBUyxDQUFDTSxJQUFJLENBQUMsVUFBVSxFQUFFRixVQUFVLENBQUM7VUFFakQsV0FBVyxNQUFNd0IsSUFBSSxJQUFJRCxRQUFRLEVBQUU7WUFDakM7WUFDQTtZQUNBL0MsVUFBVSxDQUFDb0IsU0FBUyxDQUFDdUIsS0FBSyxDQUFDSyxJQUFJLENBQUM7VUFDbEM7UUFDRixDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDeEIsT0FBTyxDQUFDO01BQ25CLENBQUM7TUFFRHpCLFVBQVUsQ0FBQ0MsU0FBUyxDQUFDeUIsSUFBSSxDQUFDLE9BQU8sRUFBRUQsT0FBTyxDQUFDO01BQzNDekIsVUFBVSxDQUFDQyxTQUFTLENBQUN5QixJQUFJLENBQUMsZUFBZSxFQUFFSixlQUFlLENBQUM7TUFDM0R0QixVQUFVLENBQUNvQixTQUFTLENBQUNNLElBQUksQ0FBQyxVQUFVLEVBQUVGLFVBQVUsQ0FBQztJQUNuRCxDQUFDLENBQUM7RUFDSjs7RUFFQTtFQUNBO0VBQ0EwQixXQUFXQSxDQUFDQyxVQUFrQixFQUFFSCxJQUFhLEVBQUVSLGVBQXlCLEVBQUU7SUFDeEUsTUFBTUwsT0FBTyxHQUFHLElBQUlDLGdCQUFPLENBQUM7TUFBRUMsSUFBSSxFQUFFYyxVQUFVO01BQUVYLGVBQWUsRUFBRUE7SUFBZ0IsQ0FBQyxDQUFDO0lBQ25GTCxPQUFPLENBQUNTLEdBQUcsQ0FBQ0ksSUFBSSxDQUFDO0lBQ2pCLElBQUksQ0FBQ3RELHFCQUFxQixDQUFDaUQsS0FBSyxDQUFDUixPQUFPLENBQUM7SUFDekMsT0FBT0EsT0FBTztFQUNoQjs7RUFFQTtBQUNGO0FBQ0E7RUFDRSxNQUFNVSxXQUFXQSxDQUFBLEVBQXFCO0lBQ3BDLE1BQU1PLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQzdELHVCQUF1QixDQUFDOEQsSUFBSSxDQUFDLENBQUM7SUFFeEQsSUFBSUQsTUFBTSxDQUFDRSxJQUFJLEVBQUU7TUFDZixNQUFNLElBQUlDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQztJQUNyRDtJQUVBLE9BQU9ILE1BQU0sQ0FBQ0ksS0FBSztFQUNyQjtBQUNGO0FBQUMsSUFBQUMsUUFBQSxHQUFBQyxPQUFBLENBQUFyRixPQUFBLEdBRWNTLFNBQVM7QUFDeEI2RSxNQUFNLENBQUNELE9BQU8sR0FBRzVFLFNBQVMiLCJpZ25vcmVMaXN0IjpbXX0=
159
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbmF0aXZlRHVwbGV4cGFpciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwidGxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbmV0IiwiX2V2ZW50cyIsIl9tZXNzYWdlIiwiX3BhY2tldCIsIl9pbmNvbWluZ01lc3NhZ2VTdHJlYW0iLCJfb3V0Z29pbmdNZXNzYWdlU3RyZWFtIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTWVzc2FnZUlPIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJzb2NrZXQiLCJwYWNrZXRTaXplIiwiZGVidWciLCJ0bHNOZWdvdGlhdGlvbkNvbXBsZXRlIiwiaW5jb21pbmdNZXNzYWdlU3RyZWFtIiwiSW5jb21pbmdNZXNzYWdlU3RyZWFtIiwiaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwib3V0Z29pbmdNZXNzYWdlU3RyZWFtIiwiT3V0Z29pbmdNZXNzYWdlU3RyZWFtIiwicGlwZSIsImFyZ3MiLCJsZW5ndGgiLCJsb2ciLCJzZWN1cmVQYWlyIiwiY2xlYXJ0ZXh0Iiwic2V0TWF4U2VuZEZyYWdtZW50Iiwic3RhcnRUbHMiLCJjcmVkZW50aWFsc0RldGFpbHMiLCJob3N0bmFtZSIsInRydXN0U2VydmVyQ2VydGlmaWNhdGUiLCJtYXhWZXJzaW9uIiwiaW5jbHVkZXMiLCJzZWN1cmVDb250ZXh0IiwiY3JlYXRlU2VjdXJlQ29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZHVwbGV4cGFpciIsIkR1cGxleFBhaXIiLCJjb25uZWN0Iiwic29ja2V0MSIsImhvc3QiLCJzZXJ2ZXJuYW1lIiwiaXNJUCIsInJlamVjdFVuYXV0aG9yaXplZCIsImVuY3J5cHRlZCIsInNvY2tldDIiLCJvblNlY3VyZUNvbm5lY3QiLCJyZW1vdmVMaXN0ZW5lciIsIm9uUmVhZGFibGUiLCJvbkVycm9yIiwib25jZSIsImVyciIsImRlc3Ryb3kiLCJjaXBoZXIiLCJnZXRDaXBoZXIiLCJuYW1lIiwidmVyc2lvbiIsImVtaXQiLCJ1bnBpcGUiLCJtZXNzYWdlIiwiTWVzc2FnZSIsInR5cGUiLCJUWVBFIiwiUFJFTE9HSU4iLCJyZXNldENvbm5lY3Rpb24iLCJjaHVuayIsInJlYWQiLCJ3cml0ZSIsImVuZCIsInJlYWRNZXNzYWdlIiwidGhlbiIsInJlc3BvbnNlIiwiZGF0YSIsImNhdGNoIiwic2VuZE1lc3NhZ2UiLCJwYWNrZXRUeXBlIiwicmVzdWx0IiwibmV4dCIsImRvbmUiLCJFcnJvciIsInZhbHVlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL21lc3NhZ2UtaW8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IER1cGxleFBhaXIgZnJvbSAnbmF0aXZlLWR1cGxleHBhaXInO1xuXG5pbXBvcnQgeyBEdXBsZXggfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgdGxzIGZyb20gJ3Rscyc7XG5pbXBvcnQgeyBpc0lQLCBTb2NrZXQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcblxuaW1wb3J0IERlYnVnIGZyb20gJy4vZGVidWcnO1xuXG5pbXBvcnQgTWVzc2FnZSBmcm9tICcuL21lc3NhZ2UnO1xuaW1wb3J0IHsgVFlQRSB9IGZyb20gJy4vcGFja2V0JztcblxuaW1wb3J0IEluY29taW5nTWVzc2FnZVN0cmVhbSBmcm9tICcuL2luY29taW5nLW1lc3NhZ2Utc3RyZWFtJztcbmltcG9ydCBPdXRnb2luZ01lc3NhZ2VTdHJlYW0gZnJvbSAnLi9vdXRnb2luZy1tZXNzYWdlLXN0cmVhbSc7XG5cbmNsYXNzIE1lc3NhZ2VJTyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRlY2xhcmUgc29ja2V0OiBTb2NrZXQ7XG4gIGRlY2xhcmUgZGVidWc6IERlYnVnO1xuXG4gIGRlY2xhcmUgdGxzTmVnb3RpYXRpb25Db21wbGV0ZTogYm9vbGVhbjtcblxuICBkZWNsYXJlIHByaXZhdGUgaW5jb21pbmdNZXNzYWdlU3RyZWFtOiBJbmNvbWluZ01lc3NhZ2VTdHJlYW07XG4gIGRlY2xhcmUgb3V0Z29pbmdNZXNzYWdlU3RyZWFtOiBPdXRnb2luZ01lc3NhZ2VTdHJlYW07XG5cbiAgZGVjbGFyZSBzZWN1cmVQYWlyPzoge1xuICAgIGNsZWFydGV4dDogdGxzLlRMU1NvY2tldDtcbiAgICBlbmNyeXB0ZWQ6IER1cGxleDtcbiAgfTtcblxuICBkZWNsYXJlIGluY29taW5nTWVzc2FnZUl0ZXJhdG9yOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8TWVzc2FnZT47XG5cbiAgY29uc3RydWN0b3Ioc29ja2V0OiBTb2NrZXQsIHBhY2tldFNpemU6IG51bWJlciwgZGVidWc6IERlYnVnKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgIHRoaXMuZGVidWcgPSBkZWJ1ZztcblxuICAgIHRoaXMudGxzTmVnb3RpYXRpb25Db21wbGV0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0gPSBuZXcgSW5jb21pbmdNZXNzYWdlU3RyZWFtKHRoaXMuZGVidWcpO1xuICAgIHRoaXMuaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IgPSB0aGlzLmluY29taW5nTWVzc2FnZVN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtID0gbmV3IE91dGdvaW5nTWVzc2FnZVN0cmVhbSh0aGlzLmRlYnVnLCB7IHBhY2tldFNpemU6IHBhY2tldFNpemUgfSk7XG5cbiAgICB0aGlzLnNvY2tldC5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcbiAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5waXBlKHRoaXMuc29ja2V0KTtcbiAgfVxuXG4gIHBhY2tldFNpemUoLi4uYXJnczogW251bWJlcl0pIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYWNrZXRTaXplID0gYXJnc1swXTtcbiAgICAgIHRoaXMuZGVidWcubG9nKCdQYWNrZXQgc2l6ZSBjaGFuZ2VkIGZyb20gJyArIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUgKyAnIHRvICcgKyBwYWNrZXRTaXplKTtcbiAgICAgIHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUgPSBwYWNrZXRTaXplO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlY3VyZVBhaXIpIHtcbiAgICAgIHRoaXMuc2VjdXJlUGFpci5jbGVhcnRleHQuc2V0TWF4U2VuZEZyYWdtZW50KHRoaXMub3V0Z29pbmdNZXNzYWdlU3RyZWFtLnBhY2tldFNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplO1xuICB9XG5cbiAgLy8gTmVnb3RpYXRlIFRMUyBlbmNyeXB0aW9uLlxuICBzdGFydFRscyhjcmVkZW50aWFsc0RldGFpbHM6IHRscy5TZWN1cmVDb250ZXh0T3B0aW9ucywgaG9zdG5hbWU6IHN0cmluZywgdHJ1c3RTZXJ2ZXJDZXJ0aWZpY2F0ZTogYm9vbGVhbikge1xuICAgIGlmICghY3JlZGVudGlhbHNEZXRhaWxzLm1heFZlcnNpb24gfHwgIVsnVExTdjEuMicsICdUTFN2MS4xJywgJ1RMU3YxJ10uaW5jbHVkZXMoY3JlZGVudGlhbHNEZXRhaWxzLm1heFZlcnNpb24pKSB7XG4gICAgICBjcmVkZW50aWFsc0RldGFpbHMubWF4VmVyc2lvbiA9ICdUTFN2MS4yJztcbiAgICB9XG5cbiAgICBjb25zdCBzZWN1cmVDb250ZXh0ID0gdGxzLmNyZWF0ZVNlY3VyZUNvbnRleHQoY3JlZGVudGlhbHNEZXRhaWxzKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBkdXBsZXhwYWlyID0gbmV3IER1cGxleFBhaXIoKTtcbiAgICAgIGNvbnN0IHNlY3VyZVBhaXIgPSB0aGlzLnNlY3VyZVBhaXIgPSB7XG4gICAgICAgIGNsZWFydGV4dDogdGxzLmNvbm5lY3Qoe1xuICAgICAgICAgIHNvY2tldDogZHVwbGV4cGFpci5zb2NrZXQxIGFzIFNvY2tldCxcbiAgICAgICAgICAvLyBUaGUgYGhvc3RgIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBpZGVudGl0eS5cbiAgICAgICAgICAvLyBJdCBpcyBub3QgdXNlZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIGFzIGEgYHNvY2tldGAgaXNcbiAgICAgICAgICAvLyBzcGVjaWZpZWQuXG4gICAgICAgICAgaG9zdDogaG9zdG5hbWUsXG4gICAgICAgICAgLy8gUkZDIDYwNjYgZG9lcyBub3QgYWxsb3cgSVAgYWRkcmVzc2VzIHRvIGJlIHVzZWQgYXMgdGhlIHNlcnZlclxuICAgICAgICAgIC8vIG5hbWUsIHNvIG9taXQgdGhlIFNOSSBleHRlbnNpb24gaW4gdGhhdCBjYXNlLlxuICAgICAgICAgIHNlcnZlcm5hbWU6IGlzSVAoaG9zdG5hbWUpID8gJycgOiBob3N0bmFtZSxcbiAgICAgICAgICBzZWN1cmVDb250ZXh0OiBzZWN1cmVDb250ZXh0LFxuICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogIXRydXN0U2VydmVyQ2VydGlmaWNhdGVcbiAgICAgICAgfSksXG4gICAgICAgIGVuY3J5cHRlZDogZHVwbGV4cGFpci5zb2NrZXQyXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblNlY3VyZUNvbm5lY3QgPSAoKSA9PiB7XG4gICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvblNlY3VyZUNvbm5lY3QpO1xuXG4gICAgICAgIC8vIElmIHdlIGVuY291bnRlciBhbnkgZXJyb3JzIGZyb20gdGhpcyBwb2ludCBvbixcbiAgICAgICAgLy8gd2UganVzdCBmb3J3YXJkIHRoZW0gdG8gdGhlIGFjdHVhbCBuZXR3b3JrIHNvY2tldC5cbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQub25jZSgnZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQuZGVzdHJveShlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjaXBoZXIgPSBzZWN1cmVQYWlyLmNsZWFydGV4dC5nZXRDaXBoZXIoKTtcbiAgICAgICAgaWYgKGNpcGhlcikge1xuICAgICAgICAgIHRoaXMuZGVidWcubG9nKCdUTFMgbmVnb3RpYXRlZCAoJyArIGNpcGhlci5uYW1lICsgJywgJyArIGNpcGhlci52ZXJzaW9uICsgJyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgnc2VjdXJlJywgc2VjdXJlUGFpci5jbGVhcnRleHQpO1xuXG4gICAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LnNldE1heFNlbmRGcmFnbWVudCh0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS5wYWNrZXRTaXplKTtcblxuICAgICAgICB0aGlzLm91dGdvaW5nTWVzc2FnZVN0cmVhbS51bnBpcGUodGhpcy5zb2NrZXQpO1xuICAgICAgICB0aGlzLnNvY2tldC51bnBpcGUodGhpcy5pbmNvbWluZ01lc3NhZ2VTdHJlYW0pO1xuXG4gICAgICAgIHRoaXMuc29ja2V0LnBpcGUoc2VjdXJlUGFpci5lbmNyeXB0ZWQpO1xuICAgICAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5waXBlKHRoaXMuc29ja2V0KTtcblxuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5waXBlKHRoaXMuaW5jb21pbmdNZXNzYWdlU3RyZWFtKTtcbiAgICAgICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ucGlwZShzZWN1cmVQYWlyLmNsZWFydGV4dCk7XG5cbiAgICAgICAgdGhpcy50bHNOZWdvdGlhdGlvbkNvbXBsZXRlID0gdHJ1ZTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkVycm9yID0gKGVycj86IEVycm9yKSA9PiB7XG4gICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLnJlbW92ZUxpc3RlbmVyKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQucmVtb3ZlTGlzdGVuZXIoJ3NlY3VyZUNvbm5lY3QnLCBvblNlY3VyZUNvbm5lY3QpO1xuXG4gICAgICAgIHNlY3VyZVBhaXIuY2xlYXJ0ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgc2VjdXJlUGFpci5lbmNyeXB0ZWQuZGVzdHJveSgpO1xuXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25SZWFkYWJsZSA9ICgpID0+IHtcbiAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBoYW5kc2hha2UgZGF0YSBvbiB0aGUgZW5jcnlwdGVkIHN0cmVhbSBvZiB0aGUgc2VjdXJlIHBhaXIsXG4gICAgICAgIC8vIHdlIHdyYXAgaXQgaW50byBhIGBQUkVMT0dJTmAgbWVzc2FnZSBhbmQgc2VuZCBpdCB0byB0aGUgc2VydmVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBGb3IgZWFjaCBgUFJFTE9HSU5gIG1lc3NhZ2Ugd2Ugc2VudCB3ZSBnZXQgYmFjayBleGFjdGx5IG9uZSByZXNwb25zZSBtZXNzYWdlXG4gICAgICAgIC8vIHRoYXQgY29udGFpbnMgdGhlIHNlcnZlcidzIGhhbmRzaGFrZSByZXNwb25zZSBkYXRhLlxuICAgICAgICBjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoeyB0eXBlOiBUWVBFLlBSRUxPR0lOLCByZXNldENvbm5lY3Rpb246IGZhbHNlIH0pO1xuXG4gICAgICAgIGxldCBjaHVuaztcbiAgICAgICAgd2hpbGUgKGNodW5rID0gc2VjdXJlUGFpci5lbmNyeXB0ZWQucmVhZCgpKSB7XG4gICAgICAgICAgbWVzc2FnZS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgICAgIG1lc3NhZ2UuZW5kKCk7XG5cbiAgICAgICAgdGhpcy5yZWFkTWVzc2FnZSgpLnRoZW4oYXN5bmMgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgLy8gU2V0dXAgcmVhZGFibGUgaGFuZGxlciBmb3IgdGhlIG5leHQgcm91bmQgb2YgaGFuZHNoYWtpbmcuXG4gICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgYHNlY3VyZUNvbm5lY3RgIG9uIHRoZSBjbGVhcnRleHQgc2lkZVxuICAgICAgICAgIC8vIG9mIHRoZSBzZWN1cmUgcGFpciwgdGhlIGByZWFkYWJsZWAgaGFuZGxlciBpcyBjbGVhcmVkXG4gICAgICAgICAgLy8gYW5kIG5vIGZ1cnRoZXIgaGFuZHNoYWtlIGhhbmRsaW5nIHdpbGwgaGFwcGVuLlxuICAgICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLm9uY2UoJ3JlYWRhYmxlJywgb25SZWFkYWJsZSk7XG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIFdlIGZlZWQgdGhlIHNlcnZlcidzIGhhbmRzaGFrZSByZXNwb25zZSBiYWNrIGludG8gdGhlXG4gICAgICAgICAgICAvLyBlbmNyeXB0ZWQgZW5kIG9mIHRoZSBzZWN1cmUgcGFpci5cbiAgICAgICAgICAgIHNlY3VyZVBhaXIuZW5jcnlwdGVkLndyaXRlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2gob25FcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBzZWN1cmVQYWlyLmNsZWFydGV4dC5vbmNlKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc2VjdXJlUGFpci5jbGVhcnRleHQub25jZSgnc2VjdXJlQ29ubmVjdCcsIG9uU2VjdXJlQ29ubmVjdCk7XG4gICAgICBzZWN1cmVQYWlyLmVuY3J5cHRlZC5vbmNlKCdyZWFkYWJsZScsIG9uUmVhZGFibGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVE9ETyBsaXN0ZW4gZm9yICdkcmFpbicgZXZlbnQgd2hlbiBzb2NrZXQud3JpdGUgcmV0dXJucyBmYWxzZS5cbiAgLy8gVE9ETyBpbXBsZW1lbnQgaW5jb21wbGV0ZSByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoMi4yLjEuNilcbiAgc2VuZE1lc3NhZ2UocGFja2V0VHlwZTogbnVtYmVyLCBkYXRhPzogQnVmZmVyLCByZXNldENvbm5lY3Rpb24/OiBib29sZWFuKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKHsgdHlwZTogcGFja2V0VHlwZSwgcmVzZXRDb25uZWN0aW9uOiByZXNldENvbm5lY3Rpb24gfSk7XG4gICAgbWVzc2FnZS5lbmQoZGF0YSk7XG4gICAgdGhpcy5vdXRnb2luZ01lc3NhZ2VTdHJlYW0ud3JpdGUobWVzc2FnZSk7XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmVhZCB0aGUgbmV4dCBpbmNvbWluZyBtZXNzYWdlIGZyb20gdGhlIHNvY2tldC5cbiAgICovXG4gIGFzeW5jIHJlYWRNZXNzYWdlKCk6IFByb21pc2U8TWVzc2FnZT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaW5jb21pbmdNZXNzYWdlSXRlcmF0b3IubmV4dCgpO1xuXG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZW5kIG9mIG1lc3NhZ2Ugc3RyZWFtJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlSU87XG5tb2R1bGUuZXhwb3J0cyA9IE1lc3NhZ2VJTztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLEdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLElBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUlBLElBQUFLLFFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUVBLElBQUFPLHNCQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxzQkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQThELFNBQUFFLHdCQUFBTyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBVCx1QkFBQSxZQUFBQSxDQUFBTyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"message-io.js","names":["_nativeDuplexpair","_interopRequireDefault","require","tls","_interopRequireWildcard","_events","_message","_packet","_incomingMessageStream","_outgoingMessageStream","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MessageIO","EventEmitter","constructor","socket","packetSize","debug","tlsNegotiationComplete","incomingMessageStream","IncomingMessageStream","incomingMessageIterator","Symbol","asyncIterator","outgoingMessageStream","OutgoingMessageStream","pipe","args","length","log","securePair","cleartext","setMaxSendFragment","startTls","credentialsDetails","hostname","trustServerCertificate","maxVersion","includes","secureContext","createSecureContext","Promise","resolve","reject","duplexpair","DuplexPair","connect","socket1","servername","rejectUnauthorized","encrypted","socket2","onSecureConnect","removeListener","onReadable","onError","once","err","destroy","cipher","getCipher","name","version","emit","unpipe","message","Message","type","TYPE","PRELOGIN","resetConnection","chunk","read","write","end","readMessage","then","response","data","catch","sendMessage","packetType","result","next","done","Error","value","_default","exports","module"],"sources":["../src/message-io.ts"],"sourcesContent":["import DuplexPair from 'native-duplexpair';\n\nimport { Duplex } from 'stream';\nimport * as tls from 'tls';\nimport { Socket } from 'net';\nimport { EventEmitter } from 'events';\n\nimport Debug from './debug';\n\nimport Message from './message';\nimport { TYPE } from './packet';\n\nimport IncomingMessageStream from './incoming-message-stream';\nimport OutgoingMessageStream from './outgoing-message-stream';\n\nclass MessageIO extends EventEmitter {\n declare socket: Socket;\n declare debug: Debug;\n\n declare tlsNegotiationComplete: boolean;\n\n declare private incomingMessageStream: IncomingMessageStream;\n declare outgoingMessageStream: OutgoingMessageStream;\n\n declare securePair?: {\n cleartext: tls.TLSSocket;\n encrypted: Duplex;\n };\n\n declare incomingMessageIterator: AsyncIterableIterator<Message>;\n\n constructor(socket: Socket, packetSize: number, debug: Debug) {\n super();\n\n this.socket = socket;\n this.debug = debug;\n\n this.tlsNegotiationComplete = false;\n\n this.incomingMessageStream = new IncomingMessageStream(this.debug);\n this.incomingMessageIterator = this.incomingMessageStream[Symbol.asyncIterator]();\n\n this.outgoingMessageStream = new OutgoingMessageStream(this.debug, { packetSize: packetSize });\n\n this.socket.pipe(this.incomingMessageStream);\n this.outgoingMessageStream.pipe(this.socket);\n }\n\n packetSize(...args: [number]) {\n if (args.length > 0) {\n const packetSize = args[0];\n this.debug.log('Packet size changed from ' + this.outgoingMessageStream.packetSize + ' to ' + packetSize);\n this.outgoingMessageStream.packetSize = packetSize;\n }\n\n if (this.securePair) {\n this.securePair.cleartext.setMaxSendFragment(this.outgoingMessageStream.packetSize);\n }\n\n return this.outgoingMessageStream.packetSize;\n }\n\n // Negotiate TLS encryption.\n startTls(credentialsDetails: tls.SecureContextOptions, hostname: string, trustServerCertificate: boolean) {\n if (!credentialsDetails.maxVersion || !['TLSv1.2', 'TLSv1.1', 'TLSv1'].includes(credentialsDetails.maxVersion)) {\n credentialsDetails.maxVersion = 'TLSv1.2';\n }\n\n const secureContext = tls.createSecureContext(credentialsDetails);\n\n return new Promise<void>((resolve, reject) => {\n const duplexpair = new DuplexPair();\n const securePair = this.securePair = {\n cleartext: tls.connect({\n socket: duplexpair.socket1 as Socket,\n servername: hostname,\n secureContext: secureContext,\n rejectUnauthorized: !trustServerCertificate\n }),\n encrypted: duplexpair.socket2\n };\n\n const onSecureConnect = () => {\n securePair.encrypted.removeListener('readable', onReadable);\n securePair.cleartext.removeListener('error', onError);\n securePair.cleartext.removeListener('secureConnect', onSecureConnect);\n\n // If we encounter any errors from this point on,\n // we just forward them to the actual network socket.\n securePair.cleartext.once('error', (err) => {\n this.socket.destroy(err);\n });\n\n const cipher = securePair.cleartext.getCipher();\n if (cipher) {\n this.debug.log('TLS negotiated (' + cipher.name + ', ' + cipher.version + ')');\n }\n\n this.emit('secure', securePair.cleartext);\n\n securePair.cleartext.setMaxSendFragment(this.outgoingMessageStream.packetSize);\n\n this.outgoingMessageStream.unpipe(this.socket);\n this.socket.unpipe(this.incomingMessageStream);\n\n this.socket.pipe(securePair.encrypted);\n securePair.encrypted.pipe(this.socket);\n\n securePair.cleartext.pipe(this.incomingMessageStream);\n this.outgoingMessageStream.pipe(securePair.cleartext);\n\n this.tlsNegotiationComplete = true;\n\n resolve();\n };\n\n const onError = (err?: Error) => {\n securePair.encrypted.removeListener('readable', onReadable);\n securePair.cleartext.removeListener('error', onError);\n securePair.cleartext.removeListener('secureConnect', onSecureConnect);\n\n securePair.cleartext.destroy();\n securePair.encrypted.destroy();\n\n reject(err);\n };\n\n const onReadable = () => {\n // When there is handshake data on the encrypted stream of the secure pair,\n // we wrap it into a `PRELOGIN` message and send it to the server.\n //\n // For each `PRELOGIN` message we sent we get back exactly one response message\n // that contains the server's handshake response data.\n const message = new Message({ type: TYPE.PRELOGIN, resetConnection: false });\n\n let chunk;\n while (chunk = securePair.encrypted.read()) {\n message.write(chunk);\n }\n this.outgoingMessageStream.write(message);\n message.end();\n\n this.readMessage().then(async (response) => {\n // Setup readable handler for the next round of handshaking.\n // If we encounter a `secureConnect` on the cleartext side\n // of the secure pair, the `readable` handler is cleared\n // and no further handshake handling will happen.\n securePair.encrypted.once('readable', onReadable);\n\n for await (const data of response) {\n // We feed the server's handshake response back into the\n // encrypted end of the secure pair.\n securePair.encrypted.write(data);\n }\n }).catch(onError);\n };\n\n securePair.cleartext.once('error', onError);\n securePair.cleartext.once('secureConnect', onSecureConnect);\n securePair.encrypted.once('readable', onReadable);\n });\n }\n\n // TODO listen for 'drain' event when socket.write returns false.\n // TODO implement incomplete request cancellation (2.2.1.6)\n sendMessage(packetType: number, data?: Buffer, resetConnection?: boolean) {\n const message = new Message({ type: packetType, resetConnection: resetConnection });\n message.end(data);\n this.outgoingMessageStream.write(message);\n return message;\n }\n\n /**\n * Read the next incoming message from the socket.\n */\n async readMessage(): Promise<Message> {\n const result = await this.incomingMessageIterator.next();\n\n if (result.done) {\n throw new Error('unexpected end of message stream');\n }\n\n return result.value;\n }\n}\n\nexport default MessageIO;\nmodule.exports = MessageIO;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"message-io.js","names":["_nativeDuplexpair","_interopRequireDefault","require","tls","_interopRequireWildcard","_net","_events","_message","_packet","_incomingMessageStream","_outgoingMessageStream","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MessageIO","EventEmitter","constructor","socket","packetSize","debug","tlsNegotiationComplete","incomingMessageStream","IncomingMessageStream","incomingMessageIterator","Symbol","asyncIterator","outgoingMessageStream","OutgoingMessageStream","pipe","args","length","log","securePair","cleartext","setMaxSendFragment","startTls","credentialsDetails","hostname","trustServerCertificate","maxVersion","includes","secureContext","createSecureContext","Promise","resolve","reject","duplexpair","DuplexPair","connect","socket1","host","servername","isIP","rejectUnauthorized","encrypted","socket2","onSecureConnect","removeListener","onReadable","onError","once","err","destroy","cipher","getCipher","name","version","emit","unpipe","message","Message","type","TYPE","PRELOGIN","resetConnection","chunk","read","write","end","readMessage","then","response","data","catch","sendMessage","packetType","result","next","done","Error","value","_default","exports","module"],"sources":["../src/message-io.ts"],"sourcesContent":["import DuplexPair from 'native-duplexpair';\n\nimport { Duplex } from 'stream';\nimport * as tls from 'tls';\nimport { isIP, Socket } from 'net';\nimport { EventEmitter } from 'events';\n\nimport Debug from './debug';\n\nimport Message from './message';\nimport { TYPE } from './packet';\n\nimport IncomingMessageStream from './incoming-message-stream';\nimport OutgoingMessageStream from './outgoing-message-stream';\n\nclass MessageIO extends EventEmitter {\n declare socket: Socket;\n declare debug: Debug;\n\n declare tlsNegotiationComplete: boolean;\n\n declare private incomingMessageStream: IncomingMessageStream;\n declare outgoingMessageStream: OutgoingMessageStream;\n\n declare securePair?: {\n cleartext: tls.TLSSocket;\n encrypted: Duplex;\n };\n\n declare incomingMessageIterator: AsyncIterableIterator<Message>;\n\n constructor(socket: Socket, packetSize: number, debug: Debug) {\n super();\n\n this.socket = socket;\n this.debug = debug;\n\n this.tlsNegotiationComplete = false;\n\n this.incomingMessageStream = new IncomingMessageStream(this.debug);\n this.incomingMessageIterator = this.incomingMessageStream[Symbol.asyncIterator]();\n\n this.outgoingMessageStream = new OutgoingMessageStream(this.debug, { packetSize: packetSize });\n\n this.socket.pipe(this.incomingMessageStream);\n this.outgoingMessageStream.pipe(this.socket);\n }\n\n packetSize(...args: [number]) {\n if (args.length > 0) {\n const packetSize = args[0];\n this.debug.log('Packet size changed from ' + this.outgoingMessageStream.packetSize + ' to ' + packetSize);\n this.outgoingMessageStream.packetSize = packetSize;\n }\n\n if (this.securePair) {\n this.securePair.cleartext.setMaxSendFragment(this.outgoingMessageStream.packetSize);\n }\n\n return this.outgoingMessageStream.packetSize;\n }\n\n // Negotiate TLS encryption.\n startTls(credentialsDetails: tls.SecureContextOptions, hostname: string, trustServerCertificate: boolean) {\n if (!credentialsDetails.maxVersion || !['TLSv1.2', 'TLSv1.1', 'TLSv1'].includes(credentialsDetails.maxVersion)) {\n credentialsDetails.maxVersion = 'TLSv1.2';\n }\n\n const secureContext = tls.createSecureContext(credentialsDetails);\n\n return new Promise<void>((resolve, reject) => {\n const duplexpair = new DuplexPair();\n const securePair = this.securePair = {\n cleartext: tls.connect({\n socket: duplexpair.socket1 as Socket,\n // The `host` is used to verify the server's certificate identity.\n // It is not used to establish a connection as a `socket` is\n // specified.\n host: hostname,\n // RFC 6066 does not allow IP addresses to be used as the server\n // name, so omit the SNI extension in that case.\n servername: isIP(hostname) ? '' : hostname,\n secureContext: secureContext,\n rejectUnauthorized: !trustServerCertificate\n }),\n encrypted: duplexpair.socket2\n };\n\n const onSecureConnect = () => {\n securePair.encrypted.removeListener('readable', onReadable);\n securePair.cleartext.removeListener('error', onError);\n securePair.cleartext.removeListener('secureConnect', onSecureConnect);\n\n // If we encounter any errors from this point on,\n // we just forward them to the actual network socket.\n securePair.cleartext.once('error', (err) => {\n this.socket.destroy(err);\n });\n\n const cipher = securePair.cleartext.getCipher();\n if (cipher) {\n this.debug.log('TLS negotiated (' + cipher.name + ', ' + cipher.version + ')');\n }\n\n this.emit('secure', securePair.cleartext);\n\n securePair.cleartext.setMaxSendFragment(this.outgoingMessageStream.packetSize);\n\n this.outgoingMessageStream.unpipe(this.socket);\n this.socket.unpipe(this.incomingMessageStream);\n\n this.socket.pipe(securePair.encrypted);\n securePair.encrypted.pipe(this.socket);\n\n securePair.cleartext.pipe(this.incomingMessageStream);\n this.outgoingMessageStream.pipe(securePair.cleartext);\n\n this.tlsNegotiationComplete = true;\n\n resolve();\n };\n\n const onError = (err?: Error) => {\n securePair.encrypted.removeListener('readable', onReadable);\n securePair.cleartext.removeListener('error', onError);\n securePair.cleartext.removeListener('secureConnect', onSecureConnect);\n\n securePair.cleartext.destroy();\n securePair.encrypted.destroy();\n\n reject(err);\n };\n\n const onReadable = () => {\n // When there is handshake data on the encrypted stream of the secure pair,\n // we wrap it into a `PRELOGIN` message and send it to the server.\n //\n // For each `PRELOGIN` message we sent we get back exactly one response message\n // that contains the server's handshake response data.\n const message = new Message({ type: TYPE.PRELOGIN, resetConnection: false });\n\n let chunk;\n while (chunk = securePair.encrypted.read()) {\n message.write(chunk);\n }\n this.outgoingMessageStream.write(message);\n message.end();\n\n this.readMessage().then(async (response) => {\n // Setup readable handler for the next round of handshaking.\n // If we encounter a `secureConnect` on the cleartext side\n // of the secure pair, the `readable` handler is cleared\n // and no further handshake handling will happen.\n securePair.encrypted.once('readable', onReadable);\n\n for await (const data of response) {\n // We feed the server's handshake response back into the\n // encrypted end of the secure pair.\n securePair.encrypted.write(data);\n }\n }).catch(onError);\n };\n\n securePair.cleartext.once('error', onError);\n securePair.cleartext.once('secureConnect', onSecureConnect);\n securePair.encrypted.once('readable', onReadable);\n });\n }\n\n // TODO listen for 'drain' event when socket.write returns false.\n // TODO implement incomplete request cancellation (2.2.1.6)\n sendMessage(packetType: number, data?: Buffer, resetConnection?: boolean) {\n const message = new Message({ type: packetType, resetConnection: resetConnection });\n message.end(data);\n this.outgoingMessageStream.write(message);\n return message;\n }\n\n /**\n * Read the next incoming message from the socket.\n */\n async readMessage(): Promise<Message> {\n const result = await this.incomingMessageIterator.next();\n\n if (result.done) {\n throw new Error('unexpected end of message stream');\n }\n\n return result.value;\n }\n}\n\nexport default MessageIO;\nmodule.exports = MessageIO;\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import Connection from '../connection';
2
2
  import Request from '../request';
3
- import { RequestError } from '../errors';
3
+ import { ConnectionError, RequestError } from '../errors';
4
4
  import { BeginTransactionEnvChangeToken, CharsetEnvChangeToken, CollationChangeToken, ColMetadataToken, CommitTransactionEnvChangeToken, DatabaseEnvChangeToken, DatabaseMirroringPartnerEnvChangeToken, DoneInProcToken, DoneProcToken, DoneToken, ErrorMessageToken, FeatureExtAckToken, FedAuthInfoToken, InfoMessageToken, LanguageEnvChangeToken, LoginAckToken, NBCRowToken, OrderToken, PacketSizeEnvChangeToken, ResetConnectionEnvChangeToken, ReturnStatusToken, ReturnValueToken, RollbackTransactionEnvChangeToken, RoutingEnvChangeToken, RowToken, SSPIToken, Token } from './token';
5
5
  import BulkLoad from '../bulk-load';
6
6
  export declare class UnexpectedTokenError extends Error {
@@ -72,6 +72,7 @@ export declare class Login7TokenHandler extends TokenHandler {
72
72
  instance: string;
73
73
  } | undefined;
74
74
  loginAckReceived: boolean;
75
+ loginError: ConnectionError | undefined;
75
76
  constructor(connection: Connection);
76
77
  onInfoMessage(token: InfoMessageToken): void;
77
78
  onErrorMessage(token: ErrorMessageToken): void;