@plait/common 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,6 @@ export const withResize = (board, options) => {
30
30
  handle: resizeDetectResult.handle
31
31
  };
32
32
  preventTouchMove(board, event, true);
33
- return;
34
33
  }
35
34
  pointerDown(event);
36
35
  };
@@ -101,4 +100,4 @@ export const withResize = (board, options) => {
101
100
  };
102
101
  return board;
103
102
  };
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvd2l0aC1yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILE9BQU8sRUFDUCxxQkFBcUIsRUFFckIsVUFBVSxFQUVWLGdCQUFnQixFQUVoQiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLE9BQU8sRUFDUCxjQUFjLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBYSxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBc0JyRixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFtQixFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUNILFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDbkQsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQ3hCLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FDdEIsS0FBaUIsRUFDakIsT0FBZ0MsRUFDbEMsRUFBRTtJQUNBLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUM1RCxJQUFJLGtCQUFrQixHQUFvQyxJQUFJLENBQUM7SUFDL0QsSUFBSSxTQUFTLEdBQTJCLElBQUksQ0FBQztJQUM3QyxJQUFJLFVBQVUsR0FBaUIsSUFBSSxDQUFDO0lBQ3BDLElBQUksZ0JBQWdCLEdBQW9DLElBQUksQ0FBQztJQUU3RCxLQUFLLENBQUMsV0FB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RV9CVUZGRVIsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIFBvaW50LFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgaXNNYWluUG9pbnRlcixcbiAgICBwcmV2ZW50VG91Y2hNb3ZlLFxuICAgIGhhbmRsZVRvdWNoVGFyZ2V0LFxuICAgIHRocm90dGxlUkFGLFxuICAgIHRvUG9pbnQsXG4gICAgdHJhbnNmb3JtUG9pbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlLCBSZXNpemVDdXJzb3JDbGFzcyB9IGZyb20gJy4uL2NvbnN0YW50cy9yZXNpemUnO1xuaW1wb3J0IHsgUmVzaXplUmVmLCBhZGRSZXNpemluZywgaXNSZXNpemluZywgcmVtb3ZlUmVzaXppbmcgfSBmcm9tICcuLi91dGlscy9yZXNpemUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhSZXNpemVPcHRpb25zPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQsIEsgPSBSZXNpemVIYW5kbGU+IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBjYW5SZXNpemU6ICgpID0+IGJvb2xlYW47XG4gICAgZGV0ZWN0OiAocG9pbnQ6IFBvaW50KSA9PiBSZXNpemVEZXRlY3RSZXN1bHQ8VCwgSz4gfCBudWxsO1xuICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8VCwgSz4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4gdm9pZDtcbiAgICBlbmRSZXNpemU/OiAocmVzaXplUmVmOiBSZXNpemVSZWY8VCwgSz4pID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplRGV0ZWN0UmVzdWx0PFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQsIEsgPSBSZXNpemVIYW5kbGU+IHtcbiAgICBlbGVtZW50OiBUO1xuICAgIGhhbmRsZTogSztcbiAgICBjdXJzb3JDbGFzcz86IFJlc2l6ZUN1cnNvckNsYXNzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6ZVN0YXRlIHtcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIGVuZFRyYW5zZm9ybVBvaW50OiBQb2ludDtcbn1cblxuY29uc3QgZ2VuZXJhbENhblJlc2l6ZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICAgIFBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgfHxcbiAgICAgICAgUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpIHx8XG4gICAgICAgICFQbGFpdEJvYXJkLmlzUG9pbnRlcihib2FyZCwgUGxhaXRQb2ludGVyVHlwZS5oYW5kKSB8fFxuICAgICAgICAhaXNNYWluUG9pbnRlcihldmVudClcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHdpdGhSZXNpemUgPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4oXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgb3B0aW9uczogV2l0aFJlc2l6ZU9wdGlvbnM8VCwgSz5cbikgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAgfSA9IGJvYXJkO1xuICAgIGxldCByZXNpemVEZXRlY3RSZXN1bHQ6IFJlc2l6ZURldGVjdFJlc3VsdDxULCBLPiB8IG51bGwgPSBudWxsO1xuICAgIGxldCByZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPiB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzdGFydFBvaW50OiBQb2ludCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBob3ZlRGV0ZWN0UmVzdWx0OiBSZXNpemVEZXRlY3RSZXN1bHQ8VCwgSz4gfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNhblJlc2l6ZSgpIHx8ICFnZW5lcmFsQ2FuUmVzaXplKGJvYXJkLCBldmVudCkpIHtcbiAgICAgICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgcmVzaXplRGV0ZWN0UmVzdWx0ID0gb3B0aW9ucy5kZXRlY3QocG9pbnQpO1xuICAgICAgICBpZiAocmVzaXplRGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzaXplRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZChgJHtyZXNpemVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3N9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gW2V2ZW50LngsIGV2ZW50LnldO1xuICAgICAgICAgICAgcmVzaXplUmVmID0ge1xuICAgICAgICAgICAgICAgIHBhdGg6IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHJlc2l6ZURldGVjdFJlc3VsdC5lbGVtZW50KSxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiByZXNpemVEZXRlY3RSZXN1bHQuZWxlbWVudCxcbiAgICAgICAgICAgICAgICBoYW5kbGU6IHJlc2l6ZURldGVjdFJlc3VsdC5oYW5kbGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jYW5SZXNpemUoKSB8fCAhZ2VuZXJhbENhblJlc2l6ZShib2FyZCwgZXZlbnQpKSB7XG4gICAgICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgcmVzaXplRGV0ZWN0UmVzdWx0ICYmICFpc1Jlc2l6aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgLy8gcHJldmVudCB0ZXh0IGZyb20gYmVpbmcgc2VsZWN0ZWRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHN0YXJ0UG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBQUkVTU19BTkRfTU9WRV9CVUZGRVIpIHtcbiAgICAgICAgICAgICAgICBhZGRSZXNpemluZyhib2FyZCwgcmVzaXplUmVmISwgb3B0aW9ucy5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmVzaXppbmcoYm9hcmQpICYmIHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIGJlaW5nIHNlbGVjdGVkXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgZW5kVHJhbnNmb3JtUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgICAgICB0aHJvdHRsZVJBRigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBbZXZlbnQueCwgZXZlbnQueV07XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgcmVzaXplUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvdWNoVGFyZ2V0KGJvYXJkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc2l6ZShyZXNpemVSZWYsIHsgb2Zmc2V0WCwgb2Zmc2V0WSwgZW5kVHJhbnNmb3JtUG9pbnQgfSk7XG4gICAgICAgICAgICAgICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICAgICAgY29uc3QgcmVzaXplRGV0ZWN0UmVzdWx0ID0gb3B0aW9ucy5kZXRlY3QocG9pbnQpO1xuICAgICAgICAgICAgaWYgKHJlc2l6ZURldGVjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGlmIChob3ZlRGV0ZWN0UmVzdWx0ICYmIHJlc2l6ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzcyAhPT0gaG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKGAke2hvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3N9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhvdmVEZXRlY3RSZXN1bHQgPSByZXNpemVEZXRlY3RSZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZChgJHtob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdmVEZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYCR7aG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzc31gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBob3ZlRGV0ZWN0UmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgICAgICBpZiAoaXNSZXNpemluZyhib2FyZCkgfHwgcmVzaXplRGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICBvcHRpb25zLmVuZFJlc2l6ZSAmJiBvcHRpb25zLmVuZFJlc2l6ZShyZXNpemVSZWYhKTtcbiAgICAgICAgICAgIHJlbW92ZVJlc2l6aW5nKGJvYXJkLCBvcHRpb25zLmtleSk7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gbnVsbDtcbiAgICAgICAgICAgIHJlc2l6ZURldGVjdFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICByZXNpemVSZWYgPSBudWxsO1xuICAgICAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvd2l0aC1yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILE9BQU8sRUFDUCxxQkFBcUIsRUFFckIsVUFBVSxFQUVWLGdCQUFnQixFQUVoQiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLE9BQU8sRUFDUCxjQUFjLEVBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBYSxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBc0JyRixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFtQixFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUNILFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDbkQsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQ3hCLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FDdEIsS0FBaUIsRUFDakIsT0FBZ0MsRUFDbEMsRUFBRTtJQUNBLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUM1RCxJQUFJLGtCQUFrQixHQUFvQyxJQUFJLENBQUM7SUFDL0QsSUFBSSxTQUFTLEdBQTJCLElBQUksQ0FBQztJQUM3QyxJQUFJLFVBQVUsR0FBaUIsSUFBSSxDQUFDO0lBQ3BDLElBQUksZ0JBQWdCLEdBQW9DLElBQUksQ0FBQztJQUU3RCxLQUFLLENBQUMsV0FB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biAgICBQYXRoLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0UG9pbnRlclR5cGUsXG4gICAgUG9pbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICBpc01haW5Qb2ludGVyLFxuICAgIHByZXZlbnRUb3VjaE1vdmUsXG4gICAgaGFuZGxlVG91Y2hUYXJnZXQsXG4gICAgdGhyb3R0bGVSQUYsXG4gICAgdG9Qb2ludCxcbiAgICB0cmFuc2Zvcm1Qb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUsIFJlc2l6ZUN1cnNvckNsYXNzIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc2l6ZSc7XG5pbXBvcnQgeyBSZXNpemVSZWYsIGFkZFJlc2l6aW5nLCBpc1Jlc2l6aW5nLCByZW1vdmVSZXNpemluZyB9IGZyb20gJy4uL3V0aWxzL3Jlc2l6ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aFJlc2l6ZU9wdGlvbnM8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIGNhblJlc2l6ZTogKCkgPT4gYm9vbGVhbjtcbiAgICBkZXRlY3Q6IChwb2ludDogUG9pbnQpID0+IFJlc2l6ZURldGVjdFJlc3VsdDxULCBLPiB8IG51bGw7XG4gICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB2b2lkO1xuICAgIGVuZFJlc2l6ZT86IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVEZXRlY3RSZXN1bHQ8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgaGFuZGxlOiBLO1xuICAgIGN1cnNvckNsYXNzPzogUmVzaXplQ3Vyc29yQ2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplU3RhdGUge1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgZW5kVHJhbnNmb3JtUG9pbnQ6IFBvaW50O1xufVxuXG5jb25zdCBnZW5lcmFsQ2FuUmVzaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSB8fFxuICAgICAgICBQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkgfHxcbiAgICAgICAgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLmhhbmQpIHx8XG4gICAgICAgICFpc01haW5Qb2ludGVyKGV2ZW50KVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3Qgd2l0aFJlc2l6ZSA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRFbGVtZW50LCBLID0gUmVzaXplSGFuZGxlPihcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxULCBLPlxuKSA9PiB7XG4gICAgY29uc3QgeyBwb2ludGVyRG93biwgcG9pbnRlck1vdmUsIGdsb2JhbFBvaW50ZXJVcCB9ID0gYm9hcmQ7XG4gICAgbGV0IHJlc2l6ZURldGVjdFJlc3VsdDogUmVzaXplRGV0ZWN0UmVzdWx0PFQsIEs+IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGhvdmVEZXRlY3RSZXN1bHQ6IFJlc2l6ZURldGVjdFJlc3VsdDxULCBLPiB8IG51bGwgPSBudWxsO1xuXG4gICAgYm9hcmQucG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY2FuUmVzaXplKCkgfHwgIWdlbmVyYWxDYW5SZXNpemUoYm9hcmQsIGV2ZW50KSkge1xuICAgICAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICByZXNpemVEZXRlY3RSZXN1bHQgPSBvcHRpb25zLmRldGVjdChwb2ludCk7XG4gICAgICAgIGlmIChyZXNpemVEZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXNpemVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKGAke3Jlc2l6ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzc31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBbZXZlbnQueCwgZXZlbnQueV07XG4gICAgICAgICAgICByZXNpemVSZWYgPSB7XG4gICAgICAgICAgICAgICAgcGF0aDogUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgcmVzaXplRGV0ZWN0UmVzdWx0LmVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHJlc2l6ZURldGVjdFJlc3VsdC5lbGVtZW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZTogcmVzaXplRGV0ZWN0UmVzdWx0LmhhbmRsZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNhblJlc2l6ZSgpIHx8ICFnZW5lcmFsQ2FuUmVzaXplKGJvYXJkLCBldmVudCkpIHtcbiAgICAgICAgICAgIHBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRQb2ludCAmJiByZXNpemVEZXRlY3RSZXN1bHQgJiYgIWlzUmVzaXppbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IHRleHQgZnJvbSBiZWluZyBzZWxlY3RlZFxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUikge1xuICAgICAgICAgICAgICAgIGFkZFJlc2l6aW5nKGJvYXJkLCByZXNpemVSZWYhLCBvcHRpb25zLmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSZXNpemluZyhib2FyZCkgJiYgc3RhcnRQb2ludCkge1xuICAgICAgICAgICAgLy8gcHJldmVudCB0ZXh0IGZyb20gYmVpbmcgc2VsZWN0ZWRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBlbmRUcmFuc2Zvcm1Qb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgICAgIHRocm90dGxlUkFGKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IFtldmVudC54LCBldmVudC55XTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb2ludCAmJiByZXNpemVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRYID0gZW5kUG9pbnRbMF0gLSBzdGFydFBvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uUmVzaXplKHJlc2l6ZVJlZiwgeyBvZmZzZXRYLCBvZmZzZXRZLCBlbmRUcmFuc2Zvcm1Qb2ludCB9KTtcbiAgICAgICAgICAgICAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgICAgICBjb25zdCByZXNpemVEZXRlY3RSZXN1bHQgPSBvcHRpb25zLmRldGVjdChwb2ludCk7XG4gICAgICAgICAgICBpZiAocmVzaXplRGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdmVEZXRlY3RSZXN1bHQgJiYgcmVzaXplRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzICE9PSBob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYCR7aG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzc31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaG92ZURldGVjdFJlc3VsdCA9IHJlc2l6ZURldGVjdFJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKGAke2hvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3N9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhvdmVEZXRlY3RSZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbFBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgICAgIGlmIChpc1Jlc2l6aW5nKGJvYXJkKSB8fCByZXNpemVEZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZW5kUmVzaXplICYmIG9wdGlvbnMuZW5kUmVzaXplKHJlc2l6ZVJlZiEpO1xuICAgICAgICAgICAgcmVtb3ZlUmVzaXppbmcoYm9hcmQsIG9wdGlvbnMua2V5KTtcbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgcmVzaXplRGV0ZWN0UmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgIHJlc2l6ZVJlZiA9IG51bGw7XG4gICAgICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
@@ -1,4 +1,4 @@
1
- import { Direction, distanceBetweenPointAndPoint } from '@plait/core';
1
+ import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';
2
2
  const handleDirectionFactors = {
3
3
  [Direction.left]: { x: -1, y: 0 },
4
4
  [Direction.right]: { x: 1, y: 0 },
@@ -87,9 +87,15 @@ export function getDirectionFactor(direction) {
87
87
  }
88
88
  export function getFactorByPoints(source, target) {
89
89
  const distance = distanceBetweenPointAndPoint(...source, ...target);
90
+ if (Point.isEquals(source, target)) {
91
+ return {
92
+ x: 1,
93
+ y: 1
94
+ };
95
+ }
90
96
  return {
91
97
  x: (target[0] - source[0]) / distance,
92
98
  y: (target[1] - source[1]) / distance
93
99
  };
94
100
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBbUMsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkcsTUFBTSxzQkFBc0IsR0FBRztJQUMzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2pDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDaEMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7Q0FDckMsQ0FBQztBQUVGLE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxLQUF1QjtJQUNsRSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ3pCO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztLQUMxQjtJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNoQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDeEI7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxTQUFT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Q0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUM7U0FDeEI7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztTQUMzQjtLQUNKO0lBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDekI7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQztTQUMxQjtLQUNKO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsU0FBb0I7SUFDbkQsT0FBTyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQzFELE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDcEUsT0FBTztRQUNILENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO1FBQ3JDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRO0tBQ3hDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBQb2ludCwgUG9pbnRPZlJlY3RhbmdsZSwgVmVjdG9yLCBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5jb25zdCBoYW5kbGVEaXJlY3Rpb25GYWN0b3JzID0ge1xuICAgIFtEaXJlY3Rpb24ubGVmdF06IHsgeDogLTEsIHk6IDAgfSxcbiAgICBbRGlyZWN0aW9uLnJpZ2h0XTogeyB4OiAxLCB5OiAwIH0sXG4gICAgW0RpcmVjdGlvbi50b3BdOiB7IHg6IDAsIHk6IC0xIH0sXG4gICAgW0RpcmVjdGlvbi5ib3R0b21dOiB7IHg6IDAsIHk6IDEgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkJ5UG9pbnRPZlJlY3RhbmdsZShwb2ludDogUG9pbnRPZlJlY3RhbmdsZSk6IERpcmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBvaW50WzBdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ubGVmdDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzBdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgfVxuICAgIGlmIChwb2ludFsxXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzFdID09PSAxKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gYWNjZXB0cyB2ZWN0b3IgcGFyYW1ldGVyLCB0aGUgdmVjdG9yIHBhcmFtZXRlciB2ZWN0b3IgaXMgYmFzZWQgb24gdGhlIHNjcmVlbiBjb29yZGluYXRlIHN5c3RlbVxuICogdmVjdG9yWzBdIGFuZCB2ZWN0b3JbMV0gYXJlIHRoZSB4IGFuZCB5IGNvbXBvbmVudHMgb2YgdGhlIHZlY3RvciByZXNwZWN0aXZlbHkuXG4gKiBpZiB0aGUgdmVjdG9yIGhhcyBvbmx5IG9uZSBkaXJlY3Rpb24sIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIGluIHRoYXQgZGlyZWN0aW9uLCBzdWNoIGFzICdyaWdodCcsICd0b3AnLCAnYm90dG9tJyBvciAnbGVmdCcuXG4gKiBpZiB0aGUgdmVjdG9yIGhhcyB0d28gZGlyZWN0aW9ucywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzdHJpbmcgaW4gd2hpY2ggZGlyZWN0aW9uIGl0IGlzIGNsb3Nlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpcmVjdGlvbkJ5VmVjdG9yKHZlY3RvcjogVmVjdG9yKTogRGlyZWN0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgeCA9IHZlY3RvclswXTtcbiAgICBjb25zdCB5ID0gdmVjdG9yWzFdO1xuICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh4ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB5ID4gMCA/IERpcmVjdGlvbi5ib3R0b20gOiBEaXJlY3Rpb24udG9wO1xuICAgIH1cbiAgICBpZiAoeSA9PT0gMCkge1xuICAgICAgICByZXR1cm4geCA+IDAgPyBEaXJlY3Rpb24ucmlnaHQgOiBEaXJlY3Rpb24ubGVmdDtcbiAgICB9XG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHksIHgpO1xuICAgIGlmIChhbmdsZSA+IC1NYXRoLlBJIC8gNCAmJiBhbmdsZSA8PSBNYXRoLlBJIC8gNCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnJpZ2h0O1xuICAgIH0gZWxzZSBpZiAoYW5nbGUgPiBNYXRoLlBJIC8gNCAmJiBhbmdsZSA8PSAoMyAqIE1hdGguUEkpIC8gNCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmJvdHRvbTtcbiAgICB9IGVsc2UgaWYgKGFuZ2xlID4gKC0zICogTWF0aC5QSSkgLyA0ICYmIGFuZ2xlIDw9IC1NYXRoLlBJIC8gNCkge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmxlZnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3Rvcihwb2ludDogUG9pbnQsIHZlY3RvcjogVmVjdG9yLCBvZmZzZXQ6IG51bWJlcik6IFBvaW50IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguaHlwb3QodmVjdG9yWzBdLCB2ZWN0b3JbMV0pO1xuICAgIHJldHVybiBbcG9pbnRbMF0gKyAodmVjdG9yWzBdIC8gZGlzdGFuY2UpICogb2Zmc2V0LCBwb2ludFsxXSArICh2ZWN0b3JbMV0gLyBkaXN0YW5jZSkgKiBvZmZzZXRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yQW50aTkwKHZlY3RvcjogVmVjdG9yKTogVmVjdG9yIHtcbiAgICBjb25zdCB4ID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHkgPSB2ZWN0b3JbMV07XG4gICAgY29uc3Qgcm90YXRlZFggPSB5O1xuICAgIGNvbnN0IHJvdGF0ZWRZID0gLXg7XG4gICAgcmV0dXJuIFtyb3RhdGVkWCwgcm90YXRlZFldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uQmV0d2VlblBvaW50QW5kUG9pbnQoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCkge1xuICAgIGlmIChzb3VyY2VbMF0gPT09IHRhcmdldFswXSkge1xuICAgICAgICBpZiAoc291cmNlWzFdID49IHRhcmdldFsxXSkge1xuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi50b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmJvdHRvbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc291cmNlWzFdID09PSB0YXJnZXRbMV0pIHtcbiAgICAgICAgaWYgKHNvdXJjZVswXSA+PSB0YXJnZXRbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24ubGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjYW4gbm90IG1hdGNoIGRpcmVjdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uRmFjdG9yKGRpcmVjdGlvbjogRGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuIGhhbmRsZURpcmVjdGlvbkZhY3RvcnNbZGlyZWN0aW9uXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZhY3RvckJ5UG9pbnRzKHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc291cmNlLCAuLi50YXJnZXQpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6ICh0YXJnZXRbMF0gLSBzb3VyY2VbMF0pIC8gZGlzdGFuY2UsXG4gICAgICAgIHk6ICh0YXJnZXRbMV0gLSBzb3VyY2VbMV0pIC8gZGlzdGFuY2VcbiAgICB9O1xufVxuIl19
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZHLE1BQU0sc0JBQXNCLEdBQUc7SUFDM0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtJQUNqQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ2hDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0NBQ3JDLENBQUM7QUFFRixNQUFNLFVBQVUsOEJBQThCLENBQUMsS0FBdUI7SUFDbEUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQztLQUN6QjtJQUNELElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNoQixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7S0FDMUI7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hC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cnQgeyBEaXJlY3Rpb24sIFBvaW50LCBQb2ludE9mUmVjdGFuZ2xlLCBWZWN0b3IsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmNvbnN0IGhhbmRsZURpcmVjdGlvbkZhY3RvcnMgPSB7XG4gICAgW0RpcmVjdGlvbi5sZWZ0XTogeyB4OiAtMSwgeTogMCB9LFxuICAgIFtEaXJlY3Rpb24ucmlnaHRdOiB7IHg6IDEsIHk6IDAgfSxcbiAgICBbRGlyZWN0aW9uLnRvcF06IHsgeDogMCwgeTogLTEgfSxcbiAgICBbRGlyZWN0aW9uLmJvdHRvbV06IHsgeDogMCwgeTogMSB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uQnlQb2ludE9mUmVjdGFuZ2xlKHBvaW50OiBQb2ludE9mUmVjdGFuZ2xlKTogRGlyZWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocG9pbnRbMF0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5sZWZ0O1xuICAgIH1cbiAgICBpZiAocG9pbnRbMF0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5yaWdodDtcbiAgICB9XG4gICAgaWYgKHBvaW50WzFdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24udG9wO1xuICAgIH1cbiAgICBpZiAocG9pbnRbMV0gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5ib3R0b207XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogdGhpcyBmdW5jdGlvbiBhY2NlcHRzIHZlY3RvciBwYXJhbWV0ZXIsIHRoZSB2ZWN0b3IgcGFyYW1ldGVyIHZlY3RvciBpcyBiYXNlZCBvbiB0aGUgc2NyZWVuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKiB2ZWN0b3JbMF0gYW5kIHZlY3RvclsxXSBhcmUgdGhlIHggYW5kIHkgY29tcG9uZW50cyBvZiB0aGUgdmVjdG9yIHJlc3BlY3RpdmVseS5cbiAqIGlmIHRoZSB2ZWN0b3IgaGFzIG9ubHkgb25lIGRpcmVjdGlvbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgaW4gdGhhdCBkaXJlY3Rpb24sIHN1Y2ggYXMgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nIG9yICdsZWZ0Jy5cbiAqIGlmIHRoZSB2ZWN0b3IgaGFzIHR3byBkaXJlY3Rpb25zLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHN0cmluZyBpbiB3aGljaCBkaXJlY3Rpb24gaXQgaXMgY2xvc2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uQnlWZWN0b3IodmVjdG9yOiBWZWN0b3IpOiBEaXJlY3Rpb24gfCBudWxsIHtcbiAgICBjb25zdCB4ID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHkgPSB2ZWN0b3JbMV07XG4gICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHkgPiAwID8gRGlyZWN0aW9uLmJvdHRvbSA6IERpcmVjdGlvbi50b3A7XG4gICAgfVxuICAgIGlmICh5ID09PSAwKSB7XG4gICAgICAgIHJldHVybiB4ID4gMCA/IERpcmVjdGlvbi5yaWdodCA6IERpcmVjdGlvbi5sZWZ0O1xuICAgIH1cbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIoeSwgeCk7XG4gICAgaWYgKGFuZ2xlID4gLU1hdGguUEkgLyA0ICYmIGFuZ2xlIDw9IE1hdGguUEkgLyA0KSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgfSBlbHNlIGlmIChhbmdsZSA+IE1hdGguUEkgLyA0ICYmIGFuZ2xlIDw9ICgzICogTWF0aC5QSSkgLyA0KSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgIH0gZWxzZSBpZiAoYW5nbGUgPiAoLTMgKiBNYXRoLlBJKSAvIDQgJiYgYW5nbGUgPD0gLU1hdGguUEkgLyA0KSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24udG9wO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBEaXJlY3Rpb24ubGVmdDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludEJ5VmVjdG9yKHBvaW50OiBQb2ludCwgdmVjdG9yOiBWZWN0b3IsIG9mZnNldDogbnVtYmVyKTogUG9pbnQge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5oeXBvdCh2ZWN0b3JbMF0sIHZlY3RvclsxXSk7XG4gICAgcmV0dXJuIFtwb2ludFswXSArICh2ZWN0b3JbMF0gLyBkaXN0YW5jZSkgKiBvZmZzZXQsIHBvaW50WzFdICsgKHZlY3RvclsxXSAvIGRpc3RhbmNlKSAqIG9mZnNldF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVWZWN0b3JBbnRpOTAodmVjdG9yOiBWZWN0b3IpOiBWZWN0b3Ige1xuICAgIGNvbnN0IHggPSB2ZWN0b3JbMF07XG4gICAgY29uc3QgeSA9IHZlY3RvclsxXTtcbiAgICBjb25zdCByb3RhdGVkWCA9IHk7XG4gICAgY29uc3Qgcm90YXRlZFkgPSAteDtcbiAgICByZXR1cm4gW3JvdGF0ZWRYLCByb3RhdGVkWV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJlY3Rpb25CZXR3ZWVuUG9pbnRBbmRQb2ludChzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50KSB7XG4gICAgaWYgKHNvdXJjZVswXSA9PT0gdGFyZ2V0WzBdKSB7XG4gICAgICAgIGlmIChzb3VyY2VbMV0gPj0gdGFyZ2V0WzFdKSB7XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLnRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24uYm90dG9tO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzb3VyY2VbMV0gPT09IHRhcmdldFsxXSkge1xuICAgICAgICBpZiAoc291cmNlWzBdID49IHRhcmdldFswXSkge1xuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5sZWZ0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5yaWdodDtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbiBub3QgbWF0Y2ggZGlyZWN0aW9uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJlY3Rpb25GYWN0b3IoZGlyZWN0aW9uOiBEaXJlY3Rpb24pIHtcbiAgICByZXR1cm4gaGFuZGxlRGlyZWN0aW9uRmFjdG9yc1tkaXJlY3Rpb25dO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmFjdG9yQnlQb2ludHMoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCkge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5zb3VyY2UsIC4uLnRhcmdldCk7XG4gICAgaWYgKFBvaW50LmlzRXF1YWxzKHNvdXJjZSwgdGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogMSxcbiAgICAgICAgICAgIHk6IDFcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogKHRhcmdldFswXSAtIHNvdXJjZVswXSkgLyBkaXN0YW5jZSxcbiAgICAgICAgeTogKHRhcmdldFsxXSAtIHNvdXJjZVsxXSkgLyBkaXN0YW5jZVxuICAgIH07XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Direction, RectangleClient } from '@plait/core';
1
+ import { Direction, RectangleClient, downScale } from '@plait/core';
2
2
  import { removeDuplicatePoints } from '../utils';
3
3
  import { DEFAULT_ROUTE_MARGIN } from '../constants';
4
4
  import { AStar, PointGraph } from '../algorithms';
@@ -59,8 +59,8 @@ const adjust = (route, options) => {
59
59
  if (pre &&
60
60
  current &&
61
61
  next &&
62
- !((Math.floor(current[0]) === Math.floor(pre[0]) && Math.floor(current[0]) === Math.floor(next[0])) ||
63
- (Math.floor(current[1]) === Math.floor(pre[1]) && Math.floor(current[1]) === Math.floor(next[1])))) {
62
+ !((downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||
63
+ (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1])))) {
64
64
  cornerCount++;
65
65
  }
66
66
  }
