Comparing version 1.0.22 to 1.0.24
@@ -0,1 +1,6 @@ | ||
<a name="1.0.24"></a> | ||
## [1.0.24](https://github.com/GMOD/bam-js/compare/v1.0.22...v1.0.24) (2019-09-27) | ||
<a name="1.0.22"></a> | ||
@@ -2,0 +7,0 @@ ## [1.0.22](https://github.com/GMOD/bam-js/compare/v1.0.20...v1.0.22) (2019-09-03) |
513
dist/bai.js
@@ -1,9 +0,56 @@ | ||
"use strict";var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));var Long = _interopRequireWildcard(require("long")); | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty2(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property")); | ||
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-properties")); | ||
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors")); | ||
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor")); | ||
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols")); | ||
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys")); | ||
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator")); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator")); | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn")); | ||
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf")); | ||
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits")); | ||
var _long = _interopRequireDefault(require("long")); | ||
var _virtualOffset = require("./virtualOffset"); | ||
var _chunk = _interopRequireDefault(require("./chunk")); | ||
var _indexFile = _interopRequireDefault(require("./indexFile"));function ownKeys(object, enumerableOnly) {var keys = Object.keys(object);if (Object.getOwnPropertySymbols) {var symbols = Object.getOwnPropertySymbols(object);if (enumerableOnly) symbols = symbols.filter(function (sym) {return Object.getOwnPropertyDescriptor(object, sym).enumerable;});keys.push.apply(keys, symbols);}return keys;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};if (i % 2) {ownKeys(source, true).forEach(function (key) {(0, _defineProperty2.default)(target, key, source[key]);});} else if (Object.getOwnPropertyDescriptors) {Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));} else {ownKeys(source).forEach(function (key) {Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));});}}return target;} | ||
var _indexFile = _interopRequireDefault(require("./indexFile")); | ||
var _util = require("./util"); | ||
function ownKeys(object, enumerableOnly) { var keys = (0, _keys.default)(object); if (_getOwnPropertySymbols.default) { var symbols = (0, _getOwnPropertySymbols.default)(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return (0, _getOwnPropertyDescriptor.default)(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty3.default)(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors.default) { (0, _defineProperties.default)(target, (0, _getOwnPropertyDescriptors.default)(source)); } else { ownKeys(source).forEach(function (key) { (0, _defineProperty2.default)(target, key, (0, _getOwnPropertyDescriptor.default)(source, key)); }); } } return target; } | ||
var BAI_MAGIC = 21578050; // BAI\1 | ||
var _require = require('./util'),longToNumber = _require.longToNumber,abortBreakPoint = _require.abortBreakPoint,canMergeBlocks = _require.canMergeBlocks; | ||
@@ -13,62 +60,159 @@ function roundDown(n, multiple) { | ||
} | ||
function roundUp(n, multiple) { | ||
return n - n % multiple + multiple; | ||
}var | ||
} | ||
BAI = /*#__PURE__*/function (_IndexFile) {(0, _inherits2.default)(BAI, _IndexFile);function BAI() {(0, _classCallCheck2.default)(this, BAI);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BAI).apply(this, arguments));}(0, _createClass2.default)(BAI, [{ key: "parsePseudoBin", value: function parsePseudoBin( | ||
bytes, offset) { | ||
var lineCount = longToNumber( | ||
Long.fromBytesLE(bytes.slice(offset + 16, offset + 24), true)); | ||
var BAI = | ||
/*#__PURE__*/ | ||
function (_IndexFile) { | ||
(0, _inherits2.default)(BAI, _IndexFile); | ||
return { lineCount: lineCount }; | ||
} }, { key: "lineCount", value: function () {var _lineCount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee( | ||
function BAI() { | ||
(0, _classCallCheck2.default)(this, BAI); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BAI).apply(this, arguments)); | ||
} | ||
refId) {var index, ret;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:_context.next = 2;return ( | ||
this.parse());case 2:_context.t0 = refId;index = _context.sent.indices[_context.t0];if ( | ||
index) {_context.next = 6;break;}return _context.abrupt("return", | ||
-1);case 6: | ||
(0, _createClass2.default)(BAI, [{ | ||
key: "parsePseudoBin", | ||
value: function parsePseudoBin(bytes, offset) { | ||
var lineCount = (0, _util.longToNumber)(_long.default.fromBytesLE(Array.prototype.slice.call(bytes, offset + 16, offset + 24), true)); | ||
return { | ||
lineCount: lineCount | ||
}; | ||
} | ||
}, { | ||
key: "lineCount", | ||
value: function () { | ||
var _lineCount = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(refId) { | ||
var index, ret; | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.parse(); | ||
ret = index.stats || {};return _context.abrupt("return", | ||
ret.lineCount === undefined ? -1 : ret.lineCount);case 8:case "end":return _context.stop();}}}, _callee, this);}));function lineCount(_x) {return _lineCount.apply(this, arguments);}return lineCount;}() | ||
case 2: | ||
_context.t0 = refId; | ||
index = _context.sent.indices[_context.t0]; | ||
if (index) { | ||
_context.next = 6; | ||
break; | ||
} | ||
// fetch and parse the index | ||
}, { key: "_parse", value: function () {var _parse2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(abortSignal) {var data, bytes, depth, binLimit, currOffset, i, binCount, stats, binIndex, j, bin, chunkCount, chunks, k, u, v, linearCount, linearIndex, _k;return _regenerator.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0: | ||
data = { bai: true, maxBlockSize: 1 << 16 };_context2.next = 3;return ( | ||
this.filehandle.readFile({ signal: abortSignal }));case 3:bytes = _context2.sent;if (!( | ||
return _context.abrupt("return", -1); | ||
case 6: | ||
ret = index.stats || {}; | ||
return _context.abrupt("return", ret.lineCount === undefined ? -1 : ret.lineCount); | ||
bytes.readUInt32LE(0) !== BAI_MAGIC)) {_context2.next = 6;break;}throw ( | ||
new Error('Not a BAI file'));case 6: | ||
case 8: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function lineCount(_x) { | ||
return _lineCount.apply(this, arguments); | ||
} | ||
return lineCount; | ||
}() // fetch and parse the index | ||
}, { | ||
key: "_parse", | ||
value: function () { | ||
var _parse2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2(abortSignal) { | ||
var data, bytes, depth, binLimit, currOffset, i, binCount, stats, binIndex, j, bin, chunkCount, chunks, k, u, v, linearCount, linearIndex, _k; | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
data = { | ||
bai: true, | ||
maxBlockSize: 1 << 16 | ||
}; | ||
_context2.next = 3; | ||
return this.filehandle.readFile({ | ||
signal: abortSignal | ||
}); | ||
case 3: | ||
bytes = _context2.sent; | ||
if (!(bytes.readUInt32LE(0) !== BAI_MAGIC)) { | ||
_context2.next = 6; | ||
break; | ||
} | ||
throw new Error('Not a BAI file'); | ||
case 6: | ||
data.refCount = bytes.readInt32LE(4); | ||
depth = 5; | ||
binLimit = ((1 << (depth + 1) * 3) - 1) / 7; | ||
binLimit = ((1 << (depth + 1) * 3) - 1) / 7; // read the indexes for each reference sequence | ||
// read the indexes for each reference sequence | ||
data.indices = new Array(data.refCount); | ||
currOffset = 8; | ||
i = 0;case 12:if (!(i < data.refCount)) {_context2.next = 49;break;}_context2.next = 15;return ( | ||
abortBreakPoint(abortSignal));case 15: | ||
i = 0; | ||
case 12: | ||
if (!(i < data.refCount)) { | ||
_context2.next = 49; | ||
break; | ||
} | ||
_context2.next = 15; | ||
return (0, _util.abortBreakPoint)(abortSignal); | ||
case 15: | ||
// the binning index | ||
binCount = bytes.readInt32LE(currOffset); | ||
stats = void 0; | ||
currOffset += 4; | ||
binIndex = {}; | ||
j = 0;case 20:if (!(j < binCount)) {_context2.next = 41;break;} | ||
j = 0; | ||
case 20: | ||
if (!(j < binCount)) { | ||
_context2.next = 41; | ||
break; | ||
} | ||
bin = bytes.readUInt32LE(currOffset); | ||
currOffset += 4;if (!( | ||
bin === binLimit + 1)) {_context2.next = 29;break;} | ||
currOffset += 4; | ||
if (!(bin === binLimit + 1)) { | ||
_context2.next = 29; | ||
break; | ||
} | ||
currOffset += 4; | ||
stats = this.parsePseudoBin(bytes, currOffset); | ||
currOffset += 32;_context2.next = 38;break;case 29:if (!( | ||
bin > binLimit + 1)) {_context2.next = 33;break;}throw ( | ||
new Error('bai index contains too many bins, please use CSI'));case 33: | ||
currOffset += 32; | ||
_context2.next = 38; | ||
break; | ||
case 29: | ||
if (!(bin > binLimit + 1)) { | ||
_context2.next = 33; | ||
break; | ||
} | ||
throw new Error('bai index contains too many bins, please use CSI'); | ||
case 33: | ||
chunkCount = bytes.readInt32LE(currOffset); | ||
currOffset += 4; | ||
chunks = new Array(chunkCount); | ||
for (k = 0; k < chunkCount; k += 1) { | ||
@@ -78,98 +222,188 @@ u = (0, _virtualOffset.fromBytes)(bytes, currOffset); | ||
currOffset += 16; | ||
this._findFirstData(data, u); | ||
chunks[k] = new _chunk.default(u, v, bin); | ||
} | ||
binIndex[bin] = chunks;case 38:j += 1;_context2.next = 20;break;case 41: | ||
binIndex[bin] = chunks; | ||
case 38: | ||
j += 1; | ||
_context2.next = 20; | ||
break; | ||
case 41: | ||
linearCount = bytes.readInt32LE(currOffset); | ||
currOffset += 4; | ||
// as we're going through the linear index, figure out | ||
currOffset += 4; // as we're going through the linear index, figure out | ||
// the smallest virtual offset in the indexes, which | ||
// tells us where the BAM header ends | ||
linearIndex = new Array(linearCount); | ||
for (_k = 0; _k < linearCount; _k += 1) { | ||
linearIndex[_k] = (0, _virtualOffset.fromBytes)(bytes, currOffset); | ||
currOffset += 8; | ||
this._findFirstData(data, linearIndex[_k]); | ||
} | ||
data.indices[i] = { binIndex: binIndex, linearIndex: linearIndex, stats: stats };case 46:i += 1;_context2.next = 12;break;case 49:return _context2.abrupt("return", | ||
data.indices[i] = { | ||
binIndex: binIndex, | ||
linearIndex: linearIndex, | ||
stats: stats | ||
}; | ||
case 46: | ||
i += 1; | ||
_context2.next = 12; | ||
break; | ||
data);case 50:case "end":return _context2.stop();}}}, _callee2, this);}));function _parse(_x2) {return _parse2.apply(this, arguments);}return _parse;}() }, { key: "indexCov", value: function () {var _indexCov = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3( | ||
case 49: | ||
return _context2.abrupt("return", data); | ||
case 50: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
seqId, start, end) {var v, range, indexData, seqIdx, _seqIdx$linearIndex, linearIndex, stats, e, s, depths, totalSize, currentPos, i, j;return _regenerator.default.wrap(function _callee3$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0: | ||
function _parse(_x2) { | ||
return _parse2.apply(this, arguments); | ||
} | ||
return _parse; | ||
}() | ||
}, { | ||
key: "indexCov", | ||
value: function () { | ||
var _indexCov = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee3(seqId, start, end) { | ||
var v, range, indexData, seqIdx, _seqIdx$linearIndex, linearIndex, stats, e, s, depths, totalSize, currentPos, i, j; | ||
return _regenerator.default.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
v = 16384; | ||
range = start !== undefined;_context3.next = 4;return ( | ||
this.parse());case 4:indexData = _context3.sent; | ||
seqIdx = indexData.indices[seqId];if ( | ||
seqIdx) {_context3.next = 8;break;}return _context3.abrupt("return", []);case 8:_seqIdx$linearIndex = | ||
seqIdx.linearIndex, linearIndex = _seqIdx$linearIndex === void 0 ? [] : _seqIdx$linearIndex, stats = seqIdx.stats;if ( | ||
linearIndex.length) {_context3.next = 11;break;}return _context3.abrupt("return", []);case 11: | ||
e = range ? roundUp(end, v) : (linearIndex.length - 1) * v; | ||
s = range ? roundDown(start, v) : 0; | ||
range = start !== undefined; | ||
_context3.next = 4; | ||
return this.parse(); | ||
case 4: | ||
indexData = _context3.sent; | ||
seqIdx = indexData.indices[seqId]; | ||
if (seqIdx) { | ||
_context3.next = 8; | ||
break; | ||
} | ||
return _context3.abrupt("return", []); | ||
case 8: | ||
_seqIdx$linearIndex = seqIdx.linearIndex, linearIndex = _seqIdx$linearIndex === void 0 ? [] : _seqIdx$linearIndex, stats = seqIdx.stats; | ||
if (linearIndex.length) { | ||
_context3.next = 11; | ||
break; | ||
} | ||
return _context3.abrupt("return", []); | ||
case 11: | ||
e = end !== undefined ? roundUp(end, v) : (linearIndex.length - 1) * v; | ||
s = start !== undefined ? roundDown(start, v) : 0; | ||
if (range) { | ||
depths = new Array(Math.floor((e - s) / v)); | ||
depths = new Array((e - s) / v); | ||
} else { | ||
depths = new Array(linearIndex.length - 1); | ||
} | ||
totalSize = linearIndex[linearIndex.length - 1].blockPosition;if (!( | ||
e > (linearIndex.length - 1) * v)) {_context3.next = 17;break;}throw ( | ||
new Error('query outside of range of linear index'));case 17: | ||
totalSize = linearIndex[linearIndex.length - 1].blockPosition; | ||
if (!(e > (linearIndex.length - 1) * v)) { | ||
_context3.next = 17; | ||
break; | ||
} | ||
throw new Error('query outside of range of linear index'); | ||
case 17: | ||
currentPos = linearIndex[s / v].blockPosition; | ||
for (i = s / v, j = 0; i + 1 < e / v; i++, j++) { | ||
for (i = s / v, j = 0; i < e / v; i++, j++) { | ||
depths[j] = { | ||
score: linearIndex[i + 1].blockPosition - currentPos, | ||
start: i * v, | ||
end: i * v + v }; | ||
end: i * v + v | ||
}; | ||
currentPos = linearIndex[i + 1].blockPosition; | ||
}return _context3.abrupt("return", | ||
depths.map(function (d) { | ||
return _objectSpread({}, d, { score: d.score * stats.lineCount / totalSize }); | ||
}));case 20:case "end":return _context3.stop();}}}, _callee3, this);}));function indexCov(_x3, _x4, _x5) {return _indexCov.apply(this, arguments);}return indexCov;}() }, { key: "indexCovTotal", value: function () {var _indexCovTotal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4( | ||
} | ||
return _context3.abrupt("return", depths.map(function (d) { | ||
return _objectSpread({}, d, { | ||
score: d.score * stats.lineCount / totalSize | ||
}); | ||
})); | ||
seqId) {var v, indexData, seqIdx, _seqIdx$linearIndex2, linearIndex, stats, currentPos, depths, totalSize, i, j;return _regenerator.default.wrap(function _callee4$(_context4) {while (1) {switch (_context4.prev = _context4.next) {case 0: | ||
v = 16384;_context4.next = 3;return ( | ||
this.parse());case 3:indexData = _context4.sent; | ||
seqIdx = indexData.indices[seqId];if ( | ||
seqIdx) {_context4.next = 7;break;}return _context4.abrupt("return", []);case 7:_seqIdx$linearIndex2 = | ||
seqIdx.linearIndex, linearIndex = _seqIdx$linearIndex2 === void 0 ? [] : _seqIdx$linearIndex2, stats = seqIdx.stats;if ( | ||
linearIndex.length) {_context4.next = 10;break;}return _context4.abrupt("return", []);case 10: | ||
currentPos = linearIndex[0].blockPosition; | ||
depths = new Array(linearIndex.length - 1); | ||
totalSize = linearIndex.slice(-1)[0].blockPosition; | ||
for (i = 1, j = 0; i < linearIndex.length; i++, j++) { | ||
depths[j] = linearIndex[i].blockPosition - currentPos; | ||
currentPos = linearIndex[i].blockPosition; | ||
}return _context4.abrupt("return", | ||
depths.map(function (d, i) { | ||
return { | ||
score: d * stats.lineCount / totalSize, | ||
start: i * v, | ||
end: i * v + v }; | ||
case 20: | ||
case "end": | ||
return _context3.stop(); | ||
} | ||
} | ||
}, _callee3, this); | ||
})); | ||
}));case 15:case "end":return _context4.stop();}}}, _callee4, this);}));function indexCovTotal(_x6) {return _indexCovTotal.apply(this, arguments);}return indexCovTotal;}() }, { key: "blocksForRange", value: function () {var _blocksForRange = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5( | ||
function indexCov(_x3, _x4, _x5) { | ||
return _indexCov.apply(this, arguments); | ||
} | ||
return indexCov; | ||
}() | ||
}, { | ||
key: "blocksForRange", | ||
value: function () { | ||
var _blocksForRange = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee4(refId, beg, end) { | ||
var indexData, indexes, binIndex, bins, l, numOffsets, i, off, _i, chunks, j, _i2, _i3; | ||
refId, beg, end) {var indexData, indexes, binIndex, bins, l, numOffsets, i, off, _i, chunks, j, _i2, _i3;return _regenerator.default.wrap(function _callee5$(_context5) {while (1) {switch (_context5.prev = _context5.next) {case 0: | ||
if (beg < 0) beg = 0;_context5.next = 3;return ( | ||
return _regenerator.default.wrap(function _callee4$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
if (beg < 0) beg = 0; | ||
_context4.next = 3; | ||
return this.parse(); | ||
this.parse());case 3:indexData = _context5.sent;if ( | ||
indexData) {_context5.next = 6;break;}return _context5.abrupt("return", []);case 6: | ||
indexes = indexData.indices[refId];if ( | ||
indexes) {_context5.next = 9;break;}return _context5.abrupt("return", []);case 9: | ||
case 3: | ||
indexData = _context4.sent; | ||
binIndex = indexes.binIndex; | ||
if (indexData) { | ||
_context4.next = 6; | ||
break; | ||
} | ||
bins = this.reg2bins(beg, end); | ||
return _context4.abrupt("return", []); | ||
case 6: | ||
indexes = indexData.indices[refId]; | ||
if (indexes) { | ||
_context4.next = 9; | ||
break; | ||
} | ||
return _context4.abrupt("return", []); | ||
case 9: | ||
binIndex = indexes.binIndex; | ||
bins = this.reg2bins(beg, end); | ||
numOffsets = 0; | ||
for (i = 0; i < bins.length; i += 1) { | ||
@@ -179,34 +413,44 @@ if (binIndex[bins[i]]) { | ||
} | ||
}if (!( | ||
} | ||
numOffsets === 0)) {_context5.next = 15;break;}return _context5.abrupt("return", []);case 15: | ||
if (!(numOffsets === 0)) { | ||
_context4.next = 15; | ||
break; | ||
} | ||
return _context4.abrupt("return", []); | ||
case 15: | ||
off = []; | ||
numOffsets = 0; | ||
for (_i = 0; _i < bins.length; _i += 1) { | ||
chunks = binIndex[bins[_i]]; | ||
if (chunks) | ||
for (j = 0; j < chunks.length; j += 1) { | ||
off[numOffsets] = new _chunk.default( | ||
chunks[j].minv, | ||
chunks[j].maxv, | ||
chunks[j].bin); | ||
if (chunks) for (j = 0; j < chunks.length; j += 1) { | ||
off[numOffsets] = new _chunk.default(chunks[j].minv, chunks[j].maxv, chunks[j].bin); | ||
numOffsets += 1; | ||
} | ||
}if ( | ||
} | ||
off.length) {_context5.next = 20;break;}return _context5.abrupt("return", []);case 20: | ||
if (off.length) { | ||
_context4.next = 20; | ||
break; | ||
} | ||
off = off.sort(function (a, b) {return a.compareTo(b);}); | ||
// resolve overlaps between adjacent blocks; this may happen due to the merge in indexing | ||
return _context4.abrupt("return", []); | ||
case 20: | ||
off = off.sort(function (a, b) { | ||
return a.compareTo(b); | ||
}); // resolve overlaps between adjacent blocks; this may happen due to the merge in indexing | ||
for (_i2 = 1; _i2 < numOffsets; _i2 += 1) { | ||
if (off[_i2 - 1].maxv.compareTo(off[_i2].minv) >= 0) | ||
off[_i2 - 1].maxv = off[_i2].minv;} | ||
if (off[_i2 - 1].maxv.compareTo(off[_i2].minv) >= 0) off[_i2 - 1].maxv = off[_i2].minv; | ||
} // merge adjacent blocks | ||
// merge adjacent blocks | ||
l = 0; | ||
for (_i3 = 1; _i3 < numOffsets; _i3 += 1) { | ||
if (canMergeBlocks(off[l], off[_i3])) off[l].maxv = off[_i3].maxv;else | ||
{ | ||
if ((0, _util.canMergeBlocks)(off[l], off[_i3])) off[l].maxv = off[_i3].maxv;else { | ||
l += 1; | ||
@@ -217,21 +461,58 @@ off[l].minv = off[_i3].minv; | ||
} | ||
numOffsets = l + 1;return _context5.abrupt("return", | ||
off.slice(0, numOffsets));case 26:case "end":return _context5.stop();}}}, _callee5, this);}));function blocksForRange(_x7, _x8, _x9) {return _blocksForRange.apply(this, arguments);}return blocksForRange;}() | ||
numOffsets = l + 1; | ||
return _context4.abrupt("return", off.slice(0, numOffsets)); | ||
case 26: | ||
case "end": | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _callee4, this); | ||
})); | ||
function blocksForRange(_x6, _x7, _x8) { | ||
return _blocksForRange.apply(this, arguments); | ||
} | ||
return blocksForRange; | ||
}() | ||
/** | ||
* calculate the list of bins that may overlap with region [beg,end) (zero-based half-open) | ||
* @returns {Array[number]} | ||
*/ }, { key: "reg2bins", value: function reg2bins( | ||
beg, end) { | ||
* calculate the list of bins that may overlap with region [beg,end) (zero-based half-open) | ||
* @returns {Array[number]} | ||
*/ | ||
}, { | ||
key: "reg2bins", | ||
value: function reg2bins(beg, end) { | ||
var list = [0]; | ||
end -= 1; | ||
for (var k = 1 + (beg >> 26); k <= 1 + (end >> 26); k += 1) {list.push(k);} | ||
for (var _k2 = 9 + (beg >> 23); _k2 <= 9 + (end >> 23); _k2 += 1) {list.push(_k2);} | ||
for (var _k3 = 73 + (beg >> 20); _k3 <= 73 + (end >> 20); _k3 += 1) {list.push(_k3);} | ||
for (var _k4 = 585 + (beg >> 17); _k4 <= 585 + (end >> 17); _k4 += 1) {list.push(_k4);} | ||
for (var k = 1 + (beg >> 26); k <= 1 + (end >> 26); k += 1) { | ||
list.push(k); | ||
} | ||
for (var _k2 = 9 + (beg >> 23); _k2 <= 9 + (end >> 23); _k2 += 1) { | ||
list.push(_k2); | ||
} | ||
for (var _k3 = 73 + (beg >> 20); _k3 <= 73 + (end >> 20); _k3 += 1) { | ||
list.push(_k3); | ||
} | ||
for (var _k4 = 585 + (beg >> 17); _k4 <= 585 + (end >> 17); _k4 += 1) { | ||
list.push(_k4); | ||
} | ||
for (var _k5 = 4681 + (beg >> 14); _k5 <= 4681 + (end >> 14); _k5 += 1) { | ||
list.push(_k5);} | ||
list.push(_k5); | ||
} | ||
return list; | ||
} }]);return BAI;}(_indexFile.default);exports.default = BAI; | ||
} | ||
}]); | ||
return BAI; | ||
}(_indexFile.default); | ||
exports.default = BAI; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYWkudHMiXSwibmFtZXMiOlsiQkFJX01BR0lDIiwicm91bmREb3duIiwibiIsIm11bHRpcGxlIiwicm91bmRVcCIsIkJBSSIsImJ5dGVzIiwib2Zmc2V0IiwibGluZUNvdW50IiwiTG9uZyIsImZyb21CeXRlc0xFIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJyZWZJZCIsInBhcnNlIiwiaW5kZXgiLCJpbmRpY2VzIiwicmV0Iiwic3RhdHMiLCJ1bmRlZmluZWQiLCJhYm9ydFNpZ25hbCIsImRhdGEiLCJiYWkiLCJtYXhCbG9ja1NpemUiLCJmaWxlaGFuZGxlIiwicmVhZEZpbGUiLCJzaWduYWwiLCJyZWFkVUludDMyTEUiLCJFcnJvciIsInJlZkNvdW50IiwicmVhZEludDMyTEUiLCJkZXB0aCIsImJpbkxpbWl0IiwiY3Vyck9mZnNldCIsImkiLCJiaW5Db3VudCIsImJpbkluZGV4IiwiaiIsImJpbiIsInBhcnNlUHNldWRvQmluIiwiY2h1bmtDb3VudCIsImNodW5rcyIsImsiLCJ1IiwidiIsIl9maW5kRmlyc3REYXRhIiwiQ2h1bmsiLCJsaW5lYXJDb3VudCIsImxpbmVhckluZGV4Iiwic2VxSWQiLCJzdGFydCIsImVuZCIsInJhbmdlIiwiaW5kZXhEYXRhIiwic2VxSWR4IiwibGVuZ3RoIiwiZSIsInMiLCJkZXB0aHMiLCJ0b3RhbFNpemUiLCJibG9ja1Bvc2l0aW9uIiwiY3VycmVudFBvcyIsInNjb3JlIiwibWFwIiwiZCIsImJlZyIsImluZGV4ZXMiLCJiaW5zIiwicmVnMmJpbnMiLCJudW1PZmZzZXRzIiwib2ZmIiwibWludiIsIm1heHYiLCJzb3J0IiwiYSIsImIiLCJjb21wYXJlVG8iLCJsIiwibGlzdCIsInB1c2giLCJJbmRleEZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7Ozs7O0FBRUEsSUFB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QUcsS0FBS3VCLEdBQUcsSUFBSSxFQUFaLENBQWIsRUFBOEJ2QixHQUFDLElBQUksS0FBS1MsR0FBRyxJQUFJLEVBQVosQ0FBbkMsRUFBb0RULEdBQUMsSUFBSSxDQUF6RDtBQUE0RG9DLFFBQUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVckMsR0FBVjtBQUE1RDs7QUFDQSxXQUFLLElBQUlBLEdBQUMsR0FBRyxNQUFNdUIsR0FBRyxJQUFJLEVBQWIsQ0FBYixFQUErQnZCLEdBQUMsSUFBSSxNQUFNUyxHQUFHLElBQUksRUFBYixDQUFwQyxFQUFzRFQsR0FBQyxJQUFJLENBQTNEO0FBQThEb0MsUUFBQUEsSUFBSSxDQUFDQyxJQUFMLENBQVVyQyxHQUFWO0FBQTlEOztBQUNBLFdBQUssSUFBSUEsR0FBQyxHQUFHLE9BQU91QixHQUFHLElBQUksRUFBZCxDQUFiLEVBQWdDdkIsR0FBQyxJQUFJLE9BQU9TLEdBQUcsSUFBSSxFQUFkLENBQXJDLEVBQXdEVCxHQUFDLElBQUksQ0FBN0Q7QUFBZ0VvQyxRQUFBQSxJQUFJLENBQUNDLElBQUwsQ0FBVXJDLEdBQVY7QUFBaEU7O0FBQ0EsV0FBSyxJQUFJQSxHQUFDLEdBQUcsUUFBUXVCLEdBQUcsSUFBSSxFQUFmLENBQWIsRUFBaUN2QixHQUFDLElBQUksUUFBUVMsR0FBRyxJQUFJLEVBQWYsQ0FBdEMsRUFBMERULEdBQUMsSUFBSSxDQUEvRDtBQUFrRW9DLFFBQUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVckMsR0FBVjtBQUFsRTs7QUFDQSxhQUFPb0MsSUFBUDtBQUNEOzs7RUEvTDhCRSxrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb25nIGZyb20gJ2xvbmcnXG5pbXBvcnQgeyBmcm9tQnl0ZXMgfSBmcm9tICcuL3ZpcnR1YWxPZmZzZXQnXG5pbXBvcnQgQ2h1bmsgZnJvbSAnLi9jaHVuaydcblxuaW1wb3J0IEluZGV4RmlsZSBmcm9tICcuL2luZGV4RmlsZSdcbmltcG9ydCB7IGxvbmdUb051bWJlciwgYWJvcnRCcmVha1BvaW50LCBjYW5NZXJnZUJsb2NrcyB9IGZyb20gJy4vdXRpbCdcblxuY29uc3QgQkFJX01BR0lDID0gMjE1NzgwNTAgLy8gQkFJXFwxXG5cbmZ1bmN0aW9uIHJvdW5kRG93bihuOiBudW1iZXIsIG11bHRpcGxlOiBudW1iZXIpIHtcbiAgcmV0dXJuIG4gLSAobiAlIG11bHRpcGxlKVxufVxuZnVuY3Rpb24gcm91bmRVcChuOiBudW1iZXIsIG11bHRpcGxlOiBudW1iZXIpIHtcbiAgcmV0dXJuIG4gLSAobiAlIG11bHRpcGxlKSArIG11bHRpcGxlXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJBSSBleHRlbmRzIEluZGV4RmlsZSB7XG4gIHBhcnNlUHNldWRvQmluKGJ5dGVzOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGluZUNvdW50ID0gbG9uZ1RvTnVtYmVyKExvbmcuZnJvbUJ5dGVzTEUoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYnl0ZXMsIG9mZnNldCArIDE2LCBvZmZzZXQgKyAyNCksIHRydWUpKVxuICAgIHJldHVybiB7IGxpbmVDb3VudCB9XG4gIH1cblxuICBhc3luYyBsaW5lQ291bnQocmVmSWQ6IG51bWJlcikge1xuICAgIGNvbnN0IGluZGV4ID0gKGF3YWl0IHRoaXMucGFyc2UoKSkuaW5kaWNlc1tyZWZJZF1cbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgY29uc3QgcmV0ID0gaW5kZXguc3RhdHMgfHwge31cbiAgICByZXR1cm4gcmV0LmxpbmVDb3VudCA9PT0gdW5kZWZpbmVkID8gLTEgOiByZXQubGluZUNvdW50XG4gIH1cblxuICAvLyBmZXRjaCBhbmQgcGFyc2UgdGhlIGluZGV4XG4gIGFzeW5jIF9wYXJzZShhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHsgYmFpOiB0cnVlLCBtYXhCbG9ja1NpemU6IDEgPDwgMTYgfVxuICAgIGNvbnN0IGJ5dGVzID0gKGF3YWl0IHRoaXMuZmlsZWhhbmRsZS5yZWFkRmlsZSh7XG4gICAgICBzaWduYWw6IGFib3J0U2lnbmFsLFxuICAgIH0pKSBhcyBCdWZmZXJcblxuICAgIC8vIGNoZWNrIEJBSSBtYWdpYyBudW1iZXJzXG4gICAgaWYgKGJ5dGVzLnJlYWRVSW50MzJMRSgwKSAhPT0gQkFJX01BR0lDKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIEJBSSBmaWxlJylcbiAgICB9XG5cbiAgICBkYXRhLnJlZkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoNClcbiAgICBjb25zdCBkZXB0aCA9IDVcbiAgICBjb25zdCBiaW5MaW1pdCA9ICgoMSA8PCAoKGRlcHRoICsgMSkgKiAzKSkgLSAxKSAvIDdcblxuICAgIC8vIHJlYWQgdGhlIGluZGV4ZXMgZm9yIGVhY2ggcmVmZXJlbmNlIHNlcXVlbmNlXG4gICAgZGF0YS5pbmRpY2VzID0gbmV3IEFycmF5KGRhdGEucmVmQ291bnQpXG4gICAgbGV0IGN1cnJPZmZzZXQgPSA4XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLnJlZkNvdW50OyBpICs9IDEpIHtcbiAgICAgIGF3YWl0IGFib3J0QnJlYWtQb2ludChhYm9ydFNpZ25hbClcblxuICAgICAgLy8gdGhlIGJpbm5pbmcgaW5kZXhcbiAgICAgIGNvbnN0IGJpbkNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldClcbiAgICAgIGxldCBzdGF0c1xuXG4gICAgICBjdXJyT2Zmc2V0ICs9IDRcbiAgICAgIGNvbnN0IGJpbkluZGV4OiB7IFtrZXk6IG51bWJlcl06IENodW5rW10gfSA9IHt9XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJpbkNvdW50OyBqICs9IDEpIHtcbiAgICAgICAgY29uc3QgYmluID0gYnl0ZXMucmVhZFVJbnQzMkxFKGN1cnJPZmZzZXQpXG4gICAgICAgIGN1cnJPZmZzZXQgKz0gNFxuICAgICAgICBpZiAoYmluID09PSBiaW5MaW1pdCArIDEpIHtcbiAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDRcbiAgICAgICAgICBzdGF0cyA9IHRoaXMucGFyc2VQc2V1ZG9CaW4oYnl0ZXMsIGN1cnJPZmZzZXQpXG4gICAgICAgICAgY3Vyck9mZnNldCArPSAzMlxuICAgICAgICB9IGVsc2UgaWYgKGJpbiA+IGJpbkxpbWl0ICsgMSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFpIGluZGV4IGNvbnRhaW5zIHRvbyBtYW55IGJpbnMsIHBsZWFzZSB1c2UgQ1NJJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjaHVua0NvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldClcbiAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDRcbiAgICAgICAgICBjb25zdCBjaHVua3MgPSBuZXcgQXJyYXkoY2h1bmtDb3VudClcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNodW5rQ291bnQ7IGsgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgdSA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldClcbiAgICAgICAgICAgIGNvbnN0IHYgPSBmcm9tQnl0ZXMoYnl0ZXMsIGN1cnJPZmZzZXQgKyA4KVxuICAgICAgICAgICAgY3Vyck9mZnNldCArPSAxNlxuICAgICAgICAgICAgdGhpcy5fZmluZEZpcnN0RGF0YShkYXRhLCB1KVxuICAgICAgICAgICAgY2h1bmtzW2tdID0gbmV3IENodW5rKHUsIHYsIGJpbilcbiAgICAgICAgICB9XG4gICAgICAgICAgYmluSW5kZXhbYmluXSA9IGNodW5rc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVhckNvdW50ID0gYnl0ZXMucmVhZEludDMyTEUoY3Vyck9mZnNldClcbiAgICAgIGN1cnJPZmZzZXQgKz0gNFxuICAgICAgLy8gYXMgd2UncmUgZ29pbmcgdGhyb3VnaCB0aGUgbGluZWFyIGluZGV4LCBmaWd1cmUgb3V0XG4gICAgICAvLyB0aGUgc21hbGxlc3QgdmlydHVhbCBvZmZzZXQgaW4gdGhlIGluZGV4ZXMsIHdoaWNoXG4gICAgICAvLyB0ZWxscyB1cyB3aGVyZSB0aGUgQkFNIGhlYWRlciBlbmRzXG4gICAgICBjb25zdCBsaW5lYXJJbmRleCA9IG5ldyBBcnJheShsaW5lYXJDb3VudClcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZWFyQ291bnQ7IGsgKz0gMSkge1xuICAgICAgICBsaW5lYXJJbmRleFtrXSA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldClcbiAgICAgICAgY3Vyck9mZnNldCArPSA4XG4gICAgICAgIHRoaXMuX2ZpbmRGaXJzdERhdGEoZGF0YSwgbGluZWFySW5kZXhba10pXG4gICAgICB9XG5cbiAgICAgIGRhdGEuaW5kaWNlc1tpXSA9IHsgYmluSW5kZXgsIGxpbmVhckluZGV4LCBzdGF0cyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGFzeW5jIGluZGV4Q292KFxuICAgIHNlcUlkOiBudW1iZXIsXG4gICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgZW5kPzogbnVtYmVyLFxuICApOiBQcm9taXNlPHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IHNjb3JlOiBudW1iZXIgfVtdPiB7XG4gICAgY29uc3QgdiA9IDE2Mzg0XG4gICAgY29uc3QgcmFuZ2UgPSBzdGFydCAhPT0gdW5kZWZpbmVkXG4gICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZSgpXG4gICAgY29uc3Qgc2VxSWR4ID0gaW5kZXhEYXRhLmluZGljZXNbc2VxSWRdXG4gICAgaWYgKCFzZXFJZHgpIHJldHVybiBbXVxuICAgIGNvbnN0IHsgbGluZWFySW5kZXggPSBbXSwgc3RhdHMgfSA9IHNlcUlkeFxuICAgIGlmICghbGluZWFySW5kZXgubGVuZ3RoKSByZXR1cm4gW11cbiAgICBjb25zdCBlID0gZW5kICE9PSB1bmRlZmluZWQgPyByb3VuZFVwKGVuZCwgdikgOiAobGluZWFySW5kZXgubGVuZ3RoIC0gMSkgKiB2XG4gICAgY29uc3QgcyA9IHN0YXJ0ICE9PSB1bmRlZmluZWQgPyByb3VuZERvd24oc3RhcnQsIHYpIDogMFxuICAgIGxldCBkZXB0aHNcbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIGRlcHRocyA9IG5ldyBBcnJheSgoZSAtIHMpIC8gdilcbiAgICB9IGVsc2Uge1xuICAgICAgZGVwdGhzID0gbmV3IEFycmF5KGxpbmVhckluZGV4Lmxlbmd0aCAtIDEpXG4gICAgfVxuICAgIGNvbnN0IHRvdGFsU2l6ZSA9IGxpbmVhckluZGV4W2xpbmVhckluZGV4Lmxlbmd0aCAtIDFdLmJsb2NrUG9zaXRpb25cbiAgICBpZiAoZSA+IChsaW5lYXJJbmRleC5sZW5ndGggLSAxKSAqIHYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncXVlcnkgb3V0c2lkZSBvZiByYW5nZSBvZiBsaW5lYXIgaW5kZXgnKVxuICAgIH1cbiAgICBsZXQgY3VycmVudFBvcyA9IGxpbmVhckluZGV4W3MgLyB2XS5ibG9ja1Bvc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IHMgLyB2LCBqID0gMDsgaSA8IGUgLyB2OyBpKyssIGorKykge1xuICAgICAgZGVwdGhzW2pdID0ge1xuICAgICAgICBzY29yZTogbGluZWFySW5kZXhbaSArIDFdLmJsb2NrUG9zaXRpb24gLSBjdXJyZW50UG9zLFxuICAgICAgICBzdGFydDogaSAqIHYsXG4gICAgICAgIGVuZDogaSAqIHYgKyB2LFxuICAgICAgfVxuICAgICAgY3VycmVudFBvcyA9IGxpbmVhckluZGV4W2kgKyAxXS5ibG9ja1Bvc2l0aW9uXG4gICAgfVxuICAgIHJldHVybiBkZXB0aHMubWFwKGQgPT4ge1xuICAgICAgcmV0dXJuIHsgLi4uZCwgc2NvcmU6IChkLnNjb3JlICogc3RhdHMubGluZUNvdW50KSAvIHRvdGFsU2l6ZSB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGJsb2Nrc0ZvclJhbmdlKHJlZklkOiBudW1iZXIsIGJlZzogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2h1bmtbXT4ge1xuICAgIGlmIChiZWcgPCAwKSBiZWcgPSAwXG5cbiAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCB0aGlzLnBhcnNlKClcbiAgICBpZiAoIWluZGV4RGF0YSkgcmV0dXJuIFtdXG4gICAgY29uc3QgaW5kZXhlcyA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXVxuICAgIGlmICghaW5kZXhlcykgcmV0dXJuIFtdXG5cbiAgICBjb25zdCBiaW5JbmRleDogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IGluZGV4ZXMuYmluSW5kZXhcblxuICAgIGNvbnN0IGJpbnMgPSB0aGlzLnJlZzJiaW5zKGJlZywgZW5kKVxuXG4gICAgbGV0IGxcbiAgICBsZXQgbnVtT2Zmc2V0cyA9IDBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChiaW5JbmRleFtiaW5zW2ldXSkge1xuICAgICAgICBudW1PZmZzZXRzICs9IGJpbkluZGV4W2JpbnNbaV1dLmxlbmd0aFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChudW1PZmZzZXRzID09PSAwKSByZXR1cm4gW11cblxuICAgIGxldCBvZmYgPSBbXVxuICAgIG51bU9mZnNldHMgPSAwXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBjaHVua3MgPSBiaW5JbmRleFtiaW5zW2ldXVxuICAgICAgaWYgKGNodW5rcylcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaHVua3MubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgICBvZmZbbnVtT2Zmc2V0c10gPSBuZXcgQ2h1bmsoY2h1bmtzW2pdLm1pbnYsIGNodW5rc1tqXS5tYXh2LCBjaHVua3Nbal0uYmluKVxuICAgICAgICAgIG51bU9mZnNldHMgKz0gMVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvZmYubGVuZ3RoKSByZXR1cm4gW11cblxuICAgIG9mZiA9IG9mZi5zb3J0KChhLCBiKSA9PiBhLmNvbXBhcmVUbyhiKSlcbiAgICAvLyByZXNvbHZlIG92ZXJsYXBzIGJldHdlZW4gYWRqYWNlbnQgYmxvY2tzOyB0aGlzIG1heSBoYXBwZW4gZHVlIHRvIHRoZSBtZXJnZSBpbiBpbmRleGluZ1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtT2Zmc2V0czsgaSArPSAxKVxuICAgICAgaWYgKG9mZltpIC0gMV0ubWF4di5jb21wYXJlVG8ob2ZmW2ldLm1pbnYpID49IDApIG9mZltpIC0gMV0ubWF4diA9IG9mZltpXS5taW52XG5cbiAgICAvLyBtZXJnZSBhZGphY2VudCBibG9ja3NcbiAgICBsID0gMFxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtT2Zmc2V0czsgaSArPSAxKSB7XG4gICAgICBpZiAoY2FuTWVyZ2VCbG9ja3Mob2ZmW2xdLCBvZmZbaV0pKSBvZmZbbF0ubWF4diA9IG9mZltpXS5tYXh2XG4gICAgICBlbHNlIHtcbiAgICAgICAgbCArPSAxXG4gICAgICAgIG9mZltsXS5taW52ID0gb2ZmW2ldLm1pbnZcbiAgICAgICAgb2ZmW2xdLm1heHYgPSBvZmZbaV0ubWF4dlxuICAgICAgfVxuICAgIH1cbiAgICBudW1PZmZzZXRzID0gbCArIDFcblxuICAgIHJldHVybiBvZmYuc2xpY2UoMCwgbnVtT2Zmc2V0cylcbiAgfVxuXG4gIC8qKlxuICAgKiBjYWxjdWxhdGUgdGhlIGxpc3Qgb2YgYmlucyB0aGF0IG1heSBvdmVybGFwIHdpdGggcmVnaW9uIFtiZWcsZW5kKSAoemVyby1iYXNlZCBoYWxmLW9wZW4pXG4gICAqIEByZXR1cm5zIHtBcnJheVtudW1iZXJdfVxuICAgKi9cbiAgcmVnMmJpbnMoYmVnOiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgY29uc3QgbGlzdCA9IFswXVxuICAgIGVuZCAtPSAxXG4gICAgZm9yIChsZXQgayA9IDEgKyAoYmVnID4+IDI2KTsgayA8PSAxICsgKGVuZCA+PiAyNik7IGsgKz0gMSkgbGlzdC5wdXNoKGspXG4gICAgZm9yIChsZXQgayA9IDkgKyAoYmVnID4+IDIzKTsgayA8PSA5ICsgKGVuZCA+PiAyMyk7IGsgKz0gMSkgbGlzdC5wdXNoKGspXG4gICAgZm9yIChsZXQgayA9IDczICsgKGJlZyA+PiAyMCk7IGsgPD0gNzMgKyAoZW5kID4+IDIwKTsgayArPSAxKSBsaXN0LnB1c2goaylcbiAgICBmb3IgKGxldCBrID0gNTg1ICsgKGJlZyA+PiAxNyk7IGsgPD0gNTg1ICsgKGVuZCA+PiAxNyk7IGsgKz0gMSkgbGlzdC5wdXNoKGspXG4gICAgZm9yIChsZXQgayA9IDQ2ODEgKyAoYmVnID4+IDE0KTsgayA8PSA0NjgxICsgKGVuZCA+PiAxNCk7IGsgKz0gMSkgbGlzdC5wdXNoKGspXG4gICAgcmV0dXJuIGxpc3RcbiAgfVxufVxuIl19 |
@@ -1,10 +0,36 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); // little class representing a chunk in the index | ||
var Chunk = /*#__PURE__*/function () { | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); | ||
// little class representing a chunk in the index | ||
var Chunk = | ||
/*#__PURE__*/ | ||
function () { | ||
/** | ||
* @param {VirtualOffset} minv | ||
* @param {VirtualOffset} maxv | ||
* @param {number} bin | ||
* @param {number} [fetchedSize] | ||
*/ | ||
function Chunk(minv, maxv, bin, fetchedSize) {(0, _classCallCheck2.default)(this, Chunk); | ||
* @param {VirtualOffset} minv | ||
* @param {VirtualOffset} maxv | ||
* @param {number} bin | ||
* @param {number} [fetchedSize] | ||
*/ | ||
function Chunk(minv, maxv, bin) { | ||
var fetchedSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined; | ||
(0, _classCallCheck2.default)(this, Chunk); | ||
(0, _defineProperty2.default)(this, "minv", void 0); | ||
(0, _defineProperty2.default)(this, "maxv", void 0); | ||
(0, _defineProperty2.default)(this, "bin", void 0); | ||
(0, _defineProperty2.default)(this, "_fetchedSize", void 0); | ||
this.minv = minv; | ||
@@ -14,28 +40,30 @@ this.maxv = maxv; | ||
this._fetchedSize = fetchedSize; | ||
}(0, _createClass2.default)(Chunk, [{ key: "toUniqueString", value: function toUniqueString() | ||
} | ||
{ | ||
return "".concat(this.minv, "..").concat(this.maxv, " (bin ").concat( | ||
this.bin, ", fetchedSize ").concat( | ||
this.fetchedSize(), ")"); | ||
} }, { key: "toString", value: function toString() | ||
{ | ||
(0, _createClass2.default)(Chunk, [{ | ||
key: "toUniqueString", | ||
value: function toUniqueString() { | ||
return "".concat(this.minv, "..").concat(this.maxv, " (bin ").concat(this.bin, ", fetchedSize ").concat(this.fetchedSize(), ")"); | ||
} | ||
}, { | ||
key: "toString", | ||
value: function toString() { | ||
return this.toUniqueString(); | ||
} }, { key: "compareTo", value: function compareTo( | ||
b) { | ||
return ( | ||
this.minv.compareTo(b.minv) || | ||
this.maxv.compareTo(b.maxv) || | ||
this.bin - b.bin); | ||
} }, { key: "fetchedSize", value: function fetchedSize() | ||
{ | ||
} | ||
}, { | ||
key: "compareTo", | ||
value: function compareTo(b) { | ||
return this.minv.compareTo(b.minv) || this.maxv.compareTo(b.maxv) || this.bin - b.bin; | ||
} | ||
}, { | ||
key: "fetchedSize", | ||
value: function fetchedSize() { | ||
if (this._fetchedSize !== undefined) return this._fetchedSize; | ||
return this.maxv.blockPosition + (1 << 16) - this.minv.blockPosition; | ||
} }]);return Chunk;}(); | ||
} | ||
}]); | ||
return Chunk; | ||
}(); | ||
module.exports = Chunk; | ||
exports.default = Chunk; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaHVuay50cyJdLCJuYW1lcyI6WyJDaHVuayIsIm1pbnYiLCJtYXh2IiwiYmluIiwiZmV0Y2hlZFNpemUiLCJ1bmRlZmluZWQiLCJfZmV0Y2hlZFNpemUiLCJ0b1VuaXF1ZVN0cmluZyIsImIiLCJjb21wYXJlVG8iLCJibG9ja1Bvc2l0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTtJQUNxQkEsSzs7O0FBTW5COzs7Ozs7QUFNQSxpQkFBWUMsSUFBWixFQUFpQ0MsSUFBakMsRUFBc0RDLEdBQXRELEVBQTRGO0FBQUEsUUFBekJDLFdBQXlCLHVFQUFYQyxTQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUMxRixTQUFLSixJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxJQUFMLEdBQVlBLElBQVo7QUFDQSxTQUFLQyxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLRyxZQUFMLEdBQW9CRixXQUFwQjtBQUNEOzs7O3FDQUVnQjtBQUNmLHVCQUFVLEtBQUtILElBQWYsZUFBd0IsS0FBS0MsSUFBN0IsbUJBQTBDLEtBQUtDLEdBQS9DLDJCQUFtRSxLQUFLQyxXQUFMLEVBQW5FO0FBQ0Q7OzsrQkFFVTtBQUNULGFBQU8sS0FBS0csY0FBTCxFQUFQO0FBQ0Q7Ozs4QkFFU0MsQyxFQUFVO0FBQ2xCLGFBQU8sS0FBS1AsSUFBTCxDQUFVUSxTQUFWLENBQW9CRCxDQUFDLENBQUNQLElBQXRCLEtBQStCLEtBQUtDLElBQUwsQ0FBVU8sU0FBVixDQUFvQkQsQ0FBQyxDQUFDTixJQUF0QixDQUEvQixJQUE4RCxLQUFLQyxHQUFMLEdBQVdLLENBQUMsQ0FBQ0wsR0FBbEY7QUFDRDs7O2tDQUVhO0FBQ1osVUFBSSxLQUFLRyxZQUFMLEtBQXNCRCxTQUExQixFQUFxQyxPQUFPLEtBQUtDLFlBQVo7QUFDckMsYUFBTyxLQUFLSixJQUFMLENBQVVRLGFBQVYsSUFBMkIsS0FBSyxFQUFoQyxJQUFzQyxLQUFLVCxJQUFMLENBQVVTLGFBQXZEO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlydHVhbE9mZnNldCBmcm9tICcuL3ZpcnR1YWxPZmZzZXQnXG5cbi8vIGxpdHRsZSBjbGFzcyByZXByZXNlbnRpbmcgYSBjaHVuayBpbiB0aGUgaW5kZXhcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENodW5rIHtcbiAgcHVibGljIG1pbnY6IFZpcnR1YWxPZmZzZXRcbiAgcHVibGljIG1heHY6IFZpcnR1YWxPZmZzZXRcbiAgcHVibGljIGJpbjogbnVtYmVyXG4gIHB1YmxpYyBfZmV0Y2hlZFNpemU/OiBudW1iZXJcblxuICAvKipcbiAgICogQHBhcmFtIHtWaXJ0dWFsT2Zmc2V0fSBtaW52XG4gICAqIEBwYXJhbSB7VmlydHVhbE9mZnNldH0gbWF4dlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmluXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZmV0Y2hlZFNpemVdXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtaW52OiBWaXJ0dWFsT2Zmc2V0LCBtYXh2OiBWaXJ0dWFsT2Zmc2V0LCBiaW46IG51bWJlciwgZmV0Y2hlZFNpemUgPSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm1pbnYgPSBtaW52XG4gICAgdGhpcy5tYXh2ID0gbWF4dlxuICAgIHRoaXMuYmluID0gYmluXG4gICAgdGhpcy5fZmV0Y2hlZFNpemUgPSBmZXRjaGVkU2l6ZVxuICB9XG5cbiAgdG9VbmlxdWVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMubWludn0uLiR7dGhpcy5tYXh2fSAoYmluICR7dGhpcy5iaW59LCBmZXRjaGVkU2l6ZSAke3RoaXMuZmV0Y2hlZFNpemUoKX0pYFxuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9VbmlxdWVTdHJpbmcoKVxuICB9XG5cbiAgY29tcGFyZVRvKGI6IENodW5rKSB7XG4gICAgcmV0dXJuIHRoaXMubWludi5jb21wYXJlVG8oYi5taW52KSB8fCB0aGlzLm1heHYuY29tcGFyZVRvKGIubWF4dikgfHwgdGhpcy5iaW4gLSBiLmJpblxuICB9XG5cbiAgZmV0Y2hlZFNpemUoKSB7XG4gICAgaWYgKHRoaXMuX2ZldGNoZWRTaXplICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9mZXRjaGVkU2l6ZVxuICAgIHJldHVybiB0aGlzLm1heHYuYmxvY2tQb3NpdGlvbiArICgxIDw8IDE2KSAtIHRoaXMubWludi5ibG9ja1Bvc2l0aW9uXG4gIH1cbn1cbiJdfQ== |
@@ -1,2 +0,11 @@ | ||
"use strict";module.exports = { | ||
"use strict"; | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _default = { | ||
// the read is paired in sequencing, no matter whether it is mapped in a pair | ||
@@ -25,2 +34,5 @@ BAM_FPAIRED: 1, | ||
// supplementary alignment | ||
BAM_FSUPPLEMENTARY: 2048 }; | ||
BAM_FSUPPLEMENTARY: 2048 | ||
}; | ||
exports.default = _default; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiXSwibmFtZXMiOlsiQkFNX0ZQQUlSRUQiLCJCQU1fRlBST1BFUl9QQUlSIiwiQkFNX0ZVTk1BUCIsIkJBTV9GTVVOTUFQIiwiQkFNX0ZSRVZFUlNFIiwiQkFNX0ZNUkVWRVJTRSIsIkJBTV9GUkVBRDEiLCJCQU1fRlJFQUQyIiwiQkFNX0ZTRUNPTkRBUlkiLCJCQU1fRlFDRkFJTCIsIkJBTV9GRFVQIiwiQkFNX0ZTVVBQTEVNRU5UQVJZIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7ZUFBZTtBQUNiO0FBQ0FBLEVBQUFBLFdBQVcsRUFBRSxDQUZBO0FBR2I7QUFDQUMsRUFBQUEsZ0JBQWdCLEVBQUUsQ0FKTDtBQUtiO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxDQU5DO0FBT2I7QUFDQUMsRUFBQUEsV0FBVyxFQUFFLENBUkE7QUFTYjtBQUNBQyxFQUFBQSxZQUFZLEVBQUUsRUFWRDtBQVdiO0FBQ0FDLEVBQUFBLGFBQWEsRUFBRSxFQVpGO0FBYWI7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLEVBZEM7QUFlYjtBQUNBQyxFQUFBQSxVQUFVLEVBQUUsR0FoQkM7QUFpQmI7QUFDQUMsRUFBQUEsY0FBYyxFQUFFLEdBbEJIO0FBbUJiO0FBQ0FDLEVBQUFBLFdBQVcsRUFBRSxHQXBCQTtBQXFCYjtBQUNBQyxFQUFBQSxRQUFRLEVBQUUsSUF0Qkc7QUF1QmI7QUFDQUMsRUFBQUEsa0JBQWtCLEVBQUU7QUF4QlAsQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gIHRoZSByZWFkIGlzIHBhaXJlZCBpbiBzZXF1ZW5jaW5nLCBubyBtYXR0ZXIgd2hldGhlciBpdCBpcyBtYXBwZWQgaW4gYSBwYWlyXG4gIEJBTV9GUEFJUkVEOiAxLFxuICAvLyAgdGhlIHJlYWQgaXMgbWFwcGVkIGluIGEgcHJvcGVyIHBhaXJcbiAgQkFNX0ZQUk9QRVJfUEFJUjogMixcbiAgLy8gIHRoZSByZWFkIGl0c2VsZiBpcyB1bm1hcHBlZDsgY29uZmxpY3RpdmUgd2l0aCBCQU1fRlBST1BFUl9QQUlSXG4gIEJBTV9GVU5NQVA6IDQsXG4gIC8vICB0aGUgbWF0ZSBpcyB1bm1hcHBlZFxuICBCQU1fRk1VTk1BUDogOCxcbiAgLy8gIHRoZSByZWFkIGlzIG1hcHBlZCB0byB0aGUgcmV2ZXJzZSBzdHJhbmRcbiAgQkFNX0ZSRVZFUlNFOiAxNixcbiAgLy8gIHRoZSBtYXRlIGlzIG1hcHBlZCB0byB0aGUgcmV2ZXJzZSBzdHJhbmRcbiAgQkFNX0ZNUkVWRVJTRTogMzIsXG4gIC8vICB0aGlzIGlzIHJlYWQxXG4gIEJBTV9GUkVBRDE6IDY0LFxuICAvLyAgdGhpcyBpcyByZWFkMlxuICBCQU1fRlJFQUQyOiAxMjgsXG4gIC8vICBub3QgcHJpbWFyeSBhbGlnbm1lbnRcbiAgQkFNX0ZTRUNPTkRBUlk6IDI1NixcbiAgLy8gIFFDIGZhaWx1cmVcbiAgQkFNX0ZRQ0ZBSUw6IDUxMixcbiAgLy8gIG9wdGljYWwgb3IgUENSIGR1cGxpY2F0ZVxuICBCQU1fRkRVUDogMTAyNCxcbiAgLy8gIHN1cHBsZW1lbnRhcnkgYWxpZ25tZW50XG4gIEJBTV9GU1VQUExFTUVOVEFSWTogMjA0OCxcbn1cbiJdfQ== |
481
dist/csi.js
@@ -1,11 +0,47 @@ | ||
"use strict";var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));var Long = _interopRequireWildcard(require("long")); | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign")); | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator")); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator")); | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn")); | ||
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf")); | ||
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized")); | ||
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits")); | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); | ||
var _long = _interopRequireDefault(require("long")); | ||
var _unzip = require("./unzip"); | ||
var _virtualOffset = require("./virtualOffset"); | ||
var _chunk = _interopRequireDefault(require("./chunk")); | ||
var _util = require("./util"); | ||
var IndexFile = require('./indexFile'); | ||
var _indexFile = _interopRequireDefault(require("./indexFile")); | ||
var CSI1_MAGIC = 21582659; // CSI\1 | ||
var CSI2_MAGIC = 38359875; // CSI\2 | ||
@@ -16,32 +52,131 @@ | ||
} | ||
function rshift(num, bits) { | ||
return Math.floor(num / Math.pow(2, bits)); | ||
}var | ||
} | ||
CSI = /*#__PURE__*/function (_IndexFile) {(0, _inherits2.default)(CSI, _IndexFile);function CSI() {(0, _classCallCheck2.default)(this, CSI);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(CSI).apply(this, arguments));}(0, _createClass2.default)(CSI, [{ key: "lineCount", value: function () {var _lineCount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee( | ||
refId) {var indexData, idx, stats;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:_context.next = 2;return ( | ||
this.parse());case 2:indexData = _context.sent;if ( | ||
indexData) {_context.next = 5;break;}return _context.abrupt("return", -1);case 5: | ||
idx = indexData.indices[refId];if ( | ||
idx) {_context.next = 8;break;}return _context.abrupt("return", -1);case 8: | ||
stats = indexData.indices[refId].stats;if (! | ||
stats) {_context.next = 11;break;}return _context.abrupt("return", stats.lineCount);case 11:return _context.abrupt("return", | ||
-1);case 12:case "end":return _context.stop();}}}, _callee, this);}));function lineCount(_x) {return _lineCount.apply(this, arguments);}return lineCount;}() }, { key: "parseAuxData", value: function parseAuxData( | ||
var CSI = | ||
/*#__PURE__*/ | ||
function (_IndexFile) { | ||
(0, _inherits2.default)(CSI, _IndexFile); | ||
function CSI(args) { | ||
var _this; | ||
bytes, offset, auxLength) { | ||
(0, _classCallCheck2.default)(this, CSI); | ||
_this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(CSI).call(this, args)); | ||
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "maxBinNumber", void 0); | ||
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "depth", void 0); | ||
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "minShift", void 0); | ||
_this.maxBinNumber = 0; | ||
_this.depth = 0; | ||
_this.minShift = 0; | ||
return _this; | ||
} | ||
(0, _createClass2.default)(CSI, [{ | ||
key: "lineCount", | ||
value: function () { | ||
var _lineCount = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(refId) { | ||
var indexData, idx, stats; | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return this.parse(); | ||
case 2: | ||
indexData = _context.sent; | ||
if (indexData) { | ||
_context.next = 5; | ||
break; | ||
} | ||
return _context.abrupt("return", -1); | ||
case 5: | ||
idx = indexData.indices[refId]; | ||
if (idx) { | ||
_context.next = 8; | ||
break; | ||
} | ||
return _context.abrupt("return", -1); | ||
case 8: | ||
stats = indexData.indices[refId].stats; | ||
if (!stats) { | ||
_context.next = 11; | ||
break; | ||
} | ||
return _context.abrupt("return", stats.lineCount); | ||
case 11: | ||
return _context.abrupt("return", -1); | ||
case 12: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function lineCount(_x) { | ||
return _lineCount.apply(this, arguments); | ||
} | ||
return lineCount; | ||
}() | ||
}, { | ||
key: "indexCov", | ||
value: function () { | ||
var _indexCov = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2() { | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
throw new Error('CSI indexes do not support indexcov'); | ||
case 2: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2); | ||
})); | ||
function indexCov() { | ||
return _indexCov.apply(this, arguments); | ||
} | ||
return indexCov; | ||
}() | ||
}, { | ||
key: "parseAuxData", | ||
value: function parseAuxData(bytes, offset, auxLength) { | ||
if (auxLength < 30) return {}; | ||
var data = {}; | ||
data.formatFlags = bytes.readInt32LE(offset); | ||
data.coordinateType = | ||
data.formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed'; | ||
data.format = { 0: 'generic', 1: 'SAM', 2: 'VCF' }[data.formatFlags & 0xf]; | ||
if (!data.format) | ||
throw new Error("invalid Tabix preset format flags ".concat(data.formatFlags)); | ||
data.coordinateType = data.formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed'; | ||
data.format = { | ||
0: 'generic', | ||
1: 'SAM', | ||
2: 'VCF' | ||
}[data.formatFlags & 0xf]; | ||
if (!data.format) throw new Error("invalid Tabix preset format flags ".concat(data.formatFlags)); | ||
data.columnNumbers = { | ||
ref: bytes.readInt32LE(offset + 4), | ||
start: bytes.readInt32LE(offset + 8), | ||
end: bytes.readInt32LE(offset + 12) }; | ||
end: bytes.readInt32LE(offset + 12) | ||
}; | ||
data.metaValue = bytes.readInt32LE(offset + 16); | ||
@@ -51,13 +186,8 @@ data.metaChar = data.metaValue ? String.fromCharCode(data.metaValue) : ''; | ||
var nameSectionLength = bytes.readInt32LE(offset + 24); | ||
Object.assign( | ||
data, | ||
this._parseNameBytes( | ||
bytes.slice(offset + 28, offset + 28 + nameSectionLength))); | ||
(0, _assign.default)(data, this._parseNameBytes(bytes.slice(offset + 28, offset + 28 + nameSectionLength))); | ||
return data; | ||
} }, { key: "_parseNameBytes", value: function _parseNameBytes( | ||
namesBytes) { | ||
} | ||
}, { | ||
key: "_parseNameBytes", | ||
value: function _parseNameBytes(namesBytes) { | ||
var currRefId = 0; | ||
@@ -67,2 +197,3 @@ var currNameStart = 0; | ||
var refNameToId = {}; | ||
for (var i = 0; i < namesBytes.length; i += 1) { | ||
@@ -76,2 +207,3 @@ if (!namesBytes[i]) { | ||
} | ||
currNameStart = i + 1; | ||
@@ -81,22 +213,61 @@ currRefId += 1; | ||
} | ||
return { refNameToId: refNameToId, refIdToName: refIdToName }; | ||
} | ||
// fetch and parse the index | ||
}, { key: "_parse", value: function () {var _parse2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(abortSignal) {var data, bytes, auxLength, currOffset, i, binCount, binIndex, stats, j, bin, loffset, chunkCount, chunks, k, u, v;return _regenerator.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0: | ||
data = { csi: true, maxBlockSize: 1 << 16 };_context2.t0 = | ||
_unzip.unzip;_context2.next = 4;return ( | ||
this.filehandle.readFile({ signal: abortSignal }));case 4:_context2.t1 = _context2.sent;_context2.next = 7;return (0, _context2.t0)(_context2.t1);case 7:bytes = _context2.sent;if (!( | ||
return { | ||
refNameToId: refNameToId, | ||
refIdToName: refIdToName | ||
}; | ||
} // fetch and parse the index | ||
}, { | ||
key: "_parse", | ||
value: function () { | ||
var _parse2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee3(abortSignal) { | ||
var data, bytes, auxLength, currOffset, i, binCount, binIndex, stats, j, bin, loffset, chunkCount, chunks, k, u, v; | ||
return _regenerator.default.wrap(function _callee3$(_context3) { | ||
while (1) { | ||
switch (_context3.prev = _context3.next) { | ||
case 0: | ||
data = { | ||
csi: true, | ||
maxBlockSize: 1 << 16 | ||
}; | ||
_context3.t0 = _unzip.unzip; | ||
_context3.next = 4; | ||
return this.filehandle.readFile({ | ||
signal: abortSignal | ||
}); | ||
case 4: | ||
_context3.t1 = _context3.sent; | ||
_context3.next = 7; | ||
return (0, _context3.t0)(_context3.t1); | ||
bytes.readUInt32LE(0) === CSI1_MAGIC)) {_context2.next = 12;break;} | ||
data.csiVersion = 1;_context2.next = 17;break;case 12:if (!( | ||
bytes.readUInt32LE(0) === CSI2_MAGIC)) {_context2.next = 16;break;} | ||
data.csiVersion = 2;_context2.next = 17;break;case 16:throw ( | ||
case 7: | ||
bytes = _context3.sent; | ||
new Error('Not a CSI file'));case 17: | ||
if (!(bytes.readUInt32LE(0) === CSI1_MAGIC)) { | ||
_context3.next = 12; | ||
break; | ||
} | ||
data.csiVersion = 1; | ||
_context3.next = 17; | ||
break; | ||
case 12: | ||
if (!(bytes.readUInt32LE(0) === CSI2_MAGIC)) { | ||
_context3.next = 16; | ||
break; | ||
} | ||
data.csiVersion = 2; | ||
_context3.next = 17; | ||
break; | ||
case 16: | ||
throw new Error('Not a CSI file'); | ||
case 17: | ||
this.minShift = bytes.readInt32LE(4); | ||
@@ -106,12 +277,23 @@ this.depth = bytes.readInt32LE(8); | ||
auxLength = bytes.readInt32LE(12); | ||
if (auxLength) { | ||
Object.assign(data, this.parseAuxData(bytes, 16, auxLength)); | ||
(0, _assign.default)(data, this.parseAuxData(bytes, 16, auxLength)); | ||
} | ||
data.refCount = bytes.readInt32LE(16 + auxLength); | ||
// read the indexes for each reference sequence | ||
data.refCount = bytes.readInt32LE(16 + auxLength); // read the indexes for each reference sequence | ||
data.indices = new Array(data.refCount); | ||
currOffset = 16 + auxLength + 4; | ||
i = 0;case 26:if (!(i < data.refCount)) {_context2.next = 38;break;}_context2.next = 29;return ( | ||
(0, _util.abortBreakPoint)(abortSignal));case 29: | ||
i = 0; | ||
case 26: | ||
if (!(i < data.refCount)) { | ||
_context3.next = 38; | ||
break; | ||
} | ||
_context3.next = 29; | ||
return (0, _util.abortBreakPoint)(abortSignal); | ||
case 29: | ||
// the binning index | ||
@@ -122,4 +304,6 @@ binCount = bytes.readInt32LE(currOffset); | ||
stats = void 0; // < provided by parsing a pseudo-bin, if present | ||
for (j = 0; j < binCount; j += 1) { | ||
bin = bytes.readUInt32LE(currOffset); | ||
if (bin > this.maxBinNumber) { | ||
@@ -132,13 +316,17 @@ // this is a fake bin that actually has stats information | ||
loffset = (0, _virtualOffset.fromBytes)(bytes, currOffset + 4); | ||
this._findFirstData(data, loffset); | ||
chunkCount = bytes.readInt32LE(currOffset + 12); | ||
currOffset += 16; | ||
chunks = new Array(chunkCount); | ||
for (k = 0; k < chunkCount; k += 1) { | ||
u = (0, _virtualOffset.fromBytes)(bytes, currOffset); | ||
v = (0, _virtualOffset.fromBytes)(bytes, currOffset + 8); | ||
currOffset += 16; | ||
// this._findFirstData(data, u) | ||
currOffset += 16; // this._findFirstData(data, u) | ||
chunks[k] = new _chunk.default(u, v, bin); | ||
} | ||
binIndex[bin] = chunks; | ||
@@ -148,9 +336,32 @@ } | ||
data.indices[i] = { binIndex: binIndex, stats: stats };case 35:i += 1;_context2.next = 26;break;case 38:return _context2.abrupt("return", | ||
data.indices[i] = { | ||
binIndex: binIndex, | ||
stats: stats | ||
}; | ||
case 35: | ||
i += 1; | ||
_context3.next = 26; | ||
break; | ||
data);case 39:case "end":return _context2.stop();}}}, _callee2, this);}));function _parse(_x2) {return _parse2.apply(this, arguments);}return _parse;}() }, { key: "parsePseudoBin", value: function parsePseudoBin( | ||
case 38: | ||
return _context3.abrupt("return", data); | ||
case 39: | ||
case "end": | ||
return _context3.stop(); | ||
} | ||
} | ||
}, _callee3, this); | ||
})); | ||
bytes, offset) { | ||
function _parse(_x2) { | ||
return _parse2.apply(this, arguments); | ||
} | ||
return _parse; | ||
}() | ||
}, { | ||
key: "parsePseudoBin", | ||
value: function parsePseudoBin(bytes, offset) { | ||
// const one = Long.fromBytesLE(bytes.slice(offset + 4, offset + 12), true) | ||
@@ -161,49 +372,101 @@ // const two = Long.fromBytesLE(bytes.slice(offset + 12, offset + 20), true) | ||
// ) | ||
var lineCount = (0, _util.longToNumber)( | ||
Long.fromBytesLE(bytes.slice(offset + 28, offset + 36), true)); | ||
var lineCount = (0, _util.longToNumber)(_long.default.fromBytesLE(Array.prototype.slice.call(bytes, offset + 28, offset + 36), true)); | ||
return { | ||
lineCount: lineCount | ||
}; | ||
} | ||
}, { | ||
key: "blocksForRange", | ||
value: function () { | ||
var _blocksForRange = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee4(refId, beg, end) { | ||
var opts, | ||
indexData, | ||
indexes, | ||
binIndex, | ||
bins, | ||
l, | ||
numOffsets, | ||
i, | ||
off, | ||
_i, | ||
chunks, | ||
j, | ||
_i2, | ||
_i3, | ||
_i4, | ||
_args4 = arguments; | ||
return { lineCount: lineCount }; | ||
} }, { key: "blocksForRange", value: function () {var _blocksForRange = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3( | ||
return _regenerator.default.wrap(function _callee4$(_context4) { | ||
while (1) { | ||
switch (_context4.prev = _context4.next) { | ||
case 0: | ||
opts = _args4.length > 3 && _args4[3] !== undefined ? _args4[3] : {}; | ||
if (beg < 0) beg = 0; | ||
_context4.next = 4; | ||
return this.parse(opts.signal); | ||
refId, beg, end, opts) {var indexData, indexes, binIndex, bins, l, numOffsets, i, off, _i, chunks, j, _i2, _i3, _i4;return _regenerator.default.wrap(function _callee3$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0: | ||
if (beg < 0) beg = 0;_context3.next = 3;return ( | ||
case 4: | ||
indexData = _context4.sent; | ||
this.parse(opts.signal));case 3:indexData = _context3.sent;if ( | ||
indexData) {_context3.next = 6;break;}return _context3.abrupt("return", []);case 6: | ||
indexes = indexData.indices[refId];if ( | ||
indexes) {_context3.next = 9;break;}return _context3.abrupt("return", []);case 9: | ||
if (indexData) { | ||
_context4.next = 7; | ||
break; | ||
} | ||
binIndex = indexes.binIndex; | ||
return _context4.abrupt("return", []); | ||
bins = this.reg2bins(beg, end); | ||
case 7: | ||
indexes = indexData.indices[refId]; | ||
if (indexes) { | ||
_context4.next = 10; | ||
break; | ||
} | ||
return _context4.abrupt("return", []); | ||
case 10: | ||
binIndex = indexes.binIndex; | ||
bins = this.reg2bins(beg, end); | ||
numOffsets = 0; | ||
for (i = 0; i < bins.length; i += 1) { | ||
if (binIndex[bins[i]]) numOffsets += binIndex[bins[i]].length; | ||
}if (!( | ||
} | ||
numOffsets === 0)) {_context3.next = 15;break;}return _context3.abrupt("return", []);case 15: | ||
if (!(numOffsets === 0)) { | ||
_context4.next = 16; | ||
break; | ||
} | ||
return _context4.abrupt("return", []); | ||
case 16: | ||
off = []; | ||
numOffsets = 0; | ||
for (_i = 0; _i < bins.length; _i += 1) { | ||
chunks = binIndex[bins[_i]]; | ||
if (chunks) | ||
for (j = 0; j < chunks.length; j += 1) { | ||
off[numOffsets] = new _chunk.default( | ||
chunks[j].minv, | ||
chunks[j].maxv, | ||
chunks[j].bin); | ||
if (chunks) for (j = 0; j < chunks.length; j += 1) { | ||
off[numOffsets] = new _chunk.default(chunks[j].minv, chunks[j].maxv, chunks[j].bin); | ||
numOffsets += 1; | ||
} | ||
}if ( | ||
} | ||
off.length) {_context3.next = 20;break;}return _context3.abrupt("return", []);case 20: | ||
if (off.length) { | ||
_context4.next = 21; | ||
break; | ||
} | ||
off = off.sort(function (a, b) {return a.compareTo(b);}); | ||
return _context4.abrupt("return", []); | ||
// resolve completely contained adjacent blocks | ||
case 21: | ||
off = off.sort(function (a, b) { | ||
return a.compareTo(b); | ||
}); // resolve completely contained adjacent blocks | ||
l = 0; | ||
for (_i2 = 1; _i2 < numOffsets; _i2 += 1) { | ||
@@ -216,14 +479,14 @@ if (off[l].maxv.compareTo(off[_i2].maxv) < 0) { | ||
} | ||
numOffsets = l + 1; | ||
// resolve overlaps between adjacent blocks; this may happen due to the merge in indexing | ||
numOffsets = l + 1; // resolve overlaps between adjacent blocks; this may happen due to the merge in indexing | ||
for (_i3 = 1; _i3 < numOffsets; _i3 += 1) { | ||
if (off[_i3 - 1].maxv.compareTo(off[_i3].minv) >= 0) | ||
off[_i3 - 1].maxv = off[_i3].minv;} | ||
if (off[_i3 - 1].maxv.compareTo(off[_i3].minv) >= 0) off[_i3 - 1].maxv = off[_i3].minv; | ||
} // merge adjacent blocks | ||
// merge adjacent blocks | ||
l = 0; | ||
for (_i4 = 1; _i4 < numOffsets; _i4 += 1) { | ||
if ((0, _util.canMergeBlocks)(off[l], off[_i4])) off[l].maxv = off[_i4].maxv;else | ||
{ | ||
if ((0, _util.canMergeBlocks)(off[l], off[_i4])) off[l].maxv = off[_i4].maxv;else { | ||
l += 1; | ||
@@ -234,15 +497,33 @@ off[l].minv = off[_i4].minv; | ||
} | ||
numOffsets = l + 1;return _context3.abrupt("return", | ||
off.slice(0, numOffsets));case 29:case "end":return _context3.stop();}}}, _callee3, this);}));function blocksForRange(_x3, _x4, _x5, _x6) {return _blocksForRange.apply(this, arguments);}return blocksForRange;}() | ||
numOffsets = l + 1; | ||
return _context4.abrupt("return", off.slice(0, numOffsets)); | ||
case 30: | ||
case "end": | ||
return _context4.stop(); | ||
} | ||
} | ||
}, _callee4, this); | ||
})); | ||
function blocksForRange(_x3, _x4, _x5) { | ||
return _blocksForRange.apply(this, arguments); | ||
} | ||
return blocksForRange; | ||
}() | ||
/** | ||
* calculate the list of bins that may overlap with region [beg,end) (zero-based half-open) | ||
* @returns {Array[number]} | ||
*/ }, { key: "reg2bins", value: function reg2bins( | ||
beg, end) { | ||
* calculate the list of bins that may overlap with region [beg,end) (zero-based half-open) | ||
* @returns {Array[number]} | ||
*/ | ||
}, { | ||
key: "reg2bins", | ||
value: function reg2bins(beg, end) { | ||
beg -= 1; // < convert to 1-based closed | ||
if (beg < 1) beg = 1; | ||
if (end > Math.pow(2, 50)) end = Math.pow(2, 34); // 17 GiB ought to be enough for anybody | ||
end -= 1; | ||
@@ -253,12 +534,20 @@ var l = 0; | ||
var bins = []; | ||
for (; l <= this.depth; s -= 3, t += lshift(1, l * 3), l += 1) { | ||
var b = t + rshift(beg, s); | ||
var e = t + rshift(end, s); | ||
if (e - b + bins.length > this.maxBinNumber) | ||
throw new Error("query ".concat( | ||
beg, "-").concat(end, " is too large for current binning scheme (shift ").concat(this.minShift, ", depth ").concat(this.depth, "), try a smaller query or a coarser index binning scheme")); | ||
if (e - b + bins.length > this.maxBinNumber) throw new Error("query ".concat(beg, "-").concat(end, " is too large for current binning scheme (shift ").concat(this.minShift, ", depth ").concat(this.depth, "), try a smaller query or a coarser index binning scheme")); | ||
for (var i = b; i <= e; i += 1) {bins.push(i);} | ||
for (var i = b; i <= e; i += 1) { | ||
bins.push(i); | ||
} | ||
} | ||
return bins; | ||
} }]);return CSI;}(IndexFile);exports.default = CSI; | ||
} | ||
}]); | ||
return CSI; | ||
}(_indexFile.default); | ||
exports.default = CSI; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jc2kudHMiXSwibmFtZXMiOlsiQ1NJMV9NQUdJQyIsIkNTSTJfTUFHSUMiLCJsc2hpZnQiLCJudW0iLCJiaXRzIiwicnNoaWZ0IiwiTWF0aCIsImZsb29yIiwiQ1NJIiwiYXJncyIsIm1heEJpbk51bWJlciIsImRlcHRoIiwibWluU2hpZnQiLCJyZWZJZCIsInBhcnNlIiwiaW5kZXhEYXRhIiwiaWR4IiwiaW5kaWNlcyIsInN0YXRzIiwibGluZUNvdW50IiwiRXJyb3IiLCJieXRlcyIsIm9mZnNldCIsImF1eExlbmd0aCIsImRhdGEiLCJmb3JtYXRGbGFncyIsInJlYWRJbnQzMkxFIiwiY29vcmRpbmF0ZVR5cGUiLCJmb3JtYXQiLCJjb2x1bW5OdW1iZXJzIiwicmVmIiwic3RhcnQiLCJlbmQiLCJtZXRhVmFsdWUiLCJtZXRhQ2hhciIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsInNraXBMaW5lcyIsIm5hbWVTZWN0aW9uTGVuZ3RoIiwiX3BhcnNlTmFtZUJ5dGVzIiwic2xpY2UiLCJuYW1lc0J5dGVzIiwiY3VyclJlZklkIiwiY3Vyck5hbWVTdGFydCIsInJlZklkVG9OYW1lIiwicmVmTmFtZVRvSWQiLCJpIiwibGVuZ3RoIiwicmVmTmFtZSIsInRvU3RyaW5nIiwicmVuYW1lUmVmU2VxIiwiYWJvcnRTaWduYWwiLCJjc2kiLCJtYXhCbG9ja1NpemUiLCJ1bnppcCIsImZpbGVoYW5kbGUiLCJyZWFkRmlsZSIsInNpZ25hbCIsInJlYWRVSW50MzJMRSIsImNzaVZlcnNpb24iLCJwYXJzZUF1eERhdGEiLCJyZWZDb3VudCIsIkFycmF5IiwiY3Vyck9mZnNldCIsImJpbkNvdW50IiwiYmluSW5kZXgiLCJqIiwiYmluIiwicGFyc2VQc2V1ZG9CaW4iLCJsb2Zmc2V0IiwiX2ZpbmRGaXJzdERhdGEiLCJjaHVua0NvdW50IiwiY2h1bmtzIiwiayIsInUiLCJ2IiwiQ2h1bmsiLCJMb25nIiwiZnJvbUJ5dGVzTEUiLCJwcm90b3R5cGUiLCJjYWxsIiwiYmVnIiwib3B0cyIsImluZGV4ZXMiLCJiaW5zIiwicmVnMmJpbnMiLCJudW1PZmZzZXRzIiwib2ZmIiwibWludiIsIm1heHYiLCJzb3J0IiwiYSIsImIiLCJjb21wYXJlVG8iLCJsIiwidCIsInMiLCJlIiwicHVzaCIsIkluZGV4RmlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQSxJQUFNQSxVQUFVLEdBQUcsUUFBbkIsQyxDQUE0Qjs7QUFDNUIsSUFBTUMsVUFBVSxHQUFHLFFBQW5CLEMsQ0FBNEI7O0FBRTVCLFNBQVNDLE1BQVQsQ0FBZ0JDLEdBQWhCLEVBQTZCQyxJQUE3QixFQUEyQztBQUN6QyxTQUFPRCxHQUFHLFlBQUcsQ0FBSCxFQUFRQyxJQUFSLENBQVY7QUFDRDs7QUFDRCxTQUFTQyxNQUFULENBQWdCRixHQUFoQixFQUE2QkMsSUFBN0IsRUFBMkM7QUFDekMsU0FBT0UsSUFBSSxDQUFDQyxLQUFMLENBQVdKLEdBQUcsWUFBRyxDQUFILEVBQVFDLElBQVIsQ0FBZCxDQUFQO0FBQ0Q7O0lBRW9CSSxHOzs7OztBQUluQixlQUFZQyxJQUFaLEVBQXVCO0FBQUE7O0FBQUE7QUFDckIseUdBQU1BLElBQU47QUFEcUI7QUFBQTtBQUFBO0FBRXJCLFVBQUtDLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSxVQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNBLFVBQUtDLFFBQUwsR0FBZ0IsQ0FBaEI7QUFKcUI7QUFLdEI7Ozs7Ozs7aURBQ2VDLEs7Ozs7Ozs7dUJBQ1UsS0FBS0MsS0FBTCxFOzs7QUFBbEJDLGdCQUFBQSxTOztvQkFDREEsUzs7Ozs7aURBQWtCLENBQUMsQzs7O0FBQ2xCQyxnQkFBQUEsRyxHQUFNRCxTQUFTLENBQUNFLE9BQVYsQ0FBa0JKLEtBQWxCLEM7O29CQUNQRyxHOzs7OztpREFBWSxDQUFDLEM7OztBQUNWRSxnQkFBQUEsSyxHQUFVSCxTQUFTLENBQUNFLE9BQVYsQ0FBa0JK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QUFDN0QsWUFBTUYsQ0FBQyxHQUFHRyxDQUFDLEdBQUcxRixNQUFNLENBQUM0RSxHQUFELEVBQU1lLENBQU4sQ0FBcEI7QUFDQSxZQUFNQyxDQUFDLEdBQUdGLENBQUMsR0FBRzFGLE1BQU0sQ0FBQzJCLEdBQUQsRUFBTWdFLENBQU4sQ0FBcEI7QUFDQSxZQUFJQyxDQUFDLEdBQUdMLENBQUosR0FBUVIsSUFBSSxDQUFDckMsTUFBYixHQUFzQixLQUFLckMsWUFBL0IsRUFDRSxNQUFNLElBQUlVLEtBQUosaUJBQ0s2RCxHQURMLGNBQ1lqRCxHQURaLDZEQUNrRSxLQUFLcEIsUUFEdkUscUJBQzBGLEtBQUtELEtBRC9GLDhEQUFOOztBQUdGLGFBQUssSUFBSW1DLENBQUMsR0FBRzhDLENBQWIsRUFBZ0I5QyxDQUFDLElBQUltRCxDQUFyQixFQUF3Qm5ELENBQUMsSUFBSSxDQUE3QjtBQUFnQ3NDLFVBQUFBLElBQUksQ0FBQ2MsSUFBTCxDQUFVcEQsQ0FBVjtBQUFoQztBQUNEOztBQUNELGFBQU9zQyxJQUFQO0FBQ0Q7OztFQXBPOEJlLGtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvbmcgZnJvbSAnbG9uZydcbmltcG9ydCB7IHVuemlwIH0gZnJvbSAnLi91bnppcCdcblxuaW1wb3J0IHsgZnJvbUJ5dGVzIH0gZnJvbSAnLi92aXJ0dWFsT2Zmc2V0J1xuaW1wb3J0IENodW5rIGZyb20gJy4vY2h1bmsnXG5pbXBvcnQgeyBsb25nVG9OdW1iZXIsIGFib3J0QnJlYWtQb2ludCwgY2FuTWVyZ2VCbG9ja3MgfSBmcm9tICcuL3V0aWwnXG5cbmltcG9ydCBJbmRleEZpbGUgZnJvbSAnLi9pbmRleEZpbGUnXG5cbmNvbnN0IENTSTFfTUFHSUMgPSAyMTU4MjY1OSAvLyBDU0lcXDFcbmNvbnN0IENTSTJfTUFHSUMgPSAzODM1OTg3NSAvLyBDU0lcXDJcblxuZnVuY3Rpb24gbHNoaWZ0KG51bTogbnVtYmVyLCBiaXRzOiBudW1iZXIpIHtcbiAgcmV0dXJuIG51bSAqIDIgKiogYml0c1xufVxuZnVuY3Rpb24gcnNoaWZ0KG51bTogbnVtYmVyLCBiaXRzOiBudW1iZXIpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtIC8gMiAqKiBiaXRzKVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDU0kgZXh0ZW5kcyBJbmRleEZpbGUge1xuICBwcml2YXRlIG1heEJpbk51bWJlcjogbnVtYmVyXG4gIHByaXZhdGUgZGVwdGg6IG51bWJlclxuICBwcml2YXRlIG1pblNoaWZ0OiBudW1iZXJcbiAgY29uc3RydWN0b3IoYXJnczogYW55KSB7XG4gICAgc3VwZXIoYXJncylcbiAgICB0aGlzLm1heEJpbk51bWJlciA9IDBcbiAgICB0aGlzLmRlcHRoID0gMFxuICAgIHRoaXMubWluU2hpZnQgPSAwXG4gIH1cbiAgYXN5bmMgbGluZUNvdW50KHJlZklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHRoaXMucGFyc2UoKVxuICAgIGlmICghaW5kZXhEYXRhKSByZXR1cm4gLTFcbiAgICBjb25zdCBpZHggPSBpbmRleERhdGEuaW5kaWNlc1tyZWZJZF1cbiAgICBpZiAoIWlkeCkgcmV0dXJuIC0xXG4gICAgY29uc3QgeyBzdGF0cyB9ID0gaW5kZXhEYXRhLmluZGljZXNbcmVmSWRdXG4gICAgaWYgKHN0YXRzKSByZXR1cm4gc3RhdHMubGluZUNvdW50XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgYXN5bmMgaW5kZXhDb3YoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDU0kgaW5kZXhlcyBkbyBub3Qgc3VwcG9ydCBpbmRleGNvdicpXG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICBwYXJzZUF1eERhdGEoYnl0ZXM6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGF1eExlbmd0aDogbnVtYmVyKSB7XG4gICAgaWYgKGF1eExlbmd0aCA8IDMwKSByZXR1cm4ge31cblxuICAgIGNvbnN0IGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxuICAgIGRhdGEuZm9ybWF0RmxhZ3MgPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQpXG4gICAgZGF0YS5jb29yZGluYXRlVHlwZSA9IGRhdGEuZm9ybWF0RmxhZ3MgJiAweDEwMDAwID8gJ3plcm8tYmFzZWQtaGFsZi1vcGVuJyA6ICcxLWJhc2VkLWNsb3NlZCdcbiAgICBkYXRhLmZvcm1hdCA9ICh7IDA6ICdnZW5lcmljJywgMTogJ1NBTScsIDI6ICdWQ0YnIH0gYXMgeyBba2V5OiBudW1iZXJdOiBzdHJpbmcgfSlbZGF0YS5mb3JtYXRGbGFncyAmIDB4Zl1cbiAgICBpZiAoIWRhdGEuZm9ybWF0KSB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgVGFiaXggcHJlc2V0IGZvcm1hdCBmbGFncyAke2RhdGEuZm9ybWF0RmxhZ3N9YClcbiAgICBkYXRhLmNvbHVtbk51bWJlcnMgPSB7XG4gICAgICByZWY6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDQpLFxuICAgICAgc3RhcnQ6IGJ5dGVzLnJlYWRJbnQzMkxFKG9mZnNldCArIDgpLFxuICAgICAgZW5kOiBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAxMiksXG4gICAgfVxuICAgIGRhdGEubWV0YVZhbHVlID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMTYpXG4gICAgZGF0YS5tZXRhQ2hhciA9IGRhdGEubWV0YVZhbHVlID8gU3RyaW5nLmZyb21DaGFyQ29kZShkYXRhLm1ldGFWYWx1ZSkgOiAnJ1xuICAgIGRhdGEuc2tpcExpbmVzID0gYnl0ZXMucmVhZEludDMyTEUob2Zmc2V0ICsgMjApXG4gICAgY29uc3QgbmFtZVNlY3Rpb25MZW5ndGggPSBieXRlcy5yZWFkSW50MzJMRShvZmZzZXQgKyAyNClcblxuICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgdGhpcy5fcGFyc2VOYW1lQnl0ZXMoYnl0ZXMuc2xpY2Uob2Zmc2V0ICsgMjgsIG9mZnNldCArIDI4ICsgbmFtZVNlY3Rpb25MZW5ndGgpKSlcbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgX3BhcnNlTmFtZUJ5dGVzKG5hbWVzQnl0ZXM6IEJ1ZmZlcikge1xuICAgIGxldCBjdXJyUmVmSWQgPSAwXG4gICAgbGV0IGN1cnJOYW1lU3RhcnQgPSAwXG4gICAgY29uc3QgcmVmSWRUb05hbWUgPSBbXVxuICAgIGNvbnN0IHJlZk5hbWVUb0lkOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge31cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzQnl0ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghbmFtZXNCeXRlc1tpXSkge1xuICAgICAgICBpZiAoY3Vyck5hbWVTdGFydCA8IGkpIHtcbiAgICAgICAgICBsZXQgcmVmTmFtZSA9IG5hbWVzQnl0ZXMudG9TdHJpbmcoJ3V0ZjgnLCBjdXJyTmFtZVN0YXJ0LCBpKVxuICAgICAgICAgIHJlZk5hbWUgPSB0aGlzLnJlbmFtZVJlZlNlcShyZWZOYW1lKVxuICAgICAgICAgIHJlZklkVG9OYW1lW2N1cnJSZWZJZF0gPSByZWZOYW1lXG4gICAgICAgICAgcmVmTmFtZVRvSWRbcmVmTmFtZV0gPSBjdXJyUmVmSWRcbiAgICAgICAgfVxuICAgICAgICBjdXJyTmFtZVN0YXJ0ID0gaSArIDFcbiAgICAgICAgY3VyclJlZklkICs9IDFcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcmVmTmFtZVRvSWQsIHJlZklkVG9OYW1lIH1cbiAgfVxuXG4gIC8vIGZldGNoIGFuZCBwYXJzZSB0aGUgaW5kZXhcbiAgYXN5bmMgX3BhcnNlKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0geyBjc2k6IHRydWUsIG1heEJsb2NrU2l6ZTogMSA8PCAxNiB9XG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCB1bnppcCgoYXdhaXQgdGhpcy5maWxlaGFuZGxlLnJlYWRGaWxlKHsgc2lnbmFsOiBhYm9ydFNpZ25hbCB9KSkgYXMgQnVmZmVyKVxuXG4gICAgLy8gY2hlY2sgVEJJIG1hZ2ljIG51bWJlcnNcbiAgICBpZiAoYnl0ZXMucmVhZFVJbnQzMkxFKDApID09PSBDU0kxX01BR0lDKSB7XG4gICAgICBkYXRhLmNzaVZlcnNpb24gPSAxXG4gICAgfSBlbHNlIGlmIChieXRlcy5yZWFkVUludDMyTEUoMCkgPT09IENTSTJfTUFHSUMpIHtcbiAgICAgIGRhdGEuY3NpVmVyc2lvbiA9IDJcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSBDU0kgZmlsZScpXG4gICAgICAvLyBUT0RPOiBkbyB3ZSBuZWVkIHRvIHN1cHBvcnQgYmlnLWVuZGlhbiBDU0kgZmlsZXM/XG4gICAgfVxuXG4gICAgdGhpcy5taW5TaGlmdCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDQpXG4gICAgdGhpcy5kZXB0aCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDgpXG4gICAgdGhpcy5tYXhCaW5OdW1iZXIgPSAoKDEgPDwgKCh0aGlzLmRlcHRoICsgMSkgKiAzKSkgLSAxKSAvIDdcbiAgICBjb25zdCBhdXhMZW5ndGggPSBieXRlcy5yZWFkSW50MzJMRSgxMilcbiAgICBpZiAoYXV4TGVuZ3RoKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGRhdGEsIHRoaXMucGFyc2VBdXhEYXRhKGJ5dGVzLCAxNiwgYXV4TGVuZ3RoKSlcbiAgICB9XG4gICAgZGF0YS5yZWZDb3VudCA9IGJ5dGVzLnJlYWRJbnQzMkxFKDE2ICsgYXV4TGVuZ3RoKVxuXG4gICAgLy8gcmVhZCB0aGUgaW5kZXhlcyBmb3IgZWFjaCByZWZlcmVuY2Ugc2VxdWVuY2VcbiAgICBkYXRhLmluZGljZXMgPSBuZXcgQXJyYXkoZGF0YS5yZWZDb3VudClcbiAgICBsZXQgY3Vyck9mZnNldCA9IDE2ICsgYXV4TGVuZ3RoICsgNFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5yZWZDb3VudDsgaSArPSAxKSB7XG4gICAgICBhd2FpdCBhYm9ydEJyZWFrUG9pbnQoYWJvcnRTaWduYWwpXG4gICAgICAvLyB0aGUgYmlubmluZyBpbmRleFxuICAgICAgY29uc3QgYmluQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0KVxuICAgICAgY3Vyck9mZnNldCArPSA0XG4gICAgICBjb25zdCBiaW5JbmRleDogeyBba2V5OiBzdHJpbmddOiBDaHVua1tdIH0gPSB7fVxuICAgICAgbGV0IHN0YXRzIC8vIDwgcHJvdmlkZWQgYnkgcGFyc2luZyBhIHBzZXVkby1iaW4sIGlmIHByZXNlbnRcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmluQ291bnQ7IGogKz0gMSkge1xuICAgICAgICBjb25zdCBiaW4gPSBieXRlcy5yZWFkVUludDMyTEUoY3Vyck9mZnNldClcbiAgICAgICAgaWYgKGJpbiA+IHRoaXMubWF4QmluTnVtYmVyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBhIGZha2UgYmluIHRoYXQgYWN0dWFsbHkgaGFzIHN0YXRzIGluZm9ybWF0aW9uXG4gICAgICAgICAgLy8gYWJvdXQgdGhlIHJlZmVyZW5jZSBzZXF1ZW5jZSBpbiBpdFxuICAgICAgICAgIHN0YXRzID0gdGhpcy5wYXJzZVBzZXVkb0JpbihieXRlcywgY3Vyck9mZnNldCArIDQpXG4gICAgICAgICAgY3Vyck9mZnNldCArPSA0ICsgOCArIDQgKyAxNiArIDE2XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbG9mZnNldCA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDQpXG4gICAgICAgICAgdGhpcy5fZmluZEZpcnN0RGF0YShkYXRhLCBsb2Zmc2V0KVxuICAgICAgICAgIGNvbnN0IGNodW5rQ291bnQgPSBieXRlcy5yZWFkSW50MzJMRShjdXJyT2Zmc2V0ICsgMTIpXG4gICAgICAgICAgY3Vyck9mZnNldCArPSAxNlxuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IG5ldyBBcnJheShjaHVua0NvdW50KVxuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2h1bmtDb3VudDsgayArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCB1ID0gZnJvbUJ5dGVzKGJ5dGVzLCBjdXJyT2Zmc2V0KVxuICAgICAgICAgICAgY29uc3QgdiA9IGZyb21CeXRlcyhieXRlcywgY3Vyck9mZnNldCArIDgpXG4gICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IDE2XG4gICAgICAgICAgICAvLyB0aGlzLl9maW5kRmlyc3REYXRhKGRhdGEsIHUpXG4gICAgICAgICAgICBjaHVua3Nba10gPSBuZXcgQ2h1bmsodSwgdiwgYmluKVxuICAgICAgICAgIH1cbiAgICAgICAgICBiaW5JbmRleFtiaW5dID0gY2h1bmtzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGF0YS5pbmRpY2VzW2ldID0geyBiaW5JbmRleCwgc3RhdHMgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBwYXJzZVBzZXVkb0JpbihieXRlczogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcikge1xuICAgIC8vIGNvbnN0IG9uZSA9IExvbmcuZnJvbUJ5dGVzTEUoYnl0ZXMuc2xpY2Uob2Zmc2V0ICsgNCwgb2Zmc2V0ICsgMTIpLCB0cnVlKVxuICAgIC8vIGNvbnN0IHR3byA9IExvbmcuZnJvbUJ5dGVzTEUoYnl0ZXMuc2xpY2Uob2Zmc2V0ICsgMTIsIG9mZnNldCArIDIwKSwgdHJ1ZSlcbiAgICAvLyBjb25zdCB0aHJlZSA9IGxvbmdUb051bWJlcihcbiAgICAvLyAgIExvbmcuZnJvbUJ5dGVzTEUoYnl0ZXMuc2xpY2Uob2Zmc2V0ICsgMjAsIG9mZnNldCArIDI4KSwgdHJ1ZSksXG4gICAgLy8gKVxuICAgIGNvbnN0IGxpbmVDb3VudCA9IGxvbmdUb051bWJlcihMb25nLmZyb21CeXRlc0xFKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzLCBvZmZzZXQgKyAyOCwgb2Zmc2V0ICsgMzYpLCB0cnVlKSlcbiAgICByZXR1cm4geyBsaW5lQ291bnQgfVxuICB9XG5cbiAgYXN5bmMgYmxvY2tzRm9yUmFuZ2UocmVmSWQ6IG51bWJlciwgYmVnOiBudW1iZXIsIGVuZDogbnVtYmVyLCBvcHRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBQcm9taXNlPENodW5rW10+IHtcbiAgICBpZiAoYmVnIDwgMCkgYmVnID0gMFxuXG4gICAgY29uc3QgaW5kZXhEYXRhID0gYXdhaXQgdGhpcy5wYXJzZShvcHRzLnNpZ25hbClcbiAgICBpZiAoIWluZGV4RGF0YSkgcmV0dXJuIFtdXG4gICAgY29uc3QgaW5kZXhlcyA9IGluZGV4RGF0YS5pbmRpY2VzW3JlZklkXVxuICAgIGlmICghaW5kZXhlcykgcmV0dXJuIFtdXG5cbiAgICBjb25zdCB7IGJpbkluZGV4IH0gPSBpbmRleGVzXG5cbiAgICBjb25zdCBiaW5zID0gdGhpcy5yZWcyYmlucyhiZWcsIGVuZClcblxuICAgIGxldCBsXG4gICAgbGV0IG51bU9mZnNldHMgPSAwXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoYmluSW5kZXhbYmluc1tpXV0pIG51bU9mZnNldHMgKz0gYmluSW5kZXhbYmluc1tpXV0ubGVuZ3RoXG4gICAgfVxuXG4gICAgaWYgKG51bU9mZnNldHMgPT09IDApIHJldHVybiBbXVxuXG4gICAgbGV0IG9mZiA9IFtdXG4gICAgbnVtT2Zmc2V0cyA9IDBcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IGJpbkluZGV4W2JpbnNbaV1dXG4gICAgICBpZiAoY2h1bmtzKVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNodW5rcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIG9mZltudW1PZmZzZXRzXSA9IG5ldyBDaHVuayhjaHVua3Nbal0ubWludiwgY2h1bmtzW2pdLm1heHYsIGNodW5rc1tqXS5iaW4pXG4gICAgICAgICAgbnVtT2Zmc2V0cyArPSAxXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9mZi5sZW5ndGgpIHJldHVybiBbXVxuXG4gICAgb2ZmID0gb2ZmLnNvcnQoKGEsIGIpID0+IGEuY29tcGFyZVRvKGIpKVxuXG4gICAgLy8gcmVzb2x2ZSBjb21wbGV0ZWx5IGNvbnRhaW5lZCBhZGphY2VudCBibG9ja3NcbiAgICBsID0gMFxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbnVtT2Zmc2V0czsgaSArPSAxKSB7XG4gICAgICBpZiAob2ZmW2xdLm1heHYuY29tcGFyZVRvKG9mZltpXS5tYXh2KSA8IDApIHtcbiAgICAgICAgbCArPSAxXG4gICAgICAgIG9mZltsXS5taW52ID0gb2ZmW2ldLm1pbnZcbiAgICAgICAgb2ZmW2xdLm1heHYgPSBvZmZbaV0ubWF4dlxuICAgICAgfVxuICAgIH1cbiAgICBudW1PZmZzZXRzID0gbCArIDFcblxuICAgIC8vIHJlc29sdmUgb3ZlcmxhcHMgYmV0d2VlbiBhZGphY2VudCBibG9ja3M7IHRoaXMgbWF5IGhhcHBlbiBkdWUgdG8gdGhlIG1lcmdlIGluIGluZGV4aW5nXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1PZmZzZXRzOyBpICs9IDEpXG4gICAgICBpZiAob2ZmW2kgLSAxXS5tYXh2LmNvbXBhcmVUbyhvZmZbaV0ubWludikgPj0gMCkgb2ZmW2kgLSAxXS5tYXh2ID0gb2ZmW2ldLm1pbnZcblxuICAgIC8vIG1lcmdlIGFkamFjZW50IGJsb2Nrc1xuICAgIGwgPSAwXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBudW1PZmZzZXRzOyBpICs9IDEpIHtcbiAgICAgIGlmIChjYW5NZXJnZUJsb2NrcyhvZmZbbF0sIG9mZltpXSkpIG9mZltsXS5tYXh2ID0gb2ZmW2ldLm1heHZcbiAgICAgIGVsc2Uge1xuICAgICAgICBsICs9IDFcbiAgICAgICAgb2ZmW2xdLm1pbnYgPSBvZmZbaV0ubWludlxuICAgICAgICBvZmZbbF0ubWF4diA9IG9mZltpXS5tYXh2XG4gICAgICB9XG4gICAgfVxuICAgIG51bU9mZnNldHMgPSBsICsgMVxuXG4gICAgcmV0dXJuIG9mZi5zbGljZSgwLCBudW1PZmZzZXRzKVxuICB9XG5cbiAgLyoqXG4gICAqIGNhbGN1bGF0ZSB0aGUgbGlzdCBvZiBiaW5zIHRoYXQgbWF5IG92ZXJsYXAgd2l0aCByZWdpb24gW2JlZyxlbmQpICh6ZXJvLWJhc2VkIGhhbGYtb3BlbilcbiAgICogQHJldHVybnMge0FycmF5W251bWJlcl19XG4gICAqL1xuICByZWcyYmlucyhiZWc6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICBiZWcgLT0gMSAvLyA8IGNvbnZlcnQgdG8gMS1iYXNlZCBjbG9zZWRcbiAgICBpZiAoYmVnIDwgMSkgYmVnID0gMVxuICAgIGlmIChlbmQgPiAyICoqIDUwKSBlbmQgPSAyICoqIDM0IC8vIDE3IEdpQiBvdWdodCB0byBiZSBlbm91Z2ggZm9yIGFueWJvZHlcbiAgICBlbmQgLT0gMVxuICAgIGxldCBsID0gMFxuICAgIGxldCB0ID0gMFxuICAgIGxldCBzID0gdGhpcy5taW5TaGlmdCArIHRoaXMuZGVwdGggKiAzXG4gICAgY29uc3QgYmlucyA9IFtdXG4gICAgZm9yICg7IGwgPD0gdGhpcy5kZXB0aDsgcyAtPSAzLCB0ICs9IGxzaGlmdCgxLCBsICogMyksIGwgKz0gMSkge1xuICAgICAgY29uc3QgYiA9IHQgKyByc2hpZnQoYmVnLCBzKVxuICAgICAgY29uc3QgZSA9IHQgKyByc2hpZnQoZW5kLCBzKVxuICAgICAgaWYgKGUgLSBiICsgYmlucy5sZW5ndGggPiB0aGlzLm1heEJpbk51bWJlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBxdWVyeSAke2JlZ30tJHtlbmR9IGlzIHRvbyBsYXJnZSBmb3IgY3VycmVudCBiaW5uaW5nIHNjaGVtZSAoc2hpZnQgJHt0aGlzLm1pblNoaWZ0fSwgZGVwdGggJHt0aGlzLmRlcHRofSksIHRyeSBhIHNtYWxsZXIgcXVlcnkgb3IgYSBjb2Fyc2VyIGluZGV4IGJpbm5pbmcgc2NoZW1lYCxcbiAgICAgICAgKVxuICAgICAgZm9yIChsZXQgaSA9IGI7IGkgPD0gZTsgaSArPSAxKSBiaW5zLnB1c2goaSlcbiAgICB9XG4gICAgcmV0dXJuIGJpbnNcbiAgfVxufVxuIl19 |
@@ -1,29 +0,128 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));var BamError = /*#__PURE__*/function (_Error) {(0, _inherits2.default)(BamError, _Error);function BamError() {(0, _classCallCheck2.default)(this, BamError);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamError).apply(this, arguments));}return BamError;}((0, _wrapNativeSuper2.default)(Error)); | ||
"use strict"; | ||
/** Error caused by encountering a part of the BAM spec that has not yet been implemented */var | ||
BamUnimplementedError = /*#__PURE__*/function (_Error2) {(0, _inherits2.default)(BamUnimplementedError, _Error2);function BamUnimplementedError() {(0, _classCallCheck2.default)(this, BamUnimplementedError);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamUnimplementedError).apply(this, arguments));}return BamUnimplementedError;}((0, _wrapNativeSuper2.default)(Error)); | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
/** An error caused by malformed data. */var | ||
BamMalformedError = /*#__PURE__*/function (_BamError) {(0, _inherits2.default)(BamMalformedError, _BamError);function BamMalformedError() {(0, _classCallCheck2.default)(this, BamMalformedError);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamMalformedError).apply(this, arguments));}return BamMalformedError;}(BamError); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.BamArgumentError = exports.BamSizeLimitError = exports.BamBufferOverrunError = exports.BamMalformedError = exports.BamUnimplementedError = exports.BamError = void 0; | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn")); | ||
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf")); | ||
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits")); | ||
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/wrapNativeSuper")); | ||
var BamError = | ||
/*#__PURE__*/ | ||
function (_Error) { | ||
(0, _inherits2.default)(BamError, _Error); | ||
function BamError() { | ||
(0, _classCallCheck2.default)(this, BamError); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamError).apply(this, arguments)); | ||
} | ||
return BamError; | ||
}((0, _wrapNativeSuper2.default)(Error)); | ||
/** Error caused by encountering a part of the BAM spec that has not yet been implemented */ | ||
exports.BamError = BamError; | ||
var BamUnimplementedError = | ||
/*#__PURE__*/ | ||
function (_Error2) { | ||
(0, _inherits2.default)(BamUnimplementedError, _Error2); | ||
function BamUnimplementedError() { | ||
(0, _classCallCheck2.default)(this, BamUnimplementedError); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamUnimplementedError).apply(this, arguments)); | ||
} | ||
return BamUnimplementedError; | ||
}((0, _wrapNativeSuper2.default)(Error)); | ||
/** An error caused by malformed data. */ | ||
exports.BamUnimplementedError = BamUnimplementedError; | ||
var BamMalformedError = | ||
/*#__PURE__*/ | ||
function (_BamError) { | ||
(0, _inherits2.default)(BamMalformedError, _BamError); | ||
function BamMalformedError() { | ||
(0, _classCallCheck2.default)(this, BamMalformedError); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamMalformedError).apply(this, arguments)); | ||
} | ||
return BamMalformedError; | ||
}(BamError); | ||
/** | ||
* An error caused by attempting to read beyond the end of the defined data. | ||
*/var | ||
BamBufferOverrunError = /*#__PURE__*/function (_BamMalformedError) {(0, _inherits2.default)(BamBufferOverrunError, _BamMalformedError);function BamBufferOverrunError() {(0, _classCallCheck2.default)(this, BamBufferOverrunError);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamBufferOverrunError).apply(this, arguments));}return BamBufferOverrunError;}(BamMalformedError); | ||
* An error caused by attempting to read beyond the end of the defined data. | ||
*/ | ||
exports.BamMalformedError = BamMalformedError; | ||
var BamBufferOverrunError = | ||
/*#__PURE__*/ | ||
function (_BamMalformedError) { | ||
(0, _inherits2.default)(BamBufferOverrunError, _BamMalformedError); | ||
function BamBufferOverrunError() { | ||
(0, _classCallCheck2.default)(this, BamBufferOverrunError); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamBufferOverrunError).apply(this, arguments)); | ||
} | ||
return BamBufferOverrunError; | ||
}(BamMalformedError); | ||
/** | ||
* An error caused by data being too big, exceeding a size limit. | ||
*/var | ||
BamSizeLimitError = /*#__PURE__*/function (_BamError2) {(0, _inherits2.default)(BamSizeLimitError, _BamError2);function BamSizeLimitError() {(0, _classCallCheck2.default)(this, BamSizeLimitError);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamSizeLimitError).apply(this, arguments));}return BamSizeLimitError;}(BamError); | ||
* An error caused by data being too big, exceeding a size limit. | ||
*/ | ||
exports.BamBufferOverrunError = BamBufferOverrunError; | ||
var BamSizeLimitError = | ||
/*#__PURE__*/ | ||
function (_BamError2) { | ||
(0, _inherits2.default)(BamSizeLimitError, _BamError2); | ||
function BamSizeLimitError() { | ||
(0, _classCallCheck2.default)(this, BamSizeLimitError); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamSizeLimitError).apply(this, arguments)); | ||
} | ||
return BamSizeLimitError; | ||
}(BamError); | ||
/** | ||
* An invalid argument was supplied to a bam-js method or object. | ||
*/var | ||
BamArgumentError = /*#__PURE__*/function (_BamError3) {(0, _inherits2.default)(BamArgumentError, _BamError3);function BamArgumentError() {(0, _classCallCheck2.default)(this, BamArgumentError);return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamArgumentError).apply(this, arguments));}return BamArgumentError;}(BamError); | ||
* An invalid argument was supplied to a bam-js method or object. | ||
*/ | ||
module.exports = { | ||
BamBufferOverrunError: BamBufferOverrunError, | ||
BamMalformedError: BamMalformedError, | ||
BamUnimplementedError: BamUnimplementedError, | ||
BamSizeLimitError: BamSizeLimitError, | ||
BamArgumentError: BamArgumentError }; | ||
exports.BamSizeLimitError = BamSizeLimitError; | ||
var BamArgumentError = | ||
/*#__PURE__*/ | ||
function (_BamError3) { | ||
(0, _inherits2.default)(BamArgumentError, _BamError3); | ||
function BamArgumentError() { | ||
(0, _classCallCheck2.default)(this, BamArgumentError); | ||
return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(BamArgumentError).apply(this, arguments)); | ||
} | ||
return BamArgumentError; | ||
}(BamError); | ||
exports.BamArgumentError = BamArgumentError; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMudHMiXSwibmFtZXMiOlsiQmFtRXJyb3IiLCJFcnJvciIsIkJhbVVuaW1wbGVtZW50ZWRFcnJvciIsIkJhbU1hbGZvcm1lZEVycm9yIiwiQmFtQnVmZmVyT3ZlcnJ1bkVycm9yIiwiQmFtU2l6ZUxpbWl0RXJyb3IiLCJCYW1Bcmd1bWVudEVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQWFBLFE7Ozs7Ozs7Ozs7O2lDQUFpQkMsSztBQUU5Qjs7Ozs7SUFDYUMscUI7Ozs7Ozs7Ozs7O2lDQUE4QkQsSztBQUUzQzs7Ozs7SUFDYUUsaUI7Ozs7Ozs7Ozs7O0VBQTBCSCxRO0FBRXZDOzs7Ozs7O0lBR2FJLHFCOzs7Ozs7Ozs7OztFQUE4QkQsaUI7QUFFM0M7Ozs7Ozs7SUFHYUUsaUI7Ozs7Ozs7Ozs7O0VBQTBCTCxRO0FBRXZDOzs7Ozs7O0lBR2FNLGdCOzs7Ozs7Ozs7OztFQUF5Qk4sUSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBCYW1FcnJvciBleHRlbmRzIEVycm9yIHt9XG5cbi8qKiBFcnJvciBjYXVzZWQgYnkgZW5jb3VudGVyaW5nIGEgcGFydCBvZiB0aGUgQkFNIHNwZWMgdGhhdCBoYXMgbm90IHlldCBiZWVuIGltcGxlbWVudGVkICovXG5leHBvcnQgY2xhc3MgQmFtVW5pbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqIEFuIGVycm9yIGNhdXNlZCBieSBtYWxmb3JtZWQgZGF0YS4gICovXG5leHBvcnQgY2xhc3MgQmFtTWFsZm9ybWVkRXJyb3IgZXh0ZW5kcyBCYW1FcnJvciB7fVxuXG4vKipcbiAqIEFuIGVycm9yIGNhdXNlZCBieSBhdHRlbXB0aW5nIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGRlZmluZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhbUJ1ZmZlck92ZXJydW5FcnJvciBleHRlbmRzIEJhbU1hbGZvcm1lZEVycm9yIHt9XG5cbi8qKlxuICogQW4gZXJyb3IgY2F1c2VkIGJ5IGRhdGEgYmVpbmcgdG9vIGJpZywgZXhjZWVkaW5nIGEgc2l6ZSBsaW1pdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhbVNpemVMaW1pdEVycm9yIGV4dGVuZHMgQmFtRXJyb3Ige31cblxuLyoqXG4gKiBBbiBpbnZhbGlkIGFyZ3VtZW50IHdhcyBzdXBwbGllZCB0byBhIGJhbS1qcyBtZXRob2Qgb3Igb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgQmFtQXJndW1lbnRFcnJvciBleHRlbmRzIEJhbUVycm9yIHt9XG4iXX0= |
@@ -1,2 +0,28 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });Object.defineProperty(exports, "BAI", { enumerable: true, get: function get() {return _bai.default;} });Object.defineProperty(exports, "BamFile", { enumerable: true, get: function get() {return _bamFile.default;} });var _bai = _interopRequireDefault(require("./bai")); | ||
var _bamFile = _interopRequireDefault(require("./bamFile")); | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
_Object$defineProperty(exports, "BAI", { | ||
enumerable: true, | ||
get: function get() { | ||
return _bai.default; | ||
} | ||
}); | ||
_Object$defineProperty(exports, "BamFile", { | ||
enumerable: true, | ||
get: function get() { | ||
return _bamFile.default; | ||
} | ||
}); | ||
var _bai = _interopRequireDefault(require("./bai")); | ||
var _bamFile = _interopRequireDefault(require("./bamFile")); | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCQUkgZnJvbSAnLi9iYWknXG5pbXBvcnQgQmFtRmlsZSBmcm9tICcuL2JhbUZpbGUnXG5cbmV4cG9ydCB7IEJBSSwgQmFtRmlsZSB9XG4iXX0= |
@@ -1,44 +0,148 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache")); | ||
var _quickLru = _interopRequireDefault(require("quick-lru"));var | ||
"use strict"; | ||
IndexFile = /*#__PURE__*/function () { | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator")); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator")); | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); | ||
var _abortablePromiseCache = _interopRequireDefault(require("abortable-promise-cache")); | ||
var _quickLru = _interopRequireDefault(require("quick-lru")); | ||
var IndexFile = | ||
/*#__PURE__*/ | ||
function () { | ||
/** | ||
* @param {filehandle} filehandle | ||
* @param {function} [renameRefSeqs] | ||
*/ | ||
function IndexFile(_ref) {var filehandle = _ref.filehandle,_ref$renameRefSeqs = _ref.renameRefSeqs,renameRefSeqs = _ref$renameRefSeqs === void 0 ? function (n) {return n;} : _ref$renameRefSeqs;(0, _classCallCheck2.default)(this, IndexFile); | ||
* @param {filehandle} filehandle | ||
* @param {function} [renameRefSeqs] | ||
*/ | ||
function IndexFile(_ref) { | ||
var filehandle = _ref.filehandle, | ||
_ref$renameRefSeq = _ref.renameRefSeq, | ||
renameRefSeq = _ref$renameRefSeq === void 0 ? function (n) { | ||
return n; | ||
} : _ref$renameRefSeq; | ||
(0, _classCallCheck2.default)(this, IndexFile); | ||
(0, _defineProperty2.default)(this, "filehandle", void 0); | ||
(0, _defineProperty2.default)(this, "renameRefSeq", void 0); | ||
(0, _defineProperty2.default)(this, "_parseCache", void 0); | ||
this.filehandle = filehandle; | ||
this.renameRefSeq = renameRefSeqs; | ||
}(0, _createClass2.default)(IndexFile, [{ key: "_findFirstData", value: function _findFirstData( | ||
this.renameRefSeq = renameRefSeq; | ||
} | ||
data, virtualOffset) { | ||
(0, _createClass2.default)(IndexFile, [{ | ||
key: "_findFirstData", | ||
value: function _findFirstData(data, virtualOffset) { | ||
var currentFdl = data.firstDataLine; | ||
if (currentFdl) { | ||
data.firstDataLine = | ||
currentFdl.compareTo(virtualOffset) > 0 ? virtualOffset : currentFdl; | ||
data.firstDataLine = currentFdl.compareTo(virtualOffset) > 0 ? virtualOffset : currentFdl; | ||
} else { | ||
data.firstDataLine = virtualOffset; | ||
} | ||
} }, { key: "parse", value: function () {var _parse = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee( | ||
} | ||
}, { | ||
key: "parse", | ||
value: function () { | ||
var _parse2 = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(abortSignal) { | ||
var _this = this; | ||
abortSignal) {var _this = this;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0: | ||
if (!this._parseCache) | ||
this._parseCache = new _abortablePromiseCache.default({ | ||
cache: new _quickLru.default({ maxSize: 1 }), | ||
fill: function fill(data, signal) {return _this._parse(signal);} });return _context.abrupt("return", | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
if (!this._parseCache) this._parseCache = new _abortablePromiseCache.default({ | ||
cache: new _quickLru.default({ | ||
maxSize: 1 | ||
}), | ||
fill: function fill(data, signal) { | ||
return _this._parse(signal); | ||
} | ||
}); | ||
return _context.abrupt("return", this._parseCache.get('index', null, abortSignal)); | ||
this._parseCache.get('index', null, abortSignal));case 2:case "end":return _context.stop();}}}, _callee, this);}));function parse(_x) {return _parse.apply(this, arguments);}return parse;}() | ||
case 2: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee, this); | ||
})); | ||
function parse(_x) { | ||
return _parse2.apply(this, arguments); | ||
} | ||
return parse; | ||
}() | ||
/** | ||
* @param {number} seqId | ||
* @param {AbortSignal} [abortSignal] | ||
* @returns {Promise} true if the index contains entries for | ||
* the given reference sequence ID, false otherwise | ||
*/ }, { key: "hasRefSeq", value: function () {var _hasRefSeq = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2( | ||
seqId, abortSignal) {return _regenerator.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0:_context2.next = 2;return ( | ||
this.parse(abortSignal));case 2:_context2.t1 = seqId;_context2.t0 = _context2.sent.indices[_context2.t1];if (_context2.t0) {_context2.next = 6;break;}_context2.t0 = {};case 6:return _context2.abrupt("return", !!_context2.t0.binIndex);case 7:case "end":return _context2.stop();}}}, _callee2, this);}));function hasRefSeq(_x2, _x3) {return _hasRefSeq.apply(this, arguments);}return hasRefSeq;}() }]);return IndexFile;}(); | ||
* @param {number} seqId | ||
* @param {AbortSignal} [abortSignal] | ||
* @returns {Promise} true if the index contains entries for | ||
* the given reference sequence ID, false otherwise | ||
*/ | ||
}, { | ||
key: "hasRefSeq", | ||
value: function () { | ||
var _hasRefSeq = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee2(seqId, abortSignal) { | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.next = 2; | ||
return this.parse(abortSignal); | ||
case 2: | ||
_context2.t1 = seqId; | ||
_context2.t0 = _context2.sent.indices[_context2.t1]; | ||
module.exports = IndexFile; | ||
if (_context2.t0) { | ||
_context2.next = 6; | ||
break; | ||
} | ||
_context2.t0 = {}; | ||
case 6: | ||
return _context2.abrupt("return", !!_context2.t0.binIndex); | ||
case 7: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2, this); | ||
})); | ||
function hasRefSeq(_x2, _x3) { | ||
return _hasRefSeq.apply(this, arguments); | ||
} | ||
return hasRefSeq; | ||
}() | ||
}]); | ||
return IndexFile; | ||
}(); | ||
exports.default = IndexFile; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleEZpbGUudHMiXSwibmFtZXMiOlsiSW5kZXhGaWxlIiwiZmlsZWhhbmRsZSIsInJlbmFtZVJlZlNlcSIsIm4iLCJkYXRhIiwidmlydHVhbE9mZnNldCIsImN1cnJlbnRGZGwiLCJmaXJzdERhdGFMaW5lIiwiY29tcGFyZVRvIiwiYWJvcnRTaWduYWwiLCJfcGFyc2VDYWNoZSIsIkFib3J0YWJsZVByb21pc2VDYWNoZSIsImNhY2hlIiwiUXVpY2tMUlUiLCJtYXhTaXplIiwiZmlsbCIsInNpZ25hbCIsIl9wYXJzZSIsImdldCIsInNlcUlkIiwicGFyc2UiLCJpbmRpY2VzIiwiYmluSW5kZXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7SUFLOEJBLFM7OztBQUs1Qjs7OztBQUlBLDJCQU1HO0FBQUEsUUFMREMsVUFLQyxRQUxEQSxVQUtDO0FBQUEsaUNBSkRDLFlBSUM7QUFBQSxRQUpEQSxZQUlDLGtDQUpjLFVBQUNDLENBQUQ7QUFBQSxhQUFlQSxDQUFmO0FBQUEsS0FJZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0QsU0FBS0YsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CQSxZQUFwQjtBQUNEOzs7O21DQWVjRSxJLEVBQVdDLGEsRUFBOEI7QUFDdEQsVUFBTUMsVUFBVSxHQUFHRixJQUFJLENBQUNHLGFBQXhCOztBQUNBLFVBQUlELFVBQUosRUFBZ0I7QUFDZEYsUUFBQUEsSUFBSSxDQUFDRyxhQUFMLEdBQXFCRCxVQUFVLENBQUNFLFNBQVgsQ0FBcUJILGFBQXJCLElBQXNDLENBQXRDLEdBQTBDQSxhQUExQyxHQUEwREMsVUFBL0U7QUFDRCxPQUZELE1BRU87QUFDTEYsUUFBQUEsSUFBSSxDQUFDRyxhQUFMLEdBQXFCRixhQUFyQjtBQUNEO0FBQ0Y7Ozs7OztpREFFV0ksVzs7Ozs7OztBQUNWLG9CQUFJLENBQUMsS0FBS0MsV0FBVixFQUNFLEtBQUtBLFdBQUwsR0FBbUIsSUFBSUMsOEJBQUosQ0FBMEI7QUFDM0NDLGtCQUFBQSxLQUFLLEVBQUUsSUFBSUMsaUJBQUosQ0FBYTtBQUFFQyxvQkFBQUEsT0FBTyxFQUFFO0FBQVgsbUJBQWIsQ0FEb0M7QUFFM0NDLGtCQUFBQSxJQUFJLEVBQUUsY0FBQ1gsSUFBRCxFQUFZWSxNQUFaO0FBQUEsMkJBQW9DLEtBQUksQ0FBQ0MsTUFBTCxDQUFZRCxNQUFaLENBQXBDO0FBQUE7QUFGcUMsaUJBQTFCLENBQW5CO2lEQUlLLEtBQUtOLFdBQUwsQ0FBaUJRLEdBQWpCLENBQXFCLE9BQXJCLEVBQThCLElBQTlCLEVBQW9DVCxXQUFwQyxDOzs7Ozs7Ozs7Ozs7Ozs7O0FBR1Q7Ozs7Ozs7Ozs7OztrREFNZ0JVLEssRUFBZVYsVzs7Ozs7O3VCQUNaLEtBQUtXLEtBQUwsQ0FBV1gsV0FBWCxDOzs7K0JBQWlDVSxLOzhDQUFSRSxPOzs7Ozs7OytCQUFrQixFOzs7aUVBQUlDLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWJvcnRhYmxlUHJvbWlzZUNhY2hlIGZyb20gJ2Fib3J0YWJsZS1wcm9taXNlLWNhY2hlJ1xuaW1wb3J0IFF1aWNrTFJVIGZyb20gJ3F1aWNrLWxydSdcbmltcG9ydCB7IEdlbmVyaWNGaWxlaGFuZGxlIH0gZnJvbSAnZ2VuZXJpYy1maWxlaGFuZGxlJ1xuaW1wb3J0IFZpcnR1YWxPZmZzZXQgZnJvbSAnLi92aXJ0dWFsT2Zmc2V0J1xuaW1wb3J0IENodW5rIGZyb20gJy4vY2h1bmsnXG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIEluZGV4RmlsZSB7XG4gIHB1YmxpYyBmaWxlaGFuZGxlOiBHZW5lcmljRmlsZWhhbmRsZVxuICBwdWJsaWMgcmVuYW1lUmVmU2VxOiBGdW5jdGlvblxuICBwcml2YXRlIF9wYXJzZUNhY2hlOiBhbnlcblxuICAvKipcbiAgICogQHBhcmFtIHtmaWxlaGFuZGxlfSBmaWxlaGFuZGxlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtyZW5hbWVSZWZTZXFzXVxuICAgKi9cbiAgY29uc3RydWN0b3Ioe1xuICAgIGZpbGVoYW5kbGUsXG4gICAgcmVuYW1lUmVmU2VxID0gKG46IHN0cmluZykgPT4gbixcbiAgfToge1xuICAgIGZpbGVoYW5kbGU6IEdlbmVyaWNGaWxlaGFuZGxlXG4gICAgcmVuYW1lUmVmU2VxPzogKGE6IHN0cmluZykgPT4gc3RyaW5nXG4gIH0pIHtcbiAgICB0aGlzLmZpbGVoYW5kbGUgPSBmaWxlaGFuZGxlXG4gICAgdGhpcy5yZW5hbWVSZWZTZXEgPSByZW5hbWVSZWZTZXFcbiAgfVxuICBwdWJsaWMgYWJzdHJhY3QgYXN5bmMgbGluZUNvdW50KHJlZklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFzeW5jIF9wYXJzZShzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8YW55PlxuICBwdWJsaWMgYWJzdHJhY3QgYXN5bmMgaW5kZXhDb3YoXG4gICAgcmVmSWQ6IG51bWJlcixcbiAgICBzdGFydD86IG51bWJlcixcbiAgICBlbmQ/OiBudW1iZXIsXG4gICk6IFByb21pc2U8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgc2NvcmU6IG51bWJlciB9W10+XG4gIHB1YmxpYyBhYnN0cmFjdCBhc3luYyBibG9ja3NGb3JSYW5nZShcbiAgICBjaHJJZDogbnVtYmVyLFxuICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgZW5kOiBudW1iZXIsXG4gICAgb3B0czogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogUHJvbWlzZTxDaHVua1tdPlxuXG4gIF9maW5kRmlyc3REYXRhKGRhdGE6IGFueSwgdmlydHVhbE9mZnNldDogVmlydHVhbE9mZnNldCkge1xuICAgIGNvbnN0IGN1cnJlbnRGZGwgPSBkYXRhLmZpcnN0RGF0YUxpbmVcbiAgICBpZiAoY3VycmVudEZkbCkge1xuICAgICAgZGF0YS5maXJzdERhdGFMaW5lID0gY3VycmVudEZkbC5jb21wYXJlVG8odmlydHVhbE9mZnNldCkgPiAwID8gdmlydHVhbE9mZnNldCA6IGN1cnJlbnRGZGxcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YS5maXJzdERhdGFMaW5lID0gdmlydHVhbE9mZnNldFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBhcnNlKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBpZiAoIXRoaXMuX3BhcnNlQ2FjaGUpXG4gICAgICB0aGlzLl9wYXJzZUNhY2hlID0gbmV3IEFib3J0YWJsZVByb21pc2VDYWNoZSh7XG4gICAgICAgIGNhY2hlOiBuZXcgUXVpY2tMUlUoeyBtYXhTaXplOiAxIH0pLFxuICAgICAgICBmaWxsOiAoZGF0YTogYW55LCBzaWduYWw6IEFib3J0U2lnbmFsKSA9PiB0aGlzLl9wYXJzZShzaWduYWwpLFxuICAgICAgfSlcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VDYWNoZS5nZXQoJ2luZGV4JywgbnVsbCwgYWJvcnRTaWduYWwpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNlcUlkXG4gICAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IFthYm9ydFNpZ25hbF1cbiAgICogQHJldHVybnMge1Byb21pc2V9IHRydWUgaWYgdGhlIGluZGV4IGNvbnRhaW5zIGVudHJpZXMgZm9yXG4gICAqIHRoZSBnaXZlbiByZWZlcmVuY2Ugc2VxdWVuY2UgSUQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYXN5bmMgaGFzUmVmU2VxKHNlcUlkOiBudW1iZXIsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICByZXR1cm4gISEoKGF3YWl0IHRoaXMucGFyc2UoYWJvcnRTaWduYWwpKS5pbmRpY2VzW3NlcUlkXSB8fCB7fSkuYmluSW5kZXhcbiAgfVxufVxuIl19 |
@@ -1,11 +0,49 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var Constants = require('./constants'); | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.default = void 0; | ||
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int")); | ||
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys")); | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); | ||
var _constants = _interopRequireDefault(require("./constants")); | ||
/* eslint-disable @typescript-eslint/camelcase */ | ||
/* eslint-disable @typescript-eslint/no-empty-function */ | ||
/* eslint-disable @typescript-eslint/ban-ts-ignore */ | ||
var SEQRET_DECODER = '=ACMGRSVTWYHKDBN'.split(''); | ||
var CIGAR_DECODER = 'MIDNSHP=X???????'.split(''); | ||
/** | ||
* Class of each BAM record returned by this API. | ||
*/ | ||
/** | ||
* Class of each BAM record returned by this API. | ||
*/var | ||
BamRecord = /*#__PURE__*/function () { | ||
function BamRecord(args) {(0, _classCallCheck2.default)(this, BamRecord); | ||
var BamRecord = | ||
/*#__PURE__*/ | ||
function () { | ||
function BamRecord(args) { | ||
(0, _classCallCheck2.default)(this, BamRecord); | ||
(0, _defineProperty2.default)(this, "data", void 0); | ||
(0, _defineProperty2.default)(this, "bytes", void 0); | ||
(0, _defineProperty2.default)(this, "flags", void 0); | ||
(0, _defineProperty2.default)(this, "_id", void 0); | ||
(0, _defineProperty2.default)(this, "_refID", void 0); | ||
(0, _defineProperty2.default)(this, "_tagOffset", undefined); | ||
(0, _defineProperty2.default)(this, "_tagList", []); | ||
(0, _defineProperty2.default)(this, "_allTagsParsed", false); | ||
this.data = {}; | ||
@@ -15,41 +53,40 @@ this.bytes = { | ||
end: args.bytes.end, | ||
byteArray: args.bytes.byteArray }; | ||
byteArray: args.bytes.byteArray | ||
}; | ||
this._id = args.fileOffset; | ||
this._coreParse(); | ||
var _this$bytes = this.bytes, | ||
start = _this$bytes.start, | ||
byteArray = _this$bytes.byteArray; | ||
this._refID = byteArray.readInt32LE(start + 4); | ||
this.data.start = byteArray.readInt32LE(start + 8); | ||
this.flags = (byteArray.readInt32LE(start + 16) & 0xffff0000) >> 16; | ||
} | ||
/** | ||
* parse the core data: ref ID and start | ||
*/(0, _createClass2.default)(BamRecord, [{ key: "_coreParse", value: function _coreParse() | ||
{var _this$bytes = | ||
this.bytes,start = _this$bytes.start,byteArray = _this$bytes.byteArray; | ||
this._refID = byteArray.readInt32LE(start + 4); | ||
this.data.start = byteArray.readInt32LE(start + 8); | ||
this.flags = (byteArray.readInt32LE(start + 16) & 0xffff0000) >> 16; | ||
} }, { key: "get", value: function get( | ||
field) { | ||
(0, _createClass2.default)(BamRecord, [{ | ||
key: "get", | ||
value: function get(field) { | ||
return this._get(field.toLowerCase()); | ||
} }, { key: "end", value: function end() | ||
{ | ||
return ( | ||
this._get('start') + ( | ||
this._get('length_on_ref') || this._get('seq_length') || undefined)); | ||
} }, { key: "seq_id", value: function seq_id() | ||
{ | ||
} | ||
}, { | ||
key: "end", | ||
value: function end() { | ||
return this._get('start') + (this._get('length_on_ref') || this._get('seq_length') || undefined); | ||
} | ||
}, { | ||
key: "seq_id", | ||
value: function seq_id() { | ||
return this._refID; | ||
} | ||
} // same as get(), except requires lower-case arguments. used | ||
// internally to save lots of calls to field.toLowerCase() | ||
// same as get(), except requires lower-case arguments. used | ||
// internally to save lots of calls to field.toLowerCase() | ||
}, { key: "_get", value: function _get(field) { | ||
}, { | ||
key: "_get", | ||
value: function _get(field) { | ||
if (field in this.data) { | ||
return this.data[field]; | ||
} | ||
} //@ts-ignore | ||
if (this[field]) { | ||
//@ts-ignore | ||
this.data[field] = this[field](); | ||
@@ -59,56 +96,26 @@ } else { | ||
} | ||
return this.data[field]; | ||
} }, { key: "_tags", value: function _tags() | ||
} | ||
}, { | ||
key: "_tags", | ||
value: function _tags() { | ||
var _this = this; | ||
{var _this = this; | ||
this._parseAllTags(); | ||
var tags = [ | ||
'seq', | ||
'seq_reverse_complemented', | ||
'unmapped', | ||
'qc_failed', | ||
'duplicate', | ||
'secondary_alignment', | ||
'supplementary_alignment']; | ||
var tags = ['seq', 'seq_reverse_complemented', 'unmapped', 'qc_failed', 'duplicate', 'secondary_alignment', 'supplementary_alignment']; | ||
if (!this.isSegmentUnmapped()) tags.push('start', 'end', 'strand', 'score', 'qual', 'MQ', 'CIGAR', 'length_on_ref', 'template_length'); | ||
if (!this.isSegmentUnmapped()) | ||
tags.push( | ||
'start', | ||
'end', | ||
'strand', | ||
'score', | ||
'qual', | ||
'MQ', | ||
'CIGAR', | ||
'length_on_ref', | ||
'template_length'); | ||
if (this.isPaired()) { | ||
tags.push( | ||
'multi_segment_all_correctly_aligned', | ||
'multi_segment_next_segment_unmapped', | ||
'multi_segment_next_segment_reversed', | ||
'multi_segment_first', | ||
'multi_segment_last', | ||
'next_segment_position', | ||
'pair_orientation'); | ||
tags.push('multi_segment_all_correctly_aligned', 'multi_segment_next_segment_unmapped', 'multi_segment_next_segment_reversed', 'multi_segment_first', 'multi_segment_last', 'next_segment_position', 'pair_orientation'); | ||
} | ||
} | ||
tags = tags.concat(this._tagList || []); | ||
Object.keys(this.data).forEach(function (k) { | ||
if ( | ||
k[0] !== '_' && | ||
k !== 'multi_segment_all_aligned' && | ||
k !== 'next_seq_id') | ||
tags.push(k); | ||
(0, _keys.default)(this.data).forEach(function (k) { | ||
if (k[0] !== '_' && k !== 'multi_segment_all_aligned' && k !== 'next_seq_id') tags.push(k); | ||
}); | ||
var seen = {}; | ||
tags = tags.filter(function (t) { | ||
if (t in _this.data && _this.data[t] === undefined) return false; | ||
var lt = t.toLowerCase(); | ||
@@ -119,80 +126,88 @@ var s = seen[lt]; | ||
}); | ||
return tags; | ||
} }, { key: "parent", value: function parent() | ||
{ | ||
} | ||
}, { | ||
key: "parent", | ||
value: function parent() { | ||
return undefined; | ||
} }, { key: "children", value: function children() | ||
{ | ||
} | ||
}, { | ||
key: "children", | ||
value: function children() { | ||
return this._get('subfeatures'); | ||
} }, { key: "id", value: function id() | ||
{ | ||
} | ||
}, { | ||
key: "id", | ||
value: function id() { | ||
return this._id; | ||
} }, { key: "multi_segment_all_aligned", value: function multi_segment_all_aligned() | ||
{ | ||
} | ||
}, { | ||
key: "multi_segment_all_aligned", | ||
value: function multi_segment_all_aligned() { | ||
return this._get('multi_segment_all_correctly_aligned'); | ||
} | ||
} // special parsers | ||
// special parsers | ||
/** | ||
* Mapping quality score. | ||
*/ }, { key: "mq", value: function mq() | ||
{ | ||
*/ | ||
}, { | ||
key: "mq", | ||
value: function mq() { | ||
var mq = (this._get('_bin_mq_nl') & 0xff00) >> 8; | ||
return mq === 255 ? undefined : mq; | ||
} }, { key: "score", value: function score() | ||
{ | ||
} | ||
}, { | ||
key: "score", | ||
value: function score() { | ||
return this._get('mq'); | ||
} }, { key: "qual", value: function qual() | ||
{ | ||
} | ||
}, { | ||
key: "qual", | ||
value: function qual() { | ||
if (this.isSegmentUnmapped()) return undefined; | ||
var qseq = []; | ||
var byteArray = this.bytes.byteArray; | ||
var qseq = [];var | ||
byteArray = this.bytes.byteArray; | ||
var p = | ||
this.bytes.start + | ||
36 + | ||
this._get('_l_read_name') + | ||
this._get('_n_cigar_op') * 4 + | ||
this._get('_seq_bytes'); | ||
var p = this.bytes.start + 36 + this._get('_l_read_name') + this._get('_n_cigar_op') * 4 + this._get('_seq_bytes'); | ||
var lseq = this._get('seq_length'); | ||
for (var j = 0; j < lseq; ++j) { | ||
qseq.push(byteArray[p + j]); | ||
} | ||
return qseq.join(' '); | ||
} }, { key: "strand", value: function strand() | ||
{ | ||
} | ||
}, { | ||
key: "strand", | ||
value: function strand() { | ||
return this.isReverseComplemented() ? -1 : 1; | ||
} }, { key: "multi_segment_next_segment_strand", value: function multi_segment_next_segment_strand() | ||
{ | ||
} | ||
}, { | ||
key: "multi_segment_next_segment_strand", | ||
value: function multi_segment_next_segment_strand() { | ||
if (this.isMateUnmapped()) return undefined; | ||
return this.isMateReverseComplemented() ? -1 : 1; | ||
} }, { key: "name", value: function name() | ||
{ | ||
} | ||
}, { | ||
key: "name", | ||
value: function name() { | ||
return this._get('_read_name'); | ||
} }, { key: "_read_name", value: function _read_name() | ||
{ | ||
} | ||
}, { | ||
key: "_read_name", | ||
value: function _read_name() { | ||
var nl = this._get('_l_read_name'); | ||
return this.bytes.byteArray.toString( | ||
'ascii', | ||
this.bytes.start + 36, | ||
this.bytes.start + 36 + nl - 1); | ||
return this.bytes.byteArray.toString('ascii', this.bytes.start + 36, this.bytes.start + 36 + nl - 1); | ||
} | ||
/** | ||
* Get the value of a tag, parsing the tags as far as necessary. | ||
* Only called if we have not already parsed that field. | ||
*/ | ||
/** | ||
* Get the value of a tag, parsing the tags as far as necessary. | ||
* Only called if we have not already parsed that field. | ||
*/ }, { key: "_parseTag", value: function _parseTag( | ||
tagName) { | ||
}, { | ||
key: "_parseTag", | ||
value: function _parseTag(tagName) { | ||
// if all of the tags have been parsed and we're still being | ||
@@ -202,16 +217,9 @@ // called, we already know that we have no such tag, because | ||
if (this._allTagsParsed) return undefined; | ||
var byteArray = this.bytes.byteArray; | ||
this._tagList = this._tagList || [];var | ||
byteArray = this.bytes.byteArray; | ||
var p = | ||
this._tagOffset || | ||
this.bytes.start + | ||
36 + | ||
this._get('_l_read_name') + | ||
this._get('_n_cigar_op') * 4 + | ||
this._get('_seq_bytes') + | ||
this._get('seq_length'); | ||
var p = this._tagOffset || this.bytes.start + 36 + this._get('_l_read_name') + this._get('_n_cigar_op') * 4 + this._get('_seq_bytes') + this._get('seq_length'); | ||
var blockEnd = this.bytes.end; | ||
var lcTag; | ||
while (p < blockEnd && lcTag !== tagName) { | ||
@@ -222,4 +230,4 @@ var tag = String.fromCharCode(byteArray[p], byteArray[p + 1]); | ||
p += 3; | ||
var value = void 0; | ||
var value = void 0; | ||
switch (type.toLowerCase()) { | ||
@@ -230,2 +238,3 @@ case 'a': | ||
break; | ||
case 'i': | ||
@@ -235,2 +244,3 @@ value = byteArray.readInt32LE(p); | ||
break; | ||
case 'c': | ||
@@ -240,2 +250,3 @@ value = byteArray.readInt8(p); | ||
break; | ||
case 's': | ||
@@ -245,2 +256,3 @@ value = byteArray.readInt16LE(p); | ||
break; | ||
case 'f': | ||
@@ -250,7 +262,10 @@ value = byteArray.readFloatLE(p); | ||
break; | ||
case 'z': | ||
case 'h': | ||
value = ''; | ||
while (p <= blockEnd) { | ||
var cc = byteArray[p++]; | ||
if (cc === 0) { | ||
@@ -262,10 +277,15 @@ break; | ||
} | ||
break; | ||
case 'b':{ | ||
case 'b': | ||
{ | ||
value = ''; | ||
var _cc = byteArray[p++]; | ||
var Btype = String.fromCharCode(_cc); | ||
if (Btype === 'i' || Btype === 'I') { | ||
var limit = byteArray.readInt32LE(p); | ||
p += 4; | ||
for (var k = 0; k < limit; k++) { | ||
@@ -277,5 +297,8 @@ value += byteArray.readInt32LE(p); | ||
} | ||
if (Btype === 's' || Btype === 'S') { | ||
var _limit = byteArray.readInt32LE(p); | ||
p += 4; | ||
for (var _k = 0; _k < _limit; _k++) { | ||
@@ -287,5 +310,8 @@ value += byteArray.readInt16LE(p); | ||
} | ||
if (Btype === 'c' || Btype === 'C') { | ||
var _limit2 = byteArray.readInt32LE(p); | ||
p += 4; | ||
for (var _k2 = 0; _k2 < _limit2; _k2++) { | ||
@@ -297,5 +323,8 @@ value += byteArray.readInt8(p); | ||
} | ||
if (Btype === 'f') { | ||
var _limit3 = byteArray.readInt32LE(p); | ||
p += 4; | ||
for (var _k3 = 0; _k3 < _limit3; _k3++) { | ||
@@ -307,8 +336,11 @@ value += byteArray.readFloatLE(p); | ||
} | ||
break; | ||
} | ||
default: | ||
console.warn("Unknown BAM tag type '".concat(type, "', tags may be incomplete")); | ||
value = undefined; | ||
p = blockEnd; // stop parsing tags | ||
p = blockEnd; | ||
// stop parsing tags | ||
} | ||
@@ -319,90 +351,124 @@ | ||
this._tagList.push(tag); | ||
if (lcTag === tagName) return value; | ||
this.data[lcTag] = value; | ||
} | ||
this._allTagsParsed = true; | ||
return undefined; | ||
} }, { key: "_parseAllTags", value: function _parseAllTags() | ||
{ | ||
} | ||
}, { | ||
key: "_parseAllTags", | ||
value: function _parseAllTags() { | ||
this._parseTag(); | ||
} }, { key: "_parseCigar", value: function _parseCigar( | ||
} | ||
}, { | ||
key: "_parseCigar", | ||
value: function _parseCigar(cigar) { | ||
//@ts-ignore | ||
return cigar.match(/\d+\D/g).map(function (op) { | ||
return [op.match(/\D/)[0].toUpperCase(), (0, _parseInt2.default)(op, 10)]; | ||
}); | ||
} | ||
/** | ||
* @returns {boolean} true if the read is paired, regardless of whether both segments are mapped | ||
*/ | ||
cigar) { | ||
return cigar. | ||
match(/\d+\D/g). | ||
map(function (op) {return [op.match(/\D/)[0].toUpperCase(), parseInt(op, 10)];}); | ||
}, { | ||
key: "isPaired", | ||
value: function isPaired() { | ||
return !!(this.flags & _constants.default.BAM_FPAIRED); | ||
} | ||
/** @returns {boolean} true if the read is paired, and both segments are mapped */ | ||
/** | ||
* @returns {boolean} true if the read is paired, regardless of whether both segments are mapped | ||
*/ }, { key: "isPaired", value: function isPaired() | ||
{ | ||
return !!(this.flags & Constants.BAM_FPAIRED); | ||
}, { | ||
key: "isProperlyPaired", | ||
value: function isProperlyPaired() { | ||
return !!(this.flags & _constants.default.BAM_FPROPER_PAIR); | ||
} | ||
/** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */ | ||
/** @returns {boolean} true if the read is paired, and both segments are mapped */ }, { key: "isProperlyPaired", value: function isProperlyPaired() | ||
{ | ||
return !!(this.flags & Constants.BAM_FPROPER_PAIR); | ||
}, { | ||
key: "isSegmentUnmapped", | ||
value: function isSegmentUnmapped() { | ||
return !!(this.flags & _constants.default.BAM_FUNMAP); | ||
} | ||
/** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */ | ||
/** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */ }, { key: "isSegmentUnmapped", value: function isSegmentUnmapped() | ||
{ | ||
return !!(this.flags & Constants.BAM_FUNMAP); | ||
}, { | ||
key: "isMateUnmapped", | ||
value: function isMateUnmapped() { | ||
return !!(this.flags & _constants.default.BAM_FMUNMAP); | ||
} | ||
/** @returns {boolean} true if the read is mapped to the reverse strand */ | ||
/** @returns {boolean} true if the read itself is unmapped; conflictive with isProperlyPaired */ }, { key: "isMateUnmapped", value: function isMateUnmapped() | ||
{ | ||
return !!(this.flags & Constants.BAM_FMUNMAP); | ||
}, { | ||
key: "isReverseComplemented", | ||
value: function isReverseComplemented() { | ||
return !!(this.flags & _constants.default.BAM_FREVERSE); | ||
} | ||
/** @returns {boolean} true if the mate is mapped to the reverse strand */ | ||
/** @returns {boolean} true if the read is mapped to the reverse strand */ }, { key: "isReverseComplemented", value: function isReverseComplemented() | ||
{ | ||
return !!(this.flags & Constants.BAM_FREVERSE); | ||
}, { | ||
key: "isMateReverseComplemented", | ||
value: function isMateReverseComplemented() { | ||
return !!(this.flags & _constants.default.BAM_FMREVERSE); | ||
} | ||
/** @returns {boolean} true if this is read number 1 in a pair */ | ||
/** @returns {boolean} true if the mate is mapped to the reverse strand */ }, { key: "isMateReverseComplemented", value: function isMateReverseComplemented() | ||
{ | ||
return !!(this.flags & Constants.BAM_FMREVERSE); | ||
}, { | ||
key: "isRead1", | ||
value: function isRead1() { | ||
return !!(this.flags & _constants.default.BAM_FREAD1); | ||
} | ||
/** @returns {boolean} true if this is read number 2 in a pair */ | ||
/** @returns {boolean} true if this is read number 1 in a pair */ }, { key: "isRead1", value: function isRead1() | ||
{ | ||
return !!(this.flags & Constants.BAM_FREAD1); | ||
}, { | ||
key: "isRead2", | ||
value: function isRead2() { | ||
return !!(this.flags & _constants.default.BAM_FREAD2); | ||
} | ||
/** @returns {boolean} true if this is a secondary alignment */ | ||
/** @returns {boolean} true if this is read number 2 in a pair */ }, { key: "isRead2", value: function isRead2() | ||
{ | ||
return !!(this.flags & Constants.BAM_FREAD2); | ||
}, { | ||
key: "isSecondary", | ||
value: function isSecondary() { | ||
return !!(this.flags & _constants.default.BAM_FSECONDARY); | ||
} | ||
/** @returns {boolean} true if this read has failed QC checks */ | ||
/** @returns {boolean} true if this is a secondary alignment */ }, { key: "isSecondary", value: function isSecondary() | ||
{ | ||
return !!(this.flags & Constants.BAM_FSECONDARY); | ||
}, { | ||
key: "isFailedQc", | ||
value: function isFailedQc() { | ||
return !!(this.flags & _constants.default.BAM_FQCFAIL); | ||
} | ||
/** @returns {boolean} true if the read is an optical or PCR duplicate */ | ||
/** @returns {boolean} true if this read has failed QC checks */ }, { key: "isFailedQc", value: function isFailedQc() | ||
{ | ||
return !!(this.flags & Constants.BAM_FQCFAIL); | ||
}, { | ||
key: "isDuplicate", | ||
value: function isDuplicate() { | ||
return !!(this.flags & _constants.default.BAM_FDUP); | ||
} | ||
/** @returns {boolean} true if this is a supplementary alignment */ | ||
/** @returns {boolean} true if the read is an optical or PCR duplicate */ }, { key: "isDuplicate", value: function isDuplicate() | ||
{ | ||
return !!(this.flags & Constants.BAM_FDUP); | ||
}, { | ||
key: "isSupplementary", | ||
value: function isSupplementary() { | ||
return !!(this.flags & _constants.default.BAM_FSUPPLEMENTARY); | ||
} | ||
}, { | ||
key: "cigar", | ||
value: function cigar() { | ||
if (this.isSegmentUnmapped()) return undefined; | ||
var _this$bytes2 = this.bytes, | ||
byteArray = _this$bytes2.byteArray, | ||
start = _this$bytes2.start; | ||
/** @returns {boolean} true if this is a supplementary alignment */ }, { key: "isSupplementary", value: function isSupplementary() | ||
{ | ||
return !!(this.flags & Constants.BAM_FSUPPLEMENTARY); | ||
} }, { key: "cigar", value: function cigar() | ||
var numCigarOps = this._get('_n_cigar_op'); | ||
{ | ||
if (this.isSegmentUnmapped()) return undefined;var _this$bytes2 = | ||
var p = start + 36 + this._get('_l_read_name'); | ||
this.bytes,byteArray = _this$bytes2.byteArray,start = _this$bytes2.start; | ||
var numCigarOps = this._get('_n_cigar_op'); | ||
var p = start + 36 + this._get('_l_read_name'); | ||
var cigar = ''; | ||
var lref = 0; | ||
for (var c = 0; c < numCigarOps; ++c) { | ||
@@ -412,8 +478,6 @@ var cigop = byteArray.readInt32LE(p); | ||
var op = CIGAR_DECODER[cigop & 0xf]; | ||
cigar += lop + op; | ||
cigar += lop + op; // soft clip, hard clip, and insertion don't count toward | ||
// the length on the reference | ||
// soft clip, hard clip, and insertion don't count toward | ||
// the length on the reference | ||
if (op !== 'H' && op !== 'S' && op !== 'I') lref += lop; | ||
p += 4; | ||
@@ -424,36 +488,43 @@ } | ||
return cigar; | ||
} }, { key: "_flags", value: function _flags() | ||
} | ||
}, { | ||
key: "_flags", | ||
value: function _flags() {} | ||
}, { | ||
key: "length_on_ref", | ||
value: function length_on_ref() { | ||
this._get('cigar'); // the length_on_ref is set as a | ||
// side effect of the CIGAR parsing | ||
{} }, { key: "length_on_ref", value: function length_on_ref() | ||
{ | ||
this._get('cigar'); // the length_on_ref is set as a | ||
// side effect of the CIGAR parsing | ||
return this.data.length_on_ref; | ||
} }, { key: "_n_cigar_op", value: function _n_cigar_op() | ||
{ | ||
} | ||
}, { | ||
key: "_n_cigar_op", | ||
value: function _n_cigar_op() { | ||
return this._get('_flag_nc') & 0xffff; | ||
} }, { key: "_l_read_name", value: function _l_read_name() | ||
{ | ||
} | ||
}, { | ||
key: "_l_read_name", | ||
value: function _l_read_name() { | ||
return this._get('_bin_mq_nl') & 0xff; | ||
} | ||
/** | ||
* number of bytes in the sequence field | ||
*/ | ||
/** | ||
* number of bytes in the sequence field | ||
*/ }, { key: "_seq_bytes", value: function _seq_bytes() | ||
{ | ||
}, { | ||
key: "_seq_bytes", | ||
value: function _seq_bytes() { | ||
return this._get('seq_length') + 1 >> 1; | ||
} }, { key: "getReadBases", value: function getReadBases() | ||
} | ||
}, { | ||
key: "getReadBases", | ||
value: function getReadBases() { | ||
var seq = ''; | ||
var byteArray = this.bytes.byteArray; | ||
var p = this.bytes.start + 36 + this._get('_l_read_name') + this._get('_n_cigar_op') * 4; | ||
{ | ||
var seq = '';var | ||
byteArray = this.bytes.byteArray; | ||
var p = | ||
this.bytes.start + | ||
36 + | ||
this._get('_l_read_name') + | ||
this._get('_n_cigar_op') * 4; | ||
var seqBytes = this._get('_seq_bytes'); | ||
for (var j = 0; j < seqBytes; ++j) { | ||
@@ -464,12 +535,10 @@ var sb = byteArray[p + j]; | ||
} | ||
return seq; | ||
} | ||
} // adapted from igv.js | ||
// adapted from igv.js | ||
}, { key: "getPairOrientation", value: function getPairOrientation() { | ||
if ( | ||
!this.isSegmentUnmapped() && | ||
!this.isMateUnmapped() && | ||
this._refID === this._next_refid()) | ||
{ | ||
}, { | ||
key: "getPairOrientation", | ||
value: function getPairOrientation() { | ||
if (!this.isSegmentUnmapped() && !this.isMateUnmapped() && this._refID === this._next_refid()) { | ||
var s1 = this.isReverseComplemented() ? 'R' : 'F'; | ||
@@ -479,2 +548,3 @@ var s2 = this.isMateReverseComplemented() ? 'R' : 'F'; | ||
var o2 = ' '; | ||
if (this.isRead1()) { | ||
@@ -490,2 +560,3 @@ o1 = '1'; | ||
var isize = this.template_length(); | ||
if (isize > 0) { | ||
@@ -502,42 +573,56 @@ tmp[0] = s1; | ||
} | ||
return tmp.join(''); | ||
} | ||
return null; | ||
} }, { key: "_bin_mq_nl", value: function _bin_mq_nl() | ||
{ | ||
} | ||
}, { | ||
key: "_bin_mq_nl", | ||
value: function _bin_mq_nl() { | ||
return this.bytes.byteArray.readInt32LE(this.bytes.start + 12); | ||
} }, { key: "_flag_nc", value: function _flag_nc() | ||
{ | ||
} | ||
}, { | ||
key: "_flag_nc", | ||
value: function _flag_nc() { | ||
return this.bytes.byteArray.readInt32LE(this.bytes.start + 16); | ||
} }, { key: "seq_length", value: function seq_length() | ||
{ | ||
} | ||
}, { | ||
key: "seq_length", | ||
value: function seq_length() { | ||
return this.bytes.byteArray.readInt32LE(this.bytes.start + 20); | ||
} }, { key: "_next_refid", value: function _next_refid() | ||
{ | ||
} | ||
}, { | ||
key: "_next_refid", | ||
value: function _next_refid() { | ||
return this.bytes.byteArray.readInt32LE(this.bytes.start + 24); | ||
} }, { key: "_next_pos", value: function _next_pos() | ||
{ | ||
} | ||
}, { | ||
key: "_next_pos", | ||
value: function _next_pos() { | ||
return this.bytes.byteArray.readInt32LE(this.bytes.start + 28); | ||
} }, { key: "template_length", value: function template_length() | ||
{ | ||
} | ||
}, { | ||
key: "template_length", | ||
value: function template_length() { | ||
return this.bytes.byteArray.readInt32LE(this.bytes.start + 32); | ||
} }, { key: "toJSON", value: function toJSON() | ||
} | ||
}, { | ||
key: "toJSON", | ||
value: function toJSON() { | ||
var _this2 = this; | ||
{var _this2 = this; | ||
var data = {}; | ||
Object.keys(this).forEach(function (k) { | ||
if (k.charAt(0) === '_' || k === 'bytes') return; | ||
(0, _keys.default)(this).forEach(function (k) { | ||
if (k.charAt(0) === '_' || k === 'bytes') return; //@ts-ignore | ||
data[k] = _this2[k]; | ||
}); | ||
return data; | ||
} }]);return BamRecord;}(); | ||
} | ||
}]); | ||
return BamRecord; | ||
}(); | ||
module.exports = BamRecord; | ||
exports.default = BamRecord; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWNvcmQudHMiXSwibmFtZXMiOlsiU0VRUkVUX0RFQ09ERVIiLCJzcGxpdCIsIkNJR0FSX0RFQ09ERVIiLCJCYW1SZWNvcmQiLCJhcmdzIiwidW5kZWZpbmVkIiwiZGF0YSIsImJ5dGVzIiwic3RhcnQiLCJlbmQiLCJieXRlQXJyYXkiLCJfaWQiLCJmaWxlT2Zmc2V0IiwiX3JlZklEIiwicmVhZEludDMyTEUiLCJmbGFncyIsImZpZWxkIiwiX2dldCIsInRvTG93ZXJDYXNlIiwiX3BhcnNlVGFnIiwiX3BhcnNlQWxsVGFncyIsInRhZ3MiLCJpc1NlZ21lbnRVbm1hcHBlZCIsInB1c2giLCJpc1BhaXJlZCIsImNvbmNhdCIsIl90YWdMaXN0IiwiZm9yRWFjaCIsImsiLCJzZWVuIiwiZmlsdGVyIiwidCIsImx0IiwicyIsIm1xIiwicXNlcSIsInAiLCJsc2VxIiwiaiIsImpvaW4iLCJpc1JldmVyc2VDb21wbGVtZW50ZWQiLCJpc01hdGVVbm1hcHBlZCIsImlzTWF0ZVJldmVyc2VDb21wbGVtZW50ZWQiLCJubCIsInRvU3RyaW5nIiwidGFnTmFtZSIsIl9hbGxUYWdzUGFyc2VkIiwiX3RhZ09mZnNldCIsImJsb2NrRW5kIiwibGNUYWciLCJ0YWciLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ0eXBlIiwidmFsdWUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEZsb2F0TEUiLCJjYyIsIkJ0eXBlIiwibGltaXQiLCJjb25zb2xlIiwid2FybiIsImNpZ2FyIiwibWF0Y2giLCJtYXAiLCJvcCIsInRvVXBwZXJDYXNlIiwiQ29uc3RhbnRzIiwiQkFNX0ZQQUlSRUQiLCJCQU1fRlBST1BFUl9QQUlSIiwiQkFNX0ZVTk1BUCIsIkJBTV9GTVVOTUFQIiwiQkFNX0ZSRVZFUlNFIiwiQkFNX0ZNUkVWRVJTRSIsIkJBTV9GUkVBRDEiLCJCQU1fRlJFQUQyIiwiQkFNX0ZTRUNPTkRBUlkiLCJCQU1fRlFDRkFJTCIsIkJBTV9GRFVQIiwiQkFNX0ZTVVBQTEVNRU5UQVJZIiwibnVtQ2lnYXJPcHMiLCJscmVmIiwiYyIsImNpZ29wIiwibG9wIiwibGVuZ3RoX29uX3JlZiIsInNlcSIsInNlcUJ5dGVzIiwic2IiLCJsZW5ndGgiLCJnZXQiLCJfbmV4dF9yZWZpZCIsInMxIiwiczIiLCJvMSIsIm8yIiwiaXNSZWFkMSIsImlzUmVhZDIiLCJ0bXAiLCJpc2l6ZSIsInRlbXBsYXRlX2xlbmd0aCIsImNoYXJBdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUhBOztBQUNBOztBQUNBO0FBR0EsSUFBTUEsY0FBYyxHQUFHLG1CQUFtQkMsS0FBbkIsQ0FBeUIsRUFBekIsQ0FBdkI7QUFDQSxJQUFNQyxhQUFhLEdBQUcsbUJBQW1CRCxLQUFuQixDQUF5QixFQUF6QixDQUF0QjtBQUVBOzs7O0lBR3FCRSxTOzs7QUFTbkIscUJBQVlDLElBQVosRUFBdUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzREFIa0JDLFNBR2xCO0FBQUEsb0RBRk0sRUFFTjtBQUFBLDBEQURFLEtBQ0Y7QUFDckIsU0FBS0MsSUFBTCxHQUFZLEVBQVo7QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFDWEMsTUFBQUEsS0FBSyxFQUFFSixJQUFJLENBQUNHLEtBQUwsQ0FBV0MsS0FEUDtBQUVYQyxNQUFBQSxHQUFHLEVBQUVMLElBQUksQ0FBQ0csS0FBTCxDQUFXRSxHQUZMO0FBR1hDLE1BQUFBLFNBQVMsRUFBRU4sSUFBSSxDQUFDRyxLQUFMLENBQVdHO0FBSFgsS0FBYjtBQUtBLFNBQUtDLEdBQUwsR0FBV1AsSUFBSSxDQUFDUSxVQUFoQjtBQVBxQixzQkFRUSxLQUFLTCxLQVJiO0FBQUEsUUFRYkMsS0FSYSxlQVFiQSxLQVJhO0FBQUEsUUFRTkUsU0FSTSxlQVFOQSxTQVJNO0FBU3JCLFNBQUtHLE1BQUwsR0FBY0gsU0FBUyxDQUFDSSxXQUFWLENBQXNCTixLQUFLLEdBQUcsQ0FBOUIsQ0FBZDtBQUNBLFNBQUtGLElBQUwsQ0FBVUUsS0FBVixHQUFrQkUsU0FBUyxDQUFDSSxXQUFWLENBQXNCTixLQUFLLEdBQUcsQ0FBOUIsQ0FBbEI7QUFDQSxTQUFLTyxLQUFMLEdBQWEsQ0FBQ0wsU0FBUyxDQUFDSSxXQUFWLENBQXNCTixLQUFLLEdBQUcsRUFBOUIsSUFBb0MsVUFBckMsS0FBb0QsRUFBakU7QUFDRDs7Ozt3QkFFR1EsSyxFQUFlO0FBQ2pCLGFBQU8sS0FBS0MsSUFBTCxDQUFVRCxLQUFLLENBQUNFLFdBQU4sRUFBVixDQUFQO0FBQ0Q7OzswQkFFSztBQUNKLGFBQU8sS0FBS0QsSUFBTCxDQUFVLE9BQVYsS0FBc0IsS0FBS0EsSUFBTCxDQUFVLGVBQVYsS0FBOEIsS0FBS0EsSUFBTCxDQUFVLFlBQVYsQ0FBOUIsSUFBeURaLFNBQS9FLENBQVA7QUFDRDs7OzZCQUVRO0FBQ1AsYUFBTyxLQUFLUSxNQUFaO0FBQ0QsSyxDQUVEO0FBQ0E7Ozs7eUJBQ0tHLEssRUFBZTtBQUNsQixVQUFJQSxLQUFLLElBQUksS0FBS1YsSUFBbEIsRUFBd0I7QUFDdEIsZUFBTyxLQUFLQSxJQUFMLENBQVVVLEtBQVYsQ0FBUDtBQUNELE9BSGlCLENBSWxCOzs7QUFDQSxVQUFJLEtBQUtBLEtBQUwsQ0FBSixFQUFpQjtBQUNmO0FBQ0EsYUFBS1YsSUFBTCxDQUFVVSxLQUFWLElBQW1CLEtBQUtBLEtBQUwsR0FBbkI7QUFDRCxPQUhELE1BR087QUFDTCxhQUFLVixJQUFMLENBQVVVLEtBQVYsSUFBbUIsS0FBS0csU0FBTCxDQUFlSCxLQUFmLENBQW5CO0FBQ0Q7O0FBQ0QsYUFBTyxLQUFLVixJQUFMLENBQVVVLEtBQVYsQ0FBUDtBQUNEOzs7NEJBRU87QUFBQTs7QUFDTixXQUFLSSxhQUFMOztBQUVBLFVBQUlDLElBQUksR0FBRyxDQUNULEtBRFMsRUFFVCwwQkFGUyxFQUdULFVBSFMsRUFJVCxXQUpTLEVBS1QsV0FMUyxFQU1ULHFCQU5TLEVBT1QseUJBUFMsQ0FBWDtBQVVBLFVBQUksQ0FBQyxLQUFLQyxpQkFBTCxFQUFMLEVBQ0VELElBQUksQ0FBQ0UsSUFBTCxDQUFVLE9BQVYsRUFBbUIsS0FBbkIsRUFBMEIsUUFBMUIsRUFBb0MsT0FBcEMsRUFBNkMsTUFBN0MsRUFBcUQsSUFBckQsRUFBMkQsT0FBM0QsRUFBb0UsZUFBcEUsRUFBcUYsaUJBQXJGOztBQUNGLFVBQUksS0FBS0MsUUFBTCxFQUFKLEVBQXFCO0FBQ25CSCxRQUFBQSxJQUFJLENBQUNFLElBQUwsQ0FDRSxxQ0FERixFQUVFLHFDQUZGLEVBR0UscUNBSEYsRUFJRSxxQkFKRixFQUtFLG9CQUxGLEVBTUUsdUJBTkYsRUFPRSxrQkFQRjtBQVNEOztBQUNERixNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ0ksTUFBTCxDQUFZLEtBQUtDLFFBQUwsSUFBaUIsRUFBN0IsQ0FBUDtBQUVBLHlCQUFZLEtBQUtwQixJQUFqQixFQUF1QnFCLE9BQXZCLENBQStCLFVBQUFDLENBQUMsRUFBSTtBQUNsQyxZQUFJQSxDQUFDLENBQUMsQ0FBRCxDQUFELEtBQVMsR0FBVCxJQUFnQkEsQ0FBQyxLQUFLLDJCQUF0QixJQUFxREEsQ0FBQyxLQUFLLGFBQS9ELEVBQThFUCxJQUFJLENBQUNFLElBQUwsQ0FBVUssQ0FBVjtBQUMvRSxPQUZEO0FBSUEsVUFBTUMsSUFBZ0MsR0FBRyxFQUF6QztBQUNBUixNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ1MsTUFBTCxDQUFZLFVBQUFDLENBQUMsRUFBSTtBQUN0QixZQUFJQSxDQUFDLElBQUksS0FBSSxDQUFDekIsSUFBVixJQUFrQixLQUFJLENBQUNBLElBQUwsQ0FBVXlCLENBQVYsTUFBaUIxQixTQUF2QyxFQUFrRCxPQUFPLEtBQVA7QUFFbEQsWUFBTTJCLEVBQUUsR0FBR0QsQ0FBQyxDQUFDYixXQUFGLEVBQVg7QUFDQSxZQUFNZSxDQUFDLEdBQUdKLElBQUksQ0FBQ0csRUFBRCxDQUFkO0FBQ0FILFFBQUFBLElBQUksQ0FBQ0csRUFBRCxDQUFKLEdBQVcsSUFBWDtBQUNBLGVBQU8sQ0FBQ0MsQ0FBUjtBQUNELE9BUE0sQ0FBUDtBQVNBLGFBQU9aLElBQVA7QUFDRDs7OzZCQUVRO0FBQ1AsYUFBT2hCLFNBQVA7QUFDRDs7OytCQUVVO0FBQ1QsYUFBTyxLQUFLWSxJQUFMLENBQVUsYUFBVixDQUFQO0FBQ0Q7Ozt5QkFFSTtBQUNILGFBQU8sS0FBS04sR0FBWjtBQUNEOzs7Z0RBRTJCO0FBQzFCLGFBQU8sS0FBS00sSUFBTCxDQUFVLHFDQUFWLENBQVA7QUFDRCxLLENBRUQ7O0FBQ0E7Ozs7Ozt5QkFHSztBQUNILFVBQU1pQixFQUFFLEdBQUcsQ0FBQyxLQUFLakIsSUFBTCxDQUFVLFlBQVYsSUFBMEIsTUFBM0IsS0FBc0MsQ0FBakQ7QUFDQSxhQUFPaUIsRUFBRSxLQUFLLEdBQVAsR0FBYTdCLFNBQWIsR0FBeUI2QixFQUFoQztBQUNEOzs7NEJBRU87QUFDTixhQUFPLEtBQUtqQixJQUFMLENBQVUsSUFBVixDQUFQO0FBQ0Q7OzsyQkFFTTtBQUNMLFVBQUksS0FBS0ssaUJBQUwsRUFBSixFQUE4QixPQUFPakIsU0FBUDtBQUU5QixVQUFNOEIsSUFBSSxHQUFHLEVBQWI7QUFISyxVQUlHekIsU0FKSCxHQUlpQixLQUFLSCxLQUp0QixDQUlHRyxTQUpIOztBQUtMLFVBQU0wQixDQUFDLEdBQUcsS0FBSzdCLEtBQUwsQ0FBV0MsS0FBWCxHQUFtQixFQUFuQixHQUF3QixLQUFLUyxJQUFMLENBQVUsY0FBVixDQUF4QixHQUFvRCxLQUFLQSxJQUFMLENBQVUsYUFBVixJQUEyQixDQUEvRSxHQUFtRixLQUFLQSxJQUFMLENBQVUsWUFBVixDQUE3Rjs7QUFDQSxVQUFNb0IsSUFBSSxHQUFHLEtBQUtwQixJQUFMLENBQVUsWUFBVixDQUFiOztBQUNBLFdBQUssSUFBSXFCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELElBQXBCLEVBQTBCLEVBQUVDLENBQTVCLEVBQStCO0FBQzdCSCxRQUFBQSxJQUFJLENBQUNaLElBQUwsQ0FBVWIsU0FBUyxDQUFDMEIsQ0FBQyxHQUFHRSxDQUFMLENBQW5CO0FBQ0Q7O0FBQ0QsYUFBT0gsSUFBSSxDQUFDSSxJQUFMLENBQVUsR0FBVixDQUFQO0FBQ0Q7Ozs2QkFFUTtBQUNQLGFBQU8sS0FBS0MscUJBQUwsS0FBK0IsQ0FBQyxDQUFoQyxHQUFvQyxDQUEzQztBQUNEOzs7d0RBRW1DO0FBQ2xDLFVBQUksS0FBS0MsY0FBTCxFQUFKLEVBQTJCLE9BQU9wQyxTQUFQO0FBQzNCLGFBQU8sS0FBS3FDLHlCQUFMLEtBQW1DLENBQUMsQ0FBcEMsR0FBd0MsQ0FBL0M7QUFDRDs7OzJCQUVNO0FBQ0wsYUFBTyxLQUFLekIsSUFBTCxDQUFVLFlBQVYsQ0FBUDtBQUNEOzs7aUNBRVk7QUFDWCxVQUFNMEIsRUFBRSxHQUFHLEtBQUsxQixJQUFMLENBQVUsY0FBVixDQUFYOztBQUNBLGFBQU8sS0FBS1YsS0FBTCxDQUFXRyxTQUFYLENBQXFCa0MsUUFBckIsQ0FBOEIsT0FBOUIsRUFBdUMsS0FBS3JDLEtBQUwsQ0FBV0MsS0FBWCxHQUFtQixFQUExRCxFQUE4RCxLQUFLRCxLQUFMLENBQVdDLEtBQVgsR0FBbUIsRUFBbkIsR0FBd0JtQyxFQUF4QixHQUE2QixDQUEzRixDQUFQO0FBQ0Q7QUFFRDs7Ozs7Ozs4QkFJVUUsTyxFQUFrQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxVQUFJLEtBQUtDLGNBQVQsRUFBeUIsT0FBT3pDLFNBQVA7QUFKQyxVQU1sQkssU0FOa0IsR0FNSixLQUFLSCxLQU5ELENBTWxCRyxTQU5rQjs7QUFPMUIsVUFBSTBCLENBQUMsR0FDSCxLQUFLVyxVQUFMLElBQ0EsS0FBS3hDLEtBQUwsQ0FBV0MsS0FBWCxHQUNFLEVBREYsR0FFRSxLQUFLUyxJQUFMLENBQVUsY0FBVixDQUZGLEdBR0UsS0FBS0EsSUFBTCxDQUFVLGFBQVYsSUFBMkIsQ0FIN0IsR0FJRSxLQUFLQSxJQUFMLENBQVUsWUFBVixDQUpGLEdBS0UsS0FBS0EsSUFBTCxDQUFVLFlBQVYsQ0FQSjs7QUFTQSxVQUFNK0IsUUFBUSxHQUFHLEtBQUt6QyxLQUFMLENBQVdFLEdBQTVCO0FBQ0EsVUFBSXdDLEtBQUo7O0FBQ0EsYUFBT2IsQ0FBQyxHQUFHWSxRQUFKLElBQWdCQyxLQUFLLEtBQUtKLE9BQWpDLEVBQTBDO0FBQ3hDLFlBQU1LLEdBQUcsR0FBR0MsTUFBTSxDQUFDQyxZQUFQLENBQW9CMUMsU0FBUyxDQUFDMEIsQ0FBRCxDQUE3QixFQUFrQzFCLFNBQVMsQ0FBQzBCLENBQUMsR0FBRyxDQUFMLENBQTNDLENBQVo7QUFDQWEsUUFBQUEsS0FBSyxHQUFHQyxHQUFHLENBQUNoQyxXQUFKLEVBQVI7QUFDQSxZQUFNbUMsSUFBSSxHQUFHRixNQUFNLENBQUNDLFlBQVAsQ0FBb0IxQyxTQUFTLENBQUMwQixDQUFDLEdBQUcsQ0FBTCxDQUE3QixDQUFiO0FBQ0FBLFFBQUFBLENBQUMsSUFBSSxDQUFMO0FBRUEsWUFBSWtCLEtBQUssU0FBVDs7QUFDQSxnQkFBUUQsSUFBSSxDQUFDbkMsV0FBTCxFQUFSO0FBQ0UsZUFBSyxHQUFMO0FBQ0VvQyxZQUFBQSxLQUFLLEdBQUdILE1BQU0sQ0FBQ0MsWUFBUCxDQUFvQjFDLFNBQVMsQ0FBQzBCLENBQUQsQ0FBN0IsQ0FBUjtBQUNBQSxZQUFBQSxDQUFDLElBQUksQ0FBTDtBQUNBOztBQUNGLGVBQUssR0FBTDtBQUNFa0IsWUFBQUEsS0FBSyxHQUFHNUMsU0FBUyxDQUFDSSxXQUFWLENBQXNCc0IsQ0FBdEIsQ0FBUjtBQUNBQSxZQUFBQSxDQUFDLElBQUksQ0FBTDtBQUNBOztBQUNGLGVBQUssR0FBTDtBQUNFa0IsWUFBQUEsS0FBSyxHQUFHNUMsU0FBUyxDQUFDNkMsUUFBVixDQUFtQm5CLENBQW5CLENBQVI7QUFDQUEsWUFBQUEsQ0FBQyxJQUFJLENBQUw7QUFDQTs7QUFDRixlQUFLLEdBQUw7QUFDRWtCLFlBQUFBLEtBQUssR0FBRzVDLFNBQVMsQ0FBQzhDLFdBQVYsQ0FBc0JwQixDQUF0QixDQUFSO0FBQ0FBLFlBQUFBLENBQUMsSUFBSSxDQUFMO0FBQ0E7O0FBQ0YsZUFBSyxHQUFMO0FBQ0VrQixZQUFBQSxLQUFLLEdBQUc1QyxTQUFTLENBQUMrQyxXQUFWLENBQXNCckIsQ0FBdEIsQ0FBUjtBQUNBQSxZQUFBQSxDQUFDLElBQUksQ0FBTDtBQUNBOztBQUNGLGVBQUssR0FBTDtBQUNBLGVBQUssR0FBTDtBQUNFa0IsWUFBQUEsS0FBSyxHQUFHLEVBQVI7O0FBQ0EsbUJBQU9sQixDQUFDLElBQUlZLFFBQVosRUFBc0I7QUFDcEIsa0JBQU1VLEVBQUUsR0FBR2hELFNBQVMsQ0FBQzBCLENBQUMsRUFBRixDQUFwQjs7QUFDQSxrQkFBSXNCLEVBQUUsS0FBSyxDQUFYLEVBQWM7QUFDWjtBQUNELGVBRkQsTUFFTztBQUNMSixnQkFBQUEsS0FBSyxJQUFJSCxNQUFNLENBQUNDLFlBQVAsQ0FBb0JNLEVBQXBCLENBQVQ7QUFDRDtBQUNGOztBQUNEOztBQUNGLGVBQUssR0FBTDtBQUFVO0FBQ1JKLGNBQUFBLEtBQUssR0FBRyxFQUFSO0FBQ0Esa0JBQU1JLEdBQUUsR0FBR2hELFNBQVMsQ0FBQzBCLENBQUMsRUFBRixDQUFwQjtBQUNBLGtCQUFNdUIsS0FBSyxHQUFHUixNQUFNLENBQUNDLFlBQVAsQ0FBb0JNLEdBQXBCLENBQWQ7O0FBQ0Esa0JBQUlDLEtBQUssS0FBSyxHQUFWLElBQWlCQSxLQUFLLEtBQUssR0FBL0IsRUFBb0M7QUFDbEMsb0JBQU1DLEtBQUssR0FBR2xELFNBQVMsQ0FBQ0ksV0FBVixDQUFzQnNCLENBQXRCLENBQWQ7QUFDQUEsZ0JBQUFBLENBQUMsSUFBSSxDQUFMOztBQUNBLHFCQUFLLElBQUlSLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdnQyxLQUFwQixFQUEyQmhDLENBQUMsRUFBNUIsRUFBZ0M7QUFDOUIwQixrQkFBQUEsS0FBSyxJQUFJNUMsU0FBUyxDQUFDSSxXQUFWLENBQXNCc0IsQ0FBdEIsQ0FBVDtBQUNBLHNCQUFJUixDQUFDLEdBQUcsQ0FBSixHQUFRZ0MsS0FBWixFQUFtQk4sS0FBSyxJQUFJLEdBQVQ7QUFDbkJsQixrQkFBQUEsQ0FBQyxJQUFJLENBQUw7QUFDRDtBQUNGOztBQUNELGtCQUFJdUIsS0FBSyxLQUFLLEdBQVYsSUFBaUJBLEtBQUssS0FBSyxHQUEvQixFQUFvQztBQUNsQyxvQkFBTUMsTUFBSyxHQUFHbEQsU0FBUyxDQUFDSSxXQUFWLENBQXNCc0IsQ0FBdEIsQ0FBZDs7QUFDQUEsZ0JBQUFBLENBQUMsSUFBSSxDQUFMOztBQUNBLHFCQUFLLElBQUlSLEVBQUMsR0FBRyxDQUFiLEVBQWdCQSxFQUFDLEdBQUdnQyxNQUFwQixFQUEyQmhDLEVBQUMsRUFBNUIsRUFBZ0M7QUFDOUIwQixrQkFBQUEsS0FBSyxJQUFJNUMsU0FBUyxDQUFDOEMsV0FBVixDQUFzQnBCLENBQXRCLENBQVQ7QUFDQSxzQkFBSVIsRUFBQyxHQUFHLENBQUosR0FBUWdDLE1BQVosRUFBbUJOLEtBQUssSUFBSSxHQUFUO0FBQ25CbEIsa0JBQUFBLENBQUMsSUFBSSxDQUFMO0FBQ0Q7QUFDRjs7QUFDRCxrQkFBSXVCLEtBQUssS0FBSyxHQUFWLElBQWlCQSxLQUFLLEtBQUssR0FBL0IsRUFBb0M7QUFDbEMsb0JBQU1DLE9BQUssR0FBR2xELFNBQVMsQ0FBQ0ksV0FBVixDQUFzQnNCLENBQXRCLENBQWQ7O0FBQ0FBLGdCQUFBQSxDQUFDLElBQUksQ0FBTDs7QUFDQSxxQkFBSyxJQUFJUixHQUFDLEdBQUcsQ0FBYixFQUFnQkEsR0FBQyxHQUFHZ0MsT0FBcEIsRUFBMkJoQyxHQUFDLEVBQTVCLEVBQWdDO0FBQzlCMEIsa0JBQUFBLEtBQUssSUFBSTVDLFNBQVMsQ0FBQzZDLFFBQVYsQ0FBbUJuQixDQUFuQixDQUFUO0FBQ0Esc0JBQUlSLEdBQUMsR0FBRyxDQUFKLEdBQVFnQyxPQUFaLEVBQW1CTixLQUFLLElBQUksR0FBVDtBQUNuQmxCLGtCQUFBQSxDQUFDLElBQUksQ0FBTDtBQUNEO0FBQ0Y7O0FBQ0Qsa0JBQUl1QixLQUFLLEtBQUssR0FBZCxFQUFtQjtBQUNqQixvQkFBTUMsT0FBSyxHQUFHbEQsU0FBUyxDQUFDSSxXQUFWLENBQXNCc0IsQ0FBdEIsQ0FBZDs7QUFDQUEsZ0JBQUFBLENBQUMsSUFBSSxDQUFMOztBQUNBLHFCQUFLLElBQUlSLEdBQUMsR0FBRyxDQUFiLEVBQWdCQSxHQUFDLEdBQUdnQyxPQUFwQixFQUEyQmhDLEdBQUMsRUFBNUIsRUFBZ0M7QUFDOUIwQixrQkFBQUEsS0FBSyxJQUFJNUMsU0FBUyxDQUFDK0MsV0FBVixDQUFzQnJCLENBQXRCLENBQVQ7QUFDQSxzQkFBSVIsR0FBQyxHQUFHLENBQUosR0FBUWdDLE9BQVosRUFBbUJOLEtBQUssSUFBSSxHQUFUO0FBQ25CbEIsa0JBQUFBLENBQUMsSUFBSSxDQUFMO0FBQ0Q7QUFDRjs7QUFDRDtBQUNEOztBQUNEO0FBQ0V5QixZQUFBQSxPQUFPLENBQUNDLElBQVIsaUNBQXNDVCxJQUF0QztBQUNBQyxZQUFBQSxLQUFLLEdBQUdqRCxTQUFSO0FBQ0ErQixZQUFBQSxDQUFDLEdBQUdZLFFBQUo7QUFBYTtBQTlFakI7O0FBaUZBLGFBQUtELFVBQUwsR0FBa0JYLENBQWxCOztBQUVBLGFBQUtWLFFBQUwsQ0FBY0gsSUFBZCxDQUFtQjJCLEdBQW5COztBQUNBLFlBQUlELEtBQUssS0FBS0osT0FBZCxFQUF1QixPQUFPUyxLQUFQO0FBRXZCLGFBQUtoRCxJQUFMLENBQVUyQyxLQUFWLElBQW1CSyxLQUFuQjtBQUNEOztBQUNELFdBQUtSLGNBQUwsR0FBc0IsSUFBdEI7QUFDQSxhQUFPekMsU0FBUDtBQUNEOzs7b0NBRWU7QUFDZCxXQUFLYyxTQUFMO0FBQ0Q7OztnQ0FFVzRDLEssRUFBZTtBQUN6QjtBQUNBLGFBQU9BLEtBQUssQ0FBQ0MsS0FBTixDQUFZLFFBQVosRUFBc0JDLEdBQXRCLENBQTBCLFVBQUNDLEVBQUQ7QUFBQSxlQUFnQixDQUFDQSxFQUFFLENBQUNGLEtBQUgsQ0FBUyxJQUFULEVBQWUsQ0FBZixFQUFrQkcsV0FBbEIsRUFBRCxFQUFrQyx3QkFBU0QsRUFBVCxFQUFhLEVBQWIsQ0FBbEMsQ0FBaEI7QUFBQSxPQUExQixDQUFQO0FBQ0Q7QUFFRDs7Ozs7OytCQUdXO0FBQ1QsYUFBTyxDQUFDLEVBQUUsS0FBS25ELEtBQUwsR0FBYXFELG1CQUFVQyxXQUF6QixDQUFSO0FBQ0Q7QUFFRDs7Ozt1Q0FDbUI7QUFDakIsYUFBTyxDQUFDLEVBQUUsS0FBS3RELEtBQUwsR0FBYXFELG1CQUFVRSxnQkFBekIsQ0FBUjtBQUNEO0FBRUQ7Ozs7d0NBQ29CO0FBQ2xCLGFBQU8sQ0FBQyxFQUFFLEtBQUt2RCxLQUFMLEdBQWFxRCxtQkFBVUcsVUFBekIsQ0FBUjtBQUNEO0FBRUQ7Ozs7cUNBQ2lCO0FBQ2YsYUFBTyxDQUFDLEVBQUUsS0FBS3hELEtBQUwsR0FBYXFELG1CQUFVSSxXQUF6QixDQUFSO0FBQ0Q7QUFFRDs7Ozs0Q0FDd0I7QUFDdEIsYUFBTyxDQUFDLEVBQUUsS0FBS3pELEtBQUwsR0FBYXFELG1CQUFVSyxZQUF6QixDQUFSO0FBQ0Q7QUFFRDs7OztnREFDNEI7QUFDMUIsYUFBTyxDQUFDLEVBQUUsS0FBSzFELEtBQUwsR0FBYXFELG1CQUFVTSxhQUF6QixDQUFSO0FBQ0Q7QUFFRDs7Ozs4QkFDVTtBQUNSLGFBQU8sQ0FBQyxFQUFFLEtBQUszRCxLQUFMLEdBQWFxRCxtQkFBVU8sVUFBekIsQ0FBUjtBQUNEO0FBRUQ7Ozs7OEJBQ1U7QUFDUixhQUFPLENBQUMsRUFBRSxLQUFLNUQsS0FBTCxHQUFhcUQsbUJBQVVRLFVBQXpCLENBQVI7QUFDRDtBQUVEOzs7O2tDQUNjO0FBQ1osYUFBTyxDQUFDLEVBQUUsS0FBSzdELEtBQUwsR0FBYXFELG1CQUFVUyxjQUF6QixDQUFSO0FBQ0Q7QUFFRDs7OztpQ0FDYTtBQUNYLGFBQU8sQ0FBQyxFQUFFLEtBQUs5RCxLQUFMLEdBQWFxRCxtQkFBVVUsV0FBekIsQ0FBUjtBQUNEO0FBRUQ7Ozs7a0NBQ2M7QUFDWixhQUFPLENBQUMsRUFBRSxLQUFLL0QsS0FBTCxHQUFhcUQsbUJBQVVXLFFBQXpCLENBQVI7QUFDRDtBQUVEOzs7O3NDQUNrQjtBQUNoQixhQUFPLENBQUMsRUFBRSxLQUFLaEUsS0FBTCxHQUFhcUQsbUJBQVVZLGtCQUF6QixDQUFSO0FBQ0Q7Ozs0QkFFTztBQUNOLFVBQUksS0FBSzFELGlCQUFMLEVBQUosRUFBOEIsT0FBT2pCLFNBQVA7QUFEeEIseUJBR3VCLEtBQUtFLEtBSDVCO0FBQUEsVUFHRUcsU0FIRixnQkFHRUEsU0FIRjtBQUFBLFVBR2FGLEtBSGIsZ0JBR2FBLEtBSGI7O0FBSU4sVUFBTXlFLFdBQVcsR0FBRyxLQUFLaEUsSUFBTCxDQUFVLGFBQVYsQ0FBcEI7O0FBQ0EsVUFBSW1CLENBQUMsR0FBRzVCLEtBQUssR0FBRyxFQUFSLEdBQWEsS0FBS1MsSUFBTCxDQUFVLGNBQVYsQ0FBckI7O0FBQ0EsVUFBSThDLEtBQUssR0FBRyxFQUFaO0FBQ0EsVUFBSW1CLElBQUksR0FBRyxDQUFYOztBQUNBLFdBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0YsV0FBcEIsRUFBaUMsRUFBRUUsQ0FBbkMsRUFBc0M7QUFDcEMsWUFBTUMsS0FBSyxHQUFHMUUsU0FBUyxDQUFDSSxXQUFWLENBQXNCc0IsQ0FBdEIsQ0FBZDtBQUNBLFlBQU1pRCxHQUFHLEdBQUdELEtBQUssSUFBSSxDQUFyQjtBQUNBLFlBQU1sQixFQUFFLEdBQUdoRSxhQUFhLENBQUNrRixLQUFLLEdBQUcsR0FBVCxDQUF4QjtBQUNBckIsUUFBQUEsS0FBSyxJQUFJc0IsR0FBRyxHQUFHbkIsRUFBZixDQUpvQyxDQU1wQztBQUNBOztBQUNBLFlBQUlBLEVBQUUsS0FBSyxHQUFQLElBQWNBLEVBQUUsS0FBSyxHQUFyQixJQUE0QkEsRUFBRSxLQUFLLEdBQXZDLEVBQTRDZ0IsSUFBSSxJQUFJRyxHQUFSO0FBRTVDakQsUUFBQUEsQ0FBQyxJQUFJLENBQUw7QUFDRDs7QUFFRCxXQUFLOUIsSUFBTCxDQUFVZ0YsYUFBVixHQUEwQkosSUFBMUI7QUFDQSxhQUFPbkIsS0FBUDtBQUNEOzs7NkJBRVEsQ0FBRTs7O29DQUVLO0FBQ2QsV0FBSzlDLElBQUwsQ0FBVSxPQUFWLEVBRGMsQ0FDSztBQUNuQjs7O0FBQ0EsYUFBTyxLQUFLWCxJQUFMLENBQVVnRixhQUFqQjtBQUNEOzs7a0NBRWE7QUFDWixhQUFPLEtBQUtyRSxJQUFMLENBQVUsVUFBVixJQUF3QixNQUEvQjtBQUNEOzs7bUNBRWM7QUFDYixhQUFPLEtBQUtBLElBQUwsQ0FBVSxZQUFWLElBQTBCLElBQWpDO0FBQ0Q7QUFFRDs7Ozs7O2lDQUdhO0FBQ1gsYUFBUSxLQUFLQSxJQUFMLENBQVUsWUFBVixJQUEwQixDQUEzQixJQUFpQyxDQUF4QztBQUNEOzs7bUNBRWM7QUFDYixVQUFJc0UsR0FBRyxHQUFHLEVBQVY7QUFEYSxVQUVMN0UsU0FGSyxHQUVTLEtBQUtILEtBRmQsQ0FFTEcsU0FGSztBQUdiLFVBQU0wQixDQUFDLEdBQUcsS0FBSzdCLEtBQUwsQ0FBV0MsS0FBWCxHQUFtQixFQUFuQixHQUF3QixLQUFLUyxJQUFMLENBQVUsY0FBVixDQUF4QixHQUFvRCxLQUFLQSxJQUFMLENBQVUsYUFBVixJQUEyQixDQUF6Rjs7QUFDQSxVQUFNdUUsUUFBUSxHQUFHLEtBQUt2RSxJQUFMLENBQVUsWUFBVixDQUFqQjs7QUFDQSxXQUFLLElBQUlxQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHa0QsUUFBcEIsRUFBOEIsRUFBRWxELENBQWhDLEVBQW1DO0FBQ2pDLFlBQU1tRCxFQUFFLEdBQUcvRSxTQUFTLENBQUMwQixDQUFDLEdBQUdFLENBQUwsQ0FBcEI7QUFDQWlELFFBQUFBLEdBQUcsSUFBSXZGLGNBQWMsQ0FBQyxDQUFDeUYsRUFBRSxHQUFHLElBQU4sS0FBZSxDQUFoQixDQUFyQjtBQUNBLFlBQUlGLEdBQUcsQ0FBQ0csTUFBSixHQUFhLEtBQUtDLEdBQUwsQ0FBUyxZQUFULENBQWpCLEVBQXlDSixHQUFHLElBQUl2RixjQUFjLENBQUN5RixFQUFFLEdBQUcsSUFBTixDQUFyQjtBQUMxQzs7QUFDRCxhQUFPRixHQUFQO0FBQ0QsSyxDQUVEOzs7O3lDQUNxQjtBQUNuQixVQUFJLENBQUMsS0FBS2pFLGlCQUFMLEVBQUQsSUFBNkIsQ0FBQyxLQUFLbUIsY0FBTCxFQUE5QixJQUF1RCxLQUFLNUIsTUFBTCxLQUFnQixLQUFLK0UsV0FBTCxFQUEzRSxFQUErRjtBQUM3RixZQUFNQyxFQUFFLEdBQUcsS0FBS3JELHFCQUFMLEtBQStCLEdBQS9CLEdBQXFDLEdBQWhEO0FBQ0EsWUFBTXNELEVBQUUsR0FBRyxLQUFLcEQseUJBQUwsS0FBbUMsR0FBbkMsR0FBeUMsR0FBcEQ7QUFDQSxZQUFJcUQsRUFBRSxHQUFHLEdBQVQ7QUFDQSxZQUFJQyxFQUFFLEdBQUcsR0FBVDs7QUFDQSxZQUFJLEtBQUtDLE9BQUwsRUFBSixFQUFvQjtBQUNsQkYsVUFBQUEsRUFBRSxHQUFHLEdBQUw7QUFDQUMsVUFBQUEsRUFBRSxHQUFHLEdBQUw7QUFDRCxTQUhELE1BR08sSUFBSSxLQUFLRSxPQUFMLEVBQUosRUFBb0I7QUFDekJILFVBQUFBLEVBQUUsR0FBRyxHQUFMO0FBQ0FDLFVBQUFBLEVBQUUsR0FBRyxHQUFMO0FBQ0Q7O0FBRUQsWUFBTUcsR0FBRyxHQUFHLEVBQVo7QUFDQSxZQUFNQyxLQUFLLEdBQUcsS0FBS0MsZUFBTCxFQUFkOztBQUNBLFlBQUlELEtBQUssR0FBRyxDQUFaLEVBQWU7QUFDYkQsVUFBQUEsR0FBRyxDQUFDLENBQUQsQ0FBSCxHQUFTTixFQUFUO0FBQ0FNLFVBQUFBLEdBQUcsQ0FBQyxDQUFELENBQUgsR0FBU0osRUFBVDtBQUNBSSxVQUFBQSxHQUFHLENBQUMsQ0FBRCxDQUFILEdBQVNMLEVBQVQ7QUFDQUssVUFBQUEsR0FBRyxDQUFDLENBQUQsQ0FBSCxHQUFTSCxFQUFUO0FBQ0QsU0FMRCxNQUtPO0FBQ0xHLFVBQUFBLEdBQUcsQ0FBQyxDQUFELENBQUgsR0FBU04sRUFBVDtBQUNBTSxVQUFBQSxHQUFHLENBQUMsQ0FBRCxDQUFILEdBQVNKLEVBQVQ7QUFDQUksVUFBQUEsR0FBRyxDQUFDLENBQUQsQ0FBSCxHQUFTTCxFQUFUO0FBQ0FLLFVBQUFBLEdBQUcsQ0FBQyxDQUFELENBQUgsR0FBU0gsRUFBVDtBQUNEOztBQUNELGVBQU9HLEdBQUcsQ0FBQzVELElBQUosQ0FBUyxFQUFULENBQVA7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDRDs7O2lDQUVZO0FBQ1gsYUFBTyxLQUFLaEMsS0FBTCxDQUFXRyxTQUFYLENBQXFCSSxXQUFyQixDQUFpQyxLQUFLUCxLQUFMLENBQVdDLEtBQVgsR0FBbUIsRUFBcEQsQ0FBUDtBQUNEOzs7K0JBRVU7QUFDVCxhQUFPLEtBQUtELEtBQUwsQ0FBV0csU0FBWCxDQUFxQkksV0FBckIsQ0FBaUMsS0FBS1AsS0FBTCxDQUFXQyxLQUFYLEdBQW1CLEVBQXBELENBQVA7QUFDRDs7O2lDQUVZO0FBQ1gsYUFBTyxLQUFLRCxLQUFMLENBQVdHLFNBQVgsQ0FBcUJJLFdBQXJCLENBQWlDLEtBQUtQLEtBQUwsQ0FBV0MsS0FBWCxHQUFtQixFQUFwRCxDQUFQO0FBQ0Q7OztrQ0FFYTtBQUNaLGFBQU8sS0FBS0QsS0FBTCxDQUFXRyxTQUFYLENBQXFCSSxXQUFyQixDQUFpQyxLQUFLUCxLQUFMLENBQVdDLEtBQVgsR0FBbUIsRUFBcEQsQ0FBUDtBQUNEOzs7Z0NBRVc7QUFDVixhQUFPLEtBQUtELEtBQUwsQ0FBV0csU0FBWCxDQUFxQkksV0FBckIsQ0FBaUMsS0FBS1AsS0FBTCxDQUFXQyxLQUFYLEdBQW1CLEVBQXBELENBQVA7QUFDRDs7O3NDQUVpQjtBQUNoQixhQUFPLEtBQUtELEtBQUwsQ0FBV0csU0FBWCxDQUFxQkksV0FBckIsQ0FBaUMsS0FBS1AsS0FBTCxDQUFXQyxLQUFYLEdBQW1CLEVBQXBELENBQVA7QUFDRDs7OzZCQUVRO0FBQUE7O0FBQ1AsVUFBTUYsSUFBNEIsR0FBRyxFQUFyQztBQUNBLHlCQUFZLElBQVosRUFBa0JxQixPQUFsQixDQUEwQixVQUFBQyxDQUFDLEVBQUk7QUFDN0IsWUFBSUEsQ0FBQyxDQUFDMEUsTUFBRixDQUFTLENBQVQsTUFBZ0IsR0FBaEIsSUFBdUIxRSxDQUFDLEtBQUssT0FBakMsRUFBMEMsT0FEYixDQUU3Qjs7QUFDQXRCLFFBQUFBLElBQUksQ0FBQ3NCLENBQUQsQ0FBSixHQUFVLE1BQUksQ0FBQ0EsQ0FBRCxDQUFkO0FBQ0QsT0FKRDtBQU1BLGFBQU90QixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvY2FtZWxjYXNlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlICovXG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJ1xuXG5jb25zdCBTRVFSRVRfREVDT0RFUiA9ICc9QUNNR1JTVlRXWUhLREJOJy5zcGxpdCgnJylcbmNvbnN0IENJR0FSX0RFQ09ERVIgPSAnTUlETlNIUD1YPz8/Pz8/Pycuc3BsaXQoJycpXG5cbi8qKlxuICogQ2xhc3Mgb2YgZWFjaCBCQU0gcmVjb3JkIHJldHVybmVkIGJ5IHRoaXMgQVBJLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYW1SZWNvcmQge1xuICBwcml2YXRlIGRhdGE6IGFueVxuICBwcml2YXRlIGJ5dGVzOiBhbnlcbiAgcHJpdmF0ZSBmbGFnczogYW55XG4gIHByaXZhdGUgX2lkOiBudW1iZXJcbiAgcHJpdmF0ZSBfcmVmSUQ6IG51bWJlclxuICBwcml2YXRlIF90YWdPZmZzZXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICBwcml2YXRlIF90YWdMaXN0OiBzdHJpbmdbXSA9IFtdXG4gIHByaXZhdGUgX2FsbFRhZ3NQYXJzZWQgPSBmYWxzZVxuICBjb25zdHJ1Y3RvcihhcmdzOiBhbnkpIHtcbiAgICB0aGlzLmRhdGEgPSB7fVxuICAgIHRoaXMuYnl0ZXMgPSB7XG4gICAgICBzdGFydDogYXJncy5ieXRlcy5zdGFydCxcbiAgICAgIGVuZDogYXJncy5ieXRlcy5lbmQsXG4gICAgICBieXRlQXJyYXk6IGFyZ3MuYnl0ZXMuYnl0ZUFycmF5LFxuICAgIH1cbiAgICB0aGlzLl9pZCA9IGFyZ3MuZmlsZU9mZnNldFxuICAgIGNvbnN0IHsgc3RhcnQsIGJ5dGVBcnJheSB9ID0gdGhpcy5ieXRlc1xuICAgIHRoaXMuX3JlZklEID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHN0YXJ0ICsgNClcbiAgICB0aGlzLmRhdGEuc3RhcnQgPSBieXRlQXJyYXkucmVhZEludDMyTEUoc3RhcnQgKyA4KVxuICAgIHRoaXMuZmxhZ3MgPSAoYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHN0YXJ0ICsgMTYpICYgMHhmZmZmMDAwMCkgPj4gMTZcbiAgfVxuXG4gIGdldChmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldChmaWVsZC50b0xvd2VyQ2FzZSgpKVxuICB9XG5cbiAgZW5kKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXQoJ3N0YXJ0JykgKyAodGhpcy5fZ2V0KCdsZW5ndGhfb25fcmVmJykgfHwgdGhpcy5fZ2V0KCdzZXFfbGVuZ3RoJykgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgc2VxX2lkKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWZJRFxuICB9XG5cbiAgLy8gc2FtZSBhcyBnZXQoKSwgZXhjZXB0IHJlcXVpcmVzIGxvd2VyLWNhc2UgYXJndW1lbnRzLiAgdXNlZFxuICAvLyBpbnRlcm5hbGx5IHRvIHNhdmUgbG90cyBvZiBjYWxscyB0byBmaWVsZC50b0xvd2VyQ2FzZSgpXG4gIF9nZXQoZmllbGQ6IHN0cmluZykge1xuICAgIGlmIChmaWVsZCBpbiB0aGlzLmRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdXG4gICAgfVxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGlmICh0aGlzW2ZpZWxkXSkge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLmRhdGFbZmllbGRdID0gdGhpc1tmaWVsZF0oKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFbZmllbGRdID0gdGhpcy5fcGFyc2VUYWcoZmllbGQpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGFbZmllbGRdXG4gIH1cblxuICBfdGFncygpIHtcbiAgICB0aGlzLl9wYXJzZUFsbFRhZ3MoKVxuXG4gICAgbGV0IHRhZ3MgPSBbXG4gICAgICAnc2VxJyxcbiAgICAgICdzZXFfcmV2ZXJzZV9jb21wbGVtZW50ZWQnLFxuICAgICAgJ3VubWFwcGVkJyxcbiAgICAgICdxY19mYWlsZWQnLFxuICAgICAgJ2R1cGxpY2F0ZScsXG4gICAgICAnc2Vjb25kYXJ5X2FsaWdubWVudCcsXG4gICAgICAnc3VwcGxlbWVudGFyeV9hbGlnbm1lbnQnLFxuICAgIF1cblxuICAgIGlmICghdGhpcy5pc1NlZ21lbnRVbm1hcHBlZCgpKVxuICAgICAgdGFncy5wdXNoKCdzdGFydCcsICdlbmQnLCAnc3RyYW5kJywgJ3Njb3JlJywgJ3F1YWwnLCAnTVEnLCAnQ0lHQVInLCAnbGVuZ3RoX29uX3JlZicsICd0ZW1wbGF0ZV9sZW5ndGgnKVxuICAgIGlmICh0aGlzLmlzUGFpcmVkKCkpIHtcbiAgICAgIHRhZ3MucHVzaChcbiAgICAgICAgJ211bHRpX3NlZ21lbnRfYWxsX2NvcnJlY3RseV9hbGlnbmVkJyxcbiAgICAgICAgJ211bHRpX3NlZ21lbnRfbmV4dF9zZWdtZW50X3VubWFwcGVkJyxcbiAgICAgICAgJ211bHRpX3NlZ21lbnRfbmV4dF9zZWdtZW50X3JldmVyc2VkJyxcbiAgICAgICAgJ211bHRpX3NlZ21lbnRfZmlyc3QnLFxuICAgICAgICAnbXVsdGlfc2VnbWVudF9sYXN0JyxcbiAgICAgICAgJ25leHRfc2VnbWVudF9wb3NpdGlvbicsXG4gICAgICAgICdwYWlyX29yaWVudGF0aW9uJyxcbiAgICAgIClcbiAgICB9XG4gICAgdGFncyA9IHRhZ3MuY29uY2F0KHRoaXMuX3RhZ0xpc3QgfHwgW10pXG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoa1swXSAhPT0gJ18nICYmIGsgIT09ICdtdWx0aV9zZWdtZW50X2FsbF9hbGlnbmVkJyAmJiBrICE9PSAnbmV4dF9zZXFfaWQnKSB0YWdzLnB1c2goaylcbiAgICB9KVxuXG4gICAgY29uc3Qgc2VlbjogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxuICAgIHRhZ3MgPSB0YWdzLmZpbHRlcih0ID0+IHtcbiAgICAgIGlmICh0IGluIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGFbdF0gPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGNvbnN0IGx0ID0gdC50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCBzID0gc2VlbltsdF1cbiAgICAgIHNlZW5bbHRdID0gdHJ1ZVxuICAgICAgcmV0dXJuICFzXG4gICAgfSlcblxuICAgIHJldHVybiB0YWdzXG4gIH1cblxuICBwYXJlbnQoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG5cbiAgY2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldCgnc3ViZmVhdHVyZXMnKVxuICB9XG5cbiAgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkXG4gIH1cblxuICBtdWx0aV9zZWdtZW50X2FsbF9hbGlnbmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXQoJ211bHRpX3NlZ21lbnRfYWxsX2NvcnJlY3RseV9hbGlnbmVkJylcbiAgfVxuXG4gIC8vIHNwZWNpYWwgcGFyc2Vyc1xuICAvKipcbiAgICogTWFwcGluZyBxdWFsaXR5IHNjb3JlLlxuICAgKi9cbiAgbXEoKSB7XG4gICAgY29uc3QgbXEgPSAodGhpcy5fZ2V0KCdfYmluX21xX25sJykgJiAweGZmMDApID4+IDhcbiAgICByZXR1cm4gbXEgPT09IDI1NSA/IHVuZGVmaW5lZCA6IG1xXG4gIH1cblxuICBzY29yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0KCdtcScpXG4gIH1cblxuICBxdWFsKCkge1xuICAgIGlmICh0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHFzZXEgPSBbXVxuICAgIGNvbnN0IHsgYnl0ZUFycmF5IH0gPSB0aGlzLmJ5dGVzXG4gICAgY29uc3QgcCA9IHRoaXMuYnl0ZXMuc3RhcnQgKyAzNiArIHRoaXMuX2dldCgnX2xfcmVhZF9uYW1lJykgKyB0aGlzLl9nZXQoJ19uX2NpZ2FyX29wJykgKiA0ICsgdGhpcy5fZ2V0KCdfc2VxX2J5dGVzJylcbiAgICBjb25zdCBsc2VxID0gdGhpcy5fZ2V0KCdzZXFfbGVuZ3RoJylcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxzZXE7ICsraikge1xuICAgICAgcXNlcS5wdXNoKGJ5dGVBcnJheVtwICsgal0pXG4gICAgfVxuICAgIHJldHVybiBxc2VxLmpvaW4oJyAnKVxuICB9XG5cbiAgc3RyYW5kKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmV2ZXJzZUNvbXBsZW1lbnRlZCgpID8gLTEgOiAxXG4gIH1cblxuICBtdWx0aV9zZWdtZW50X25leHRfc2VnbWVudF9zdHJhbmQoKSB7XG4gICAgaWYgKHRoaXMuaXNNYXRlVW5tYXBwZWQoKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmlzTWF0ZVJldmVyc2VDb21wbGVtZW50ZWQoKSA/IC0xIDogMVxuICB9XG5cbiAgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0KCdfcmVhZF9uYW1lJylcbiAgfVxuXG4gIF9yZWFkX25hbWUoKSB7XG4gICAgY29uc3QgbmwgPSB0aGlzLl9nZXQoJ19sX3JlYWRfbmFtZScpXG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnRvU3RyaW5nKCdhc2NpaScsIHRoaXMuYnl0ZXMuc3RhcnQgKyAzNiwgdGhpcy5ieXRlcy5zdGFydCArIDM2ICsgbmwgLSAxKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgYSB0YWcsIHBhcnNpbmcgdGhlIHRhZ3MgYXMgZmFyIGFzIG5lY2Vzc2FyeS5cbiAgICogT25seSBjYWxsZWQgaWYgd2UgaGF2ZSBub3QgYWxyZWFkeSBwYXJzZWQgdGhhdCBmaWVsZC5cbiAgICovXG4gIF9wYXJzZVRhZyh0YWdOYW1lPzogc3RyaW5nKSB7XG4gICAgLy8gaWYgYWxsIG9mIHRoZSB0YWdzIGhhdmUgYmVlbiBwYXJzZWQgYW5kIHdlJ3JlIHN0aWxsIGJlaW5nXG4gICAgLy8gY2FsbGVkLCB3ZSBhbHJlYWR5IGtub3cgdGhhdCB3ZSBoYXZlIG5vIHN1Y2ggdGFnLCBiZWNhdXNlXG4gICAgLy8gaXQgd291bGQgYWxyZWFkeSBoYXZlIGJlZW4gY2FjaGVkLlxuICAgIGlmICh0aGlzLl9hbGxUYWdzUGFyc2VkKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCB7IGJ5dGVBcnJheSB9ID0gdGhpcy5ieXRlc1xuICAgIGxldCBwID1cbiAgICAgIHRoaXMuX3RhZ09mZnNldCB8fFxuICAgICAgdGhpcy5ieXRlcy5zdGFydCArXG4gICAgICAgIDM2ICtcbiAgICAgICAgdGhpcy5fZ2V0KCdfbF9yZWFkX25hbWUnKSArXG4gICAgICAgIHRoaXMuX2dldCgnX25fY2lnYXJfb3AnKSAqIDQgK1xuICAgICAgICB0aGlzLl9nZXQoJ19zZXFfYnl0ZXMnKSArXG4gICAgICAgIHRoaXMuX2dldCgnc2VxX2xlbmd0aCcpXG5cbiAgICBjb25zdCBibG9ja0VuZCA9IHRoaXMuYnl0ZXMuZW5kXG4gICAgbGV0IGxjVGFnXG4gICAgd2hpbGUgKHAgPCBibG9ja0VuZCAmJiBsY1RhZyAhPT0gdGFnTmFtZSkge1xuICAgICAgY29uc3QgdGFnID0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlQXJyYXlbcF0sIGJ5dGVBcnJheVtwICsgMV0pXG4gICAgICBsY1RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCB0eXBlID0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlQXJyYXlbcCArIDJdKVxuICAgICAgcCArPSAzXG5cbiAgICAgIGxldCB2YWx1ZVxuICAgICAgc3dpdGNoICh0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgdmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVBcnJheVtwXSlcbiAgICAgICAgICBwICs9IDFcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKVxuICAgICAgICAgIHAgKz0gNFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgIHZhbHVlID0gYnl0ZUFycmF5LnJlYWRJbnQ4KHApXG4gICAgICAgICAgcCArPSAxXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgdmFsdWUgPSBieXRlQXJyYXkucmVhZEludDE2TEUocClcbiAgICAgICAgICBwICs9IDJcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICB2YWx1ZSA9IGJ5dGVBcnJheS5yZWFkRmxvYXRMRShwKVxuICAgICAgICAgIHAgKz0gNFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3onOlxuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICAgICAgd2hpbGUgKHAgPD0gYmxvY2tFbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNjID0gYnl0ZUFycmF5W3ArK11cbiAgICAgICAgICAgIGlmIChjYyA9PT0gMCkge1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjYylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYic6IHtcbiAgICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICAgICAgY29uc3QgY2MgPSBieXRlQXJyYXlbcCsrXVxuICAgICAgICAgIGNvbnN0IEJ0eXBlID0gU3RyaW5nLmZyb21DaGFyQ29kZShjYylcbiAgICAgICAgICBpZiAoQnR5cGUgPT09ICdpJyB8fCBCdHlwZSA9PT0gJ0knKSB7XG4gICAgICAgICAgICBjb25zdCBsaW1pdCA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKVxuICAgICAgICAgICAgcCArPSA0XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbWl0OyBrKyspIHtcbiAgICAgICAgICAgICAgdmFsdWUgKz0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApXG4gICAgICAgICAgICAgIGlmIChrICsgMSA8IGxpbWl0KSB2YWx1ZSArPSAnLCdcbiAgICAgICAgICAgICAgcCArPSA0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChCdHlwZSA9PT0gJ3MnIHx8IEJ0eXBlID09PSAnUycpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHApXG4gICAgICAgICAgICBwICs9IDRcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGltaXQ7IGsrKykge1xuICAgICAgICAgICAgICB2YWx1ZSArPSBieXRlQXJyYXkucmVhZEludDE2TEUocClcbiAgICAgICAgICAgICAgaWYgKGsgKyAxIDwgbGltaXQpIHZhbHVlICs9ICcsJ1xuICAgICAgICAgICAgICBwICs9IDJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEJ0eXBlID09PSAnYycgfHwgQnR5cGUgPT09ICdDJykge1xuICAgICAgICAgICAgY29uc3QgbGltaXQgPSBieXRlQXJyYXkucmVhZEludDMyTEUocClcbiAgICAgICAgICAgIHAgKz0gNFxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7XG4gICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkSW50OChwKVxuICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkgdmFsdWUgKz0gJywnXG4gICAgICAgICAgICAgIHAgKz0gMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQnR5cGUgPT09ICdmJykge1xuICAgICAgICAgICAgY29uc3QgbGltaXQgPSBieXRlQXJyYXkucmVhZEludDMyTEUocClcbiAgICAgICAgICAgIHAgKz0gNFxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW1pdDsgaysrKSB7XG4gICAgICAgICAgICAgIHZhbHVlICs9IGJ5dGVBcnJheS5yZWFkRmxvYXRMRShwKVxuICAgICAgICAgICAgICBpZiAoayArIDEgPCBsaW1pdCkgdmFsdWUgKz0gJywnXG4gICAgICAgICAgICAgIHAgKz0gNFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbmtub3duIEJBTSB0YWcgdHlwZSAnJHt0eXBlfScsIHRhZ3MgbWF5IGJlIGluY29tcGxldGVgKVxuICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkXG4gICAgICAgICAgcCA9IGJsb2NrRW5kIC8vIHN0b3AgcGFyc2luZyB0YWdzXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3RhZ09mZnNldCA9IHBcblxuICAgICAgdGhpcy5fdGFnTGlzdC5wdXNoKHRhZylcbiAgICAgIGlmIChsY1RhZyA9PT0gdGFnTmFtZSkgcmV0dXJuIHZhbHVlXG5cbiAgICAgIHRoaXMuZGF0YVtsY1RhZ10gPSB2YWx1ZVxuICAgIH1cbiAgICB0aGlzLl9hbGxUYWdzUGFyc2VkID0gdHJ1ZVxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIF9wYXJzZUFsbFRhZ3MoKSB7XG4gICAgdGhpcy5fcGFyc2VUYWcoKVxuICB9XG5cbiAgX3BhcnNlQ2lnYXIoY2lnYXI6IHN0cmluZykge1xuICAgIC8vQHRzLWlnbm9yZVxuICAgIHJldHVybiBjaWdhci5tYXRjaCgvXFxkK1xcRC9nKS5tYXAoKG9wOiBzdHJpbmcpID0+IFtvcC5tYXRjaCgvXFxELylbMF0udG9VcHBlckNhc2UoKSwgcGFyc2VJbnQob3AsIDEwKV0pXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJlYWQgaXMgcGFpcmVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYm90aCBzZWdtZW50cyBhcmUgbWFwcGVkXG4gICAqL1xuICBpc1BhaXJlZCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlBBSVJFRClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgcmVhZCBpcyBwYWlyZWQsIGFuZCBib3RoIHNlZ21lbnRzIGFyZSBtYXBwZWQgKi9cbiAgaXNQcm9wZXJseVBhaXJlZCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlBST1BFUl9QQUlSKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSByZWFkIGl0c2VsZiBpcyB1bm1hcHBlZDsgY29uZmxpY3RpdmUgd2l0aCBpc1Byb3Blcmx5UGFpcmVkICovXG4gIGlzU2VnbWVudFVubWFwcGVkKCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GVU5NQVApXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJlYWQgaXRzZWxmIGlzIHVubWFwcGVkOyBjb25mbGljdGl2ZSB3aXRoIGlzUHJvcGVybHlQYWlyZWQgKi9cbiAgaXNNYXRlVW5tYXBwZWQoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBDb25zdGFudHMuQkFNX0ZNVU5NQVApXG4gIH1cblxuICAvKiogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHJlYWQgaXMgbWFwcGVkIHRvIHRoZSByZXZlcnNlIHN0cmFuZCAqL1xuICBpc1JldmVyc2VDb21wbGVtZW50ZWQoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZmxhZ3MgJiBDb25zdGFudHMuQkFNX0ZSRVZFUlNFKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBtYXRlIGlzIG1hcHBlZCB0byB0aGUgcmV2ZXJzZSBzdHJhbmQgKi9cbiAgaXNNYXRlUmV2ZXJzZUNvbXBsZW1lbnRlZCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRk1SRVZFUlNFKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgaXMgcmVhZCBudW1iZXIgMSBpbiBhIHBhaXIgKi9cbiAgaXNSZWFkMSgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlJFQUQxKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgaXMgcmVhZCBudW1iZXIgMiBpbiBhIHBhaXIgKi9cbiAgaXNSZWFkMigpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRlJFQUQyKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgaXMgYSBzZWNvbmRhcnkgYWxpZ25tZW50ICovXG4gIGlzU2Vjb25kYXJ5KCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GU0VDT05EQVJZKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoaXMgcmVhZCBoYXMgZmFpbGVkIFFDIGNoZWNrcyAqL1xuICBpc0ZhaWxlZFFjKCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GUUNGQUlMKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSByZWFkIGlzIGFuIG9wdGljYWwgb3IgUENSIGR1cGxpY2F0ZSAqL1xuICBpc0R1cGxpY2F0ZSgpIHtcbiAgICByZXR1cm4gISEodGhpcy5mbGFncyAmIENvbnN0YW50cy5CQU1fRkRVUClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGlzIGlzIGEgc3VwcGxlbWVudGFyeSBhbGlnbm1lbnQgKi9cbiAgaXNTdXBwbGVtZW50YXJ5KCkge1xuICAgIHJldHVybiAhISh0aGlzLmZsYWdzICYgQ29uc3RhbnRzLkJBTV9GU1VQUExFTUVOVEFSWSlcbiAgfVxuXG4gIGNpZ2FyKCkge1xuICAgIGlmICh0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHsgYnl0ZUFycmF5LCBzdGFydCB9ID0gdGhpcy5ieXRlc1xuICAgIGNvbnN0IG51bUNpZ2FyT3BzID0gdGhpcy5fZ2V0KCdfbl9jaWdhcl9vcCcpXG4gICAgbGV0IHAgPSBzdGFydCArIDM2ICsgdGhpcy5fZ2V0KCdfbF9yZWFkX25hbWUnKVxuICAgIGxldCBjaWdhciA9ICcnXG4gICAgbGV0IGxyZWYgPSAwXG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCBudW1DaWdhck9wczsgKytjKSB7XG4gICAgICBjb25zdCBjaWdvcCA9IGJ5dGVBcnJheS5yZWFkSW50MzJMRShwKVxuICAgICAgY29uc3QgbG9wID0gY2lnb3AgPj4gNFxuICAgICAgY29uc3Qgb3AgPSBDSUdBUl9ERUNPREVSW2NpZ29wICYgMHhmXVxuICAgICAgY2lnYXIgKz0gbG9wICsgb3BcblxuICAgICAgLy8gc29mdCBjbGlwLCBoYXJkIGNsaXAsIGFuZCBpbnNlcnRpb24gZG9uJ3QgY291bnQgdG93YXJkXG4gICAgICAvLyB0aGUgbGVuZ3RoIG9uIHRoZSByZWZlcmVuY2VcbiAgICAgIGlmIChvcCAhPT0gJ0gnICYmIG9wICE9PSAnUycgJiYgb3AgIT09ICdJJykgbHJlZiArPSBsb3BcblxuICAgICAgcCArPSA0XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWYgPSBscmVmXG4gICAgcmV0dXJuIGNpZ2FyXG4gIH1cblxuICBfZmxhZ3MoKSB7fVxuXG4gIGxlbmd0aF9vbl9yZWYoKSB7XG4gICAgdGhpcy5fZ2V0KCdjaWdhcicpIC8vIHRoZSBsZW5ndGhfb25fcmVmIGlzIHNldCBhcyBhXG4gICAgLy8gc2lkZSBlZmZlY3Qgb2YgdGhlIENJR0FSIHBhcnNpbmdcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aF9vbl9yZWZcbiAgfVxuXG4gIF9uX2NpZ2FyX29wKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXQoJ19mbGFnX25jJykgJiAweGZmZmZcbiAgfVxuXG4gIF9sX3JlYWRfbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0KCdfYmluX21xX25sJykgJiAweGZmXG4gIH1cblxuICAvKipcbiAgICogbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzZXF1ZW5jZSBmaWVsZFxuICAgKi9cbiAgX3NlcV9ieXRlcygpIHtcbiAgICByZXR1cm4gKHRoaXMuX2dldCgnc2VxX2xlbmd0aCcpICsgMSkgPj4gMVxuICB9XG5cbiAgZ2V0UmVhZEJhc2VzKCkge1xuICAgIGxldCBzZXEgPSAnJ1xuICAgIGNvbnN0IHsgYnl0ZUFycmF5IH0gPSB0aGlzLmJ5dGVzXG4gICAgY29uc3QgcCA9IHRoaXMuYnl0ZXMuc3RhcnQgKyAzNiArIHRoaXMuX2dldCgnX2xfcmVhZF9uYW1lJykgKyB0aGlzLl9nZXQoJ19uX2NpZ2FyX29wJykgKiA0XG4gICAgY29uc3Qgc2VxQnl0ZXMgPSB0aGlzLl9nZXQoJ19zZXFfYnl0ZXMnKVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2VxQnl0ZXM7ICsraikge1xuICAgICAgY29uc3Qgc2IgPSBieXRlQXJyYXlbcCArIGpdXG4gICAgICBzZXEgKz0gU0VRUkVUX0RFQ09ERVJbKHNiICYgMHhmMCkgPj4gNF1cbiAgICAgIGlmIChzZXEubGVuZ3RoIDwgdGhpcy5nZXQoJ3NlcV9sZW5ndGgnKSkgc2VxICs9IFNFUVJFVF9ERUNPREVSW3NiICYgMHgwZl1cbiAgICB9XG4gICAgcmV0dXJuIHNlcVxuICB9XG5cbiAgLy8gYWRhcHRlZCBmcm9tIGlndi5qc1xuICBnZXRQYWlyT3JpZW50YXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VnbWVudFVubWFwcGVkKCkgJiYgIXRoaXMuaXNNYXRlVW5tYXBwZWQoKSAmJiB0aGlzLl9yZWZJRCA9PT0gdGhpcy5fbmV4dF9yZWZpZCgpKSB7XG4gICAgICBjb25zdCBzMSA9IHRoaXMuaXNSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAnUicgOiAnRidcbiAgICAgIGNvbnN0IHMyID0gdGhpcy5pc01hdGVSZXZlcnNlQ29tcGxlbWVudGVkKCkgPyAnUicgOiAnRidcbiAgICAgIGxldCBvMSA9ICcgJ1xuICAgICAgbGV0IG8yID0gJyAnXG4gICAgICBpZiAodGhpcy5pc1JlYWQxKCkpIHtcbiAgICAgICAgbzEgPSAnMSdcbiAgICAgICAgbzIgPSAnMidcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1JlYWQyKCkpIHtcbiAgICAgICAgbzEgPSAnMidcbiAgICAgICAgbzIgPSAnMSdcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG1wID0gW11cbiAgICAgIGNvbnN0IGlzaXplID0gdGhpcy50ZW1wbGF0ZV9sZW5ndGgoKVxuICAgICAgaWYgKGlzaXplID4gMCkge1xuICAgICAgICB0bXBbMF0gPSBzMVxuICAgICAgICB0bXBbMV0gPSBvMVxuICAgICAgICB0bXBbMl0gPSBzMlxuICAgICAgICB0bXBbM10gPSBvMlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG1wWzJdID0gczFcbiAgICAgICAgdG1wWzNdID0gbzFcbiAgICAgICAgdG1wWzBdID0gczJcbiAgICAgICAgdG1wWzFdID0gbzJcbiAgICAgIH1cbiAgICAgIHJldHVybiB0bXAuam9pbignJylcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIF9iaW5fbXFfbmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAxMilcbiAgfVxuXG4gIF9mbGFnX25jKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMTYpXG4gIH1cblxuICBzZXFfbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMjApXG4gIH1cblxuICBfbmV4dF9yZWZpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ieXRlcy5ieXRlQXJyYXkucmVhZEludDMyTEUodGhpcy5ieXRlcy5zdGFydCArIDI0KVxuICB9XG5cbiAgX25leHRfcG9zKCkge1xuICAgIHJldHVybiB0aGlzLmJ5dGVzLmJ5dGVBcnJheS5yZWFkSW50MzJMRSh0aGlzLmJ5dGVzLnN0YXJ0ICsgMjgpXG4gIH1cblxuICB0ZW1wbGF0ZV9sZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnl0ZXMuYnl0ZUFycmF5LnJlYWRJbnQzMkxFKHRoaXMuYnl0ZXMuc3RhcnQgKyAzMilcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cbiAgICBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsuY2hhckF0KDApID09PSAnXycgfHwgayA9PT0gJ2J5dGVzJykgcmV0dXJuXG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGRhdGFba10gPSB0aGlzW2tdXG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiJdfQ== |
@@ -1,13 +0,44 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.parseHeaderText = parseHeaderText;var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));function parseHeaderText(text) { | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.parseHeaderText = parseHeaderText; | ||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray")); | ||
var _toArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toArray")); | ||
function parseHeaderText(text) { | ||
var lines = text.split(/\r?\n/); | ||
var data = []; | ||
lines.forEach(function (line) {var _line$split = | ||
line.split(/\t/),_line$split2 = (0, _toArray2.default)(_line$split),tag = _line$split2[0],fields = _line$split2.slice(1); | ||
var parsedFields = fields.map(function (f) {var _f$split = | ||
f.split(':', 2),_f$split2 = (0, _slicedToArray2.default)(_f$split, 2),fieldTag = _f$split2[0],value = _f$split2[1]; | ||
return { tag: fieldTag, value: value }; | ||
lines.forEach(function (line) { | ||
var _line$split = line.split(/\t/), | ||
_line$split2 = (0, _toArray2.default)(_line$split), | ||
tag = _line$split2[0], | ||
fields = _line$split2.slice(1); | ||
var parsedFields = fields.map(function (f) { | ||
var _f$split = f.split(':', 2), | ||
_f$split2 = (0, _slicedToArray2.default)(_f$split, 2), | ||
fieldTag = _f$split2[0], | ||
value = _f$split2[1]; | ||
return { | ||
tag: fieldTag, | ||
value: value | ||
}; | ||
}); | ||
if (tag) data.push({ tag: tag.substr(1), data: parsedFields }); | ||
if (tag) data.push({ | ||
tag: tag.substr(1), | ||
data: parsedFields | ||
}); | ||
}); | ||
return data; | ||
} | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zYW0udHMiXSwibmFtZXMiOlsicGFyc2VIZWFkZXJUZXh0IiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJkYXRhIiwiZm9yRWFjaCIsImxpbmUiLCJ0YWciLCJmaWVsZHMiLCJwYXJzZWRGaWVsZHMiLCJtYXAiLCJmIiwiZmllbGRUYWciLCJ2YWx1ZSIsInB1c2giLCJzdWJzdHIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTyxTQUFTQSxlQUFULENBQXlCQyxJQUF6QixFQUF1QztBQUM1QyxNQUFNQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsS0FBTCxDQUFXLE9BQVgsQ0FBZDtBQUNBLE1BQU1DLElBQStELEdBQUcsRUFBeEU7QUFDQUYsRUFBQUEsS0FBSyxDQUFDRyxPQUFOLENBQWMsVUFBQUMsSUFBSSxFQUFJO0FBQUEsc0JBQ0tBLElBQUksQ0FBQ0gsS0FBTCxDQUFXLElBQVgsQ0FETDtBQUFBO0FBQUEsUUFDYkksR0FEYTtBQUFBLFFBQ0xDLE1BREs7O0FBRXBCLFFBQU1DLFlBQVksR0FBR0QsTUFBTSxDQUFDRSxHQUFQLENBQVcsVUFBQUMsQ0FBQyxFQUFJO0FBQUEscUJBQ1RBLENBQUMsQ0FBQ1IsS0FBRixDQUFRLEdBQVIsRUFBYSxDQUFiLENBRFM7QUFBQTtBQUFBLFVBQzVCUyxRQUQ0QjtBQUFBLFVBQ2xCQyxLQURrQjs7QUFFbkMsYUFBTztBQUFFTixRQUFBQSxHQUFHLEVBQUVLLFFBQVA7QUFBaUJDLFFBQUFBLEtBQUssRUFBTEE7QUFBakIsT0FBUDtBQUNELEtBSG9CLENBQXJCO0FBSUEsUUFBSU4sR0FBSixFQUFTSCxJQUFJLENBQUNVLElBQUwsQ0FBVTtBQUFFUCxNQUFBQSxHQUFHLEVBQUVBLEdBQUcsQ0FBQ1EsTUFBSixDQUFXLENBQVgsQ0FBUDtBQUFzQlgsTUFBQUEsSUFBSSxFQUFFSztBQUE1QixLQUFWO0FBQ1YsR0FQRDtBQVFBLFNBQU9MLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBwYXJzZUhlYWRlclRleHQodGV4dDogc3RyaW5nKSB7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdCgvXFxyP1xcbi8pXG4gIGNvbnN0IGRhdGE6IHsgdGFnOiBzdHJpbmc7IGRhdGE6IHsgdGFnOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdIH1bXSA9IFtdXG4gIGxpbmVzLmZvckVhY2gobGluZSA9PiB7XG4gICAgY29uc3QgW3RhZywgLi4uZmllbGRzXSA9IGxpbmUuc3BsaXQoL1xcdC8pXG4gICAgY29uc3QgcGFyc2VkRmllbGRzID0gZmllbGRzLm1hcChmID0+IHtcbiAgICAgIGNvbnN0IFtmaWVsZFRhZywgdmFsdWVdID0gZi5zcGxpdCgnOicsIDIpXG4gICAgICByZXR1cm4geyB0YWc6IGZpZWxkVGFnLCB2YWx1ZSB9XG4gICAgfSlcbiAgICBpZiAodGFnKSBkYXRhLnB1c2goeyB0YWc6IHRhZy5zdWJzdHIoMSksIGRhdGE6IHBhcnNlZEZpZWxkcyB9KVxuICB9KVxuICByZXR1cm4gZGF0YVxufVxuIl19 |
@@ -1,4 +0,17 @@ | ||
"use strict";var _require = require('pako'),Inflate = _require.Inflate,Z_SYNC_FLUSH = _require.Z_SYNC_FLUSH; | ||
"use strict"; | ||
function pakoUnzip(inputData) { | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.unzip = unzip; | ||
exports.unzipChunk = unzipChunk; | ||
var _pako = require("pako"); | ||
/* eslint-disable @typescript-eslint/ban-ts-ignore */ | ||
//@ts-ignore | ||
function unzip(inputData) { | ||
var strm; | ||
@@ -9,10 +22,14 @@ var pos = 0; | ||
var inflator; | ||
do { | ||
var remainingInput = inputData.slice(pos); | ||
inflator = new Inflate();var _inflator = | ||
inflator;strm = _inflator.strm; | ||
inflator.push(remainingInput, Z_SYNC_FLUSH); | ||
inflator = new _pako.Inflate() //@ts-ignore | ||
; | ||
var _inflator = inflator; | ||
strm = _inflator.strm; | ||
//@ts-ignore | ||
inflator.push(remainingInput, _pako.Z_SYNC_FLUSH); | ||
if (inflator.err) throw new Error(inflator.msg); | ||
pos += strm.next_in; //@ts-ignore | ||
pos += strm.next_in; | ||
chunks[i] = Buffer.from(inflator.result); | ||
@@ -23,9 +40,8 @@ i += 1; | ||
var result = Buffer.concat(chunks); | ||
return result; | ||
} | ||
// similar to pakounzip, except it does extra counting and | ||
} // similar to pakounzip, except it does extra counting and | ||
// trimming to make sure to return only exactly the data | ||
// range specified in the chunk | ||
function unzipChunk(inputData, chunk) { | ||
@@ -37,8 +53,12 @@ var strm; | ||
var fileStartingOffset = chunk.minv.blockPosition; | ||
do { | ||
var remainingInput = inputData.slice(pos); | ||
inflator = new Inflate();var _inflator2 = | ||
inflator;strm = _inflator2.strm; | ||
inflator.push(remainingInput, Z_SYNC_FLUSH); | ||
if (inflator.err) throw new Error(inflator.msg); | ||
inflator = new _pako.Inflate() //@ts-ignore | ||
; | ||
var _inflator2 = inflator; | ||
strm = _inflator2.strm; | ||
//@ts-ignore | ||
inflator.push(remainingInput, _pako.Z_SYNC_FLUSH); | ||
if (inflator.err) throw new Error(inflator.msg); //@ts-ignore | ||
@@ -49,6 +69,5 @@ decompressedBlocks.push(Buffer.from(inflator.result)); | ||
// this is the first chunk, trim it | ||
decompressedBlocks[0] = decompressedBlocks[0].slice( | ||
chunk.minv.dataPosition); | ||
decompressedBlocks[0] = decompressedBlocks[0].slice(chunk.minv.dataPosition); | ||
} | ||
} | ||
if (fileStartingOffset + pos >= chunk.maxv.blockPosition) { | ||
@@ -58,13 +77,6 @@ // this is the last chunk, trim it and stop decompressing | ||
// trimmed part of the slice length | ||
decompressedBlocks[decompressedBlocks.length - 1] = decompressedBlocks[ | ||
decompressedBlocks.length - 1]. | ||
slice( | ||
0, | ||
chunk.maxv.blockPosition === chunk.minv.blockPosition ? | ||
chunk.maxv.dataPosition - chunk.minv.dataPosition + 1 : | ||
chunk.maxv.dataPosition + 1); | ||
decompressedBlocks[decompressedBlocks.length - 1] = decompressedBlocks[decompressedBlocks.length - 1].slice(0, chunk.maxv.blockPosition === chunk.minv.blockPosition ? chunk.maxv.dataPosition - chunk.minv.dataPosition + 1 : chunk.maxv.dataPosition + 1); | ||
break; | ||
} | ||
pos += strm.next_in; | ||
@@ -76,5 +88,2 @@ } while (strm.avail_in); | ||
} | ||
module.exports = { | ||
unzip: pakoUnzip, | ||
unzipChunk: unzipChunk }; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91bnppcC50cyJdLCJuYW1lcyI6WyJ1bnppcCIsImlucHV0RGF0YSIsInN0cm0iLCJwb3MiLCJpIiwiY2h1bmtzIiwiaW5mbGF0b3IiLCJyZW1haW5pbmdJbnB1dCIsInNsaWNlIiwiSW5mbGF0ZSIsInB1c2giLCJaX1NZTkNfRkxVU0giLCJlcnIiLCJFcnJvciIsIm1zZyIsIm5leHRfaW4iLCJCdWZmZXIiLCJmcm9tIiwicmVzdWx0IiwiYXZhaWxfaW4iLCJjb25jYXQiLCJ1bnppcENodW5rIiwiY2h1bmsiLCJkZWNvbXByZXNzZWRCbG9ja3MiLCJmaWxlU3RhcnRpbmdPZmZzZXQiLCJtaW52IiwiYmxvY2tQb3NpdGlvbiIsImxlbmd0aCIsImRhdGFQb3NpdGlvbiIsIm1heHYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBRkE7QUFDQTtBQUlPLFNBQVNBLEtBQVQsQ0FBZUMsU0FBZixFQUFrQztBQUN2QyxNQUFJQyxJQUFKO0FBQ0EsTUFBSUMsR0FBRyxHQUFHLENBQVY7QUFDQSxNQUFJQyxDQUFDLEdBQUcsQ0FBUjtBQUNBLE1BQU1DLE1BQU0sR0FBRyxFQUFmO0FBQ0EsTUFBSUMsUUFBSjs7QUFDQSxLQUFHO0FBQ0QsUUFBTUMsY0FBYyxHQUFHTixTQUFTLENBQUNPLEtBQVYsQ0FBZ0JMLEdBQWhCLENBQXZCO0FBQ0FHLElBQUFBLFFBQVEsR0FBRyxJQUFJRyxhQUFKLEVBQVgsQ0FDQTtBQURBO0FBRkMsb0JBSVlILFFBSlo7QUFJR0osSUFBQUEsSUFKSCxhQUlHQSxJQUpIO0FBS0Q7QUFDQUksSUFBQUEsUUFBUSxDQUFDSSxJQUFULENBQWNILGNBQWQsRUFBOEJJLGtCQUE5QjtBQUNBLFFBQUlMLFFBQVEsQ0FBQ00sR0FBYixFQUFrQixNQUFNLElBQUlDLEtBQUosQ0FBVVAsUUFBUSxDQUFDUSxHQUFuQixDQUFOO0FBRWxCWCxJQUFBQSxHQUFHLElBQUlELElBQUksQ0FBQ2EsT0FBWixDQVRDLENBVUQ7O0FBQ0FWLElBQUFBLE1BQU0sQ0FBQ0QsQ0FBRCxDQUFOLEdBQVlZLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWCxRQUFRLENBQUNZLE1BQXJCLENBQVo7QUFDQWQsSUFBQUEsQ0FBQyxJQUFJLENBQUw7QUFDRCxHQWJELFFBYVNGLElBQUksQ0FBQ2lCLFFBYmQ7O0FBZUEsTUFBTUQsTUFBTSxHQUFHRixNQUFNLENBQUNJLE1BQVAsQ0FBY2YsTUFBZCxDQUFmO0FBRUEsU0FBT2EsTUFBUDtBQUNELEMsQ0FFRDtBQUNBO0FBQ0E7OztBQUNPLFNBQVNHLFVBQVQsQ0FBb0JwQixTQUFwQixFQUF1Q3FCLEtBQXZDLEVBQXFEO0FBQzFELE1BQUlwQixJQUFKO0FBQ0EsTUFBSUMsR0FBRyxHQUFHLENBQVY7QUFDQSxNQUFNb0Isa0JBQWtCLEdBQUcsRUFBM0I7QUFDQSxNQUFJakIsUUFBSjtBQUNBLE1BQU1rQixrQkFBa0IsR0FBR0YsS0FBSyxDQUFDRyxJQUFOLENBQVdDLGFBQXRDOztBQUNBLEtBQUc7QUFDRCxRQUFNbkIsY0FBYyxHQUFHTixTQUFTLENBQUNPLEtBQVYsQ0FBZ0JMLEdBQWhCLENBQXZCO0FBQ0FHLElBQUFBLFFBQVEsR0FBRyxJQUFJRyxhQUFKLEVBQVgsQ0FDQTtBQURBO0FBRkMscUJBSVlILFFBSlo7QUFJR0osSUFBQUEsSUFKSCxjQUlHQSxJQUpIO0FBS0Q7QUFDQUksSUFBQUEsUUFBUSxDQUFDSSxJQUFULENBQWNILGNBQWQsRUFBOEJJLGtCQUE5QjtBQUNBLFFBQUlMLFFBQVEsQ0FBQ00sR0FBYixFQUFrQixNQUFNLElBQUlDLEtBQUosQ0FBVVAsUUFBUSxDQUFDUSxHQUFuQixDQUFOLENBUGpCLENBU0Q7O0FBQ0FTLElBQUFBLGtCQUFrQixDQUFDYixJQUFuQixDQUF3Qk0sTUFBTSxDQUFDQyxJQUFQLENBQVlYLFFBQVEsQ0FBQ1ksTUFBckIsQ0FBeEI7O0FBRUEsUUFBSUssa0JBQWtCLENBQUNJLE1BQW5CLEtBQThCLENBQTlCLElBQW1DTCxLQUFLLENBQUNHLElBQU4sQ0FBV0csWUFBbEQsRUFBZ0U7QUFDOUQ7QUFDQUwsTUFBQUEsa0JBQWtCLENBQUMsQ0FBRCxDQUFsQixHQUF3QkEsa0JBQWtCLENBQUMsQ0FBRCxDQUFsQixDQUFzQmYsS0FBdEIsQ0FBNEJjLEtBQUssQ0FBQ0csSUFBTixDQUFXRyxZQUF2QyxDQUF4QjtBQUNEOztBQUNELFFBQUlKLGtCQUFrQixHQUFHckIsR0FBckIsSUFBNEJtQixLQUFLLENBQUNPLElBQU4sQ0FBV0gsYUFBM0MsRUFBMEQ7QUFDeEQ7QUFDQTtBQUNBO0FBRUFILE1BQUFBLGtCQUFrQixDQUFDQSxrQkFBa0IsQ0FBQ0ksTUFBbkIsR0FBNEIsQ0FBN0IsQ0FBbEIsR0FBb0RKLGtCQUFrQixDQUFDQSxrQkFBa0IsQ0FBQ0ksTUFBbkIsR0FBNEIsQ0FBN0IsQ0FBbEIsQ0FBa0RuQixLQUFsRCxDQUNsRCxDQURrRCxFQUVsRGMsS0FBSyxDQUFDTyxJQUFOLENBQVdILGFBQVgsS0FBNkJKLEtBQUssQ0FBQ0csSUFBTixDQUFXQyxhQUF4QyxHQUNJSixLQUFLLENBQUNPLElBQU4sQ0FBV0QsWUFBWCxHQUEwQk4sS0FBSyxDQUFDRyxJQUFOLENBQVdHLFlBQXJDLEdBQW9ELENBRHhELEdBRUlOLEtBQUssQ0FBQ08sSUFBTixDQUFXRCxZQUFYLEdBQTBCLENBSm9CLENBQXBEO0FBTUE7QUFDRDs7QUFDRHpCLElBQUFBLEdBQUcsSUFBSUQsSUFBSSxDQUFDYSxPQUFaO0FBQ0QsR0E5QkQsUUE4QlNiLElBQUksQ0FBQ2lCLFFBOUJkOztBQWdDQSxNQUFNRCxNQUFNLEdBQUdGLE1BQU0sQ0FBQ0ksTUFBUCxDQUFjRyxrQkFBZCxDQUFmO0FBQ0EsU0FBT0wsTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1pZ25vcmUgKi9cbi8vQHRzLWlnbm9yZVxuaW1wb3J0IHsgSW5mbGF0ZSwgWl9TWU5DX0ZMVVNIIH0gZnJvbSAncGFrbydcbmltcG9ydCBDaHVuayBmcm9tICcuL2NodW5rJ1xuXG5leHBvcnQgZnVuY3Rpb24gdW56aXAoaW5wdXREYXRhOiBCdWZmZXIpIHtcbiAgbGV0IHN0cm1cbiAgbGV0IHBvcyA9IDBcbiAgbGV0IGkgPSAwXG4gIGNvbnN0IGNodW5rcyA9IFtdXG4gIGxldCBpbmZsYXRvclxuICBkbyB7XG4gICAgY29uc3QgcmVtYWluaW5nSW5wdXQgPSBpbnB1dERhdGEuc2xpY2UocG9zKVxuICAgIGluZmxhdG9yID0gbmV3IEluZmxhdGUoKVxuICAgIC8vQHRzLWlnbm9yZVxuICAgIDsoeyBzdHJtIH0gPSBpbmZsYXRvcilcbiAgICAvL0B0cy1pZ25vcmVcbiAgICBpbmZsYXRvci5wdXNoKHJlbWFpbmluZ0lucHV0LCBaX1NZTkNfRkxVU0gpXG4gICAgaWYgKGluZmxhdG9yLmVycikgdGhyb3cgbmV3IEVycm9yKGluZmxhdG9yLm1zZylcblxuICAgIHBvcyArPSBzdHJtLm5leHRfaW5cbiAgICAvL0B0cy1pZ25vcmVcbiAgICBjaHVua3NbaV0gPSBCdWZmZXIuZnJvbShpbmZsYXRvci5yZXN1bHQpXG4gICAgaSArPSAxXG4gIH0gd2hpbGUgKHN0cm0uYXZhaWxfaW4pXG5cbiAgY29uc3QgcmVzdWx0ID0gQnVmZmVyLmNvbmNhdChjaHVua3MpXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBzaW1pbGFyIHRvIHBha291bnppcCwgZXhjZXB0IGl0IGRvZXMgZXh0cmEgY291bnRpbmcgYW5kXG4vLyB0cmltbWluZyB0byBtYWtlIHN1cmUgdG8gcmV0dXJuIG9ubHkgZXhhY3RseSB0aGUgZGF0YVxuLy8gcmFuZ2Ugc3BlY2lmaWVkIGluIHRoZSBjaHVua1xuZXhwb3J0IGZ1bmN0aW9uIHVuemlwQ2h1bmsoaW5wdXREYXRhOiBCdWZmZXIsIGNodW5rOiBDaHVuaykge1xuICBsZXQgc3RybVxuICBsZXQgcG9zID0gMFxuICBjb25zdCBkZWNvbXByZXNzZWRCbG9ja3MgPSBbXVxuICBsZXQgaW5mbGF0b3JcbiAgY29uc3QgZmlsZVN0YXJ0aW5nT2Zmc2V0ID0gY2h1bmsubWludi5ibG9ja1Bvc2l0aW9uXG4gIGRvIHtcbiAgICBjb25zdCByZW1haW5pbmdJbnB1dCA9IGlucHV0RGF0YS5zbGljZShwb3MpXG4gICAgaW5mbGF0b3IgPSBuZXcgSW5mbGF0ZSgpXG4gICAgLy9AdHMtaWdub3JlXG4gICAgOyh7IHN0cm0gfSA9IGluZmxhdG9yKVxuICAgIC8vQHRzLWlnbm9yZVxuICAgIGluZmxhdG9yLnB1c2gocmVtYWluaW5nSW5wdXQsIFpfU1lOQ19GTFVTSClcbiAgICBpZiAoaW5mbGF0b3IuZXJyKSB0aHJvdyBuZXcgRXJyb3IoaW5mbGF0b3IubXNnKVxuXG4gICAgLy9AdHMtaWdub3JlXG4gICAgZGVjb21wcmVzc2VkQmxvY2tzLnB1c2goQnVmZmVyLmZyb20oaW5mbGF0b3IucmVzdWx0KSlcblxuICAgIGlmIChkZWNvbXByZXNzZWRCbG9ja3MubGVuZ3RoID09PSAxICYmIGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uKSB7XG4gICAgICAvLyB0aGlzIGlzIHRoZSBmaXJzdCBjaHVuaywgdHJpbSBpdFxuICAgICAgZGVjb21wcmVzc2VkQmxvY2tzWzBdID0gZGVjb21wcmVzc2VkQmxvY2tzWzBdLnNsaWNlKGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uKVxuICAgIH1cbiAgICBpZiAoZmlsZVN0YXJ0aW5nT2Zmc2V0ICsgcG9zID49IGNodW5rLm1heHYuYmxvY2tQb3NpdGlvbikge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgbGFzdCBjaHVuaywgdHJpbSBpdCBhbmQgc3RvcCBkZWNvbXByZXNzaW5nXG4gICAgICAvLyBub3RlIGlmIGl0IGlzIHRoZSBzYW1lIGJsb2NrIGlzIG1pbnYgaXQgc3VidHJhY3RzIHRoYXQgYWxyZWFkeVxuICAgICAgLy8gdHJpbW1lZCBwYXJ0IG9mIHRoZSBzbGljZSBsZW5ndGhcblxuICAgICAgZGVjb21wcmVzc2VkQmxvY2tzW2RlY29tcHJlc3NlZEJsb2Nrcy5sZW5ndGggLSAxXSA9IGRlY29tcHJlc3NlZEJsb2Nrc1tkZWNvbXByZXNzZWRCbG9ja3MubGVuZ3RoIC0gMV0uc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIGNodW5rLm1heHYuYmxvY2tQb3NpdGlvbiA9PT0gY2h1bmsubWludi5ibG9ja1Bvc2l0aW9uXG4gICAgICAgICAgPyBjaHVuay5tYXh2LmRhdGFQb3NpdGlvbiAtIGNodW5rLm1pbnYuZGF0YVBvc2l0aW9uICsgMVxuICAgICAgICAgIDogY2h1bmsubWF4di5kYXRhUG9zaXRpb24gKyAxLFxuICAgICAgKVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgcG9zICs9IHN0cm0ubmV4dF9pblxuICB9IHdoaWxlIChzdHJtLmF2YWlsX2luKVxuXG4gIGNvbnN0IHJlc3VsdCA9IEJ1ZmZlci5jb25jYXQoZGVjb21wcmVzc2VkQmxvY2tzKVxuICByZXR1cm4gcmVzdWx0XG59XG4iXX0= |
119
dist/util.js
@@ -1,22 +0,46 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));function longToNumber(long) { | ||
if ( | ||
long.greaterThan(Number.MAX_SAFE_INTEGER) || | ||
long.lessThan(Number.MIN_SAFE_INTEGER)) | ||
{ | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.longToNumber = longToNumber; | ||
exports.checkAbortSignal = checkAbortSignal; | ||
exports.abortBreakPoint = abortBreakPoint; | ||
exports.canMergeBlocks = canMergeBlocks; | ||
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator")); | ||
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise")); | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator")); | ||
var _minSafeInteger = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/min-safe-integer")); | ||
var _maxSafeInteger = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/max-safe-integer")); | ||
function longToNumber(long) { | ||
if (long.greaterThan(_maxSafeInteger.default) || long.lessThan(_minSafeInteger.default)) { | ||
throw new Error('integer overflow'); | ||
} | ||
return long.toNumber(); | ||
} | ||
/** | ||
* Properly check if the given AbortSignal is aborted. | ||
* Per the standard, if the signal reads as aborted, | ||
* this function throws either a DOMException AbortError, or a regular error | ||
* with a `code` attribute set to `ERR_ABORTED`. | ||
* | ||
* For convenience, passing `undefined` is a no-op | ||
* | ||
* @param {AbortSignal} [signal] an AbortSignal, or anything with an `aborted` attribute | ||
* @returns nothing | ||
*/ | ||
/** | ||
* Properly check if the given AbortSignal is aborted. | ||
* Per the standard, if the signal reads as aborted, | ||
* this function throws either a DOMException AbortError, or a regular error | ||
* with a `code` attribute set to `ERR_ABORTED`. | ||
* | ||
* For convenience, passing `undefined` is a no-op | ||
* | ||
* @param {AbortSignal} [signal] an AbortSignal, or anything with an `aborted` attribute | ||
* @returns nothing | ||
*/ | ||
function checkAbortSignal(signal) { | ||
@@ -27,7 +51,7 @@ if (!signal) return; | ||
// console.log('bam aborted!') | ||
if (typeof DOMException !== 'undefined') | ||
// eslint-disable-next-line no-undef | ||
throw new DOMException('aborted', 'AbortError');else | ||
{ | ||
var e = new Error('aborted'); | ||
if (typeof DOMException !== 'undefined') // eslint-disable-next-line no-undef | ||
throw new DOMException('aborted', 'AbortError');else { | ||
var e = new Error('aborted'); // eslint-disable-next-line @typescript-eslint/ban-ts-ignore | ||
//@ts-ignore | ||
e.code = 'ERR_ABORTED'; | ||
@@ -38,26 +62,41 @@ throw e; | ||
} | ||
/** | ||
* Skips to the next tick, then runs `checkAbortSignal`. | ||
* Await this to inside an otherwise synchronous loop to | ||
* provide a place to break when an abort signal is received. | ||
* @param {AbortSignal} signal | ||
*/function | ||
abortBreakPoint(_x) {return _abortBreakPoint.apply(this, arguments);}function _abortBreakPoint() {_abortBreakPoint = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(signal) {return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:_context.next = 2;return ( | ||
Promise.resolve());case 2: | ||
checkAbortSignal(signal);case 3:case "end":return _context.stop();}}}, _callee);}));return _abortBreakPoint.apply(this, arguments);} | ||
* Skips to the next tick, then runs `checkAbortSignal`. | ||
* Await this to inside an otherwise synchronous loop to | ||
* provide a place to break when an abort signal is received. | ||
* @param {AbortSignal} signal | ||
*/ | ||
function canMergeBlocks(block1, block2) { | ||
return ( | ||
block1.minv.blockPosition === block1.maxv.blockPosition && | ||
block1.maxv.blockPosition === block2.minv.blockPosition && | ||
block2.minv.blockPosition === block2.maxv.blockPosition); | ||
function abortBreakPoint(_x) { | ||
return _abortBreakPoint.apply(this, arguments); | ||
} | ||
function _abortBreakPoint() { | ||
_abortBreakPoint = (0, _asyncToGenerator2.default)( | ||
/*#__PURE__*/ | ||
_regenerator.default.mark(function _callee(signal) { | ||
return _regenerator.default.wrap(function _callee$(_context) { | ||
while (1) { | ||
switch (_context.prev = _context.next) { | ||
case 0: | ||
_context.next = 2; | ||
return _promise.default.resolve(); | ||
case 2: | ||
checkAbortSignal(signal); | ||
case 3: | ||
case "end": | ||
return _context.stop(); | ||
} | ||
} | ||
}, _callee); | ||
})); | ||
return _abortBreakPoint.apply(this, arguments); | ||
} | ||
module.exports = { | ||
longToNumber: longToNumber, | ||
checkAbortSignal: checkAbortSignal, | ||
abortBreakPoint: abortBreakPoint, | ||
canMergeBlocks: canMergeBlocks }; | ||
function canMergeBlocks(block1, block2) { | ||
return block1.minv.blockPosition === block1.maxv.blockPosition && block1.maxv.blockPosition === block2.minv.blockPosition && block2.minv.blockPosition === block2.maxv.blockPosition; | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbImxvbmdUb051bWJlciIsImxvbmciLCJncmVhdGVyVGhhbiIsImxlc3NUaGFuIiwiRXJyb3IiLCJ0b051bWJlciIsImNoZWNrQWJvcnRTaWduYWwiLCJzaWduYWwiLCJhYm9ydGVkIiwiRE9NRXhjZXB0aW9uIiwiZSIsImNvZGUiLCJhYm9ydEJyZWFrUG9pbnQiLCJyZXNvbHZlIiwiY2FuTWVyZ2VCbG9ja3MiLCJibG9jazEiLCJibG9jazIiLCJtaW52IiwiYmxvY2tQb3NpdGlvbiIsIm1heHYiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDTyxTQUFTQSxZQUFULENBQXNCQyxJQUF0QixFQUFrQztBQUN2QyxNQUFJQSxJQUFJLENBQUNDLFdBQUwsNkJBQTZDRCxJQUFJLENBQUNFLFFBQUwseUJBQWpELEVBQXlGO0FBQ3ZGLFVBQU0sSUFBSUMsS0FBSixDQUFVLGtCQUFWLENBQU47QUFDRDs7QUFDRCxTQUFPSCxJQUFJLENBQUNJLFFBQUwsRUFBUDtBQUNEO0FBRUQ7Ozs7Ozs7Ozs7Ozs7QUFXTyxTQUFTQyxnQkFBVCxDQUEwQkMsTUFBMUIsRUFBZ0Q7QUFDckQsTUFBSSxDQUFDQSxNQUFMLEVBQWE7O0FBRWIsTUFBSUEsTUFBTSxDQUFDQyxPQUFYLEVBQW9CO0FBQ2xCO0FBQ0EsUUFBSSxPQUFPQyxZQUFQLEtBQXdCLFdBQTVCLEVBQ0U7QUFDQSxZQUFNLElBQUlBLFlBQUosQ0FBaUIsU0FBakIsRUFBNEIsWUFBNUIsQ0FBTixDQUZGLEtBR0s7QUFDSCxVQUFNQyxDQUFDLEdBQUcsSUFBSU4sS0FBSixDQUFVLFNBQVYsQ0FBVixDQURHLENBRUg7QUFDQTs7QUFDQU0sTUFBQUEsQ0FBQyxDQUFDQyxJQUFGLEdBQVMsYUFBVDtBQUNBLFlBQU1ELENBQU47QUFDRDtBQUNGO0FBQ0Y7QUFFRDs7Ozs7Ozs7U0FNc0JFLGU7Ozs7Ozs7NEJBQWYsaUJBQStCTCxNQUEvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFDQyxpQkFBUU0sT0FBUixFQUREOztBQUFBO0FBRUxQLFlBQUFBLGdCQUFnQixDQUFDQyxNQUFELENBQWhCOztBQUZLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEc7Ozs7QUFLQSxTQUFTTyxjQUFULENBQXdCQyxNQUF4QixFQUF1Q0MsTUFBdkMsRUFBc0Q7QUFDM0QsU0FDRUQsTUFBTSxDQUFDRSxJQUFQLENBQVlDLGFBQVosS0FBOEJILE1BQU0sQ0FBQ0ksSUFBUCxDQUFZRCxhQUExQyxJQUNBSCxNQUFNLENBQUNJLElBQVAsQ0FBWUQsYUFBWixLQUE4QkYsTUFBTSxDQUFDQyxJQUFQLENBQVlDLGFBRDFDLElBRUFGLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyxhQUFaLEtBQThCRixNQUFNLENBQUNHLElBQVAsQ0FBWUQsYUFINUM7QUFLRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDaHVuayBmcm9tICcuL2NodW5rJ1xuZXhwb3J0IGZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKSB7XG4gIGlmIChsb25nLmdyZWF0ZXJUaGFuKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB8fCBsb25nLmxlc3NUaGFuKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW50ZWdlciBvdmVyZmxvdycpXG4gIH1cbiAgcmV0dXJuIGxvbmcudG9OdW1iZXIoKVxufVxuXG4vKipcbiAqIFByb3Blcmx5IGNoZWNrIGlmIHRoZSBnaXZlbiBBYm9ydFNpZ25hbCBpcyBhYm9ydGVkLlxuICogUGVyIHRoZSBzdGFuZGFyZCwgaWYgdGhlIHNpZ25hbCByZWFkcyBhcyBhYm9ydGVkLFxuICogdGhpcyBmdW5jdGlvbiB0aHJvd3MgZWl0aGVyIGEgRE9NRXhjZXB0aW9uIEFib3J0RXJyb3IsIG9yIGEgcmVndWxhciBlcnJvclxuICogd2l0aCBhIGBjb2RlYCBhdHRyaWJ1dGUgc2V0IHRvIGBFUlJfQUJPUlRFRGAuXG4gKlxuICogRm9yIGNvbnZlbmllbmNlLCBwYXNzaW5nIGB1bmRlZmluZWRgIGlzIGEgbm8tb3BcbiAqXG4gKiBAcGFyYW0ge0Fib3J0U2lnbmFsfSBbc2lnbmFsXSBhbiBBYm9ydFNpZ25hbCwgb3IgYW55dGhpbmcgd2l0aCBhbiBgYWJvcnRlZGAgYXR0cmlidXRlXG4gKiBAcmV0dXJucyBub3RoaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0Fib3J0U2lnbmFsKHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSByZXR1cm5cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnYmFtIGFib3J0ZWQhJylcbiAgICBpZiAodHlwZW9mIERPTUV4Y2VwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIG5vLXVuZGVmXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZSA9IG5ldyBFcnJvcignYWJvcnRlZCcpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtaWdub3JlXG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIGUuY29kZSA9ICdFUlJfQUJPUlRFRCdcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTa2lwcyB0byB0aGUgbmV4dCB0aWNrLCB0aGVuIHJ1bnMgYGNoZWNrQWJvcnRTaWduYWxgLlxuICogQXdhaXQgdGhpcyB0byBpbnNpZGUgYW4gb3RoZXJ3aXNlIHN5bmNocm9ub3VzIGxvb3AgdG9cbiAqIHByb3ZpZGUgYSBwbGFjZSB0byBicmVhayB3aGVuIGFuIGFib3J0IHNpZ25hbCBpcyByZWNlaXZlZC5cbiAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IHNpZ25hbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWJvcnRCcmVha1BvaW50KHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG4gIGNoZWNrQWJvcnRTaWduYWwoc2lnbmFsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FuTWVyZ2VCbG9ja3MoYmxvY2sxOiBDaHVuaywgYmxvY2syOiBDaHVuaykge1xuICByZXR1cm4gKFxuICAgIGJsb2NrMS5taW52LmJsb2NrUG9zaXRpb24gPT09IGJsb2NrMS5tYXh2LmJsb2NrUG9zaXRpb24gJiZcbiAgICBibG9jazEubWF4di5ibG9ja1Bvc2l0aW9uID09PSBibG9jazIubWludi5ibG9ja1Bvc2l0aW9uICYmXG4gICAgYmxvY2syLm1pbnYuYmxvY2tQb3NpdGlvbiA9PT0gYmxvY2syLm1heHYuYmxvY2tQb3NpdGlvblxuICApXG59XG4iXX0= |
@@ -1,40 +0,70 @@ | ||
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.fromBytes = fromBytes;exports.VirtualOffset = void 0;var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var VirtualOffset = /*#__PURE__*/function () { | ||
function VirtualOffset(blockPosition, dataPosition) {(0, _classCallCheck2.default)(this, VirtualOffset); | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); | ||
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property"); | ||
_Object$defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports.fromBytes = fromBytes; | ||
exports.default = void 0; | ||
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); | ||
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); | ||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); | ||
var VirtualOffset = | ||
/*#__PURE__*/ | ||
function () { | ||
function VirtualOffset(blockPosition, dataPosition) { | ||
(0, _classCallCheck2.default)(this, VirtualOffset); | ||
(0, _defineProperty2.default)(this, "blockPosition", void 0); | ||
(0, _defineProperty2.default)(this, "dataPosition", void 0); | ||
this.blockPosition = blockPosition; // < offset of the compressed data block | ||
this.dataPosition = dataPosition; // < offset into the uncompressed data | ||
}(0, _createClass2.default)(VirtualOffset, [{ key: "toString", value: function toString() | ||
} | ||
{ | ||
(0, _createClass2.default)(VirtualOffset, [{ | ||
key: "toString", | ||
value: function toString() { | ||
return "".concat(this.blockPosition, ":").concat(this.dataPosition); | ||
} }, { key: "compareTo", value: function compareTo( | ||
} | ||
}, { | ||
key: "compareTo", | ||
value: function compareTo(b) { | ||
return this.blockPosition - b.blockPosition || this.dataPosition - b.dataPosition; | ||
} | ||
}], [{ | ||
key: "min", | ||
value: function min() { | ||
var min; | ||
var i = 0; | ||
b) { | ||
return ( | ||
this.blockPosition - b.blockPosition || this.dataPosition - b.dataPosition); | ||
for (; !min; i += 1) { | ||
min = i < 0 || arguments.length <= i ? undefined : arguments[i]; | ||
} | ||
} }], [{ key: "min", value: function min() | ||
{ | ||
var min; | ||
var i = 0; | ||
for (; !min; i += 1) {min = i < 0 || arguments.length <= i ? undefined : arguments[i];} | ||
for (; i < arguments.length; i += 1) { | ||
if (min.compareTo(i < 0 || arguments.length <= i ? undefined : arguments[i]) > 0) min = i < 0 || arguments.length <= i ? undefined : arguments[i]; | ||
} | ||
return min; | ||
} }]);return VirtualOffset;}();exports.VirtualOffset = VirtualOffset; | ||
} | ||
}]); | ||
return VirtualOffset; | ||
}(); | ||
function fromBytes(bytes) {var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;var bigendian = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
if (bigendian) | ||
throw new Error('big-endian virtual file offsets not implemented'); | ||
exports.default = VirtualOffset; | ||
return new VirtualOffset( | ||
bytes[offset + 7] * 0x10000000000 + | ||
bytes[offset + 6] * 0x100000000 + | ||
bytes[offset + 5] * 0x1000000 + | ||
bytes[offset + 4] * 0x10000 + | ||
bytes[offset + 3] * 0x100 + | ||
bytes[offset + 2], | ||
bytes[offset + 1] << 8 | bytes[offset]); | ||
} | ||
function fromBytes(bytes) { | ||
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; | ||
var bigendian = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | ||
if (bigendian) throw new Error('big-endian virtual file offsets not implemented'); | ||
return new VirtualOffset(bytes[offset + 7] * 0x10000000000 + bytes[offset + 6] * 0x100000000 + bytes[offset + 5] * 0x1000000 + bytes[offset + 4] * 0x10000 + bytes[offset + 3] * 0x100 + bytes[offset + 2], bytes[offset + 1] << 8 | bytes[offset]); | ||
} | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92aXJ0dWFsT2Zmc2V0LnRzIl0sIm5hbWVzIjpbIlZpcnR1YWxPZmZzZXQiLCJibG9ja1Bvc2l0aW9uIiwiZGF0YVBvc2l0aW9uIiwiYiIsIm1pbiIsImkiLCJsZW5ndGgiLCJjb21wYXJlVG8iLCJmcm9tQnl0ZXMiLCJieXRlcyIsIm9mZnNldCIsImJpZ2VuZGlhbiIsIkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQXFCQSxhOzs7QUFHbkIseUJBQVlDLGFBQVosRUFBbUNDLFlBQW5DLEVBQXlEO0FBQUE7QUFBQTtBQUFBO0FBQ3ZELFNBQUtELGFBQUwsR0FBcUJBLGFBQXJCLENBRHVELENBQ3BCOztBQUNuQyxTQUFLQyxZQUFMLEdBQW9CQSxZQUFwQixDQUZ1RCxDQUV0QjtBQUNsQzs7OzsrQkFFVTtBQUNULHVCQUFVLEtBQUtELGFBQWYsY0FBZ0MsS0FBS0MsWUFBckM7QUFDRDs7OzhCQUVTQyxDLEVBQWtCO0FBQzFCLGFBQU8sS0FBS0YsYUFBTCxHQUFxQkUsQ0FBQyxDQUFDRixhQUF2QixJQUF3QyxLQUFLQyxZQUFMLEdBQW9CQyxDQUFDLENBQUNELFlBQXJFO0FBQ0Q7OzswQkFFb0M7QUFDbkMsVUFBSUUsR0FBSjtBQUNBLFVBQUlDLENBQUMsR0FBRyxDQUFSOztBQUNBLGFBQU8sQ0FBQ0QsR0FBUixFQUFhQyxDQUFDLElBQUksQ0FBbEI7QUFBcUJELFFBQUFBLEdBQUcsR0FBUUMsQ0FBUiw0QkFBUUEsQ0FBUix5QkFBUUEsQ0FBUixDQUFIO0FBQXJCOztBQUNBLGFBQU9BLENBQUMsR0FBRyxVQUFLQyxNQUFoQixFQUF3QkQsQ0FBQyxJQUFJLENBQTdCLEVBQWdDO0FBQzlCLFlBQUlELEdBQUcsQ0FBQ0csU0FBSixDQUFtQkYsQ0FBbkIsNEJBQW1CQSxDQUFuQix5QkFBbUJBLENBQW5CLEtBQXlCLENBQTdCLEVBQWdDRCxHQUFHLEdBQVFDLENBQVIsNEJBQVFBLENBQVIseUJBQVFBLENBQVIsQ0FBSDtBQUNqQzs7QUFDRCxhQUFPRCxHQUFQO0FBQ0Q7Ozs7Ozs7QUFFSSxTQUFTSSxTQUFULENBQW1CQyxLQUFuQixFQUFpRTtBQUFBLE1BQS9CQyxNQUErQix1RUFBdEIsQ0FBc0I7QUFBQSxNQUFuQkMsU0FBbUIsdUVBQVAsS0FBTztBQUN0RSxNQUFJQSxTQUFKLEVBQWUsTUFBTSxJQUFJQyxLQUFKLENBQVUsaURBQVYsQ0FBTjtBQUVmLFNBQU8sSUFBSVosYUFBSixDQUNMUyxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFWLENBQUwsR0FBb0IsYUFBcEIsR0FDRUQsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBVixDQUFMLEdBQW9CLFdBRHRCLEdBRUVELEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQVYsQ0FBTCxHQUFvQixTQUZ0QixHQUdFRCxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFWLENBQUwsR0FBb0IsT0FIdEIsR0FJRUQsS0FBSyxDQUFDQyxNQUFNLEdBQUcsQ0FBVixDQUFMLEdBQW9CLEtBSnRCLEdBS0VELEtBQUssQ0FBQ0MsTUFBTSxHQUFHLENBQVYsQ0FORixFQU9KRCxLQUFLLENBQUNDLE1BQU0sR0FBRyxDQUFWLENBQUwsSUFBcUIsQ0FBdEIsR0FBMkJELEtBQUssQ0FBQ0MsTUFBRCxDQVAzQixDQUFQO0FBU0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBWaXJ0dWFsT2Zmc2V0IHtcbiAgcHVibGljIGJsb2NrUG9zaXRpb246IG51bWJlclxuICBwdWJsaWMgZGF0YVBvc2l0aW9uOiBudW1iZXJcbiAgY29uc3RydWN0b3IoYmxvY2tQb3NpdGlvbjogbnVtYmVyLCBkYXRhUG9zaXRpb246IG51bWJlcikge1xuICAgIHRoaXMuYmxvY2tQb3NpdGlvbiA9IGJsb2NrUG9zaXRpb24gLy8gPCBvZmZzZXQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBibG9ja1xuICAgIHRoaXMuZGF0YVBvc2l0aW9uID0gZGF0YVBvc2l0aW9uIC8vIDwgb2Zmc2V0IGludG8gdGhlIHVuY29tcHJlc3NlZCBkYXRhXG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5ibG9ja1Bvc2l0aW9ufToke3RoaXMuZGF0YVBvc2l0aW9ufWBcbiAgfVxuXG4gIGNvbXBhcmVUbyhiOiBWaXJ0dWFsT2Zmc2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tQb3NpdGlvbiAtIGIuYmxvY2tQb3NpdGlvbiB8fCB0aGlzLmRhdGFQb3NpdGlvbiAtIGIuZGF0YVBvc2l0aW9uXG4gIH1cblxuICBzdGF0aWMgbWluKC4uLmFyZ3M6IFZpcnR1YWxPZmZzZXRbXSkge1xuICAgIGxldCBtaW5cbiAgICBsZXQgaSA9IDBcbiAgICBmb3IgKDsgIW1pbjsgaSArPSAxKSBtaW4gPSBhcmdzW2ldXG4gICAgZm9yICg7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAobWluLmNvbXBhcmVUbyhhcmdzW2ldKSA+IDApIG1pbiA9IGFyZ3NbaV1cbiAgICB9XG4gICAgcmV0dXJuIG1pblxuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUJ5dGVzKGJ5dGVzOiBCdWZmZXIsIG9mZnNldCA9IDAsIGJpZ2VuZGlhbiA9IGZhbHNlKSB7XG4gIGlmIChiaWdlbmRpYW4pIHRocm93IG5ldyBFcnJvcignYmlnLWVuZGlhbiB2aXJ0dWFsIGZpbGUgb2Zmc2V0cyBub3QgaW1wbGVtZW50ZWQnKVxuXG4gIHJldHVybiBuZXcgVmlydHVhbE9mZnNldChcbiAgICBieXRlc1tvZmZzZXQgKyA3XSAqIDB4MTAwMDAwMDAwMDAgK1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgNl0gKiAweDEwMDAwMDAwMCArXG4gICAgICBieXRlc1tvZmZzZXQgKyA1XSAqIDB4MTAwMDAwMCArXG4gICAgICBieXRlc1tvZmZzZXQgKyA0XSAqIDB4MTAwMDAgK1xuICAgICAgYnl0ZXNbb2Zmc2V0ICsgM10gKiAweDEwMCArXG4gICAgICBieXRlc1tvZmZzZXQgKyAyXSxcbiAgICAoYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCkgfCBieXRlc1tvZmZzZXRdLFxuICApXG59XG4iXX0= |
{ | ||
"name": "@gmod/bam", | ||
"version": "1.0.22", | ||
"version": "1.0.24", | ||
"description": "Parser for BAM and BAM index (bai) files", | ||
@@ -22,6 +22,8 @@ "license": "MIT", | ||
"coverage": "npm test -- --coverage", | ||
"lint": "eslint src test", | ||
"lint": "eslint --ext .js,.ts src test", | ||
"clean": "rimraf dist", | ||
"prebuild": "npm run clean && npm run lint", | ||
"build": "babel src -d dist", | ||
"build:types": "tsc --emitDeclarationOnly", | ||
"build:js": "babel src --out-dir dist --extensions \".ts,.tsx\" --source-maps inline", | ||
"build": "npm run build:types && npm run build:js", | ||
"preversion": "npm run lint && npm test && npm run build", | ||
@@ -41,3 +43,6 @@ "version": "standard-changelog && git add CHANGELOG.md", | ||
"dependencies": { | ||
"@babel/runtime": "^7.4.3", | ||
"@babel/runtime-corejs2": "^7.5.5", | ||
"@types/long": "^4.0.0", | ||
"@types/node": "^12.7.8", | ||
"@types/pako": "^1.0.1", | ||
"abortable-promise-cache": "^1.0.1", | ||
@@ -50,3 +55,3 @@ "cross-fetch": "^3.0.2", | ||
"pako": "^1.0.10", | ||
"quick-lru": "^2.0.0" | ||
"quick-lru": "2" | ||
}, | ||
@@ -56,4 +61,8 @@ "devDependencies": { | ||
"@babel/core": "^7.3.3", | ||
"@babel/plugin-proposal-class-properties": "^7.5.5", | ||
"@babel/plugin-transform-runtime": "^7.2.0", | ||
"@babel/preset-env": "^7.3.1", | ||
"@babel/preset-typescript": "^7.6.0", | ||
"@typescript-eslint/eslint-plugin": "^2.3.1", | ||
"@typescript-eslint/parser": "^2.3.1", | ||
"babel-jest": "^24.1.0", | ||
@@ -64,2 +73,3 @@ "eslint": "^5.12.0", | ||
"eslint-plugin-import": "^2.10.0", | ||
"eslint-plugin-jest": "^22.17.0", | ||
"eslint-plugin-prettier": "^3.0.1", | ||
@@ -69,3 +79,4 @@ "jest": "^24.3.1", | ||
"rimraf": "^2.6.2", | ||
"standard-changelog": "^1.0.0" | ||
"standard-changelog": "^1.0.0", | ||
"typescript": "^3.6.3" | ||
}, | ||
@@ -72,0 +83,0 @@ "publishConfig": { |
@@ -56,7 +56,17 @@ [](https://github.com/diegohaz/nod) | ||
### async *streamRecordsForRange(refName, start, end, opts) | ||
This is a async generator function that takes the same signature as getRecordsForRange but results can be processed using | ||
for await(const chunk of file.streamRecordsForRange(refName, start, end, opts)) { | ||
} | ||
The getRecordsForRange simply wraps this process by concatenating chunks into an array | ||
### async indexCov(refName, start, end) | ||
* refName - a string for the chrom to fetch from | ||
* start - a 0 based half open start coordinate (optional, will fetch whole chromosome without) | ||
* end - a 0 based half open end coordinate (optional, will fetch whole chromosome without even if start is specified) | ||
* start - a 0 based half open start coordinate (optional) | ||
* end - a 0 based half open end coordinate (optional) | ||
@@ -63,0 +73,0 @@ Returns features of the form {start, end, score} containing estimated feature density across 16kb windows in the genome |
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
282028
31
3103
1
135
12
20
1
+ Added@types/long@^4.0.0
+ Added@types/node@^12.7.8
+ Added@types/pako@^1.0.1
+ Added@babel/runtime-corejs2@7.26.9(transitive)
+ Added@types/long@4.0.2(transitive)
+ Added@types/node@12.20.55(transitive)
+ Added@types/pako@1.0.7(transitive)
+ Addedcore-js@2.6.12(transitive)
- Removed@babel/runtime@^7.4.3
- Removed@babel/runtime@7.26.9(transitive)
Updatedquick-lru@2