js-angusj-clipper
Version:
Polygon and line clipping and offsetting library for Javascript / Typescript - a port of Angus Johnson's clipper to WebAssembly / Asm.JS
70 lines • 14 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.offsetToPolyTree = exports.offsetToPaths = void 0;
var ClipperOffset_1 = require("./ClipperOffset");
var addPathOrPaths = function (offset, inputDatas) {
if (inputDatas === undefined) {
return;
}
// add each input
for (var i = 0, maxi = inputDatas.length; i < maxi; i++) {
var inputData = inputDatas[i];
// add the path/paths
var pathOrPaths = inputData.data;
if (!pathOrPaths || pathOrPaths.length <= 0) {
continue;
}
// is it a path or paths?
if (Array.isArray(pathOrPaths[0])) {
// paths
offset.addPaths(pathOrPaths, inputData.joinType, inputData.endType);
}
else {
// path
offset.addPath(pathOrPaths, inputData.joinType, inputData.endType);
}
}
};
function offsetToPathsOrPolyTree(polyTreeMode, nativeClipperLib, params) {
var filledData = __assign({ arcTolerance: 0.25, miterLimit: 2 }, params);
var offset = new ClipperOffset_1.ClipperOffset(nativeClipperLib, filledData.miterLimit, filledData.arcTolerance);
//noinspection UnusedCatchParameterJS
try {
addPathOrPaths(offset, params.offsetInputs);
if (!polyTreeMode) {
return offset.executeToPaths(params.delta, params.cleanDistance);
}
else {
if (params.cleanDistance !== undefined) {
return undefined; // cleaning is not available for poly tree results
}
return offset.executeToPolyTree(params.delta);
}
}
catch (err) {
return undefined;
}
finally {
offset.dispose();
}
}
function offsetToPaths(nativeClipperLib, params) {
return offsetToPathsOrPolyTree(false, nativeClipperLib, params);
}
exports.offsetToPaths = offsetToPaths;
function offsetToPolyTree(nativeClipperLib, params) {
return offsetToPathsOrPolyTree(true, nativeClipperLib, params);
}
exports.offsetToPolyTree = offsetToPolyTree;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2Zmc2V0RnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29mZnNldEZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFnRDtBQTBGaEQsSUFBTSxjQUFjLEdBQUcsVUFBQyxNQUFxQixFQUFFLFVBQXFDO0lBQ2xGLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtRQUM1QixPQUFPO0tBQ1I7SUFFRCxpQkFBaUI7SUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2RCxJQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEMscUJBQXFCO1FBQ3JCLElBQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUMzQyxTQUFTO1NBQ1Y7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLFFBQVE7WUFDUixNQUFNLENBQUMsUUFBUSxDQUFDLFdBQTRCLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDdEY7YUFBTTtZQUNMLE9BQU87WUFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQTJCLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEY7S0FDRjtBQUNILENBQUMsQ0FBQztBQUVGLFNBQVMsdUJBQXVCLENBQzlCLFlBQXFCLEVBQ3JCLGdCQUEwQyxFQUMxQyxNQUFvQjtJQUVwQixJQUFNLFVBQVUsY0FDZCxZQUFZLEVBQUUsSUFBSSxFQUNsQixVQUFVLEVBQUUsQ0FBQyxJQUNWLE1BQU0sQ0FDVixDQUFDO0lBRUYsSUFBTSxNQUFNLEdBQUcsSUFBSSw2QkFBYSxDQUM5QixnQkFBZ0IsRUFDaEIsVUFBVSxDQUFDLFVBQVUsRUFDckIsVUFBVSxDQUFDLFlBQVksQ0FDeEIsQ0FBQztJQUVGLHFDQUFxQztJQUNyQyxJQUFJO1FBQ0YsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbEU7YUFBTTtZQUNMLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3RDLE9BQU8sU0FBUyxDQUFDLENBQUMsa0RBQWtEO2FBQ3JFO1lBQ0QsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9DO0tBQ0Y7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO1lBQVM7UUFDUixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUMzQixnQkFBMEMsRUFDMUMsTUFBb0I7SUFFcEIsT0FBTyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFzQixDQUFDO0FBQ3ZGLENBQUM7QUFMRCxzQ0FLQztBQUVELFNBQWdCLGdCQUFnQixDQUM5QixnQkFBMEMsRUFDMUMsTUFBb0I7SUFFcEIsT0FBTyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUF5QixDQUFDO0FBQ3pGLENBQUM7QUFMRCw0Q0FLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBwZXJPZmZzZXQgfSBmcm9tIFwiLi9DbGlwcGVyT2Zmc2V0XCI7XG5pbXBvcnQgeyBFbmRUeXBlLCBKb2luVHlwZSB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBOYXRpdmVDbGlwcGVyTGliSW5zdGFuY2UgfSBmcm9tIFwiLi9uYXRpdmUvTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlXCI7XG5pbXBvcnQgeyBSZWFkb25seVBhdGggfSBmcm9tIFwiLi9QYXRoXCI7XG5pbXBvcnQgeyBQYXRocywgUmVhZG9ubHlQYXRocyB9IGZyb20gXCIuL1BhdGhzXCI7XG5pbXBvcnQgeyBQb2x5VHJlZSB9IGZyb20gXCIuL1BvbHlUcmVlXCI7XG5cbi8qKlxuICogQSBzaW5nbGUgaW5wdXQgKG9mIG11bHRpcGxlIHBvc3NpYmxlIGlucHV0cykgZm9yIHRoZSBvZmZzZXRUb1BhdGhzIC8gb2Zmc2V0VG9Qb2x5VHJlZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2Zmc2V0SW5wdXQge1xuICAvKipcbiAgICogSm9pbiB0eXBlLlxuICAgKi9cbiAgam9pblR5cGU6IEpvaW5UeXBlO1xuXG4gIC8qKlxuICAgKiBFbmQgdHlwZS5cbiAgICovXG4gIGVuZFR5cGU6IEVuZFR5cGU7XG5cbiAgLyoqXG4gICAqIERhdGEgb2Ygb25lIG9mIHRoZSBQYXRoIG9yIFBhdGhzIHRvIGJlIHVzZWQgaW4gcHJlcGFyYXRpb24gZm9yIG9mZnNldHRpbmcuXG4gICAqXG4gICAqIEFsbCAnb3V0ZXInIFBhdGhzIG11c3QgaGF2ZSB0aGUgc2FtZSBvcmllbnRhdGlvbiwgYW5kIGFueSAnaG9sZScgcGF0aHMgbXVzdCBoYXZlIHJldmVyc2Ugb3JpZW50YXRpb24uIENsb3NlZCBwYXRocyBtdXN0IGhhdmUgYXQgbGVhc3QgMyB2ZXJ0aWNlcy5cbiAgICogT3BlbiBwYXRocyBtYXkgaGF2ZSBhcyBmZXcgYXMgb25lIHZlcnRleC4gT3BlbiBwYXRocyBjYW4gb25seSBiZSBvZmZzZXQgd2l0aCBwb3NpdGl2ZSBkZWx0YXMuXG4gICAqL1xuICBkYXRhOiBSZWFkb25seVBhdGggfCBSZWFkb25seVBhdGhzO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3IgdGhlIHBvbHlnb24gb2Zmc2V0IG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZmZzZXRQYXJhbXMge1xuICAvKipcbiAgICogRmlyc3RseSwgdGhpcyBmaWVsZC9wcm9wZXJ0eSBpcyBvbmx5IHJlbGV2YW50IHdoZW4gSm9pblR5cGUgPSBSb3VuZCBhbmQvb3IgRW5kVHlwZSA9IFJvdW5kLlxuICAgKlxuICAgKiBTaW5jZSBmbGF0dGVuZWQgcGF0aHMgY2FuIG5ldmVyIHBlcmZlY3RseSByZXByZXNlbnQgYXJjcywgdGhpcyBmaWVsZC9wcm9wZXJ0eSBzcGVjaWZpZXMgYSBtYXhpbXVtIGFjY2VwdGFibGUgaW1wcmVjaXNpb24gKCd0b2xlcmFuY2UnKSB3aGVuIGFyY3MgYXJlXG4gICAqIGFwcHJveGltYXRlZCBpbiBhbiBvZmZzZXR0aW5nIG9wZXJhdGlvbi4gU21hbGxlciB2YWx1ZXMgd2lsbCBpbmNyZWFzZSAnc21vb3RobmVzcycgdXAgdG8gYSBwb2ludCB0aG91Z2ggYXQgYSBjb3N0IG9mIHBlcmZvcm1hbmNlIGFuZCBpbiBjcmVhdGluZyBtb3JlXG4gICAqIHZlcnRpY2VzIHRvIGNvbnN0cnVjdCB0aGUgYXJjLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBBcmNUb2xlcmFuY2UgaXMgMC4yNSB1bml0cy4gVGhpcyBtZWFucyB0aGF0IHRoZSBtYXhpbXVtIGRpc3RhbmNlIHRoZSBmbGF0dGVuZWQgcGF0aCB3aWxsIGRldmlhdGUgZnJvbSB0aGUgJ3RydWUnIGFyYyB3aWxsIGJlIG5vIG1vcmVcbiAgICogdGhhbiAwLjI1IHVuaXRzIChiZWZvcmUgcm91bmRpbmcpLlxuICAgKlxuICAgKiBSZWR1Y2luZyB0b2xlcmFuY2VzIGJlbG93IDAuMjUgd2lsbCBub3QgaW1wcm92ZSBzbW9vdGhuZXNzIHNpbmNlIHZlcnRleCBjb29yZGluYXRlcyB3aWxsIHN0aWxsIGJlIHJvdW5kZWQgdG8gaW50ZWdlciB2YWx1ZXMuIFRoZSBvbmx5IHdheSB0byBhY2hpZXZlXG4gICAqIHN1Yi1pbnRlZ2VyIHByZWNpc2lvbiBpcyB0aHJvdWdoIGNvb3JkaW5hdGUgc2NhbGluZyBiZWZvcmUgYW5kIGFmdGVyIG9mZnNldHRpbmcgKHNlZSBleGFtcGxlIGJlbG93KS5cbiAgICpcbiAgICogSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBBcmNUb2xlcmFuY2UgYSBzZW5zaWJsZSBmcmFjdGlvbiBvZiB0aGUgb2Zmc2V0IGRlbHRhIChhcmMgcmFkaXVzKS4gTGFyZ2UgdG9sZXJhbmNlcyByZWxhdGl2ZSB0byB0aGUgb2Zmc2V0IGRlbHRhIHdpbGwgcHJvZHVjZVxuICAgKiBwb29yIGFyYyBhcHByb3hpbWF0aW9ucyBidXQsIGp1c3QgYXMgaW1wb3J0YW50bHksIHZlcnkgc21hbGwgdG9sZXJhbmNlcyB3aWxsIHN1YnN0YW50aWFsbHkgc2xvdyBvZmZzZXR0aW5nIHBlcmZvcm1hbmNlIHdoaWxlIHByb3ZpZGluZyB1bm5lY2Vzc2FyeVxuICAgKiBkZWdyZWVzIG9mIHByZWNpc2lvbi4gVGhpcyBpcyBtb3N0IGxpa2VseSB0byBiZSBhbiBpc3N1ZSB3aGVuIG9mZnNldHRpbmcgcG9seWdvbnMgd2hvc2UgY29vcmRpbmF0ZXMgaGF2ZSBiZWVuIHNjYWxlZCB0byBwcmVzZXJ2ZSBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24uXG4gICAqXG4gICAqIEV4YW1wbGU6IEltYWdpbmUgYSBzZXQgb2YgcG9seWdvbnMgKGRlZmluZWQgaW4gZmxvYXRpbmcgcG9pbnQgY29vcmRpbmF0ZXMpIHRoYXQgaXMgdG8gYmUgb2Zmc2V0IGJ5IDEwIHVuaXRzIHVzaW5nIHJvdW5kIGpvaW5zLCBhbmQgdGhlIHNvbHV0aW9uIGlzIHRvXG4gICAqIHJldGFpbiBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gdXAgdG8gYXQgbGVhc3QgNiBkZWNpbWFsIHBsYWNlcy5cbiAgICogVG8gcHJlc2VydmUgdGhpcyBkZWdyZWUgb2YgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uLCBhbmQgZ2l2ZW4gdGhhdCBDbGlwcGVyIGFuZCBDbGlwcGVyT2Zmc2V0IGJvdGggb3BlcmF0ZSBvbiBpbnRlZ2VyIGNvb3JkaW5hdGVzLCB0aGUgcG9seWdvblxuICAgKiBjb29yZGluYXRlcyB3aWxsIGJlIHNjYWxlZCB1cCBieSAxMDggKGFuZCByb3VuZGVkIHRvIGludGVnZXJzKSBwcmlvciB0byBvZmZzZXR0aW5nLiBCb3RoIG9mZnNldCBkZWx0YSBhbmQgQXJjVG9sZXJhbmNlIHdpbGwgYWxzbyBuZWVkIHRvIGJlIHNjYWxlZFxuICAgKiBieSB0aGlzIHNhbWUgZmFjdG9yLiBJZiBBcmNUb2xlcmFuY2Ugd2FzIGxlZnQgdW5zY2FsZWQgYXQgdGhlIGRlZmF1bHQgMC4yNSB1bml0cywgZXZlcnkgYXJjIGluIHRoZSBzb2x1dGlvbiB3b3VsZCBjb250YWluIGEgZnJhY3Rpb24gb2YgNDQgVEhPVVNBTkRcbiAgICogdmVydGljZXMgd2hpbGUgdGhlIGZpbmFsIGFyYyBpbXByZWNpc2lvbiB3b3VsZCBiZSAwLjI1IMOXIDEwLTggdW5pdHMgKGllIG9uY2Ugc2NhbGluZyB3YXMgcmV2ZXJzZWQpLiBIb3dldmVyLCBpZiAwLjEgdW5pdHMgd2FzIGFuIGFjY2VwdGFibGUgaW1wcmVjaXNpb25cbiAgICogaW4gdGhlIGZpbmFsIHVuc2NhbGVkIHNvbHV0aW9uLCB0aGVuIEFyY1RvbGVyYW5jZSBzaG91bGQgYmUgc2V0IHRvIDAuMSDDlyBzY2FsaW5nX2ZhY3RvciAoMC4xIMOXIDEwOCApLiBOb3cgaWYgc2NhbGluZyBpcyBhcHBsaWVkIGVxdWFsbHkgdG8gYm90aFxuICAgKiBBcmNUb2xlcmFuY2UgYW5kIHRvIERlbHRhIE9mZnNldCwgdGhlbiBpbiB0aGlzIGV4YW1wbGUgdGhlIG51bWJlciBvZiB2ZXJ0aWNlcyAoc3RlcHMpIGRlZmluaW5nIGVhY2ggYXJjIHdvdWxkIGJlIGEgZnJhY3Rpb24gb2YgMjMuXG4gICAqXG4gICAqIFRoZSBmb3JtdWxhIGZvciB0aGUgbnVtYmVyIG9mIHN0ZXBzIGluIGEgZnVsbCBjaXJjdWxhciBhcmMgaXMgLi4uIFBpIC8gYWNvcygxIC0gYXJjX3RvbGVyYW5jZSAvIGFicyhkZWx0YSkpXG4gICAqL1xuICBhcmNUb2xlcmFuY2U/OiBudW1iZXI7IC8vIGRlZmF1bHRzIHRvIDAuMjVcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGluIG11bHRpcGxlcyBvZiBkZWx0YSB0aGF0IHZlcnRpY2VzIGNhbiBiZSBvZmZzZXQgZnJvbSB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbnMgYmVmb3JlIHNxdWFyaW5nIGlzIGFwcGxpZWQuXG4gICAqIChTcXVhcmluZyB0cnVuY2F0ZXMgYSBtaXRlciBieSAnY3V0dGluZyBpdCBvZmYnIGF0IDEgw5cgZGVsdGEgZGlzdGFuY2UgZnJvbSB0aGUgb3JpZ2luYWwgdmVydGV4LilcbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIE1pdGVyTGltaXQgaXMgMiAoaWUgdHdpY2UgZGVsdGEpLiBUaGlzIGlzIGFsc28gdGhlIHNtYWxsZXN0IE1pdGVyTGltaXQgdGhhdCdzIGFsbG93ZWQuIElmIG1pdGVyaW5nIHdhcyB1bnJlc3RyaWN0ZWQgKGllIHdpdGhvdXRcbiAgICogYW55IHNxdWFyaW5nKSwgdGhlbiBvZmZzZXRzIGF0IHZlcnkgYWN1dGUgYW5nbGVzIHdvdWxkIGdlbmVyYXRlIHVuYWNjZXB0YWJseSBsb25nICdzcGlrZXMnLlxuICAgKi9cbiAgbWl0ZXJMaW1pdD86IG51bWJlcjsgLy8gZGVmYXVsdHMgdG8gMiAodHdpY2UgZGVsdGEpXG5cbiAgLyoqXG4gICAqIE5lZ2F0aXZlIGRlbHRhIHZhbHVlcyBzaHJpbmsgcG9seWdvbnMgYW5kIHBvc2l0aXZlIGRlbHRhIGV4cGFuZCB0aGVtLlxuICAgKi9cbiAgZGVsdGE6IG51bWJlcjtcblxuICAvKipcbiAgICogT25lIG9yIG1vcmUgaW5wdXRzIHRvIHVzZSBmb3IgdGhlIG9mZnNldCBvcGVyYXRpb24uXG4gICAqL1xuICBvZmZzZXRJbnB1dHM6IE9mZnNldElucHV0W107XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgaXMgbm90IHVuZGVmaW5lZCB0aGVuIGNsZWFuaW5nIG9mIHRoZSByZXN1bHQgcG9seWdvbiB3aWxsIGJlIHBlcmZvcm1lZC5cbiAgICogVGhpcyBvcGVyYXRpb24gaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgb3V0cHV0IGZvcm1hdCBpcyBub3QgYSBwb2x5IHRyZWUuXG4gICAqL1xuICBjbGVhbkRpc3RhbmNlPzogbnVtYmVyO1xufVxuXG5jb25zdCBhZGRQYXRoT3JQYXRocyA9IChvZmZzZXQ6IENsaXBwZXJPZmZzZXQsIGlucHV0RGF0YXM6IE9mZnNldElucHV0W10gfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKGlucHV0RGF0YXMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGFkZCBlYWNoIGlucHV0XG4gIGZvciAobGV0IGkgPSAwLCBtYXhpID0gaW5wdXREYXRhcy5sZW5ndGg7IGkgPCBtYXhpOyBpKyspIHtcbiAgICBjb25zdCBpbnB1dERhdGEgPSBpbnB1dERhdGFzW2ldO1xuXG4gICAgLy8gYWRkIHRoZSBwYXRoL3BhdGhzXG4gICAgY29uc3QgcGF0aE9yUGF0aHMgPSBpbnB1dERhdGEuZGF0YTtcbiAgICBpZiAoIXBhdGhPclBhdGhzIHx8IHBhdGhPclBhdGhzLmxlbmd0aCA8PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBpcyBpdCBhIHBhdGggb3IgcGF0aHM/XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aE9yUGF0aHNbMF0pKSB7XG4gICAgICAvLyBwYXRoc1xuICAgICAgb2Zmc2V0LmFkZFBhdGhzKHBhdGhPclBhdGhzIGFzIFJlYWRvbmx5UGF0aHMsIGlucHV0RGF0YS5qb2luVHlwZSwgaW5wdXREYXRhLmVuZFR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwYXRoXG4gICAgICBvZmZzZXQuYWRkUGF0aChwYXRoT3JQYXRocyBhcyBSZWFkb25seVBhdGgsIGlucHV0RGF0YS5qb2luVHlwZSwgaW5wdXREYXRhLmVuZFR5cGUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gb2Zmc2V0VG9QYXRoc09yUG9seVRyZWUoXG4gIHBvbHlUcmVlTW9kZTogYm9vbGVhbixcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBwYXJhbXM6IE9mZnNldFBhcmFtc1xuKTogUGF0aHMgfCBQb2x5VHJlZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZpbGxlZERhdGEgPSB7XG4gICAgYXJjVG9sZXJhbmNlOiAwLjI1LFxuICAgIG1pdGVyTGltaXQ6IDIsXG4gICAgLi4ucGFyYW1zLFxuICB9O1xuXG4gIGNvbnN0IG9mZnNldCA9IG5ldyBDbGlwcGVyT2Zmc2V0KFxuICAgIG5hdGl2ZUNsaXBwZXJMaWIsXG4gICAgZmlsbGVkRGF0YS5taXRlckxpbWl0LFxuICAgIGZpbGxlZERhdGEuYXJjVG9sZXJhbmNlXG4gICk7XG5cbiAgLy9ub2luc3BlY3Rpb24gVW51c2VkQ2F0Y2hQYXJhbWV0ZXJKU1xuICB0cnkge1xuICAgIGFkZFBhdGhPclBhdGhzKG9mZnNldCwgcGFyYW1zLm9mZnNldElucHV0cyk7XG4gICAgaWYgKCFwb2x5VHJlZU1vZGUpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuZXhlY3V0ZVRvUGF0aHMocGFyYW1zLmRlbHRhLCBwYXJhbXMuY2xlYW5EaXN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJhbXMuY2xlYW5EaXN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGNsZWFuaW5nIGlzIG5vdCBhdmFpbGFibGUgZm9yIHBvbHkgdHJlZSByZXN1bHRzXG4gICAgICB9XG4gICAgICByZXR1cm4gb2Zmc2V0LmV4ZWN1dGVUb1BvbHlUcmVlKHBhcmFtcy5kZWx0YSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGZpbmFsbHkge1xuICAgIG9mZnNldC5kaXNwb3NlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9mZnNldFRvUGF0aHMoXG4gIG5hdGl2ZUNsaXBwZXJMaWI6IE5hdGl2ZUNsaXBwZXJMaWJJbnN0YW5jZSxcbiAgcGFyYW1zOiBPZmZzZXRQYXJhbXNcbik6IFBhdGhzIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9mZnNldFRvUGF0aHNPclBvbHlUcmVlKGZhbHNlLCBuYXRpdmVDbGlwcGVyTGliLCBwYXJhbXMpIGFzIFBhdGhzIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb2Zmc2V0VG9Qb2x5VHJlZShcbiAgbmF0aXZlQ2xpcHBlckxpYjogTmF0aXZlQ2xpcHBlckxpYkluc3RhbmNlLFxuICBwYXJhbXM6IE9mZnNldFBhcmFtc1xuKTogUG9seVRyZWUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb2Zmc2V0VG9QYXRoc09yUG9seVRyZWUodHJ1ZSwgbmF0aXZlQ2xpcHBlckxpYiwgcGFyYW1zKSBhcyBQb2x5VHJlZSB8IHVuZGVmaW5lZDtcbn1cbiJdfQ==