@@ -245,4 +245,4 @@ export const getNextPoint = (point, outerRectangle, direction) => {
245
245
  }
246
246
  }
247
247
  };
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3ctbGluZS1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvZWxib3ctbGluZS1yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFTLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBMkJsRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNyRCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEUsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FB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QUM7WUFDbEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7S0FDSjtBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbiwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IERFRkFVTFRfUk9VVEVfTUFSR0lOIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFTdGFyLCBQb2ludEdyYXBoIH0gZnJvbSAnLi4vYWxnb3JpdGhtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWxib3dMaW5lUm91dGVPcHRpb25zIHtcbiAgICBzb3VyY2VQb2ludDogUG9pbnQ7XG4gICAgbmV4dFNvdXJjZVBvaW50OiBQb2ludDtcbiAgICBzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICBzb3VyY2VPdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFBvaW50OiBQb2ludDtcbiAgICBuZXh0VGFyZ2V0UG9pbnQ6IFBvaW50O1xuICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVBZGp1c3RPcHRpb25zIHtcbiAgICB4QXhpcz86IG51bWJlcjtcbiAgICB5QXhpcz86IG51bWJlcjtcbiAgICBzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGp1c3RPcHRpb25zIHtcbiAgICBwYXJhbGxlbFBhdGhzOiBbUG9pbnQsIFBvaW50XVtdO1xuICAgIHBvaW50T2ZIaXQ6IFBvaW50O1xuICAgIHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZSA9IChvcHRpb25zOiBFbGJvd0xpbmVSb3V0ZU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50IH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHBvaW50cyA9IGdldEdyYXBoUG9pbnRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IGdyYXBoID0gY3JlYXRlR3JhcGgocG9pbnRzKTtcbiAgICBjb25zdCBhU3RhciA9IG5ldyBBU3RhcihncmFwaCk7XG4gICAgYVN0YXIuc2VhcmNoKG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50LCBvcHRpb25zLnNvdXJjZVBvaW50KTtcbiAgICBsZXQgcm91dGUgPSBhU3Rhci5nZXRSb3V0ZShuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCk7XG4gICAgcm91dGUgPSBbb3B0aW9ucy5zb3VyY2VQb2ludCwgLi4ucm91dGUsIG5leHRUYXJnZXRQb2ludCwgb3B0aW9ucy50YXJnZXRQb2ludF07XG4gICAgY29uc3QgaXNIaXRYID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0WChvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlKTtcbiAgICBjb25zdCBpc0hpdFkgPSBSZWN0YW5nbGVDbGllbnQuaXNIaXRZKG9wdGlvbnMuc291cmNlT3V0ZXJSZWN0YW5nbGUsIG9wdGlvbnMudGFyZ2V0T3V0ZXJSZWN0YW5nbGUpO1xuICAgIGNvbnN0IHhBeGlzID0gaXNIaXRYID8gdW5kZWZpbmVkIDogUmVjdGFuZ2xlQ2xpZW50LmdldEdhcENlbnRlcihvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlLCBmYWxzZSk7XG4gICAgY29uc3QgeUF4aXMgPSBpc0hpdFkgPyB1bmRlZmluZWQgOiBSZWN0YW5nbGVDbGllbnQuZ2V0R2FwQ2VudGVyKG9wdGlvbnMuc291cmNlT3V0ZXJSZWN0YW5nbGUsIG9wdGlvbnMudGFyZ2V0T3V0ZXJSZWN0YW5nbGUsIHRydWUpO1xuICAgIHJvdXRlID0gcm91dGVBZGp1c3Qocm91dGUsIHsgeEF4aXMsIHlBeGlzLCBzb3VyY2VSZWN0YW5nbGU6IG9wdGlvbnMuc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGU6IG9wdGlvbnMudGFyZ2V0UmVjdGFuZ2xlIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbn07XG5cbmNvbnN0IHJvdXRlQWRqdXN0ID0gKHBhdGg6IFBvaW50W10sIG9wdGlvbnM6IFJvdXRlQWRqdXN0T3B0aW9ucykgPT4ge1xuICAgIC8vIOWfuuS6jiBtaWRkbGVYL21pZGRsZVkg5Lit57q/57qg5q2jIHBhdGhcbiAgICAvLyAxLiDmib7lnoLnm7Qv5rC05bmz55qE57q/5q61XG4gICAgLy8gMi4g5om+5Yiw5ZKMbWlkZGxlWC9taWRkbGVZ55u45Lqk55qE54K5XG4gICAgLy8gMy4g5Z+65LqO5Z6C55u0L+awtOW5s+eahOe6v+auteWIhuWIq+WSjOebuOS6pOeCueaehOW7uuefqeW9olxuICAgIC8vIDQuIOWIpOaWreefqeW9ouebuOS6pFxuICAgIC8vIDUuIOWkhOeQhiBwYXRoXG4gICAgY29uc3QgeyBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSwgeEF4aXMsIHlBeGlzIH0gPSBvcHRpb25zO1xuICAgIGlmICh4QXhpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNYID0gZ2V0QWRqdXN0T3B0aW9ucyhwYXRoLCB4QXhpcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFggPVxuICAgICAgICAgICAgb3B0aW9uc1gucG9pbnRPZkhpdCAmJlxuICAgICAgICAgICAgYWRqdXN0KHBhdGgsIHsgcGFyYWxsZWxQYXRoczogb3B0aW9uc1gucGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdDogb3B0aW9uc1gucG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSk7XG4gICAgICAgIGlmIChyZXN1bHRYKSB7XG4gICAgICAgICAgICBwYXRoID0gcmVzdWx0WDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoeUF4aXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcHRpb25zWSA9IGdldEFkanVzdE9wdGlvbnMocGF0aCwgeUF4aXMsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0WSA9XG4gICAgICAgICAgICBvcHRpb25zWS5wb2ludE9mSGl0ICYmXG4gICAgICAgICAgICBhZGp1c3QocGF0aCwgeyBwYXJhbGxlbFBhdGhzOiBvcHRpb25zWS5wYXJhbGxlbFBhdGhzLCBwb2ludE9mSGl0OiBvcHRpb25zWS5wb2ludE9mSGl0LCBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSB9KTtcbiAgICAgICAgaWYgKHJlc3VsdFkpIHtcbiAgICAgICAgICAgIHBhdGggPSByZXN1bHRZO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuY29uc3QgYWRqdXN0ID0gKHJvdXRlOiBQb2ludFtdLCBvcHRpb25zOiBBZGp1c3RPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBwYXJhbGxlbFBhdGhzLCBwb2ludE9mSGl0LCBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSB9ID0gb3B0aW9ucztcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBwYXJhbGxlbFBhdGhzLmZvckVhY2gocGFyYWxsZWxQYXRoID0+IHtcbiAgICAgICAgLy8g5p6E5bu655+p5b2iXG4gICAgICAgIGNvbnN0IHRlbXBSZWN0ID0gUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludE9mSGl0LCBwYXJhbGxlbFBhdGhbMF0sIHBhcmFsbGVsUGF0aFsxXV0pO1xuICAgICAgICBpZiAoIVJlY3RhbmdsZUNsaWVudC5pc0hpdCh0ZW1wUmVjdCwgc291cmNlUmVjdGFuZ2xlKSAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHRlbXBSZWN0LCB0YXJnZXRSZWN0YW5nbGUpKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb3JuZXJDb3VudCA9IChwYXRoOiBQb2ludFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNvcm5lckNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGF0aC5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IHBhdGhbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcGF0aFtpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1hdGguZmxvb3IoY3VycmVudFswXSkgPT09IE1hdGguZmxvb3IocHJlWzBdKSAmJiBNYXRoLmZsb29yKGN1cnJlbnRbMF0pID09PSBNYXRoLmZsb29yKG5leHRbMF0pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNYXRoLmZsb29yKGN1cnJlbnRbMV0pID09PSBNYXRoLmZsb29yKHByZVsxXSkgJiYgTWF0aC5mbG9vcihjdXJyZW50WzFdKSA9PT0gTWF0aC5mbG9vcihuZXh0WzFdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JuZXJDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3JuZXJDb3VudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0ZW1wQ29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHModGVtcFJlY3QpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhSYW5nZUluUGF0aDogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4UmFuZ2VJbkNvcm5lcjogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgICAgIHJvdXRlLmZvckVhY2goKHBvaW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcm5lclJlc3VsdCA9IHRlbXBDb3JuZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgY29ybmVyID0+IE1hdGguZmxvb3IoY29ybmVyWzBdKSA9PT0gTWF0aC5mbG9vcihwb2ludFswXSkgJiYgTWF0aC5mbG9vcihjb3JuZXJbMV0pID09PSBNYXRoLmZsb29yKHBvaW50WzFdKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGNvcm5lclJlc3VsdCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhSYW5nZUluUGF0aC5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhSYW5nZUluQ29ybmVyLnB1c2goY29ybmVyUmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBbLi4ucm91dGVdO1xuICAgICAgICAgICAgY29uc3QgbWlzc0Nvcm5lciA9IHRlbXBDb3JuZXJzLmZpbmQoKGMsIGluZGV4KSA9PiAhaW5kZXhSYW5nZUluQ29ybmVyLmluY2x1ZGVzKGluZGV4KSkgYXMgUG9pbnQ7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVMZW5ndGggPSBNYXRoLmFicyhpbmRleFJhbmdlSW5QYXRoWzBdIC0gaW5kZXhSYW5nZUluUGF0aFtpbmRleFJhbmdlSW5QYXRoLmxlbmd0aCAtIDFdKSArIDE7XG4gICAgICAgICAgICBuZXdQYXRoLnNwbGljZShpbmRleFJhbmdlSW5QYXRoWzBdICsgMSwgcmVtb3ZlTGVuZ3RoIC0gMiwgbWlzc0Nvcm5lcik7XG4gICAgICAgICAgICBjb25zdCBjb3JuZXJDb3VudCA9IGdldENvcm5lckNvdW50KFsuLi5yb3V0ZV0pO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29ybmVyQ291bnQgPSBnZXRDb3JuZXJDb3VudChbLi4ubmV3UGF0aF0pO1xuICAgICAgICAgICAgaWYgKG5ld0Nvcm5lckNvdW50IDw9IGNvcm5lckNvdW50KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3UGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgZ2V0QWRqdXN0T3B0aW9ucyA9IChwYXRoOiBQb2ludFtdLCBtaWRkbGU6IG51bWJlciwgaXNIb3Jpem9udGFsOiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgcGFyYWxsZWxQYXRoczogW1BvaW50LCBQb2ludF1bXSA9IFtdO1xuICAgIGxldCBzdGFydDogbnVsbCB8IFBvaW50ID0gbnVsbDtcbiAgICBsZXQgcG9pbnRPZkhpdDogbnVsbCB8IFBvaW50ID0gbnVsbDtcbiAgICBjb25zdCBheGlzID0gaXNIb3Jpem9udGFsID8gMCA6IDE7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGF0aC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBwYXRoW2luZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoW2luZGV4XTtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBudWxsICYmIHByZXZpb3VzICYmIHByZXZpb3VzW2F4aXNdID09PSBjdXJyZW50W2F4aXNdKSB7XG4gICAgICAgICAgICBzdGFydCA9IHByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzW2F4aXNdICE9PSBjdXJyZW50W2F4aXNdKSB7XG4gICAgICAgICAgICAgICAgcGFyYWxsZWxQYXRocy5wdXNoKFtzdGFydCwgcHJldmlvdXNdKTtcbiAgICAgICAgICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRbYXhpc10gPT09IG1pZGRsZSkge1xuICAgICAgICAgICAgcG9pbnRPZkhpdCA9IGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHBhcmFsbGVsUGF0aHMucHVzaChbc3RhcnQsIHBhdGhbcGF0aC5sZW5ndGggLSAxXV0pO1xuICAgIH1cbiAgICByZXR1cm4geyBwb2ludE9mSGl0LCBwYXJhbGxlbFBhdGhzIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JhcGhQb2ludHMgPSAob3B0aW9uczogRWxib3dMaW5lUm91dGVPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCwgc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHg6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgeTogbnVtYmVyW10gPSBbXTtcbiAgICBsZXQgcmVzdWx0OiBQb2ludFtdID0gW107XG5cbiAgICBbc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlXS5mb3JFYWNoKHJlY3RhbmdsZSA9PiB7XG4gICAgICAgIHgucHVzaChyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIHkucHVzaChyZWN0YW5nbGUueSwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICB9KTtcbiAgICBjb25zdCByZWN0YW5nbGVzWCA9IFtcbiAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUueCxcbiAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUueCArIHNvdXJjZU91dGVyUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS54LFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS54ICsgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUud2lkdGhcbiAgICBdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB4LnB1c2goKHJlY3RhbmdsZXNYWzFdICsgcmVjdGFuZ2xlc1hbMl0pIC8gMiwgbmV4dFNvdXJjZVBvaW50WzBdLCBuZXh0VGFyZ2V0UG9pbnRbMF0pO1xuICAgIGNvbnN0IHJlY3RhbmdsZXNZID0gW1xuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS55LFxuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS55ICsgc291cmNlT3V0ZXJSZWN0YW5nbGUuaGVpZ2h0LFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS55LFxuICAgICAgICB0YXJnZXRPdXRlclJlY3RhbmdsZS55ICsgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUuaGVpZ2h0XG4gICAgXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgeS5wdXNoKChyZWN0YW5nbGVzWVsxXSArIHJlY3RhbmdsZXNZWzJdKSAvIDIsIG5leHRTb3VyY2VQb2ludFsxXSwgbmV4dFRhcmdldFBvaW50WzFdKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludDogUG9pbnQgPSBbeFtpXSwgeVtqXV07XG4gICAgICAgICAgICBjb25zdCBpc0luU291cmNlID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShzb3VyY2VPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNJblRhcmdldCA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0T3V0ZXJSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGlmICghaXNJblNvdXJjZSAmJiAhaXNJblRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSByZW1vdmVEdXBsaWNhdGVQb2ludHMocmVzdWx0KS5maWx0ZXIocG9pbnQgPT4ge1xuICAgICAgICBjb25zdCBpc0luU291cmNlID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShzb3VyY2VPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICBjb25zdCBpc0luVGFyZ2V0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICByZXR1cm4gIWlzSW5Tb3VyY2UgJiYgIWlzSW5UYXJnZXQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcmFwaCA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBjb25zdCBncmFwaCA9IG5ldyBQb2ludEdyYXBoKCk7XG4gICAgY29uc3QgWHM6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgWXM6IG51bWJlcltdID0gW107XG4gICAgcG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGNvbnN0IHggPSBwWzBdLFxuICAgICAgICAgICAgeSA9IHBbMV07XG4gICAgICAgIGlmIChYcy5pbmRleE9mKHgpIDwgMCkgWHMucHVzaCh4KTtcbiAgICAgICAgaWYgKFlzLmluZGV4T2YoeSkgPCAwKSBZcy5wdXNoKHkpO1xuICAgICAgICBncmFwaC5hZGQocCk7XG4gICAgfSk7XG4gICAgWHMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIFlzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBjb25zdCBpbkhvdEluZGV4ID0gKHA6IFBvaW50KTogYm9vbGVhbiA9PiBncmFwaC5oYXMocCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBYcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IFlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludDogUG9pbnQgPSBbWHNbaV0sIFlzW2pdXTtcbiAgICAgICAgICAgIGlmICghaW5Ib3RJbmRleChwb2ludCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJQb2ludDogUG9pbnQgPSBbWHNbaSAtIDFdLCBZc1tqXV07XG4gICAgICAgICAgICAgICAgaWYgKGluSG90SW5kZXgob3RoZXJQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChvdGhlclBvaW50LCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3QocG9pbnQsIG90aGVyUG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyUG9pbnQ6IFBvaW50ID0gW1hzW2ldLCBZc1tqIC0gMV1dO1xuICAgICAgICAgICAgICAgIGlmIChpbkhvdEluZGV4KG90aGVyUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3Qob3RoZXJQb2ludCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5jb25uZWN0KHBvaW50LCBvdGhlclBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyYXBoO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZHVjZVJvdXRlTWFyZ2luID0gKHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRPZmZzZXQgPSBERUZBVUxUX1JPVVRFX01BUkdJTjtcbiAgICBsZXQgc291cmNlT2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheSg0KS5maWxsKGRlZmF1bHRPZmZzZXQpO1xuICAgIGxldCB0YXJnZXRPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5KDQpLmZpbGwoZGVmYXVsdE9mZnNldCk7XG4gICAgY29uc3Qgc291cmNlT3V0ZXJSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShzb3VyY2VSZWN0YW5nbGUsIGRlZmF1bHRPZmZzZXQgKiAyKTtcbiAgICBjb25zdCB0YXJnZXRPdXRlclJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHRhcmdldFJlY3RhbmdsZSwgZGVmYXVsdE9mZnNldCAqIDIpO1xuICAgIGNvbnN0IGlzSGl0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHNvdXJjZU91dGVyUmVjdGFuZ2xlLCB0YXJnZXRPdXRlclJlY3RhbmdsZSk7XG4gICAgaWYgKGlzSGl0KSB7XG4gICAgICAgIGNvbnN0IGxlZnRUb1JpZ2h0ID0gc291cmNlUmVjdGFuZ2xlLnggLSAodGFyZ2V0UmVjdGFuZ2xlLnggKyB0YXJnZXRSZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvTGVmdCA9IHRhcmdldFJlY3RhbmdsZS54IC0gKHNvdXJjZVJlY3RhbmdsZS54ICsgc291cmNlUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgaWYgKGxlZnRUb1JpZ2h0ID4gMCAmJiBsZWZ0VG9SaWdodCA8IGRlZmF1bHRPZmZzZXQgKiAyKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBsZWZ0VG9SaWdodCAvIDI7XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXRbM10gPSBvZmZzZXQ7XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXRbMV0gPSBvZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHRUb0xlZnQgPiAwICYmIHJpZ2h0VG9MZWZ0IDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHJpZ2h0VG9MZWZ0IC8gMjtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFszXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFsxXSA9IG9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvcFRvQm90dG9tID0gc291cmNlUmVjdGFuZ2xlLnkgLSAodGFyZ2V0UmVjdGFuZ2xlLnkgKyB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgYm90dG9tVG9Ub3AgPSB0YXJnZXRSZWN0YW5nbGUueSAtIChzb3VyY2VSZWN0YW5nbGUueSArIHNvdXJjZVJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBpZiAodG9wVG9Cb3R0b20gPiAwICYmIHRvcFRvQm90dG9tIDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHRvcFRvQm90dG9tIC8gMjtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFswXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFsyXSA9IG9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm90dG9tVG9Ub3AgPiAwICYmIGJvdHRvbVRvVG9wIDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJvdHRvbVRvVG9wIC8gMjtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFsyXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFswXSA9IG9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBzb3VyY2VPZmZzZXQsIHRhcmdldE9mZnNldCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5leHRQb2ludCA9IChwb2ludDogUG9pbnQsIG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGRpcmVjdGlvbjogRGlyZWN0aW9uKTogUG9pbnQgPT4ge1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnRvcDoge1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludFswXSwgb3V0ZXJSZWN0YW5nbGUueV07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBEaXJlY3Rpb24uYm90dG9tOiB7XG4gICAgICAgICAgICByZXR1cm4gW3BvaW50WzBdLCBvdXRlclJlY3RhbmdsZS55ICsgb3V0ZXJSZWN0YW5nbGUuaGVpZ2h0XTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIERpcmVjdGlvbi5yaWdodDoge1xuICAgICAgICAgICAgcmV0dXJuIFtvdXRlclJlY3RhbmdsZS54ICsgb3V0ZXJSZWN0YW5nbGUud2lkdGgsIHBvaW50WzFdXTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gW291dGVyUmVjdGFuZ2xlLngsIHBvaW50WzFdXTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3ctbGluZS1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvZWxib3ctbGluZS1yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFTLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTJCbEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDckUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMs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QUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxDQUFDLENBQUM7WUFDTCxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztLQUNKO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBkb3duU2NhbGUgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyByZW1vdmVEdXBsaWNhdGVQb2ludHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX1JPVVRFX01BUkdJTiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBU3RhciwgUG9pbnRHcmFwaCB9IGZyb20gJy4uL2FsZ29yaXRobXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsYm93TGluZVJvdXRlT3B0aW9ucyB7XG4gICAgc291cmNlUG9pbnQ6IFBvaW50O1xuICAgIG5leHRTb3VyY2VQb2ludDogUG9pbnQ7XG4gICAgc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgc291cmNlT3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRQb2ludDogUG9pbnQ7XG4gICAgbmV4dFRhcmdldFBvaW50OiBQb2ludDtcbiAgICB0YXJnZXRPdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlQWRqdXN0T3B0aW9ucyB7XG4gICAgeEF4aXM/OiBudW1iZXI7XG4gICAgeUF4aXM/OiBudW1iZXI7XG4gICAgc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRqdXN0T3B0aW9ucyB7XG4gICAgcGFyYWxsZWxQYXRoczogW1BvaW50LCBQb2ludF1bXTtcbiAgICBwb2ludE9mSGl0OiBQb2ludDtcbiAgICBzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlRWxib3dMaW5lUm91dGUgPSAob3B0aW9uczogRWxib3dMaW5lUm91dGVPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBwb2ludHMgPSBnZXRHcmFwaFBvaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBncmFwaCA9IGNyZWF0ZUdyYXBoKHBvaW50cyk7XG4gICAgY29uc3QgYVN0YXIgPSBuZXcgQVN0YXIoZ3JhcGgpO1xuICAgIGFTdGFyLnNlYXJjaChuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCwgb3B0aW9ucy5zb3VyY2VQb2ludCk7XG4gICAgbGV0IHJvdXRlID0gYVN0YXIuZ2V0Um91dGUobmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnQpO1xuICAgIHJvdXRlID0gW29wdGlvbnMuc291cmNlUG9pbnQsIC4uLnJvdXRlLCBuZXh0VGFyZ2V0UG9pbnQsIG9wdGlvbnMudGFyZ2V0UG9pbnRdO1xuICAgIGNvbnN0IGlzSGl0WCA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdFgob3B0aW9ucy5zb3VyY2VPdXRlclJlY3RhbmdsZSwgb3B0aW9ucy50YXJnZXRPdXRlclJlY3RhbmdsZSk7XG4gICAgY29uc3QgaXNIaXRZID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0WShvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlKTtcbiAgICBjb25zdCB4QXhpcyA9IGlzSGl0WCA/IHVuZGVmaW5lZCA6IFJlY3RhbmdsZUNsaWVudC5nZXRHYXBDZW50ZXIob3B0aW9ucy5zb3VyY2VPdXRlclJlY3RhbmdsZSwgb3B0aW9ucy50YXJnZXRPdXRlclJlY3RhbmdsZSwgZmFsc2UpO1xuICAgIGNvbnN0IHlBeGlzID0gaXNIaXRZID8gdW5kZWZpbmVkIDogUmVjdGFuZ2xlQ2xpZW50LmdldEdhcENlbnRlcihvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlLCB0cnVlKTtcbiAgICByb3V0ZSA9IHJvdXRlQWRqdXN0KHJvdXRlLCB7IHhBeGlzLCB5QXhpcywgc291cmNlUmVjdGFuZ2xlOiBvcHRpb25zLnNvdXJjZVJlY3RhbmdsZSwgdGFyZ2V0UmVjdGFuZ2xlOiBvcHRpb25zLnRhcmdldFJlY3RhbmdsZSB9KTtcbiAgICByZXR1cm4gcm91dGU7XG59O1xuXG5jb25zdCByb3V0ZUFkanVzdCA9IChwYXRoOiBQb2ludFtdLCBvcHRpb25zOiBSb3V0ZUFkanVzdE9wdGlvbnMpID0+IHtcbiAgICAvLyDln7rkuo4gbWlkZGxlWC9taWRkbGVZIOS4ree6v+e6oOatoyBwYXRoXG4gICAgLy8gMS4g5om+5Z6C55u0L+awtOW5s+eahOe6v+autVxuICAgIC8vIDIuIOaJvuWIsOWSjG1pZGRsZVgvbWlkZGxlWeebuOS6pOeahOeCuVxuICAgIC8vIDMuIOWfuuS6juWeguebtC/msLTlubPnmoTnur/mrrXliIbliKvlkoznm7jkuqTngrnmnoTlu7rnn6nlvaJcbiAgICAvLyA0LiDliKTmlq3nn6nlvaLnm7jkuqRcbiAgICAvLyA1LiDlpITnkIYgcGF0aFxuICAgIGNvbnN0IHsgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUsIHhBeGlzLCB5QXhpcyB9ID0gb3B0aW9ucztcbiAgICBpZiAoeEF4aXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcHRpb25zWCA9IGdldEFkanVzdE9wdGlvbnMocGF0aCwgeEF4aXMsIHRydWUpO1xuICAgICAgICBjb25zdCByZXN1bHRYID1cbiAgICAgICAgICAgIG9wdGlvbnNYLnBvaW50T2ZIaXQgJiZcbiAgICAgICAgICAgIGFkanVzdChwYXRoLCB7IHBhcmFsbGVsUGF0aHM6IG9wdGlvbnNYLnBhcmFsbGVsUGF0aHMsIHBvaW50T2ZIaXQ6IG9wdGlvbnNYLnBvaW50T2ZIaXQsIHNvdXJjZVJlY3RhbmdsZSwgdGFyZ2V0UmVjdGFuZ2xlIH0pO1xuICAgICAgICBpZiAocmVzdWx0WCkge1xuICAgICAgICAgICAgcGF0aCA9IHJlc3VsdFg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHlBeGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1kgPSBnZXRBZGp1c3RPcHRpb25zKHBhdGgsIHlBeGlzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFkgPVxuICAgICAgICAgICAgb3B0aW9uc1kucG9pbnRPZkhpdCAmJlxuICAgICAgICAgICAgYWRqdXN0KHBhdGgsIHsgcGFyYWxsZWxQYXRoczogb3B0aW9uc1kucGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdDogb3B0aW9uc1kucG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSk7XG4gICAgICAgIGlmIChyZXN1bHRZKSB7XG4gICAgICAgICAgICBwYXRoID0gcmVzdWx0WTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn07XG5cbmNvbnN0IGFkanVzdCA9IChyb3V0ZTogUG9pbnRbXSwgb3B0aW9uczogQWRqdXN0T3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgcGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSA9IG9wdGlvbnM7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgcGFyYWxsZWxQYXRocy5mb3JFYWNoKHBhcmFsbGVsUGF0aCA9PiB7XG4gICAgICAgIC8vIOaehOW7uuefqeW9olxuICAgICAgICBjb25zdCB0ZW1wUmVjdCA9IFJlY3RhbmdsZUNsaWVudC50b1JlY3RhbmdsZUNsaWVudChbcG9pbnRPZkhpdCwgcGFyYWxsZWxQYXRoWzBdLCBwYXJhbGxlbFBhdGhbMV1dKTtcbiAgICAgICAgaWYgKCFSZWN0YW5nbGVDbGllbnQuaXNIaXQodGVtcFJlY3QsIHNvdXJjZVJlY3RhbmdsZSkgJiYgIVJlY3RhbmdsZUNsaWVudC5pc0hpdCh0ZW1wUmVjdCwgdGFyZ2V0UmVjdGFuZ2xlKSkge1xuICAgICAgICAgICAgY29uc3QgZ2V0Q29ybmVyQ291bnQgPSAocGF0aDogUG9pbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjb3JuZXJDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhdGgubGVuZ3RoIC0gMTsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmUgPSBwYXRoW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBhdGhbaW5kZXggKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3duU2NhbGUoY3VycmVudFswXSkgPT09IGRvd25TY2FsZShwcmVbMF0pICYmIGRvd25TY2FsZShjdXJyZW50WzBdKSA9PT0gZG93blNjYWxlKG5leHRbMF0pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3duU2NhbGUoY3VycmVudFsxXSkgPT09IGRvd25TY2FsZShwcmVbMV0pICYmIGRvd25TY2FsZShjdXJyZW50WzFdKSA9PT0gZG93blNjYWxlKG5leHRbMV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcm5lckNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcm5lckNvdW50O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBDb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyh0ZW1wUmVjdCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleFJhbmdlSW5QYXRoOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhSYW5nZUluQ29ybmVyOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgICAgcm91dGUuZm9yRWFjaCgocG9pbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ybmVyUmVzdWx0ID0gdGVtcENvcm5lcnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICBjb3JuZXIgPT4gTWF0aC5mbG9vcihjb3JuZXJbMF0pID09PSBNYXRoLmZsb29yKHBvaW50WzBdKSAmJiBNYXRoLmZsb29yKGNvcm5lclsxXSkgPT09IE1hdGguZmxvb3IocG9pbnRbMV0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoY29ybmVyUmVzdWx0ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleFJhbmdlSW5QYXRoLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpbmRleFJhbmdlSW5Db3JuZXIucHVzaChjb3JuZXJSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IFsuLi5yb3V0ZV07XG4gICAgICAgICAgICBjb25zdCBtaXNzQ29ybmVyID0gdGVtcENvcm5lcnMuZmluZCgoYywgaW5kZXgpID0+ICFpbmRleFJhbmdlSW5Db3JuZXIuaW5jbHVkZXMoaW5kZXgpKSBhcyBQb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUxlbmd0aCA9IE1hdGguYWJzKGluZGV4UmFuZ2VJblBhdGhbMF0gLSBpbmRleFJhbmdlSW5QYXRoW2luZGV4UmFuZ2VJblBhdGgubGVuZ3RoIC0gMV0pICsgMTtcbiAgICAgICAgICAgIG5ld1BhdGguc3BsaWNlKGluZGV4UmFuZ2VJblBhdGhbMF0gKyAxLCByZW1vdmVMZW5ndGggLSAyLCBtaXNzQ29ybmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvcm5lckNvdW50ID0gZ2V0Q29ybmVyQ291bnQoWy4uLnJvdXRlXSk7XG4gICAgICAgICAgICBjb25zdCBuZXdDb3JuZXJDb3VudCA9IGdldENvcm5lckNvdW50KFsuLi5uZXdQYXRoXSk7XG4gICAgICAgICAgICBpZiAobmV3Q29ybmVyQ291bnQgPD0gY29ybmVyQ291bnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXdQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBnZXRBZGp1c3RPcHRpb25zID0gKHBhdGg6IFBvaW50W10sIG1pZGRsZTogbnVtYmVyLCBpc0hvcml6b250YWw6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBwYXJhbGxlbFBhdGhzOiBbUG9pbnQsIFBvaW50XVtdID0gW107XG4gICAgbGV0IHN0YXJ0OiBudWxsIHwgUG9pbnQgPSBudWxsO1xuICAgIGxldCBwb2ludE9mSGl0OiBudWxsIHwgUG9pbnQgPSBudWxsO1xuICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAwIDogMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXRoLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IHBhdGhbaW5kZXggLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbaW5kZXhdO1xuICAgICAgICBpZiAoc3RhcnQgPT09IG51bGwgJiYgcHJldmlvdXMgJiYgcHJldmlvdXNbYXhpc10gPT09IGN1cnJlbnRbYXhpc10pIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gcHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNbYXhpc10gIT09IGN1cnJlbnRbYXhpc10pIHtcbiAgICAgICAgICAgICAgICBwYXJhbGxlbFBhdGhzLnB1c2goW3N0YXJ0LCBwcmV2aW91c10pO1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFtheGlzXSA9PT0gbWlkZGxlKSB7XG4gICAgICAgICAgICBwb2ludE9mSGl0ID0gY3VycmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgcGFyYWxsZWxQYXRocy5wdXNoKFtzdGFydCwgcGF0aFtwYXRoLmxlbmd0aCAtIDFdXSk7XG4gICAgfVxuICAgIHJldHVybiB7IHBvaW50T2ZIaXQsIHBhcmFsbGVsUGF0aHMgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaFBvaW50cyA9IChvcHRpb25zOiBFbGJvd0xpbmVSb3V0ZU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50LCBzb3VyY2VPdXRlclJlY3RhbmdsZSwgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeDogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCB5OiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCByZXN1bHQ6IFBvaW50W10gPSBbXTtcblxuICAgIFtzb3VyY2VPdXRlclJlY3RhbmdsZSwgdGFyZ2V0T3V0ZXJSZWN0YW5nbGVdLmZvckVhY2gocmVjdGFuZ2xlID0+IHtcbiAgICAgICAgeC5wdXNoKHJlY3RhbmdsZS54LCByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgeS5wdXNoKHJlY3RhbmdsZS55LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlY3RhbmdsZXNYID0gW1xuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS54LFxuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS54ICsgc291cmNlT3V0ZXJSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLngsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLnggKyB0YXJnZXRPdXRlclJlY3RhbmdsZS53aWR0aFxuICAgIF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIHgucHVzaCgocmVjdGFuZ2xlc1hbMV0gKyByZWN0YW5nbGVzWFsyXSkgLyAyLCBuZXh0U291cmNlUG9pbnRbMF0sIG5leHRUYXJnZXRQb2ludFswXSk7XG4gICAgY29uc3QgcmVjdGFuZ2xlc1kgPSBbXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLnksXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLnkgKyBzb3VyY2VPdXRlclJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLnksXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLnkgKyB0YXJnZXRPdXRlclJlY3RhbmdsZS5oZWlnaHRcbiAgICBdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB5LnB1c2goKHJlY3RhbmdsZXNZWzFdICsgcmVjdGFuZ2xlc1lbMl0pIC8gMiwgbmV4dFNvdXJjZVBvaW50WzFdLCBuZXh0VGFyZ2V0UG9pbnRbMV0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50OiBQb2ludCA9IFt4W2ldLCB5W2pdXTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5Tb3VyY2UgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHNvdXJjZU91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgICAgICBjb25zdCBpc0luVGFyZ2V0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKCFpc0luU291cmNlICYmICFpc0luVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhyZXN1bHQpLmZpbHRlcihwb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGlzSW5Tb3VyY2UgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHNvdXJjZU91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgIGNvbnN0IGlzSW5UYXJnZXQgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRhcmdldE91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgIHJldHVybiAhaXNJblNvdXJjZSAmJiAhaXNJblRhcmdldDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyYXBoID0gKHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IFBvaW50R3JhcGgoKTtcbiAgICBjb25zdCBYczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBZczogbnVtYmVyW10gPSBbXTtcbiAgICBwb2ludHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgY29uc3QgeCA9IHBbMF0sXG4gICAgICAgICAgICB5ID0gcFsxXTtcbiAgICAgICAgaWYgKFhzLmluZGV4T2YoeCkgPCAwKSBYcy5wdXNoKHgpO1xuICAgICAgICBpZiAoWXMuaW5kZXhPZih5KSA8IDApIFlzLnB1c2goeSk7XG4gICAgICAgIGdyYXBoLmFkZChwKTtcbiAgICB9KTtcbiAgICBYcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgWXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGNvbnN0IGluSG90SW5kZXggPSAocDogUG9pbnQpOiBib29sZWFuID0+IGdyYXBoLmhhcyhwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IFhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgWXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50OiBQb2ludCA9IFtYc1tpXSwgWXNbal1dO1xuICAgICAgICAgICAgaWYgKCFpbkhvdEluZGV4KHBvaW50KSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlclBvaW50OiBQb2ludCA9IFtYc1tpIC0gMV0sIFlzW2pdXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5Ib3RJbmRleChvdGhlclBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5jb25uZWN0KG90aGVyUG9pbnQsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChwb2ludCwgb3RoZXJQb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJQb2ludDogUG9pbnQgPSBbWHNbaV0sIFlzW2ogLSAxXV07XG4gICAgICAgICAgICAgICAgaWYgKGluSG90SW5kZXgob3RoZXJQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChvdGhlclBvaW50LCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3QocG9pbnQsIG90aGVyUG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ3JhcGg7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlUm91dGVNYXJnaW4gPSAoc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdE9mZnNldCA9IERFRkFVTFRfUk9VVEVfTUFSR0lOO1xuICAgIGxldCBzb3VyY2VPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5KDQpLmZpbGwoZGVmYXVsdE9mZnNldCk7XG4gICAgbGV0IHRhcmdldE9mZnNldDogbnVtYmVyW10gPSBuZXcgQXJyYXkoNCkuZmlsbChkZWZhdWx0T2Zmc2V0KTtcbiAgICBjb25zdCBzb3VyY2VPdXRlclJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHNvdXJjZVJlY3RhbmdsZSwgZGVmYXVsdE9mZnNldCAqIDIpO1xuICAgIGNvbnN0IHRhcmdldE91dGVyUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUodGFyZ2V0UmVjdGFuZ2xlLCBkZWZhdWx0T2Zmc2V0ICogMik7XG4gICAgY29uc3QgaXNIaXQgPSBSZWN0YW5nbGVDbGllbnQuaXNIaXQoc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlKTtcbiAgICBpZiAoaXNIaXQpIHtcbiAgICAgICAgY29uc3QgbGVmdFRvUmlnaHQgPSBzb3VyY2VSZWN0YW5nbGUueCAtICh0YXJnZXRSZWN0YW5nbGUueCArIHRhcmdldFJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9MZWZ0ID0gdGFyZ2V0UmVjdGFuZ2xlLnggLSAoc291cmNlUmVjdGFuZ2xlLnggKyBzb3VyY2VSZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBpZiAobGVmdFRvUmlnaHQgPiAwICYmIGxlZnRUb1JpZ2h0IDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGxlZnRUb1JpZ2h0IC8gMjtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFszXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFsxXSA9IG9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyaWdodFRvTGVmdCA+IDAgJiYgcmlnaHRUb0xlZnQgPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcmlnaHRUb0xlZnQgLyAyO1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzNdID0gb2Zmc2V0O1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzFdID0gb2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9wVG9Cb3R0b20gPSBzb3VyY2VSZWN0YW5nbGUueSAtICh0YXJnZXRSZWN0YW5nbGUueSArIHRhcmdldFJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b21Ub1RvcCA9IHRhcmdldFJlY3RhbmdsZS55IC0gKHNvdXJjZVJlY3RhbmdsZS55ICsgc291cmNlUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgIGlmICh0b3BUb0JvdHRvbSA+IDAgJiYgdG9wVG9Cb3R0b20gPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdG9wVG9Cb3R0b20gLyAyO1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzBdID0gb2Zmc2V0O1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzJdID0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChib3R0b21Ub1RvcCA+IDAgJiYgYm90dG9tVG9Ub3AgPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYm90dG9tVG9Ub3AgLyAyO1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzJdID0gb2Zmc2V0O1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzBdID0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHNvdXJjZU9mZnNldCwgdGFyZ2V0T2Zmc2V0IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV4dFBvaW50ID0gKHBvaW50OiBQb2ludCwgb3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgZGlyZWN0aW9uOiBEaXJlY3Rpb24pOiBQb2ludCA9PiB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24udG9wOiB7XG4gICAgICAgICAgICByZXR1cm4gW3BvaW50WzBdLCBvdXRlclJlY3RhbmdsZS55XTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIERpcmVjdGlvbi5ib3R0b206IHtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRbMF0sIG91dGVyUmVjdGFuZ2xlLnkgKyBvdXRlclJlY3RhbmdsZS5oZWlnaHRdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnJpZ2h0OiB7XG4gICAgICAgICAgICByZXR1cm4gW291dGVyUmVjdGFuZ2xlLnggKyBvdXRlclJlY3RhbmdsZS53aWR0aCwgcG9pbnRbMV1dO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBbb3V0ZXJSZWN0YW5nbGUueCwgcG9pbnRbMV1dO1xuICAgICAgICB9XG4gICAgfVxufTtcbiJdfQ==
@@ -154,4 +154,11 @@ export const removeDuplicatePoints = (points) => {
154
154
  });
155
155
  return newArray;
156
156
  };
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9saW5lLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxTQUFvQjtJQUNyRCxRQUFRLFNBQVMsRUFBRTtRQUNmLEtBQUssU0FBUyxDQUFDLElBQUk7WUFDZixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDM0IsS0FBSyxTQUFTLENBQUMsS0FBSztZQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDMUIsS0FBSyxTQUFTLENBQUMsR0FBRztZQUNkLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQ2pCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQztLQUM1QjtBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFhLEVBQUUsY0FBeUIsRUFBRSxNQUFhLEVBQUUsY0FBeUIsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUM1SCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyRCxNQUFNLFlBQVksR0FBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNqRyxNQUFNLFlBQVksR0FBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNqRyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRWpDLElBQUksTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUN6QixJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDckIsTUFBTSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsR0FBRyxhQUFhLENBQUM7UUFDbkQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsMENBQTBDO0lBQzFDLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUN4RCxPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxjQUFjLENBQUM7UUFDekIsVUFBVTtRQUNWLE9BQU87UUFDUCxPQUFPO1FBQ1AsTUFBTSxhQUFhLEdBQVk7WUFDM0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QixDQUFDO1FBQ0YsT0FBTztRQUNQLE9BQU87UUFDUCxLQUFLO1FBQ0wsTUFBTSxlQUFlLEdBQVk7WUFDN0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQzFCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztTQUM3QixDQUFDO1FBQ0YsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTyxFQUFFO1lBQ3BDLE1BQU0sR0FBRyxXQUFXLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztTQUNsRTthQUFNO1lBQ0gsTUFBTSxHQUFHLFdBQVcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1NBQ2xFO0tBQ0o7U0FBTTtRQUNILDJGQUEyRjtRQUMzRixNQUFNLFlBQVksR0FBWSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQVksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLGdEQUFnRDtRQUNoRCxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUU7WUFDckIsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNsRTthQUFNO1lBQ0gsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztTQUNsRTtRQUVELDRGQUE0RjtRQUM1RixJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksY0FBYyxLQUFLLGNBQWMsRUFBRTtZQUNuQyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxTQUFTLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RixNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pHLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakcsZ0JBQWdCO2dCQUNaLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7b0JBQzNHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoSCxJQUFJLGdCQUFnQixFQUFFO2dCQUNsQixNQUFNLEdBQUcsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7YUFDOUQ7U0FDSjtLQUNKO0lBQ0QsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWEsRUFBRSxjQUFjLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFhLEVBQUUsRUFBRTtJQUM1RixJQUFJLGNBQWMsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWMsS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFO1FBQ3pFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ25FO0lBQ0QsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUMxQixPQUFPLEVBQ1AsT0FBTyxFQUNQLE9BQU8sRUFDUCxPQUFPLEVBTVY7SUFDRyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUUxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUUxRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFlLEVBQUUsS0FBYTtJQUM3RCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxNQUFNLGNBQWMsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRTNDLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbkUsSUFBSSxtQkFBbUIsR0FBRyxhQUFhLElBQUksY0FBYyxFQUFFO1lBQ3ZELE1BQU0saUJBQWlCLEdBQUcsY0FBYyxHQUFHLG1CQUFtQixDQUFDO1lBQy9ELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUV6RCxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDaEQsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM3QjtRQUVELG1CQUFtQixJQUFJLGFBQWEsQ0FBQztLQUN4QztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxNQUFlO0lBQ25ELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxJQUFJLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBZSxFQUFFLEtBQVk7SUFDekQsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RSxJQUFJLFNBQVMsRUFBRTtZQUNYLFFBQVEsSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RixPQUFPLFFBQVEsR0FBRyxXQUFXLENBQUM7U0FDakM7YUFBTTtZQUNILFFBQVEsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVHO0tBQ0o7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUFZLEVBQUUsVUFBaUIsRUFBRSxRQUFlO0lBQ2pGLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpHLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTNHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtJQUNyRCxNQUFNLFFBQVEsR0FBWSxFQUFFLENBQUM7SUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBQb2ludCwgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldERpcmVjdGlvbkZhY3RvciB9IGZyb20gJy4vZGlyZWN0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9wcG9zaXRlRGlyZWN0aW9uKGRpcmVjdGlvbjogRGlyZWN0aW9uKSB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24ubGVmdDpcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnJpZ2h0OlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5sZWZ0O1xuICAgICAgICBjYXNlIERpcmVjdGlvbi50b3A6XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmJvdHRvbTtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24uYm90dG9tOlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi50b3A7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9pbnRzID0gKHNvdXJjZTogUG9pbnQsIHNvdXJjZVBvc2l0aW9uOiBEaXJlY3Rpb24sIHRhcmdldDogUG9pbnQsIHRhcmdldFBvc2l0aW9uOiBEaXJlY3Rpb24sIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gZ2V0RGlyZWN0aW9uRmFjdG9yKHNvdXJjZVBvc2l0aW9uKTtcbiAgICBjb25zdCB0YXJnZXREaXIgPSBnZXREaXJlY3Rpb25GYWN0b3IodGFyZ2V0UG9zaXRpb24pO1xuICAgIGNvbnN0IHNvdXJjZUdhcHBlZDogUG9pbnQgPSBbc291cmNlWzBdICsgc291cmNlRGlyLnggKiBvZmZzZXQsIHNvdXJjZVsxXSArIHNvdXJjZURpci55ICogb2Zmc2V0XTtcbiAgICBjb25zdCB0YXJnZXRHYXBwZWQ6IFBvaW50ID0gW3RhcmdldFswXSArIHRhcmdldERpci54ICogb2Zmc2V0LCB0YXJnZXRbMV0gKyB0YXJnZXREaXIueSAqIG9mZnNldF07XG4gICAgY29uc3QgZGlyID0gZ2V0RGlyZWN0aW9uKHNvdXJjZUdhcHBlZCwgc291cmNlUG9zaXRpb24sIHRhcmdldEdhcHBlZCk7XG4gICAgY29uc3QgZGlyQWNjZXNzb3IgPSBkaXIueCAhPT0gMCA/ICd4JyA6ICd5JztcbiAgICBjb25zdCBjdXJyRGlyID0gZGlyW2RpckFjY2Vzc29yXTtcblxuICAgIGxldCBwb2ludHM6IFBvaW50W10gPSBbXTtcbiAgICBsZXQgY2VudGVyWCwgY2VudGVyWTtcbiAgICBjb25zdCBbZGVmYXVsdENlbnRlclgsIGRlZmF1bHRDZW50ZXJZXSA9IGdldEVkZ2VDZW50ZXIoe1xuICAgICAgICBzb3VyY2VYOiBzb3VyY2VbMF0sXG4gICAgICAgIHNvdXJjZVk6IHNvdXJjZVsxXSxcbiAgICAgICAgdGFyZ2V0WDogdGFyZ2V0WzBdLFxuICAgICAgICB0YXJnZXRZOiB0YXJnZXRbMV1cbiAgICB9KTtcbiAgICAvLyBvcHBvc2l0ZSBoYW5kbGUgcG9zaXRpb25zLCBkZWZhdWx0IGNhc2VcbiAgICBpZiAoc291cmNlRGlyW2RpckFjY2Vzc29yXSAqIHRhcmdldERpcltkaXJBY2Nlc3Nvcl0gPT09IC0xKSB7XG4gICAgICAgIGNlbnRlclggPSBkZWZhdWx0Q2VudGVyWDtcbiAgICAgICAgY2VudGVyWSA9IGRlZmF1bHRDZW50ZXJZO1xuICAgICAgICAvLyAgICAtLS0+XG4gICAgICAgIC8vICAgIHxcbiAgICAgICAgLy8gPi0tLVxuICAgICAgICBjb25zdCB2ZXJ0aWNhbFNwbGl0OiBQb2ludFtdID0gW1xuICAgICAgICAgICAgW2NlbnRlclgsIHNvdXJjZUdhcHBlZFsxXV0sXG4gICAgICAgICAgICBbY2VudGVyWCwgdGFyZ2V0R2FwcGVkWzFdXVxuICAgICAgICBdO1xuICAgICAgICAvLyAgICB8XG4gICAgICAgIC8vICAtLS1cbiAgICAgICAgLy8gIHxcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNwbGl0OiBQb2ludFtdID0gW1xuICAgICAgICAgICAgW3NvdXJjZUdhcHBlZFswXSwgY2VudGVyWV0sXG4gICAgICAgICAgICBbdGFyZ2V0R2FwcGVkWzBdLCBjZW50ZXJZXVxuICAgICAgICBdO1xuICAgICAgICBpZiAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gY3VyckRpcikge1xuICAgICAgICAgICAgcG9pbnRzID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IHZlcnRpY2FsU3BsaXQgOiBob3Jpem9udGFsU3BsaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gaG9yaXpvbnRhbFNwbGl0IDogdmVydGljYWxTcGxpdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNvdXJjZVRhcmdldCBtZWFucyB3ZSB0YWtlIHggZnJvbSBzb3VyY2UgYW5kIHkgZnJvbSB0YXJnZXQsIHRhcmdldFNvdXJjZSBpcyB0aGUgb3Bwb3NpdGVcbiAgICAgICAgY29uc3Qgc291cmNlVGFyZ2V0OiBQb2ludFtdID0gW1tzb3VyY2VHYXBwZWRbMF0sIHRhcmdldEdhcHBlZFsxXV1dO1xuICAgICAgICBjb25zdCB0YXJnZXRTb3VyY2U6IFBvaW50W10gPSBbW3RhcmdldEdhcHBlZFswXSwgc291cmNlR2FwcGVkWzFdXV07XG4gICAgICAgIC8vIHRoaXMgaGFuZGxlcyBlZGdlcyB3aXRoIHNhbWUgaGFuZGxlIHBvc2l0aW9uc1xuICAgICAgICBpZiAoZGlyQWNjZXNzb3IgPT09ICd4Jykge1xuICAgICAgICAgICAgcG9pbnRzID0gc291cmNlRGlyLnggPT09IGN1cnJEaXIgPyB0YXJnZXRTb3VyY2UgOiBzb3VyY2VUYXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMgPSBzb3VyY2VEaXIueSA9PT0gY3VyckRpciA/IHNvdXJjZVRhcmdldCA6IHRhcmdldFNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZXNlIGFyZSBjb25kaXRpb25zIGZvciBoYW5kbGluZyBtaXhlZCBoYW5kbGUgcG9zaXRpb25zIGxpa2UgcmlnaHQgLT4gYm90dG9tIGZvciBleGFtcGxlXG4gICAgICAgIGxldCBmbGlwU291cmNlVGFyZ2V0O1xuICAgICAgICBpZiAoc291cmNlUG9zaXRpb24gIT09IHRhcmdldFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkaXJBY2Nlc3Nvck9wcG9zaXRlID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgaXNTYW1lRGlyID0gc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gdGFyZ2V0RGlyW2RpckFjY2Vzc29yID09PSAneCcgPyAneScgOiAneCddO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlR3RUYXJnZXRPcHBvID0gc291cmNlR2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdID4gdGFyZ2V0R2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTHRUYXJnZXRPcHBvID0gc291cmNlR2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdIDwgdGFyZ2V0R2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdO1xuICAgICAgICAgICAgZmxpcFNvdXJjZVRhcmdldCA9XG4gICAgICAgICAgICAgICAgKHNvdXJjZURpcltkaXJBY2Nlc3Nvcl0gPT09IDEgJiYgKCghaXNTYW1lRGlyICYmIHNvdXJjZUd0VGFyZ2V0T3BwbykgfHwgKGlzU2FtZURpciAmJiBzb3VyY2VMdFRhcmdldE9wcG8pKSkgfHxcbiAgICAgICAgICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSAhPT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlTHRUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUd0VGFyZ2V0T3BwbykpKTtcblxuICAgICAgICAgICAgaWYgKGZsaXBTb3VyY2VUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gc291cmNlVGFyZ2V0IDogdGFyZ2V0U291cmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbc291cmNlLCBzb3VyY2VHYXBwZWQsIC4uLnBvaW50cywgdGFyZ2V0R2FwcGVkLCB0YXJnZXRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdGlvbiA9IChzb3VyY2U6IFBvaW50LCBzb3VyY2VQb3NpdGlvbiA9IERpcmVjdGlvbi5ib3R0b20sIHRhcmdldDogUG9pbnQpID0+IHtcbiAgICBpZiAoc291cmNlUG9zaXRpb24gPT09IERpcmVjdGlvbi5sZWZ0IHx8IHNvdXJjZVBvc2l0aW9uID09PSBEaXJlY3Rpb24ucmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVswXSA8IHRhcmdldFswXSA/IHsgeDogMSwgeTogMCB9IDogeyB4OiAtMSwgeTogMCB9O1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlWzFdIDwgdGFyZ2V0WzFdID8geyB4OiAwLCB5OiAxIH0gOiB7IHg6IDAsIHk6IC0xIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRnZUNlbnRlcih7XG4gICAgc291cmNlWCxcbiAgICBzb3VyY2VZLFxuICAgIHRhcmdldFgsXG4gICAgdGFyZ2V0WVxufToge1xuICAgIHNvdXJjZVg6IG51bWJlcjtcbiAgICBzb3VyY2VZOiBudW1iZXI7XG4gICAgdGFyZ2V0WDogbnVtYmVyO1xuICAgIHRhcmdldFk6IG51bWJlcjtcbn0pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgY29uc3QgeE9mZnNldCA9IE1hdGguYWJzKHRhcmdldFggLSBzb3VyY2VYKSAvIDI7XG4gICAgY29uc3QgY2VudGVyWCA9IHRhcmdldFggPCBzb3VyY2VYID8gdGFyZ2V0WCArIHhPZmZzZXQgOiB0YXJnZXRYIC0geE9mZnNldDtcblxuICAgIGNvbnN0IHlPZmZzZXQgPSBNYXRoLmFicyh0YXJnZXRZIC0gc291cmNlWSkgLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSB0YXJnZXRZIDwgc291cmNlWSA/IHRhcmdldFkgKyB5T2Zmc2V0IDogdGFyZ2V0WSAtIHlPZmZzZXQ7XG5cbiAgICByZXR1cm4gW2NlbnRlclgsIGNlbnRlclksIHhPZmZzZXQsIHlPZmZzZXRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRPblBvbHlsaW5lKHBvaW50czogUG9pbnRbXSwgcmF0aW86IG51bWJlcikge1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gY2FsY3VsYXRlUG9seWxpbmVMZW5ndGgocG9pbnRzKTtcbiAgICBjb25zdCB0YXJnZXREaXN0YW5jZSA9IHRvdGFsTGVuZ3RoICogcmF0aW87XG5cbiAgICBsZXQgYWNjdW11bGF0ZWREaXN0YW5jZSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IFt4MSwgeTFdID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBbeDIsIHkyXSA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRMZW5ndGggPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHgxLCB5MSwgeDIsIHkyKTtcblxuICAgICAgICBpZiAoYWNjdW11bGF0ZWREaXN0YW5jZSArIHNlZ21lbnRMZW5ndGggPj0gdGFyZ2V0RGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0Rpc3RhbmNlID0gdGFyZ2V0RGlzdGFuY2UgLSBhY2N1bXVsYXRlZERpc3RhbmNlO1xuICAgICAgICAgICAgY29uc3QgcmF0aW9JblNlZ21lbnQgPSByZW1haW5pbmdEaXN0YW5jZSAvIHNlZ21lbnRMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFggPSB4MSArICh4MiAtIHgxKSAqIHJhdGlvSW5TZWdtZW50O1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0WSA9IHkxICsgKHkyIC0geTEpICogcmF0aW9JblNlZ21lbnQ7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldFgsIHRhcmdldFldO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjdW11bGF0ZWREaXN0YW5jZSArPSBzZWdtZW50TGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlUG9seWxpbmVMZW5ndGgocG9pbnRzOiBQb2ludFtdKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IFt4MSwgeTFdID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBbeDIsIHkyXSA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIGxlbmd0aCArPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHgxLCB5MSwgeDIsIHkyKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhdGlvQnlQb2ludChwb2ludHM6IFBvaW50W10sIHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gY2FsY3VsYXRlUG9seWxpbmVMZW5ndGgocG9pbnRzKTtcblxuICAgIGxldCBkaXN0YW5jZSA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXNPdmVybGFwID0gaXNQb2ludE9uTGluZVNlZ21lbnQocG9pbnQsIHBvaW50c1tpXSwgcG9pbnRzW2kgKyAxXSk7XG5cbiAgICAgICAgaWYgKGlzT3ZlcmxhcCkge1xuICAgICAgICAgICAgZGlzdGFuY2UgKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIHBvaW50c1tpXVswXSwgcG9pbnRzW2ldWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBkaXN0YW5jZSAvIHRvdGFsTGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzdGFuY2UgKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludHNbaV1bMF0sIHBvaW50c1tpXVsxXSwgcG9pbnRzW2kgKyAxXVswXSwgcG9pbnRzW2kgKyAxXVsxXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IHJhdGlvIGJ5IHBvaW50Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50T25MaW5lU2VnbWVudChwb2ludDogUG9pbnQsIHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZVRvU3RhcnQgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSk7XG4gICAgY29uc3QgZGlzdGFuY2VUb0VuZCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuXG4gICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdKTtcblxuICAgIHJldHVybiBNYXRoLmFicyhkaXN0YW5jZVRvU3RhcnQgKyBkaXN0YW5jZVRvRW5kIC0gc2VnbWVudExlbmd0aCkgPCAwLjE7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVQb2ludHMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3QgbmV3QXJyYXk6IFBvaW50W10gPSBbXTtcbiAgICBwb2ludHMuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KG90aGVyUG9pbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFBvaW50LmlzRXF1YWxzKHBvaW50LCBvdGhlclBvaW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIG5ld0FycmF5LnB1c2gocG9pbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdBcnJheTtcbn07XG4iXX0=
157
+ export const getExtendPoint = (source, target, extendDistance) => {
158
+ const distance = distanceBetweenPointAndPoint(...source, ...target);
159
+ const isEqual = Point.isEquals(source, target);
160
+ const sin = isEqual ? 1 : (target[1] - source[1]) / distance;
161
+ const cos = isEqual ? 1 : (target[0] - source[0]) / distance;
162
+ return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
163
+ };
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9saW5lLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxTQUFvQjtJQUNyRCxRQUFRLFNBQVMsRUFBRTtRQUNmLEtBQUssU0FBUyxDQUFDLElBQUk7WUFDZixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDM0IsS0FBSyxTQUFTLENBQUMsS0FBSztZQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDMUIsS0FBSyxTQUFTLENBQUMsR0FBRztZQUNkLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM1QixLQUFLLFNBQVMsQ0FBQyxNQUFNO1lBQ2pCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQztLQUM1QjtBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFhLEVBQUUsY0FBeUIsRUFBRSxNQUFhLEVBQUUsY0FBeUIsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUM1SCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyRCxNQUFNLFlBQVksR0FBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNqRyxNQUFNLFlBQVksR0FBVSxDQUFDLE1BQU0s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LEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDaEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBQb2ludCwgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldERpcmVjdGlvbkZhY3RvciB9IGZyb20gJy4vZGlyZWN0aW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9wcG9zaXRlRGlyZWN0aW9uKGRpcmVjdGlvbjogRGlyZWN0aW9uKSB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24ubGVmdDpcbiAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnJpZ2h0OlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5sZWZ0O1xuICAgICAgICBjYXNlIERpcmVjdGlvbi50b3A6XG4gICAgICAgICAgICByZXR1cm4gRGlyZWN0aW9uLmJvdHRvbTtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24uYm90dG9tOlxuICAgICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi50b3A7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9pbnRzID0gKHNvdXJjZTogUG9pbnQsIHNvdXJjZVBvc2l0aW9uOiBEaXJlY3Rpb24sIHRhcmdldDogUG9pbnQsIHRhcmdldFBvc2l0aW9uOiBEaXJlY3Rpb24sIG9mZnNldDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgc291cmNlRGlyID0gZ2V0RGlyZWN0aW9uRmFjdG9yKHNvdXJjZVBvc2l0aW9uKTtcbiAgICBjb25zdCB0YXJnZXREaXIgPSBnZXREaXJlY3Rpb25GYWN0b3IodGFyZ2V0UG9zaXRpb24pO1xuICAgIGNvbnN0IHNvdXJjZUdhcHBlZDogUG9pbnQgPSBbc291cmNlWzBdICsgc291cmNlRGlyLnggKiBvZmZzZXQsIHNvdXJjZVsxXSArIHNvdXJjZURpci55ICogb2Zmc2V0XTtcbiAgICBjb25zdCB0YXJnZXRHYXBwZWQ6IFBvaW50ID0gW3RhcmdldFswXSArIHRhcmdldERpci54ICogb2Zmc2V0LCB0YXJnZXRbMV0gKyB0YXJnZXREaXIueSAqIG9mZnNldF07XG4gICAgY29uc3QgZGlyID0gZ2V0RGlyZWN0aW9uKHNvdXJjZUdhcHBlZCwgc291cmNlUG9zaXRpb24sIHRhcmdldEdhcHBlZCk7XG4gICAgY29uc3QgZGlyQWNjZXNzb3IgPSBkaXIueCAhPT0gMCA/ICd4JyA6ICd5JztcbiAgICBjb25zdCBjdXJyRGlyID0gZGlyW2RpckFjY2Vzc29yXTtcblxuICAgIGxldCBwb2ludHM6IFBvaW50W10gPSBbXTtcbiAgICBsZXQgY2VudGVyWCwgY2VudGVyWTtcbiAgICBjb25zdCBbZGVmYXVsdENlbnRlclgsIGRlZmF1bHRDZW50ZXJZXSA9IGdldEVkZ2VDZW50ZXIoe1xuICAgICAgICBzb3VyY2VYOiBzb3VyY2VbMF0sXG4gICAgICAgIHNvdXJjZVk6IHNvdXJjZVsxXSxcbiAgICAgICAgdGFyZ2V0WDogdGFyZ2V0WzBdLFxuICAgICAgICB0YXJnZXRZOiB0YXJnZXRbMV1cbiAgICB9KTtcbiAgICAvLyBvcHBvc2l0ZSBoYW5kbGUgcG9zaXRpb25zLCBkZWZhdWx0IGNhc2VcbiAgICBpZiAoc291cmNlRGlyW2RpckFjY2Vzc29yXSAqIHRhcmdldERpcltkaXJBY2Nlc3Nvcl0gPT09IC0xKSB7XG4gICAgICAgIGNlbnRlclggPSBkZWZhdWx0Q2VudGVyWDtcbiAgICAgICAgY2VudGVyWSA9IGRlZmF1bHRDZW50ZXJZO1xuICAgICAgICAvLyAgICAtLS0+XG4gICAgICAgIC8vICAgIHxcbiAgICAgICAgLy8gPi0tLVxuICAgICAgICBjb25zdCB2ZXJ0aWNhbFNwbGl0OiBQb2ludFtdID0gW1xuICAgICAgICAgICAgW2NlbnRlclgsIHNvdXJjZUdhcHBlZFsxXV0sXG4gICAgICAgICAgICBbY2VudGVyWCwgdGFyZ2V0R2FwcGVkWzFdXVxuICAgICAgICBdO1xuICAgICAgICAvLyAgICB8XG4gICAgICAgIC8vICAtLS1cbiAgICAgICAgLy8gIHxcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNwbGl0OiBQb2ludFtdID0gW1xuICAgICAgICAgICAgW3NvdXJjZUdhcHBlZFswXSwgY2VudGVyWV0sXG4gICAgICAgICAgICBbdGFyZ2V0R2FwcGVkWzBdLCBjZW50ZXJZXVxuICAgICAgICBdO1xuICAgICAgICBpZiAoc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gY3VyckRpcikge1xuICAgICAgICAgICAgcG9pbnRzID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IHZlcnRpY2FsU3BsaXQgOiBob3Jpem9udGFsU3BsaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gaG9yaXpvbnRhbFNwbGl0IDogdmVydGljYWxTcGxpdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNvdXJjZVRhcmdldCBtZWFucyB3ZSB0YWtlIHggZnJvbSBzb3VyY2UgYW5kIHkgZnJvbSB0YXJnZXQsIHRhcmdldFNvdXJjZSBpcyB0aGUgb3Bwb3NpdGVcbiAgICAgICAgY29uc3Qgc291cmNlVGFyZ2V0OiBQb2ludFtdID0gW1tzb3VyY2VHYXBwZWRbMF0sIHRhcmdldEdhcHBlZFsxXV1dO1xuICAgICAgICBjb25zdCB0YXJnZXRTb3VyY2U6IFBvaW50W10gPSBbW3RhcmdldEdhcHBlZFswXSwgc291cmNlR2FwcGVkWzFdXV07XG4gICAgICAgIC8vIHRoaXMgaGFuZGxlcyBlZGdlcyB3aXRoIHNhbWUgaGFuZGxlIHBvc2l0aW9uc1xuICAgICAgICBpZiAoZGlyQWNjZXNzb3IgPT09ICd4Jykge1xuICAgICAgICAgICAgcG9pbnRzID0gc291cmNlRGlyLnggPT09IGN1cnJEaXIgPyB0YXJnZXRTb3VyY2UgOiBzb3VyY2VUYXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2ludHMgPSBzb3VyY2VEaXIueSA9PT0gY3VyckRpciA/IHNvdXJjZVRhcmdldCA6IHRhcmdldFNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZXNlIGFyZSBjb25kaXRpb25zIGZvciBoYW5kbGluZyBtaXhlZCBoYW5kbGUgcG9zaXRpb25zIGxpa2UgcmlnaHQgLT4gYm90dG9tIGZvciBleGFtcGxlXG4gICAgICAgIGxldCBmbGlwU291cmNlVGFyZ2V0O1xuICAgICAgICBpZiAoc291cmNlUG9zaXRpb24gIT09IHRhcmdldFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkaXJBY2Nlc3Nvck9wcG9zaXRlID0gZGlyQWNjZXNzb3IgPT09ICd4JyA/IDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgaXNTYW1lRGlyID0gc291cmNlRGlyW2RpckFjY2Vzc29yXSA9PT0gdGFyZ2V0RGlyW2RpckFjY2Vzc29yID09PSAneCcgPyAneScgOiAneCddO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlR3RUYXJnZXRPcHBvID0gc291cmNlR2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdID4gdGFyZ2V0R2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTHRUYXJnZXRPcHBvID0gc291cmNlR2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdIDwgdGFyZ2V0R2FwcGVkW2RpckFjY2Vzc29yT3Bwb3NpdGVdO1xuICAgICAgICAgICAgZmxpcFNvdXJjZVRhcmdldCA9XG4gICAgICAgICAgICAgICAgKHNvdXJjZURpcltkaXJBY2Nlc3Nvcl0gPT09IDEgJiYgKCghaXNTYW1lRGlyICYmIHNvdXJjZUd0VGFyZ2V0T3BwbykgfHwgKGlzU2FtZURpciAmJiBzb3VyY2VMdFRhcmdldE9wcG8pKSkgfHxcbiAgICAgICAgICAgICAgICAoc291cmNlRGlyW2RpckFjY2Vzc29yXSAhPT0gMSAmJiAoKCFpc1NhbWVEaXIgJiYgc291cmNlTHRUYXJnZXRPcHBvKSB8fCAoaXNTYW1lRGlyICYmIHNvdXJjZUd0VGFyZ2V0T3BwbykpKTtcblxuICAgICAgICAgICAgaWYgKGZsaXBTb3VyY2VUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBkaXJBY2Nlc3NvciA9PT0gJ3gnID8gc291cmNlVGFyZ2V0IDogdGFyZ2V0U291cmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbc291cmNlLCBzb3VyY2VHYXBwZWQsIC4uLnBvaW50cywgdGFyZ2V0R2FwcGVkLCB0YXJnZXRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdGlvbiA9IChzb3VyY2U6IFBvaW50LCBzb3VyY2VQb3NpdGlvbiA9IERpcmVjdGlvbi5ib3R0b20sIHRhcmdldDogUG9pbnQpID0+IHtcbiAgICBpZiAoc291cmNlUG9zaXRpb24gPT09IERpcmVjdGlvbi5sZWZ0IHx8IHNvdXJjZVBvc2l0aW9uID09PSBEaXJlY3Rpb24ucmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVswXSA8IHRhcmdldFswXSA/IHsgeDogMSwgeTogMCB9IDogeyB4OiAtMSwgeTogMCB9O1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlWzFdIDwgdGFyZ2V0WzFdID8geyB4OiAwLCB5OiAxIH0gOiB7IHg6IDAsIHk6IC0xIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRnZUNlbnRlcih7XG4gICAgc291cmNlWCxcbiAgICBzb3VyY2VZLFxuICAgIHRhcmdldFgsXG4gICAgdGFyZ2V0WVxufToge1xuICAgIHNvdXJjZVg6IG51bWJlcjtcbiAgICBzb3VyY2VZOiBudW1iZXI7XG4gICAgdGFyZ2V0WDogbnVtYmVyO1xuICAgIHRhcmdldFk6IG51bWJlcjtcbn0pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gICAgY29uc3QgeE9mZnNldCA9IE1hdGguYWJzKHRhcmdldFggLSBzb3VyY2VYKSAvIDI7XG4gICAgY29uc3QgY2VudGVyWCA9IHRhcmdldFggPCBzb3VyY2VYID8gdGFyZ2V0WCArIHhPZmZzZXQgOiB0YXJnZXRYIC0geE9mZnNldDtcblxuICAgIGNvbnN0IHlPZmZzZXQgPSBNYXRoLmFicyh0YXJnZXRZIC0gc291cmNlWSkgLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSB0YXJnZXRZIDwgc291cmNlWSA/IHRhcmdldFkgKyB5T2Zmc2V0IDogdGFyZ2V0WSAtIHlPZmZzZXQ7XG5cbiAgICByZXR1cm4gW2NlbnRlclgsIGNlbnRlclksIHhPZmZzZXQsIHlPZmZzZXRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRPblBvbHlsaW5lKHBvaW50czogUG9pbnRbXSwgcmF0aW86IG51bWJlcikge1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gY2FsY3VsYXRlUG9seWxpbmVMZW5ndGgocG9pbnRzKTtcbiAgICBjb25zdCB0YXJnZXREaXN0YW5jZSA9IHRvdGFsTGVuZ3RoICogcmF0aW87XG5cbiAgICBsZXQgYWNjdW11bGF0ZWREaXN0YW5jZSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IFt4MSwgeTFdID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBbeDIsIHkyXSA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRMZW5ndGggPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHgxLCB5MSwgeDIsIHkyKTtcblxuICAgICAgICBpZiAoYWNjdW11bGF0ZWREaXN0YW5jZSArIHNlZ21lbnRMZW5ndGggPj0gdGFyZ2V0RGlzdGFuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0Rpc3RhbmNlID0gdGFyZ2V0RGlzdGFuY2UgLSBhY2N1bXVsYXRlZERpc3RhbmNlO1xuICAgICAgICAgICAgY29uc3QgcmF0aW9JblNlZ21lbnQgPSByZW1haW5pbmdEaXN0YW5jZSAvIHNlZ21lbnRMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFggPSB4MSArICh4MiAtIHgxKSAqIHJhdGlvSW5TZWdtZW50O1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0WSA9IHkxICsgKHkyIC0geTEpICogcmF0aW9JblNlZ21lbnQ7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldFgsIHRhcmdldFldO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjdW11bGF0ZWREaXN0YW5jZSArPSBzZWdtZW50TGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlUG9seWxpbmVMZW5ndGgocG9pbnRzOiBQb2ludFtdKSB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IFt4MSwgeTFdID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBbeDIsIHkyXSA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIGxlbmd0aCArPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHgxLCB5MSwgeDIsIHkyKTtcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhdGlvQnlQb2ludChwb2ludHM6IFBvaW50W10sIHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gY2FsY3VsYXRlUG9seWxpbmVMZW5ndGgocG9pbnRzKTtcblxuICAgIGxldCBkaXN0YW5jZSA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXNPdmVybGFwID0gaXNQb2ludE9uTGluZVNlZ21lbnQocG9pbnQsIHBvaW50c1tpXSwgcG9pbnRzW2kgKyAxXSk7XG5cbiAgICAgICAgaWYgKGlzT3ZlcmxhcCkge1xuICAgICAgICAgICAgZGlzdGFuY2UgKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIHBvaW50c1tpXVswXSwgcG9pbnRzW2ldWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBkaXN0YW5jZSAvIHRvdGFsTGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzdGFuY2UgKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludHNbaV1bMF0sIHBvaW50c1tpXVsxXSwgcG9pbnRzW2kgKyAxXVswXSwgcG9pbnRzW2kgKyAxXVsxXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IHJhdGlvIGJ5IHBvaW50Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BvaW50T25MaW5lU2VnbWVudChwb2ludDogUG9pbnQsIHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZVRvU3RhcnQgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSk7XG4gICAgY29uc3QgZGlzdGFuY2VUb0VuZCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuXG4gICAgY29uc3Qgc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdKTtcblxuICAgIHJldHVybiBNYXRoLmFicyhkaXN0YW5jZVRvU3RhcnQgKyBkaXN0YW5jZVRvRW5kIC0gc2VnbWVudExlbmd0aCkgPCAwLjE7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVQb2ludHMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3QgbmV3QXJyYXk6IFBvaW50W10gPSBbXTtcbiAgICBwb2ludHMuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KG90aGVyUG9pbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFBvaW50LmlzRXF1YWxzKHBvaW50LCBvdGhlclBvaW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIG5ld0FycmF5LnB1c2gocG9pbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdBcnJheTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFeHRlbmRQb2ludCA9IChzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50LCBleHRlbmREaXN0YW5jZTogbnVtYmVyKTogUG9pbnQgPT4ge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5zb3VyY2UsIC4uLnRhcmdldCk7XG4gICAgY29uc3QgaXNFcXVhbCA9IFBvaW50LmlzRXF1YWxzKHNvdXJjZSwgdGFyZ2V0KTtcbiAgICBjb25zdCBzaW4gPSBpc0VxdWFsID8gMSA6ICh0YXJnZXRbMV0gLSBzb3VyY2VbMV0pIC8gZGlzdGFuY2U7XG4gICAgY29uc3QgY29zID0gaXNFcXVhbCA/IDEgOiAodGFyZ2V0WzBdIC0gc291cmNlWzBdKSAvIGRpc3RhbmNlO1xuICAgIHJldHVybiBbc291cmNlWzBdICsgZXh0ZW5kRGlzdGFuY2UgKiBjb3MsIHNvdXJjZVsxXSArIGV4dGVuZERpc3RhbmNlICogc2luXTtcbn07XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, getSelectedElements, PlaitElement, Transforms, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, MERGING, Direction, Point, hotkeys, PlaitContextService, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
1
+ import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, getSelectedElements, PlaitElement, Transforms, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, MERGING, Direction, Point, hotkeys, PlaitContextService, downScale, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
2
2
  import { isKeyHotkey } from 'is-hotkey';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Directive, Input } from '@angular/core';
@@ -342,7 +342,6 @@ const withResize = (board, options) => {
342
342
  handle: resizeDetectResult.handle
343
343
  };
344
344
  preventTouchMove(board, event, true);
345
- return;
346
345
  }
347
346
  pointerDown(event);
348
347
  };
@@ -502,6 +501,12 @@ function getDirectionFactor(direction) {
502
501
  }
503
502
  function getFactorByPoints(source, target) {
504
503
  const distance = distanceBetweenPointAndPoint(...source, ...target);
504
+ if (Point.isEquals(source, target)) {
505
+ return {
506
+ x: 1,
507
+ y: 1
508
+ };
509
+ }
505
510
  return {
506
511
  x: (target[0] - source[0]) / distance,
507
512
  y: (target[1] - source[1]) / distance
@@ -662,6 +667,13 @@ const removeDuplicatePoints = (points) => {
662
667
  });
663
668
  return newArray;
664
669
  };
670
+ const getExtendPoint = (source, target, extendDistance) => {
671
+ const distance = distanceBetweenPointAndPoint(...source, ...target);
672
+ const isEqual = Point.isEquals(source, target);
673
+ const sin = isEqual ? 1 : (target[1] - source[1]) / distance;
674
+ const cos = isEqual ? 1 : (target[0] - source[0]) / distance;
675
+ return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
676
+ };
665
677
 
666
678
  function isVirtualKey(e) {
667
679
  const isMod = e.ctrlKey || e.metaKey;
@@ -957,8 +969,8 @@ const adjust = (route, options) => {
957
969
  if (pre &&
958
970
  current &&
959
971
  next &&
960
- !((Math.floor(current[0]) === Math.floor(pre[0]) && Math.floor(current[0]) === Math.floor(next[0])) ||
961
- (Math.floor(current[1]) === Math.floor(pre[1]) && Math.floor(current[1]) === Math.floor(next[1])))) {
972
+ !((downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||
973
+ (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1])))) {
962
974
  cornerCount++;
963
975
  }
964
976
  }
@@ -1254,5 +1266,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1254
1266
  * Generated bundle index. Do not edit.
1255
1267
  */
1256
1268
 
1257
- export { AStar, ActiveGenerator, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, TRANSPARENT, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getFactorByPoints, getGraphPoints, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, selectImage, setCreationMode, withResize };
1269
+ export { AStar, ActiveGenerator, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, TRANSPARENT, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getExtendPoint, getFactorByPoints, getGraphPoints, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, selectImage, setCreationMode, withResize };
1258
1270
  //# sourceMappingURL=plait-common.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/transforms/common.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'e',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n draw(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.baseDraw(element, data);\n if (g) {\n if (this.g) {\n this.g.replaceWith(g);\n } else {\n parentG.appendChild(g);\n }\n this.g = g;\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n abstract canDraw(element: T, data?: K): boolean;\n\n abstract baseDraw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { Generator } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T>\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n baseDraw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<T, ViewContainerRef, ImageGeneratorOptions<T>> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n baseDraw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, PlaitPluginElementComponent, Transforms, getSelectedElements } from '@plait/core';\n\nexport const setProperty = (board: PlaitBoard, options: any, callback?: (component: PlaitPluginElementComponent, path: Path) => void) => {\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(element => {\n const path = PlaitBoard.findPath(board, element);\n if (callback) {\n const component = PlaitElement.getComponent(element);\n callback(component, path);\n } else {\n Transforms.setNode(board, options, path);\n }\n });\n};\n","import { PlaitBoard } from '@plait/core';\nimport { setProperty } from './common';\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string) => {\n setProperty(board, { strokeStyle });\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string) => {\n setProperty(board, { fill });\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string) => {\n setProperty(board, { strokeColor });\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number) => {\n setProperty(board, { strokeWidth });\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient } from '@plait/core';\nimport { ResizeCursorClass, ResizeHandle } from '../constants/resize';\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n case 4:\n return ResizeHandle.n;\n case 5:\n return ResizeHandle.e;\n case 6:\n return ResizeHandle.s;\n case 7:\n return ResizeHandle.w;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElement, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElement, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { ResizeHandle, ResizeCursorClass } from '../constants/resize';\nimport { ResizeRef, addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n endResize?: (resizeRef: ResizeRef<T, K>) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n !isMainPointer(event)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n preventTouchMove(board, event, true);\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n MERGING.set(board, true);\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n options.endResize && options.endResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { Direction, Point, PointOfRectangle, Vector, distanceBetweenPointAndPoint } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getPointByVector(point: Point, vector: Vector, offset: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getFactorByPoints(source: Point, target: Point) {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n return {\n x: (target[0] - source[0]) / distance,\n y: (target[1] - source[1]) / distance\n };\n}\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getDirectionFactor } from './direction';\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = getDirectionFactor(sourcePosition);\n const targetDir = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nexport const getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n\n let distance = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);\n\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { Point } from '@plait/core';\n\nexport const getRectangleByPoints = (points: Point[]) => {\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n points.forEach(point => {\n minX = Math.min(point[0], minX);\n maxX = Math.max(point[0], maxX);\n minY = Math.min(point[1], minY);\n maxY = Math.max(point[1], maxY);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // 拐点权重\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient } from '@plait/core';\nimport { removeDuplicatePoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n xAxis?: number;\n yAxis?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nconst routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n // 基于 middleX/middleY 中线纠正 path\n // 1. 找垂直/水平的线段\n // 2. 找到和middleX/middleY相交的点\n // 3. 基于垂直/水平的线段分别和相交点构建矩形\n // 4. 判断矩形相交\n // 5. 处理 path\n const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;\n if (xAxis !== undefined) {\n const optionsX = getAdjustOptions(path, xAxis, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (yAxis !== undefined) {\n const optionsY = getAdjustOptions(path, yAxis, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions) => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // 构建矩形\n const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const getCornerCount = (path: Point[]) => {\n let cornerCount = 0;\n for (let index = 1; index < path.length - 1; index++) {\n const pre = path[index - 1];\n const current = path[index];\n const next = path[index + 1];\n if (\n pre &&\n current &&\n next &&\n !(\n (Math.floor(current[0]) === Math.floor(pre[0]) && Math.floor(current[0]) === Math.floor(next[0])) ||\n (Math.floor(current[1]) === Math.floor(pre[1]) && Math.floor(current[1]) === Math.floor(next[1]))\n )\n ) {\n cornerCount++;\n }\n }\n return cornerCount;\n };\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(\n corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1])\n );\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const cornerCount = getCornerCount([...route]);\n const newCornerCount = getCornerCount([...newPath]);\n if (newCornerCount <= cornerCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], middle: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === middle) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const sourceOuterRectangle = RectangleClient.inflate(sourceRectangle, defaultOffset * 2);\n const targetOuterRectangle = RectangleClient.inflate(targetRectangle, defaultOffset * 2);\n const isHit = RectangleClient.isHit(sourceOuterRectangle, targetOuterRectangle);\n if (isHit) {\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.draw({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAO,MAAM,IAAI,GAAG,EAAE;AACf,MAAM,aAAa,GAAG,UAAU;AAChC,MAAM,sBAAsB,GAAG,EAAE;AACjC,MAAM,iBAAiB,GAAG,wBAAwB;AAClD,MAAM,oBAAoB,GAAG,GAAG;AAChC,MAAM,WAAW,GAAG;;ICLf,UAEX;AAFD,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACnB,CAAC,EAFW,SAAS,KAAT,SAAS,GAEpB,EAAA,CAAA,CAAA,CAAA;AAEM,MAAM,4BAA4B,GAAG,GAAG;AAExC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;AAEvD,MAAM,mBAAmB,GAAG;;ICRvB,kBAKX;AALD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,WAAgB,CAAA;AAChB,IAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,WAAgB,CAAA;AAChB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,aAAoB,CAAA;AACpB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,aAAoB,CAAA;AACxB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAK5B,EAAA,CAAA,CAAA,CAAA;IAEW,aASX;AATD,CAAA,UAAY,YAAY,EAAA;AACpB,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO,CAAA;AACP,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO,CAAA;AACP,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO,CAAA;AACP,IAAA,YAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,YAAA,CAAA,GAAA,CAAA,GAAA,GAAO,CAAA;AACX,CAAC,EATW,YAAY,KAAZ,YAAY,GASvB,EAAA,CAAA,CAAA;;MCVqB,SAAS,CAAA;IAS3B,WAAsB,CAAA,KAAiB,EAAE,OAAW,EAAA;QAA9B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;AACnC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KAC1B;AAED,IAAA,IAAI,CAAC,OAAU,EAAE,OAAoB,EAAE,IAAQ,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,EAAE;gBACH,IAAI,IAAI,CAAC,CAAC,EAAE;AACR,oBAAA,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACzB,iBAAA;AAAM,qBAAA;AACH,oBAAA,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1B,iBAAA;AACD,gBAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,aAAA;AAAM,iBAAA;gBACH,IAAI,CAAC,OAAO,EAAE,CAAC;AAClB,aAAA;AACD,YAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC3B,aAAA;AACJ,SAAA;AAAM,aAAA;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;AAClB,SAAA;KACJ;IAMD,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;AACtB,SAAA;KACJ;AACJ,CAAA;AAMK,SAAU,YAAY,CAAC,KAAU,EAAA;IACnC,IAAI,KAAK,CAAC,SAAS,EAAE;AACjB,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB;;AC7CM,MAAO,eAAuD,SAAQ,SAI3E,CAAA;IAGG,WAAmB,CAAA,KAAiB,EAAS,OAAkC,EAAA;AAC3E,QAAA,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QADP,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QAAS,IAAO,CAAA,OAAA,GAAP,OAAO,CAA2B;QAF/E,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;KAIvB;IAED,OAAO,CAAC,OAAU,EAAE,IAA8B,EAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACJ;IAED,QAAQ,CAAC,OAAU,EAAE,IAA8B,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAErD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAElE,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE;AACvD,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,WAAW,EAAE,KAAK;AACrB,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;AAC7D,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;AAE5B,YAAA,MAAM,OAAO,GAAY,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;YACjG,MAAM,cAAc,GAAG,UAAU,CAC7B,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,CAAC,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EACtC,sBAAsB,EACtB,OAAO,CACV,CAAC;AACF,YAAA,MAAM,eAAe,GAAG,UAAU,CAC9B,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9D,sBAAsB,EACtB,OAAO,CACV,CAAC;AACF,YAAA,MAAM,kBAAkB,GAAG,UAAU,CACjC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,EACvF,sBAAsB,EACtB,OAAO,CACV,CAAC;AACF,YAAA,MAAM,iBAAiB,GAAG,UAAU,CAChC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAClC,CAAC,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,EAC/D,sBAAsB,EACtB,OAAO,CACV,CAAC;AACF,YAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC/F,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;AACJ;;AC5DK,MAAO,cAAsD,SAAQ,SAAwD,CAAA;IAK/H,WAAmB,CAAA,KAAiB,EAAS,OAAiC,EAAA;AAC1E,QAAA,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QADP,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QAAS,IAAO,CAAA,OAAA,GAAP,OAAO,CAA0B;KAE7E;IAED,OAAO,CAAC,OAAU,EAAE,IAAsB,EAAA;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KAC/C;IAED,QAAQ,CAAC,OAAU,EAAE,gBAAkC,EAAA;AACnD,QAAA,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAClI,QAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAI,IAAI,CAAC,KAA2B,CAAC,gBAAgB,CAA0B,mBAAmB,CAAC;AACjH,aAAA,kBAAkB,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC9D,SAAA;QACD,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAE9C,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAK;YAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9C,SAAC,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACrE,QAAA,OAAO,CAAC,CAAC;KACZ;AAED,IAAA,WAAW,CAAC,KAAkB,EAAE,QAAW,EAAE,OAAU,EAAA;AACnD,QAAA,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,YAAY,GAAG,MAAK;gBAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC9C,aAAC,CAAC;AACL,SAAA;QACD,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAChE,mBAAmB,CACf,IAAI,CAAC,CAAE,EACP,oBAAoB,CAAC,KAAK,EAC1B,oBAAoB,CAAC,MAAM,EAC3B,oBAAoB,CAAC,CAAC,EACtB,oBAAoB,CAAC,CAAC,CACzB,CAAC;;QAEF,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,YAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACxE,SAAA;QACD,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAClD;IAED,OAAO,GAAA;QACH,KAAK,CAAC,OAAO,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;KAChC;AACJ;;ACnFM,MAAM,WAAW,GAAG,CAAC,KAAiB,EAAE,OAAY,EAAE,QAAuE,KAAI;AACpI,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,gBAAgB,CAAC,OAAO,CAAC,OAAO,IAAG;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjD,QAAA,IAAI,QAAQ,EAAE;YACV,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACrD,YAAA,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7B,SAAA;AAAM,aAAA;YACH,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAA;AACL,KAAC,CAAC,CAAC;AACP,CAAC;;ACVD,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,WAAmB,KAAI;AAC9D,IAAA,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,IAAY,KAAI;AACrD,IAAA,WAAW,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,WAAmB,KAAI;AAC9D,IAAA,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,WAAmB,KAAI;AAC9D,IAAA,WAAW,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AAEW,MAAA,kBAAkB,GAAG;IAC9B,YAAY;IACZ,cAAc;IACd,WAAW;IACX,cAAc;IACd,cAAc;;;ACtBL,MAAA,oBAAoB,GAAG,CAAC,MAAsB,EAAE,KAAA,GAAiB,KAAK,KAAoB;AACnG,IAAA,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,IAAA,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,IAAI,KAAK,EAAE;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACxG,KAAA;AAED,IAAA,MAAM,YAAY,GAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,IAAA,IAAI,gBAAgB,GAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvF,IAAA,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AAC5C;;ACPA,MAAM,sBAAsB,GAAG,CAAC,KAAa,KAAI;AAC7C,IAAA,QAAQ,KAAK;AACT,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,EAAE,CAAC;AAC3B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,CAAC,CAAC;AAC1B,QAAA,KAAK,CAAC;YACF,OAAO,YAAY,CAAC,CAAC,CAAC;AAC1B,QAAA;AACI,YAAA,OAAO,IAAI,CAAC;AACnB,KAAA;AACL,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,KAAa,KAAI;AAClD,IAAA,QAAQ,KAAK;AACT,QAAA,KAAK,CAAC,CAAC;AACP,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,IAAI,CAAC;AAClC,QAAA,KAAK,CAAC,CAAC;AACP,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,IAAI,CAAC;AAClC,QAAA,KAAK,CAAC,CAAC;AACP,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,EAAE,CAAC;AAChC,QAAA,KAAK,CAAC,CAAC;AACP,QAAA,KAAK,CAAC;YACF,OAAO,iBAAiB,CAAC,EAAE,CAAC;AAChC,QAAA;AACI,YAAA,OAAO,IAAI,CAAC;AACnB,KAAA;AACL,CAAC,CAAC;MAEW,4BAA4B,GAAG,CAAC,SAA0B,EAAE,QAAgB,KAAI;IACzF,MAAM,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAa,KAAI;QAC/C,OAAO;AACH,YAAA,SAAS,EAAE;gBACP,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;gBAC3B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC;AAC3B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,MAAM,EAAE,QAAQ;AACnB,aAAA;AACD,YAAA,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAiB;AACrD,YAAA,WAAW,EAAE,2BAA2B,CAAC,KAAK,CAAsB;SACvE,CAAC;AACN,KAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClE,IAAA,IAAI,CAAC,IAAI,CACL,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,KAAI;QACnC,OAAO;YACH,SAAS;AACT,YAAA,MAAM,EAAE,sBAAsB,CAAC,KAAK,GAAG,CAAC,CAAiB;AACzD,YAAA,WAAW,EAAE,2BAA2B,CAAC,KAAK,GAAG,CAAC,CAAsB;SAC3E,CAAC;KACL,CAAC,CACL,CAAC;AACF,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEF,MAAM,uBAAuB,GAAG,CAAC,YAAqB,EAAE,MAAc,KAAuB;IACzF,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAI,SAAS,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,QAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AAC9B,QAAA,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1B,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEW,MAAA,WAAW,GAAG,IAAI,OAAO,GAAoC;AAE7D,MAAA,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE;MAEW,qBAAqB,GAAG,CAA4B,KAAiB,EAAE,KAA8C,KAAI;AAClI,IAAA,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,CAAC;AAC/D,EAAE;AAEW,MAAA,WAAW,GAAG,CAA4B,KAAiB,EAAE,SAA0B,EAAE,GAAW,KAAI;AACjH,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,EAAG,GAAG,CAAA,SAAA,CAAW,CAAC,CAAC;AACrE,IAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACtC,EAAE;MAEW,cAAc,GAAG,CAAC,KAAiB,EAAE,GAAW,KAAI;AAC7D,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,EAAG,GAAG,CAAA,SAAA,CAAW,CAAC,CAAC;AACxE,IAAA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B;;ACrEA,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAE,KAAmB,KAAI;AAChE,IAAA,QACI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;AAC5B,QAAA,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC;QACpC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC;AACnD,QAAA,CAAC,aAAa,CAAC,KAAK,CAAC,EACvB;AACN,CAAC,CAAC;MAEW,UAAU,GAAG,CACtB,KAAiB,EACjB,OAAgC,KAChC;IACA,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAC5D,IAAI,kBAAkB,GAAoC,IAAI,CAAC;IAC/D,IAAI,SAAS,GAA2B,IAAI,CAAC;IAC7C,IAAI,UAAU,GAAiB,IAAI,CAAC;IACpC,IAAI,gBAAgB,GAAoC,IAAI,CAAC;AAE7D,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACzD,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;AACV,SAAA;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,kBAAkB,EAAE;YACpB,IAAI,kBAAkB,CAAC,WAAW,EAAE;AAChC,gBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAA,CAAE,CAAC,CAAC;AAC1F,aAAA;YACD,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,SAAS,GAAG;gBACR,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC;gBAC5D,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,MAAM,EAAE,kBAAkB,CAAC,MAAM;aACpC,CAAC;AACF,YAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO;AACV,SAAA;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACzD,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;AACV,SAAA;QACD,IAAI,UAAU,IAAI,kBAAkB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;;YAExD,KAAK,CAAC,cAAc,EAAE,CAAC;YAEvB,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtG,IAAI,QAAQ,GAAG,qBAAqB,EAAE;gBAClC,WAAW,CAAC,KAAK,EAAE,SAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/C,aAAA;AACJ,SAAA;AAED,QAAA,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE;;YAEjC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtG,WAAW,CAAC,MAAK;gBACb,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,UAAU,IAAI,SAAS,EAAE;oBACzB,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5C,oBAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACrE,oBAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5B,iBAAA;AACL,aAAC,CAAC,CAAC;YACH,OAAO;AACV,SAAA;AAAM,aAAA;YACH,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1F,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,YAAA,IAAI,kBAAkB,EAAE;gBACpB,IAAI,gBAAgB,IAAI,kBAAkB,CAAC,WAAW,KAAK,gBAAgB,CAAC,WAAW,EAAE;AACrF,oBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAA,CAAE,CAAC,CAAC;AAC3F,iBAAA;gBACD,gBAAgB,GAAG,kBAAkB,CAAC;gBACtC,IAAI,gBAAgB,CAAC,WAAW,EAAE;AAC9B,oBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAA,CAAE,CAAC,CAAC;AACxF,iBAAA;AACJ,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,gBAAgB,EAAE;oBAClB,IAAI,gBAAgB,CAAC,WAAW,EAAE;AAC9B,wBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,WAAW,CAAA,CAAE,CAAC,CAAC;AAC3F,qBAAA;oBACD,gBAAgB,GAAG,IAAI,CAAC;AAC3B,iBAAA;AACJ,aAAA;AACJ,SAAA;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC,KAAmB,KAAI;QAC5C,eAAe,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,kBAAkB,EAAE;YACzC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,SAAU,CAAC,CAAC;AACnD,YAAA,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC;YAClB,kBAAkB,GAAG,IAAI,CAAC;YAC1B,SAAS,GAAG,IAAI,CAAC;AACjB,YAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1B,YAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACzC,SAAA;AACL,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;ACnJA,MAAM,sBAAsB,GAAG;AAC3B,IAAA,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,IAAA,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,IAAA,CAAC,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAChC,IAAA,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;CACrC,CAAC;AAEI,SAAU,8BAA8B,CAAC,KAAuB,EAAA;AAClE,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,IAAI,CAAC;AACzB,KAAA;AACD,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,KAAK,CAAC;AAC1B,KAAA;AACD,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,GAAG,CAAC;AACxB,KAAA;AACD,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QAChB,OAAO,SAAS,CAAC,MAAM,CAAC;AAC3B,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;AAKG;AACG,SAAU,oBAAoB,CAAC,MAAc,EAAA;AAC/C,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC;AACf,KAAA;IACD,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;AACnD,KAAA;IACD,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC;AACnD,KAAA;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,IAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;QAC9C,OAAO,SAAS,CAAC,KAAK,CAAC;AAC1B,KAAA;AAAM,SAAA,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;QAC1D,OAAO,SAAS,CAAC,MAAM,CAAC;AAC3B,KAAA;SAAM,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;QAC5D,OAAO,SAAS,CAAC,GAAG,CAAC;AACxB,KAAA;AAAM,SAAA;QACH,OAAO,SAAS,CAAC,IAAI,CAAC;AACzB,KAAA;AACL,CAAC;SAEe,gBAAgB,CAAC,KAAY,EAAE,MAAc,EAAE,MAAc,EAAA;AACzE,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,IAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC;AACpG,CAAC;AAEK,SAAU,kBAAkB,CAAC,MAAc,EAAA;AAC7C,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC;AACpB,IAAA,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAEe,SAAA,gCAAgC,CAAC,MAAa,EAAE,MAAa,EAAA;IACzE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,SAAS,CAAC,GAAG,CAAC;AACxB,SAAA;AAAM,aAAA;YACH,OAAO,SAAS,CAAC,MAAM,CAAC;AAC3B,SAAA;AACJ,KAAA;IACD,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE;YACxB,OAAO,SAAS,CAAC,IAAI,CAAC;AACzB,SAAA;AAAM,aAAA;YACH,OAAO,SAAS,CAAC,KAAK,CAAC;AAC1B,SAAA;AACJ,KAAA;AACD,IAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC/C,CAAC;AAEK,SAAU,kBAAkB,CAAC,SAAoB,EAAA;AACnD,IAAA,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;AAC7C,CAAC;AAEe,SAAA,iBAAiB,CAAC,MAAa,EAAE,MAAa,EAAA;IAC1D,MAAM,QAAQ,GAAG,4BAA4B,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IACpE,OAAO;AACH,QAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ;AACrC,QAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ;KACxC,CAAC;AACN;;AC7FM,SAAU,oBAAoB,CAAC,SAAoB,EAAA;AACrD,IAAA,QAAQ,SAAS;QACb,KAAK,SAAS,CAAC,IAAI;YACf,OAAO,SAAS,CAAC,KAAK,CAAC;QAC3B,KAAK,SAAS,CAAC,KAAK;YAChB,OAAO,SAAS,CAAC,IAAI,CAAC;QAC1B,KAAK,SAAS,CAAC,GAAG;YACd,OAAO,SAAS,CAAC,MAAM,CAAC;QAC5B,KAAK,SAAS,CAAC,MAAM;YACjB,OAAO,SAAS,CAAC,GAAG,CAAC;AAC5B,KAAA;AACL,CAAC;AAEM,MAAM,SAAS,GAAG,CAAC,MAAa,EAAE,cAAyB,EAAE,MAAa,EAAE,cAAyB,EAAE,MAAc,KAAI;AAC5H,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;AACrD,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,YAAY,GAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACjG,MAAM,YAAY,GAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACjG,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AACrE,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5C,IAAA,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAEjC,IAAI,MAAM,GAAY,EAAE,CAAC;IACzB,IAAI,OAAO,EAAE,OAAO,CAAC;AACrB,IAAA,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,aAAa,CAAC;AACnD,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACrB,KAAA,CAAC,CAAC;;AAEH,IAAA,IAAI,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;QACxD,OAAO,GAAG,cAAc,CAAC;QACzB,OAAO,GAAG,cAAc,CAAC;;;;AAIzB,QAAA,MAAM,aAAa,GAAY;AAC3B,YAAA,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;SAC7B,CAAC;;;;AAIF,QAAA,MAAM,eAAe,GAAY;AAC7B,YAAA,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAC1B,YAAA,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;SAC7B,CAAC;AACF,QAAA,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,OAAO,EAAE;AACpC,YAAA,MAAM,GAAG,WAAW,KAAK,GAAG,GAAG,aAAa,GAAG,eAAe,CAAC;AAClE,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,GAAG,WAAW,KAAK,GAAG,GAAG,eAAe,GAAG,aAAa,CAAC;AAClE,SAAA;AACJ,KAAA;AAAM,SAAA;;AAEH,QAAA,MAAM,YAAY,GAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,QAAA,MAAM,YAAY,GAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;QAEnE,IAAI,WAAW,KAAK,GAAG,EAAE;AACrB,YAAA,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;AAClE,SAAA;AAAM,aAAA;AACH,YAAA,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;AAClE,SAAA;;AAGD,QAAA,IAAI,gBAAgB,CAAC;QACrB,IAAI,cAAc,KAAK,cAAc,EAAE;AACnC,YAAA,MAAM,mBAAmB,GAAG,WAAW,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,WAAW,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;YACxF,MAAM,kBAAkB,GAAG,YAAY,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;YACjG,MAAM,kBAAkB,GAAG,YAAY,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;YACjG,gBAAgB;gBACZ,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,kBAAkB,MAAM,SAAS,IAAI,kBAAkB,CAAC,CAAC;qBACzG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,kBAAkB,MAAM,SAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAEhH,YAAA,IAAI,gBAAgB,EAAE;AAClB,gBAAA,MAAM,GAAG,WAAW,KAAK,GAAG,GAAG,YAAY,GAAG,YAAY,CAAC;AAC9D,aAAA;AACJ,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACnE,EAAE;AAEK,MAAM,YAAY,GAAG,CAAC,MAAa,EAAE,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,MAAa,KAAI;IAC5F,IAAI,cAAc,KAAK,SAAS,CAAC,IAAI,IAAI,cAAc,KAAK,SAAS,CAAC,KAAK,EAAE;AACzE,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACnE,KAAA;AACD,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACpE,EAAE;AAEI,SAAU,aAAa,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EAMV,EAAA;AACG,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAChD,IAAA,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1E,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAChD,IAAA,MAAM,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAE1E,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAEe,SAAA,kBAAkB,CAAC,MAAe,EAAE,KAAa,EAAA;AAC7D,IAAA,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACpD,IAAA,MAAM,cAAc,GAAG,WAAW,GAAG,KAAK,CAAC;IAE3C,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,QAAA,MAAM,aAAa,GAAG,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEnE,QAAA,IAAI,mBAAmB,GAAG,aAAa,IAAI,cAAc,EAAE;AACvD,YAAA,MAAM,iBAAiB,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAC/D,YAAA,MAAM,cAAc,GAAG,iBAAiB,GAAG,aAAa,CAAC;YAEzD,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,cAAc,CAAC;YAChD,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,cAAc,CAAC;AAChD,YAAA,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7B,SAAA;QAED,mBAAmB,IAAI,aAAa,CAAC;AACxC,KAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC;AAEK,SAAU,uBAAuB,CAAC,MAAe,EAAA;IACnD,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,4BAA4B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1D,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAEe,SAAA,eAAe,CAAC,MAAe,EAAE,KAAY,EAAA;AACzD,IAAA,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEpD,IAAI,QAAQ,GAAG,CAAC,CAAC;AAEjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxC,QAAA,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAExE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,QAAQ,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,OAAO,QAAQ,GAAG,WAAW,CAAC;AACjC,SAAA;AAAM,aAAA;AACH,YAAA,QAAQ,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5G,SAAA;AACJ,KAAA;AACD,IAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AACjD,CAAC;SAEe,oBAAoB,CAAC,KAAY,EAAE,UAAiB,EAAE,QAAe,EAAA;IACjF,MAAM,eAAe,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,MAAM,aAAa,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjG,MAAM,aAAa,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3G,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC;AAC3E,CAAC;AAEY,MAAA,qBAAqB,GAAG,CAAC,MAAe,KAAI;IACrD,MAAM,QAAQ,GAAY,EAAE,CAAC;AAC7B,IAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,IAAG;YAC1C,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC7C,SAAC,CAAC,CAAC;QACH,IAAI,KAAK,KAAK,CAAC,CAAC;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,QAAQ,CAAC;AACpB;;ACrLM,SAAU,YAAY,CAAC,CAAgB,EAAA;IACzC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAClC,IAAA,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;AACvD,IAAA,OAAO,UAAU,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACvF,CAAC;AAEY,MAAA,cAAc,GAAG,CAAC,KAAoB,KAAI;AACnD,IAAA,OAAO,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACvC,EAAE;AAEW,MAAA,WAAW,GAAG,CAAC,KAAoB,KAAI;AAChD,IAAA,OAAO,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC;AAC/B,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAoB,KAAI;AAClD,IAAA,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC;AACjC,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAoB,KAAI;AAClD,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAClC,EAAE;AAEW,MAAA,QAAQ,GAAG,CAAC,KAAoB,KAAI;AAC7C,IAAA,OAAO,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC7E;;AC/Ba,MAAA,oBAAoB,GAAG,CAAC,MAAe,KAAI;AACpD,IAAA,IAAI,IAAI,GAAG,QAAQ,EACf,IAAI,GAAG,CAAC,QAAQ,EAChB,IAAI,GAAG,QAAQ,EACf,IAAI,GAAG,CAAC,QAAQ,CAAC;AACrB,IAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AACnB,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACpC,KAAC,CAAC,CAAC;IAEH,OAAO;AACH,QAAA,CAAC,EAAE,IAAI;AACP,QAAA,CAAC,EAAE,IAAI;QACP,KAAK,EAAE,IAAI,GAAG,IAAI;QAClB,MAAM,EAAE,IAAI,GAAG,IAAI;KACtB,CAAC;AACN;;IClBY,kBAGX;AAHD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,KAAA,CAAA,GAAA,KAAa,CAAA;AACb,IAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,SAAqB,CAAA;AACzB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,GAG5B,EAAA,CAAA,CAAA,CAAA;AAED,MAAM,sBAAsB,GAA2C,IAAI,OAAO,EAAE,CAAC;AAExE,MAAA,eAAe,GAAG,CAAC,KAAiB,KAAI;AACjD,IAAA,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,EAAE;MAEW,eAAe,GAAG,CAAC,KAAiB,EAAE,IAAuB,KAAI;AAC1E,IAAA,sBAAsB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,EAAE;AAEW,MAAA,SAAS,GAAG,CAAC,KAAiB,KAAI;IAC3C,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,GAAG,CAAC;AAC5D,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAiB,KAAI;IAC/C,OAAO,eAAe,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC,OAAO,CAAC;AAChE;;ACpBa,MAAA,cAAc,GAAG,CAAC,OAAqB,KAAI;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAwB,CAAC;AAC5E,IAAA,OAAO,SAAS,CAAC,cAAc,EAAE,CAAC;AACtC,EAAE;AAEW,MAAA,cAAc,GAAG,CAAC,OAAqB,KAAI;IACpD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,IAAG;AACxC,QAAA,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/C,KAAC,CAAC,CAAC;AACP;;MCCa,WAAW,GAAG,CACvB,KAAiB,EACjB,iBAAyB,EACzB,MAA8C,EAC9C,mBAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAC1D;IACA,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAClD,IAAA,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,sBAAsB,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,IAAA,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;AACzD,IAAA,SAAS,CAAC,QAAQ,GAAG,CAAC,KAAY,KAAI;AAClC,QAAA,UAAU,CAAC,KAAK,EAAG,KAAK,CAAC,MAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACjF,KAAC,CAAC;IACF,SAAS,CAAC,KAAK,EAAE,CAAC;AACtB,EAAE;AAEK,MAAM,UAAU,GAAG,OACtB,KAAiB,EACjB,SAAe,EACf,iBAAyB,EACzB,MAA8C,KAC9C;AACA,IAAA,IAAI,KAAK,GAAG,CAAC,EACT,MAAM,GAAG,CAAC,CAAC;AACf,IAAA,MAAM,YAAY,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAwC,KAAI;AAC/F,QAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACpB,QAAA,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,KAAC,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAC3C,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAClG,OAAO,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAEnD,IAAA,SAAS,GAAG;QACR,GAAG;QACH,KAAK;QACL,MAAM;KACT,CAAC;IACF,MAAM,CAAC,SAAS,CAAC,CAAC;AACtB,EAAE;AAEF,SAAS,YAAY,CAAC,IAAU,EAAE,iBAAyB,EAAA;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAEtC,KAAK,CAAC,MAAM,GAAG,YAAA;YACX,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAChC,YAAA,MAAM,MAAM,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC;AAC9E,YAAA,OAAO,CACH,KAAK,CAAC,YAAY,GAAG,iBAAiB,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAC1H,CAAC;AACN,SAAC,CAAC;AACN,KAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,iCAAiC,GAAG,IAAI,OAAO,EAA4B,CAAC;AAErE,MAAA,wBAAwB,GAAG,CAAC,KAAiB,KAAI;AAC1D,IAAA,OAAO,iCAAiC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxD,EAAE;MAEW,wBAAwB,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;AACjF,IAAA,iCAAiC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1D,EAAE;AAEW,MAAA,2BAA2B,GAAG,CAAC,KAAiB,KAAI;AAC7D,IAAA,iCAAiC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpD;;MChFa,aAAa,CAAA;AAGtB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAClB;AAED,IAAA,OAAO,CAAC,IAA2C,EAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;KACjF;IAED,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KAC5B;AACJ;;MCbY,KAAK,CAAA;AAGd,IAAA,WAAA,CAAoB,KAAiB,EAAA;QAAjB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;KACnD;IAED,SAAS,CAAC,CAAQ,EAAE,CAAQ,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxD;AAED,IAAA,MAAM,CAAC,KAAY,EAAE,GAAU,EAAE,aAAoB,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;AAChD,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC/C,QAAA,SAAS,CAAC,GAAG,CAAC,SAAU,EAAE,CAAC,CAAC,CAAC;AAC7B,QAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AACpD,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEjC,IAAI,CAAC,OAAO,EAAE;AACV,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,CAAoB,CAAC,CAAC;AACzC,aAAA;AACD,YAAA,MAAM,YAAY,GAAG,OAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC1D,MAAM;AACT,aAAA;YACD,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,IAAG;gBACtC,IAAI,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAQ,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,OAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5F,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC;;AAEtD,gBAAA,MAAM,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC,IAAI,GAAG,aAAa,CAAC;gBACvE,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1F,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;AACV,oBAAA,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;AACzB,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,EAAE;AACjF,oBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7B,oBAAA,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,iBAAA;AACL,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;IAED,QAAQ,CAAC,KAAY,EAAE,GAAU,EAAA;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,IAAI,GAAG,GAAG,CAAC;AACf,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC;AACzC,YAAA,MAAM,CAAC,OAAO,CAAC,OAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,YAAA,IAAI,GAAG,OAAQ,CAAC,IAAI,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AACJ;;MC7DY,SAAS,CAAA;AAGlB,IAAA,WAAA,CAAmB,IAAW,EAAA;QAAX,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAO;AAFvB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACnC,IAAa,CAAA,aAAA,GAAgB,EAAE,CAAC;KACL;AACrC,CAAA;MAEY,UAAU,CAAA;AAAvB,IAAA,WAAA,GAAA;QACY,IAAK,CAAA,KAAA,GAAgD,EAAE,CAAC;KA8CnE;AA5CG,IAAA,GAAG,CAAC,CAAQ,EAAA;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EACnB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEtB,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AACvB,SAAA;QACD,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AACzC,SAAA;KACJ;IACD,OAAO,CAAC,CAAQ,EAAE,CAAQ,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,CAAuB,CAAC,CAAC;AAC5C,SAAA;AAED,QAAA,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;AAED,IAAA,GAAG,CAAC,CAAQ,EAAA;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EACnB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,QAAA,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACnD;AAED,IAAA,GAAG,CAAC,CAAQ,EAAA;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EACnB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAEtB,QAAA,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AACJ;;ACzBY,MAAA,sBAAsB,GAAG,CAAC,OAA8B,KAAI;AACrE,IAAA,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;AACrD,IAAA,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AACvC,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAClC,IAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAC7D,IAAA,KAAK,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;AAC9E,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAClG,IAAA,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IACnI,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IAClI,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;AACjI,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEF,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,OAA2B,KAAI;;;;;;;IAO/D,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACnE,IAAI,KAAK,KAAK,SAAS,EAAE;QACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,MAAM,OAAO,GACT,QAAQ,CAAC,UAAU;YACnB,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;AAC/H,QAAA,IAAI,OAAO,EAAE;YACT,IAAI,GAAG,OAAO,CAAC;AAClB,SAAA;AACJ,KAAA;IACD,IAAI,KAAK,KAAK,SAAS,EAAE;QACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACtD,QAAA,MAAM,OAAO,GACT,QAAQ,CAAC,UAAU;YACnB,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;AAC/H,QAAA,IAAI,OAAO,EAAE;YACT,IAAI,GAAG,OAAO,CAAC;AAClB,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,OAAsB,KAAI;IACtD,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAChF,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,IAAA,aAAa,CAAC,OAAO,CAAC,YAAY,IAAG;;QAEjC,MAAM,QAAQ,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE;AACxG,YAAA,MAAM,cAAc,GAAG,CAAC,IAAa,KAAI;gBACrC,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE;oBAClD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5B,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7B,oBAAA,IACI,GAAG;wBACH,OAAO;wBACP,IAAI;AACJ,wBAAA,EACI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChG,6BAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACpG,EACH;AACE,wBAAA,WAAW,EAAE,CAAC;AACjB,qBAAA;AACJ,iBAAA;AACD,gBAAA,OAAO,WAAW,CAAC;AACvB,aAAC,CAAC;YACF,MAAM,WAAW,GAAG,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,gBAAgB,GAAa,EAAE,CAAC;YACtC,MAAM,kBAAkB,GAAa,EAAE,CAAC;YACxC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;gBAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CACtC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC7G,CAAC;AACF,gBAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;AACrB,oBAAA,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,oBAAA,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACzC,iBAAA;AACL,aAAC,CAAC,CAAC;AACH,YAAA,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAU,CAAC;YAChG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvG,YAAA,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YACtE,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YACpD,IAAI,cAAc,IAAI,WAAW,EAAE;gBAC/B,MAAM,GAAG,OAAO,CAAC;AACpB,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,MAAc,EAAE,YAAqB,KAAI;IAC9E,MAAM,aAAa,GAAqB,EAAE,CAAC;IAC3C,IAAI,KAAK,GAAiB,IAAI,CAAC;IAC/B,IAAI,UAAU,GAAiB,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;AAElC,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE;YAChE,KAAK,GAAG,QAAQ,CAAC;AACpB,SAAA;QACD,IAAI,KAAK,KAAK,IAAI,EAAE;YAChB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE;gBAClC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACtC,KAAK,GAAG,IAAI,CAAC;AAChB,aAAA;AACJ,SAAA;AACD,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE;YAC1B,UAAU,GAAG,OAAO,CAAC;AACxB,SAAA;AACJ,KAAA;AACD,IAAA,IAAI,KAAK,EAAE;AACP,QAAA,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,KAAA;AACD,IAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC,CAAC;AAEW,MAAA,cAAc,GAAG,CAAC,OAA8B,KAAI;IAC7D,MAAM,EAAE,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IACjG,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,IAAI,MAAM,GAAY,EAAE,CAAC;IAEzB,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;QAC7D,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5F,KAAC,CAAC,CAAC;AACH,IAAA,MAAM,WAAW,GAAG;AAChB,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAK;AACnD,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC,KAAK;AACtD,KAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,IAAA,MAAM,WAAW,GAAG;AAChB,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC,MAAM;AACpD,QAAA,oBAAoB,CAAC,CAAC;AACtB,QAAA,oBAAoB,CAAC,CAAC,GAAG,oBAAoB,CAAC,MAAM;AACvD,KAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACnF,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AACnF,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;AAC5B,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtB,aAAA;AACJ,SAAA;AACJ,KAAA;IACD,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAG;QAClD,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACnF,MAAM,UAAU,GAAG,eAAe,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AACnF,QAAA,OAAO,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC;AACtC,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEW,MAAA,WAAW,GAAG,CAAC,MAAe,KAAI;AAC3C,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAa,EAAE,CAAC;IACxB,MAAM,EAAE,GAAa,EAAE,CAAC;AACxB,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;AACf,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACV,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,KAAC,CAAC,CAAC;AACH,IAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,IAAA,MAAM,UAAU,GAAG,CAAC,CAAQ,KAAc,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChC,YAAA,MAAM,KAAK,GAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAS;YACjC,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,MAAM,UAAU,GAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,gBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;AACxB,oBAAA,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACjC,oBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpC,iBAAA;AACJ,aAAA;YACD,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,gBAAA,MAAM,UAAU,GAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7C,gBAAA,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE;AACxB,oBAAA,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACjC,oBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpC,iBAAA;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;MAEW,iBAAiB,GAAG,CAAC,eAAgC,EAAE,eAAgC,KAAI;IACpG,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAC3C,IAAA,IAAI,YAAY,GAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9D,IAAA,IAAI,YAAY,GAAa,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9D,IAAA,MAAM,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;AACzF,IAAA,MAAM,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAChF,IAAA,IAAI,KAAK,EAAE;AACP,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;AACpF,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACpF,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,YAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/B,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACzB,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC5B,SAAA;QAED,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,YAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/B,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACzB,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC5B,SAAA;AAED,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACrF,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,YAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/B,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACzB,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC5B,SAAA;QACD,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE;AACpD,YAAA,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;AAC/B,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACzB,YAAA,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC5B,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAC1C,EAAE;AAEW,MAAA,YAAY,GAAG,CAAC,KAAY,EAAE,cAA+B,EAAE,SAAoB,KAAW;AACvG,IAAA,QAAQ,SAAS;AACb,QAAA,KAAK,SAAS,CAAC,GAAG,EAAE;YAChB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,KAAK,SAAS,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/D,SAAA;AACD,QAAA,KAAK,SAAS,CAAC,KAAK,EAAE;AAClB,YAAA,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,SAAA;AACD,QAAA,SAAS;YACL,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,SAAA;AACJ,KAAA;AACL;;AC9RM,MAAgB,mBAGpB,SAAQ,2BAAiC,CAAA;AAH3C,IAAA,WAAA,GAAA;;QAIY,IAAW,CAAA,WAAA,GAAiB,EAAE,CAAC;KAS1C;AAPG,IAAA,qBAAqB,CAAC,WAAyB,EAAA;AAC3C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;KAClC;IAED,cAAc,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AACJ;;MCNqB,kBAAkB,CAAA;IAYpC,IACI,SAAS,CAAC,KAAsB,EAAA;QAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;AAED,IAAA,IAAI,SAAS,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAKD,IACI,OAAO,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;AAED,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAED,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACxC;IAQD,WAAsB,CAAA,UAAmC,EAAS,GAAsB,EAAA;QAAlE,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QAAS,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAzCxF,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAyCwE;IAE5F,QAAQ,GAAA;QACJ,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE;YACnD,cAAc,EAAE,MAAK;gBACjB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzD,gBAAA,IAAI,EAAE,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACpE,oBAAA,OAAO,mBAAmB,CAAC;AAC9B,iBAAA;AAAM,qBAAA;AACH,oBAAA,OAAO,mBAAmB,CAAC;AAC9B,iBAAA;aACJ;YACD,gBAAgB,EAAE,MAAK;gBACnB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE;AAC/F,oBAAA,OAAO,CAAC,CAAC;AACZ,iBAAA;AAAM,qBAAA;AACH,oBAAA,OAAO,GAAG,CAAC;AACd,iBAAA;aACJ;YACD,YAAY,EAAE,MAAK;AACf,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;aAC9B;YACD,eAAe,EAAE,MAAK;gBAClB,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzD,OAAO,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;aACxG;AACJ,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,SAAS,GAAA;QACL,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAkB,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvF,SAAA;KACJ;IAED,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,eAAe,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;AAClC,SAAA;KACJ;+GAxFiB,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAlB,kBAAkB,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,uBAAuB;AACjC,qBAAA;AACJ,iBAAA,CAAA;iIAWG,OAAO,EAAA,CAAA;sBADN,KAAK;gBAIF,SAAS,EAAA,CAAA;sBADZ,KAAK;gBAYN,KAAK,EAAA,CAAA;sBADJ,KAAK;gBAIF,OAAO,EAAA,CAAA;sBADV,KAAK;gBAgBG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;ACtDV;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/transforms/common.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'e',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n draw(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.baseDraw(element, data);\n if (g) {\n if (this.g) {\n this.g.replaceWith(g);\n } else {\n parentG.appendChild(g);\n }\n this.g = g;\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n abstract canDraw(element: T, data?: K): boolean;\n\n abstract baseDraw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { Generator } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T>\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n baseDraw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<T, ViewContainerRef, ImageGeneratorOptions<T>> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n baseDraw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, PlaitPluginElementComponent, Transforms, getSelectedElements } from '@plait/core';\n\nexport const setProperty = (board: PlaitBoard, options: any, callback?: (component: PlaitPluginElementComponent, path: Path) => void) => {\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(element => {\n const path = PlaitBoard.findPath(board, element);\n if (callback) {\n const component = PlaitElement.getComponent(element);\n callback(component, path);\n } else {\n Transforms.setNode(board, options, path);\n }\n });\n};\n","import { PlaitBoard } from '@plait/core';\nimport { setProperty } from './common';\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string) => {\n setProperty(board, { strokeStyle });\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string) => {\n setProperty(board, { fill });\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string) => {\n setProperty(board, { strokeColor });\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number) => {\n setProperty(board, { strokeWidth });\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient } from '@plait/core';\nimport { ResizeCursorClass, ResizeHandle } from '../constants/resize';\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n case 4:\n return ResizeHandle.n;\n case 5:\n return ResizeHandle.e;\n case 6:\n return ResizeHandle.s;\n case 7:\n return ResizeHandle.w;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElement, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElement, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { ResizeHandle, ResizeCursorClass } from '../constants/resize';\nimport { ResizeRef, addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n endResize?: (resizeRef: ResizeRef<T, K>) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n !isMainPointer(event)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n preventTouchMove(board, event, true);\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n MERGING.set(board, true);\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n options.endResize && options.endResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { Direction, Point, PointOfRectangle, Vector, distanceBetweenPointAndPoint } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getPointByVector(point: Point, vector: Vector, offset: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getFactorByPoints(source: Point, target: Point) {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n if (Point.isEquals(source, target)) {\n return {\n x: 1,\n y: 1\n };\n }\n return {\n x: (target[0] - source[0]) / distance,\n y: (target[1] - source[1]) / distance\n };\n}\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getDirectionFactor } from './direction';\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = getDirectionFactor(sourcePosition);\n const targetDir = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nexport const getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n\n let distance = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);\n\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { Point } from '@plait/core';\n\nexport const getRectangleByPoints = (points: Point[]) => {\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n points.forEach(point => {\n minX = Math.min(point[0], minX);\n maxX = Math.max(point[0], maxX);\n minY = Math.min(point[1], minY);\n maxY = Math.max(point[1], maxY);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // 拐点权重\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient, downScale } from '@plait/core';\nimport { removeDuplicatePoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n xAxis?: number;\n yAxis?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nconst routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n // 基于 middleX/middleY 中线纠正 path\n // 1. 找垂直/水平的线段\n // 2. 找到和middleX/middleY相交的点\n // 3. 基于垂直/水平的线段分别和相交点构建矩形\n // 4. 判断矩形相交\n // 5. 处理 path\n const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;\n if (xAxis !== undefined) {\n const optionsX = getAdjustOptions(path, xAxis, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (yAxis !== undefined) {\n const optionsY = getAdjustOptions(path, yAxis, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions) => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // 构建矩形\n const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const getCornerCount = (path: Point[]) => {\n let cornerCount = 0;\n for (let index = 1; index < path.length - 1; index++) {\n const pre = path[index - 1];\n const current = path[index];\n const next = path[index + 1];\n if (\n pre &&\n current &&\n next &&\n !(\n (downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||\n (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1]))\n )\n ) {\n cornerCount++;\n }\n }\n return cornerCount;\n };\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(\n corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1])\n );\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const cornerCount = getCornerCount([...route]);\n const newCornerCount = getCornerCount([...newPath]);\n if (newCornerCount <= cornerCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], middle: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === middle) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const sourceOuterRectangle = RectangleClient.inflate(sourceRectangle, defaultOffset * 2);\n const targetOuterRectangle = RectangleClient.inflate(targetRectangle, defaultOffset * 2);\n const isHit = RectangleClient.isHit(sourceOuterRectangle, targetOuterRectangle);\n if (isHit) {\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.draw({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plait/common",
3
- "version": "0.31.0",
3
+ "version": "0.32.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.2.0",
6
6
  "@angular/core": "^15.2.0",
@@ -16,3 +16,4 @@ export declare function calculatePolylineLength(points: Point[]): number;
16
16
  export declare function getRatioByPoint(points: Point[], point: Point): number;
17
17
  export declare function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point): boolean;
18
18
  export declare const removeDuplicatePoints: (points: Point[]) => Point[];
19
+ export declare const getExtendPoint: (source: Point, target: Point, extendDistance: number) => Point;