@jax-data-science/sci-image-visualizer 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/contracts/instance-segmenter.contract.mjs +1 -1
- package/esm2022/lib/toolbar/segmentation/yolo-segmenter.service.mjs +10 -3
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +9 -2
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs.map +1 -1
- package/lib/contracts/instance-segmenter.contract.d.ts +24 -0
- package/package.json +2 -2
|
@@ -9,4 +9,4 @@ export const INSTANCE_SEGMENTER = new InjectionToken('INSTANCE_SEGMENTER', {
|
|
|
9
9
|
providedIn: 'root',
|
|
10
10
|
factory: () => inject(YoloSegmenterService),
|
|
11
11
|
});
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2Utc2VnbWVudGVyLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb250cmFjdHMvaW5zdGFuY2Utc2VnbWVudGVyLmNvbnRyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBK0h0Rjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQXFCLG9CQUFvQixFQUFFO0lBQzdGLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUM7Q0FDNUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBZb2xvU2VnbWVudGVyU2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXIvc2VnbWVudGF0aW9uL3lvbG8tc2VnbWVudGVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIFBvcnQgZm9yIGFuIGF1dG9tYXRpYyAqKmluc3RhbmNlKiogc2VnbWVudGVyIOKAlCBvbmUgdGhhdCByZXR1cm5zIGRpc2NyZXRlLFxuICogY2xhc3NpZmllZCBvYmplY3RzIHJhdGhlciB0aGFuIGEgcGVyLXBpeGVsIGxhYmVsIG1hcC5cbiAqXG4gKiBUaGlzIGlzIGEgc2libGluZyBvZiB7QGxpbmsgSUNlbGxTZWdtZW50ZXJ9LCBub3QgYSByZXBsYWNlbWVudC4gQ2VsbHBvc2Utc3R5bGVcbiAqIHNlZ21lbnRlcnMgcHJvZHVjZSBvbmUgZXhjbHVzaXZlIGxhYmVsIHBlciBwaXhlbCwgd2hpY2ggaXMgZXhhY3RseSByaWdodCBmb3JcbiAqIGRlbnNlbHkgcGFja2VkIGNlbGxzOyBhIGRldGVjdG9yIGxpa2UgWU9MTyBwcm9kdWNlcyBvdmVybGFwcGluZyBpbnN0YW5jZXMsXG4gKiBlYWNoIHdpdGggaXRzIG93biBjbGFzcyBhbmQgY29uZmlkZW5jZSwgYW5kIGZsYXR0ZW5pbmcgdGhvc2UgaW50byBhIGxhYmVsIG1hcFxuICogd291bGQgc2lsZW50bHkgZGlzY2FyZCBib3RoIHRoZSBvdmVybGFwIGFuZCB0aGUgY2xhc3NpZmljYXRpb24uIFRoZSB0d29cbiAqIG91dHB1dHMgYXJlIGdlbnVpbmVseSBkaWZmZXJlbnQgc2hhcGVzLCBzbyB0aGV5IGdldCBkaWZmZXJlbnQgcG9ydHMuXG4gKlxuICogR2VvbWV0cnkgaXMgcmV0dXJuZWQgYXMgcG9seWdvbiByaW5ncyBpbiAqKmltYWdlIHBpeGVscyoqLCByZWFkeSB0byBiZWNvbWVcbiAqIHtAbGluayBSZWdpb259cyB3aXRob3V0IGEgc2Vjb25kIGNvbnZlcnNpb24gc3RlcC5cbiAqL1xuXG4vKiogQSBjbG9zZWQgcmluZzsgdGhlIGxhc3QgcG9pbnQgaXMgTk9UIGEgcmVwZWF0IG9mIHRoZSBmaXJzdC4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbmNlUmluZyA9IEFycmF5PFtudW1iZXIsIG51bWJlcl0+O1xuXG4vKiogT25lIHBvbHlnb24gd2l0aCBvcHRpb25hbCBpbnRlcmlvciByaW5ncyAoZG9udXQgaG9sZXMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVBvbHlnb24ge1xuICBleHRlcmlvcjogSW5zdGFuY2VSaW5nO1xuICBob2xlczogSW5zdGFuY2VSaW5nW107XG59XG5cbi8qKiBPbmUgZGV0ZWN0ZWQgb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZURldGVjdGlvbiB7XG4gIC8qKlxuICAgKiBPdXRsaW5lKHMpIG9mIHRoaXMgaW5zdGFuY2UuIFVzdWFsbHkgb25lLCBidXQgYSBtYXNrIHRoYXQgc3BsaXRzIHVuZGVyXG4gICAqIHRocmVzaG9sZGluZyB5aWVsZHMgc2V2ZXJhbCDigJQgdGhleSBhbGwgYmVsb25nIHRvIHRoZSBzYW1lIGRldGVjdGlvbi5cbiAgICovXG4gIHBvbHlnb25zOiBJbnN0YW5jZVBvbHlnb25bXTtcbiAgLyoqIGBbeDEsIHkxLCB4MiwgeTJdYCBpbiBpbWFnZSBwaXhlbHMuICovXG4gIGJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIC8qKiBNb2RlbCBjb25maWRlbmNlLCAwLi4xLiAqL1xuICBzY29yZTogbnVtYmVyO1xuICBjbGFzc0lkOiBudW1iZXI7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlU2VnbWVudGF0aW9uIHtcbiAgZGV0ZWN0aW9uczogSW5zdGFuY2VEZXRlY3Rpb25bXTtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIC8qKiBDbGFzcyBuYW1lcyBpbmRleGVkIGJ5IGNsYXNzIGlkLCBmcm9tIHRoZSBtb2RlbCdzIG93biBtZXRhZGF0YS4gKi9cbiAgY2xhc3NOYW1lczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVHVuYWJsZXMgZm9yIG9uZSBydW4uXG4gKlxuICogVGhyZWUgc2VwYXJhdGUgdGhyZXNob2xkcyBhcmUgaW4gcGxheSBhbmQgdGhleSBhcmUgZWFzeSB0byBjb25mbGF0ZTpcbiAqIGBjb25maWRlbmNlYCBhbmQgYGlvdVRocmVzaG9sZGAgYWN0IHBlciB0aWxlLCB3aGlsZSBgbWVyZ2VUaHJlc2hvbGRgIGdvdmVybnNcbiAqIHRoZSBjcm9zcy10aWxlIHJlY29uY2lsaWF0aW9uLiBUaGV5IGNvbWUgZnJvbSBkaWZmZXJlbnQgc3RhZ2VzIG9mIHRoZVxuICogcGlwZWxpbmUgYW5kIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlU2VnbWVudE9wdGlvbnMge1xuICAvKiogV2hpY2ggcmVnaXN0ZXJlZCBtb2RlbCB0byBydW4uIERlZmF1bHRzIHRvIHRoZSByZWdpc3RyeSdzIGRlZmF1bHQuICovXG4gIG1vZGVsSWQ/OiBzdHJpbmc7XG4gIC8qKiBNaW5pbXVtIGRldGVjdGlvbiBjb25maWRlbmNlLCBwZXIgdGlsZS4gKi9cbiAgY29uZmlkZW5jZT86IG51bWJlcjtcbiAgLyoqIE5NUyBJb1Ugd2l0aGluIGEgc2luZ2xlIHRpbGUuICovXG4gIGlvdVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIEludGVyc2VjdGlvbi1vdmVyLXNtYWxsZXIgdGhyZXNob2xkIGZvciBtZXJnaW5nIGFjcm9zcyB0aWxlIHNlYW1zLiAqL1xuICBtZXJnZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIFRpbGUgb3ZlcmxhcCwgcGVyY2VudC4gKi9cbiAgb3ZlcmxhcFg/OiBudW1iZXI7XG4gIG92ZXJsYXBZPzogbnVtYmVyO1xuICAvKiogUHJvYmFiaWxpdHkgYXQgd2hpY2ggYSBtYXNrIHBpeGVsIGNvdW50cyBhcyBpbnNpZGUuICovXG4gIG1hc2tUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKiBDYXAgb24gZGV0ZWN0aW9ucyBwZXIgdGlsZS4gKi9cbiAgbWF4RGV0ZWN0aW9ucz86IG51bWJlcjtcbiAgLyoqIEtlZXAgb25seSB0aGVzZSBjbGFzcyBpZHM7IG9taXQgZm9yIGFsbCBjbGFzc2VzIHRoZSBtb2RlbCBkZWNsYXJlcy4gKi9cbiAgY2xhc3NGaWx0ZXI/OiBudW1iZXJbXTtcbiAgLyoqIERvdWdsYXMtUGV1Y2tlciB0b2xlcmFuY2UgaW4gcGl4ZWxzIGZvciBvdXRsaW5lIHNpbXBsaWZpY2F0aW9uOyAwIGRpc2FibGVzLiAqL1xuICBzaW1wbGlmeVRvbGVyYW5jZT86IG51bWJlcjtcbiAgLyoqIERyb3AgaW5zdGFuY2VzIHdob3NlIG91dGxpbmUgYXJlYSBpcyBiZWxvdyB0aGlzLCBpbiBzcXVhcmUgcGl4ZWxzLiAqL1xuICBtaW5BcmVhPzogbnVtYmVyO1xuICAvKipcbiAgICogU2V0IGZhbHNlIHRvIGRldGVjdCBib3hlcyB3aXRob3V0IGFzc2VtYmxpbmcgbWFza3Mg4oCUIHN1YnN0YW50aWFsbHkgZmFzdGVyLFxuICAgKiBzaW5jZSBtYXNrIGFzc2VtYmx5IGRvbWluYXRlcyB0aGUgY29zdCBvZiBhIHJ1bi4gRGV0ZWN0aW9ucyB0aGVuIGNhcnJ5IGFcbiAgICogYm94IGFuZCBjbGFzcyBidXQgbm8gb3V0bGluZSwgc28gbm90aGluZyBjYW4gYmUgY29tbWl0dGVkIGFzIGEgcmVnaW9uLlxuICAgKi9cbiAgd2l0aE1hc2tzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFib3J0IGFuIGluLXByb2dyZXNzIHJ1bi5cbiAgICpcbiAgICogQ2FuY2VsbGF0aW9uIGlzIGNvb3BlcmF0aXZlIGFuZCBjaGVja2VkIGF0IHRpbGUgYm91bmRhcmllcywgc28gaXQgdGFrZXNcbiAgICogZWZmZWN0IHdpdGhpbiByb3VnaGx5IG9uZSB0aWxlIHJhdGhlciB0aGFuIGluc3RhbnRseSDigJQgYSBgc2Vzc2lvbi5ydW4oKWBcbiAgICogYWxyZWFkeSBpbiBmbGlnaHQgY2Fubm90IGJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogUHJvZ3Jlc3Mvc3RhdHVzIGNhbGxiYWNrcyAoYWxsIG9wdGlvbmFsKS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgbWlycm9ycyB7QGxpbmsgQ2VsbFNlZ21lbnRQcm9ncmVzc30gaW4gc2hhcGUgcmF0aGVyIHRoYW4gaW1wb3J0aW5nXG4gKiBpdCDigJQgdGhlIHR3byBjb250cmFjdHMgc3RheSBpbmRlcGVuZGVudGx5IHZlcnNpb25hYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlU2VnbWVudFByb2dyZXNzIHtcbiAgLyoqIE1vZGVsLWRvd25sb2FkIHByb2dyZXNzLCAwLi4xIChmaXJzdCBydW4gb25seSkuICovXG4gIG9uUHJvZ3Jlc3M/OiAoZnJhY3Rpb246IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJhdyBkb3dubG9hZCBieXRlIGNvdW50cywgZm9yIGhvc3RzIHRoYXQgcmVuZGVyIGEgc2l6ZSAoXCIxNDIgLyAyODcgTUJcIilcbiAgICogcmF0aGVyIHRoYW4gYSBiYXJlIHBlcmNlbnRhZ2UuIGB0b3RhbGAgaXMgbnVsbCB3aGVuIHRoZSByZXNwb25zZSBjYXJyaWVkIG5vXG4gICAqIENvbnRlbnQtTGVuZ3RoLlxuICAgKlxuICAgKiBBIGZyYWN0aW9uIGFsb25lIGNhbm5vdCBiZSB0dXJuZWQgYmFjayBpbnRvIGJ5dGVzLCBzbyBhIGhvc3QgZ2l2ZW4gb25seVxuICAgKiB7QGxpbmsgb25Qcm9ncmVzc30gaGFzIHRvIGludmVudCB0aGUgbnVtYmVycyDigJQgd2hpY2ggcmVhZHMgYXMgXCIwIE1CIC8gMCBNQlwiXG4gICAqIHRoZSBtb21lbnQgaXQgZG9lcy5cbiAgICovXG4gIG9uQnl0ZXM/OiAobG9hZGVkOiBudW1iZXIsIHRvdGFsOiBudW1iZXIgfCBudWxsKSA9PiB2b2lkO1xuICAvKiogSHVtYW4tcmVhZGFibGUgcGhhc2UsIGUuZy4gJ1J1bm5pbmcgaW5mZXJlbmNlICh0aWxlIDMvOCnigKYnLiAqL1xuICBvblN0YXR1cz86IChzdGF0dXM6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW5zdGFuY2VTZWdtZW50ZXIge1xuICAvKiogRGV0ZWN0IGFuZCBvdXRsaW5lIGFsbCBpbnN0YW5jZXMgaW4gYW4gUkdCQSBpbWFnZS4gKi9cbiAgc2VnbWVudEluc3RhbmNlcyhcbiAgICBpbWFnZTogeyBkYXRhOiBVaW50OENsYW1wZWRBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICBvcHRzPzogSW5zdGFuY2VTZWdtZW50T3B0aW9ucyxcbiAgICBwcm9ncmVzcz86IEluc3RhbmNlU2VnbWVudFByb2dyZXNzLFxuICApOiBQcm9taXNlPEluc3RhbmNlU2VnbWVudGF0aW9uPjtcbn1cblxuLyoqXG4gKiBESSB0b2tlbiBmb3IgdGhlIGF1dG9tYXRpYyBpbnN0YW5jZSBzZWdtZW50ZXIuIERlZmF1bHRzIHRvIHRoZSBpbi1saWJyYXJ5XG4gKiB7QGxpbmsgWW9sb1NlZ21lbnRlclNlcnZpY2V9ICh5b2xvLXNlZ2RldGVjdC1qcywgbGF6eS1sb2FkZWQpOyBvdmVycmlkZSBpdCBpblxuICogdGhlIGhvc3QgdG8gc3dhcCBpbXBsZW1lbnRhdGlvbnMg4oCUIGZvciBleGFtcGxlIHRvIGRlbGVnYXRlIHRvIHRoZSBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBJTlNUQU5DRV9TRUdNRU5URVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48SUluc3RhbmNlU2VnbWVudGVyPignSU5TVEFOQ0VfU0VHTUVOVEVSJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IGluamVjdChZb2xvU2VnbWVudGVyU2VydmljZSksXG59KTtcbiJdfQ==
|
|
@@ -29,6 +29,7 @@ export class YoloSegmenterService {
|
|
|
29
29
|
const seg = await this.getModel(modelId, (loaded, total) => {
|
|
30
30
|
if (total)
|
|
31
31
|
progress?.onProgress?.(loaded / total);
|
|
32
|
+
progress?.onBytes?.(loaded, total);
|
|
32
33
|
if (loaded > 0 && !announcedDownload) {
|
|
33
34
|
announcedDownload = true;
|
|
34
35
|
progress?.onStatus?.(`Downloading ${def.label} model…`);
|
|
@@ -44,12 +45,18 @@ export class YoloSegmenterService {
|
|
|
44
45
|
...(opts.maskThreshold !== undefined ? { maskThreshold: opts.maskThreshold } : {}),
|
|
45
46
|
...(opts.maxDetections !== undefined ? { maxDetections: opts.maxDetections } : {}),
|
|
46
47
|
...(opts.classFilter ? { classFilter: opts.classFilter } : {}),
|
|
47
|
-
|
|
48
|
+
...(opts.withMasks !== undefined ? { withMasks: opts.withMasks } : {}),
|
|
49
|
+
...(opts.signal ? { signal: opts.signal } : {}),
|
|
50
|
+
// Only worth tracing when there are masks to trace.
|
|
51
|
+
tracePolygons: opts.withMasks !== false,
|
|
48
52
|
traceOptions: {
|
|
49
53
|
...(opts.simplifyTolerance !== undefined ? { simplifyTolerance: opts.simplifyTolerance } : {}),
|
|
50
54
|
...(opts.minArea !== undefined ? { minArea: opts.minArea } : {}),
|
|
51
55
|
},
|
|
52
|
-
|
|
56
|
+
// The worker narrates its own phases — shader warm-up, per tile, merge,
|
|
57
|
+
// tracing — because only it knows which one it is in. Deriving a second
|
|
58
|
+
// status from tile counts here would just fight it.
|
|
59
|
+
onStatus: (s) => progress?.onStatus?.(s),
|
|
53
60
|
});
|
|
54
61
|
// Detections without geometry are dropped rather than surfaced as empty
|
|
55
62
|
// regions — a detection whose mask vanished under thresholding has nothing
|
|
@@ -162,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
|
|
|
162
169
|
type: Injectable,
|
|
163
170
|
args: [{ providedIn: 'root' }]
|
|
164
171
|
}] });
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW9sby1zZWdtZW50ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbGJhci9zZWdtZW50YXRpb24veW9sby1zZWdtZW50ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFxQixNQUFNLHVCQUF1QixDQUFDOztBQVcvRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFbUIsY0FBUyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQzdDLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztLQTRKdEU7SUExSkMsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixLQUFpRSxFQUNqRSxPQUErQixFQUFFLEVBQ2pDLFFBQWtDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDN0IsT0FBTyxFQUNQLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksS0FBSztnQkFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFD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RXhCLElBQUksTUFBTTtZQUFFLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyQiwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLG9FQUFvRTtRQUNwRSx1REFBdUQ7UUFDdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLE1BQU07WUFBRSxPQUFPO1FBQ25DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxZQUFZLENBQUMsT0FBZTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLE9BQU8sOENBQThDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQTdKVSxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURQLE1BQU07OzJGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0T3J0V2FzbUJhc2UgfSBmcm9tICcuL29ydC1ydW50aW1lLWNvbmZpZyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0WW9sb01vZGVsSWQsIGdldFlvbG9Nb2RlbCwgdHlwZSBZb2xvTW9kZWxEZWYgfSBmcm9tICcuL3lvbG8tbW9kZWwtcmVnaXN0cnknO1xuXG5pbXBvcnQgdHlwZSB7XG4gIElJbnN0YW5jZVNlZ21lbnRlcixcbiAgSW5zdGFuY2VEZXRlY3Rpb24sXG4gIEluc3RhbmNlU2VnbWVudGF0aW9uLFxuICBJbnN0YW5jZVNlZ21lbnRPcHRpb25zLFxuICBJbnN0YW5jZVNlZ21lbnRQcm9ncmVzcyxcbn0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2luc3RhbmNlLXNlZ21lbnRlci5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IFlvbG9TZWdtZW50ZXIgfSBmcm9tICd5b2xvLXNlZ2RldGVjdC1qcyc7XG5cbi8qKlxuICogRGVmYXVsdCBpbi1saWJyYXJ5IHtAbGluayBJSW5zdGFuY2VTZWdtZW50ZXJ9LCBiYWNrZWQgYnkgeW9sby1zZWdkZXRlY3QtanNcbiAqIChZT0xPdjgtc2VnIG9uIFdlYkdQVSwgZmFsbGluZyBiYWNrIHRvIFdBU00pLlxuICpcbiAqIGB5b2xvLXNlZ2RldGVjdC1qc2AgaXMgYSByZWd1bGFyIGRlcGVuZGVuY3kgYnV0IGlzICoqbGF6eS1pbXBvcnRlZCoqIG9uIGZpcnN0XG4gKiB1c2UsIHNvIGFwcHMgdGhhdCBuZXZlciBydW4gWU9MTyBwYXkgbm90aGluZyBmb3IgaXQg4oCUIG9yIGZvciBvbm54cnVudGltZS13ZWIg4oCUXG4gKiBpbiB0aGVpciBpbml0aWFsIGJ1bmRsZS4gVGhpcyBtaXJyb3JzIHtAbGluayBDZWxscG9zZVNlZ21lbnRlclNlcnZpY2V9LlxuICpcbiAqIFRoZSBvbmUgc3RydWN0dXJhbCBkaWZmZXJlbmNlIGZyb20gdGhlIENlbGxwb3NlIHNlcnZpY2U6IHRoZXJlIGFyZSBmb3VyIFlPTE9cbiAqIGNoZWNrcG9pbnRzLCBub3Qgb25lLCBzbyBpbnN0YW5jZXMgYXJlIGNhY2hlZCAqKnBlciBtb2RlbCBpZCoqIHJhdGhlciB0aGFuIGFzXG4gKiBhIHNpbmdsZSBzaW5nbGV0b24uIEVhY2ggZW50cnkgb3ducyBpdHMgb3duIHdvcmtlciBhbmQgT1JUIHNlc3Npb24sIHNvIGEgaG9zdFxuICogdGhhdCBzd2l0Y2hlcyBtb2RlbHMgcGF5cyBhIHNlY29uZCBsb2FkIGJ1dCBrZWVwcyB0aGUgZmlyc3Qgb25lIHdhcm0uIE5vdGhpbmdcbiAqIGV2aWN0cyBhdXRvbWF0aWNhbGx5IOKAlCB0aGVzZSBhcmUgfjE0NCBNQiBlYWNoLCBzbyBhIGhvc3QgdGhhdCBjeWNsZXMgdGhyb3VnaFxuICogYWxsIGZvdXIgc2hvdWxkIGNhbGwge0BsaW5rIGRpc3Bvc2V9IGZvciB0aGUgb25lcyBpdCBpcyBkb25lIHdpdGguXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgWW9sb1NlZ21lbnRlclNlcnZpY2UgaW1wbGVtZW50cyBJSW5zdGFuY2VTZWdtZW50ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlcyA9IG5ldyBNYXA8c3RyaW5nLCBZb2xvU2VnbWVudGVyPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmcgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTxZb2xvU2VnbWVudGVyPj4oKTtcblxuICBhc3luYyBzZWdtZW50SW5zdGFuY2VzKFxuICAgIGltYWdlOiB7IGRhdGE6IFVpbnQ4Q2xhbXBlZEFycmF5OyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuICAgIG9wdHM6IEluc3RhbmNlU2VnbWVudE9wdGlvbnMgPSB7fSxcbiAgICBwcm9ncmVzcz86IEluc3RhbmNlU2VnbWVudFByb2dyZXNzLFxuICApOiBQcm9taXNlPEluc3RhbmNlU2VnbWVudGF0aW9uPiB7XG4gICAgY29uc3QgbW9kZWxJZCA9IG9wdHMubW9kZWxJZCA/PyBnZXREZWZhdWx0WW9sb01vZGVsSWQoKTtcbiAgICBjb25zdCBkZWYgPSB0aGlzLnJlcXVpcmVNb2RlbChtb2RlbElkKTtcblxuICAgIGxldCBhbm5vdW5jZWREb3dubG9hZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNlZyA9IGF3YWl0IHRoaXMuZ2V0TW9kZWwoXG4gICAgICBtb2RlbElkLFxuICAgICAgKGxvYWRlZCwgdG90YWwpID0+IHtcbiAgICAgICAgaWYgKHRvdGFsKSBwcm9ncmVzcz8ub25Qcm9ncmVzcz8uKGxvYWRlZCAvIHRvdGFsKTtcbiAgICAgICAgaWYgKGxvYWRlZCA+IDAgJiYgIWFubm91bmNlZERvd25sb2FkKSB7XG4gICAgICAgICAgYW5ub3VuY2VkRG93bmxvYWQgPSB0cnVlO1xuICAgICAgICAgIHByb2dyZXNzPy5vblN0YXR1cz8uKGBEb3dubG9hZGluZyAke2RlZi5sYWJlbH0gbW9kZWzigKZgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChzdGF0dXMpID0+IHByb2dyZXNzPy5vblN0YXR1cz8uKHN0YXR1cyksXG4gICAgKTtcblxuICAgIHByb2dyZXNzPy5vblN0YXR1cz8uKCdSdW5uaW5nIGluZmVyZW5jZeKApicpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlZy5zZWdtZW50KFxuICAgICAgeyBkYXRhOiBpbWFnZS5kYXRhLCB3aWR0aDogaW1hZ2Uud2lkdGgsIGhlaWdodDogaW1hZ2UuaGVpZ2h0IH0sXG4gICAgICB7XG4gICAgICAgIGNvbmZUaHJlc2hvbGQ6IG9wdHMuY29uZmlkZW5jZSA/PyBkZWYuZGVmYXVsdHMuY29uZmlkZW5jZSxcbiAgICAgICAgaW91VGhyZXNob2xkOiBvcHRzLmlvdVRocmVzaG9sZCA/PyBkZWYuZGVmYXVsdHMuaW91VGhyZXNob2xkLFxuICAgICAgICB0aHJlc2hvbGQ6IG9wdHMubWVyZ2VUaHJlc2hvbGQgPz8gZGVmLmRlZmF1bHRzLm1lcmdlVGhyZXNob2xkLFxuICAgICAgICBvdmVybGFwWDogb3B0cy5vdmVybGFwWCA/PyBkZWYuZGVmYXVsdHMub3ZlcmxhcFgsXG4gICAgICAgIG92ZXJsYXBZOiBvcHRzLm92ZXJsYXBZID8/IGRlZi5kZWZhdWx0cy5vdmVybGFwWSxcbiAgICAgICAgLi4uKG9wdHMubWFza1RocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyBtYXNrVGhyZXNob2xkOiBvcHRzLm1hc2tUaHJlc2hvbGQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG9wdHMubWF4RGV0ZWN0aW9ucyAhPT0gdW5kZWZpbmVkID8geyBtYXhEZXRlY3Rpb25zOiBvcHRzLm1heERldGVjdGlvbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKG9wdHMuY2xhc3NGaWx0ZXIgPyB7IGNsYXNzRmlsdGVyOiBvcHRzLmNsYXNzRmlsdGVyIH0gOiB7fSksXG4gICAgICAgIHRyYWNlUG9seWdvbnM6IHRydWUsXG4gICAgICAgIHRyYWNlT3B0aW9uczoge1xuICAgICAgICAgIC4uLihvcHRzLnNpbXBsaWZ5VG9sZXJhbmNlICE9PSB1bmRlZmluZWQgPyB7IHNpbXBsaWZ5VG9sZXJhbmNlOiBvcHRzLnNpbXBsaWZ5VG9sZXJhbmNlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdHMubWluQXJlYSAhPT0gdW5kZWZpbmVkID8geyBtaW5BcmVhOiBvcHRzLm1pbkFyZWEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgb25UaWxlUHJvZ3Jlc3M6IChkb25lLCB0b3RhbCkgPT5cbiAgICAgICAgICBwcm9ncmVzcz8ub25TdGF0dXM/Lihkb25lIDwgdG90YWwgPyBgUnVubmluZyBpbmZlcmVuY2UgKHRpbGUgJHtkb25lfS8ke3RvdGFsfSnigKZgIDogJ1RyYWNpbmcgb3V0bGluZXPigKYnKSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIERldGVjdGlvbnMgd2l0aG91dCBnZW9tZXRyeSBhcmUgZHJvcHBlZCByYXRoZXIgdGhhbiBzdXJmYWNlZCBhcyBlbXB0eVxuICAgIC8vIHJlZ2lvbnMg4oCUIGEgZGV0ZWN0aW9uIHdob3NlIG1hc2sgdmFuaXNoZWQgdW5kZXIgdGhyZXNob2xkaW5nIGhhcyBub3RoaW5nXG4gICAgLy8gbWVhbmluZ2Z1bCB0byBkcmF3IG9yIGVkaXQuXG4gICAgY29uc3QgZGV0ZWN0aW9uczogSW5zdGFuY2VEZXRlY3Rpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZCBvZiByZXN1bHQuZGV0ZWN0aW9ucykge1xuICAgICAgaWYgKCFkLnBvbHlnb25zIHx8IGQucG9seWdvbnMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICAgIGRldGVjdGlvbnMucHVzaCh7XG4gICAgICAgIHBvbHlnb25zOiBkLnBvbHlnb25zLm1hcCgocCkgPT4gKHtcbiAgICAgICAgICBleHRlcmlvcjogcC5leHRlcmlvci5tYXAoKFt4LCB5XSk6IFtudW1iZXIsIG51bWJlcl0gPT4gW3gsIHldKSxcbiAgICAgICAgICBob2xlczogcC5ob2xlcy5tYXAoKGgpID0+IGgubWFwKChbeCwgeV0pOiBbbnVtYmVyLCBudW1iZXJdID0+IFt4LCB5XSkpLFxuICAgICAgICB9KSksXG4gICAgICAgIGJveDogW2QuYm94WzBdLCBkLmJveFsxXSwgZC5ib3hbMl0sIGQuYm94WzNdXSxcbiAgICAgICAgc2NvcmU6IGQuc2NvcmUsXG4gICAgICAgIGNsYXNzSWQ6IGQuY2xhc3NJZCxcbiAgICAgICAgY2xhc3NOYW1lOiBkLmNsYXNzTmFtZSA/PyBgY2xhc3Mke2QuY2xhc3NJZH1gLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRldGVjdGlvbnMsXG4gICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgaGVpZ2h0OiByZXN1bHQuaGVpZ2h0LFxuICAgICAgY2xhc3NOYW1lczogcmVzdWx0LmNsYXNzTmFtZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIHNlZ21lbnRlciBmb3IgYSBtb2RlbCBpZCwgY3JlYXRlZCBvbiBmaXJzdCB1c2UgYW5kIHJldXNlZFxuICAgKiB0aGVyZWFmdGVyIChkZWR1cGVkIGFjcm9zcyBjb25jdXJyZW50IGNhbGxlcnMpLiBFeHBvc2VkIHNvIGEgaG9zdCdzXG4gICAqIHByb2Nlc3NpbmcgcGlwZWxpbmUgY2FuIGRyaXZlIHJpY2hlciBgc2VnbWVudCgpYCBvcHRpb25zIG9uIHRoZSBzYW1lIGxvYWRlZFxuICAgKiBzZXNzaW9uIGluc3RlYWQgb2YgbG9hZGluZyB0aGUgbW9kZWwgdHdpY2UuXG4gICAqL1xuICBnZXRNb2RlbChcbiAgICBtb2RlbElkOiBzdHJpbmcgPSBnZXREZWZhdWx0WW9sb01vZGVsSWQoKSxcbiAgICBvblByb2dyZXNzPzogKGxvYWRlZDogbnVtYmVyLCB0b3RhbDogbnVtYmVyIHwgbnVsbCkgPT4gdm9pZCxcbiAgICBvblN0YXR1cz86IChzdGF0dXM6IHN0cmluZykgPT4gdm9pZCxcbiAgKTogUHJvbWlzZTxZb2xvU2VnbWVudGVyPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmluc3RhbmNlcy5nZXQobW9kZWxJZCk7XG4gICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGV4aXN0aW5nKTtcblxuICAgIGNvbnN0IGluRmxpZ2h0ID0gdGhpcy5sb2FkaW5nLmdldChtb2RlbElkKTtcbiAgICBpZiAoaW5GbGlnaHQpIHJldHVybiBpbkZsaWdodDtcblxuICAgIGNvbnN0IGRlZiA9IHRoaXMucmVxdWlyZU1vZGVsKG1vZGVsSWQpO1xuICAgIGNvbnN0IGxvYWQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTGF6eToga2VlcCB5b2xvLXNlZ2RldGVjdC1qcyArIGl0cyBPUlQgcnVudGltZSBvdXQgb2YgdGhlIGluaXRpYWwgYnVuZGxlLlxuICAgICAgY29uc3QgeyBZb2xvU2VnbWVudGVyLCBjb25maWd1cmVPcnQgfSA9IGF3YWl0IGltcG9ydCgneW9sby1zZWdkZXRlY3QtanMnKTtcbiAgICAgIGNvbmZpZ3VyZU9ydCh7IHdhc21QYXRoczogZ2V0T3J0V2FzbUJhc2UoKSB9KTtcbiAgICAgIGNvbnN0IHNlZyA9IGF3YWl0IFlvbG9TZWdtZW50ZXIuZnJvbVByZXRyYWluZWQoZGVmLm1vZGVsVXJsLCB7XG4gICAgICAgIHByZWxvYWQ6IHRydWUsXG4gICAgICAgIC4uLihkZWYubWV0YVVybCA/IHsgbWV0YVVybDogZGVmLm1ldGFVcmwgfSA6IHt9KSxcbiAgICAgICAgb25Qcm9ncmVzczogKHsgbG9hZGVkLCB0b3RhbCB9KSA9PiBvblByb2dyZXNzPy4obG9hZGVkLCB0b3RhbCksXG4gICAgICAgIG9uU3RhdHVzOiAocykgPT4gb25TdGF0dXM/LihzKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbnN0YW5jZXMuc2V0KG1vZGVsSWQsIHNlZyk7XG4gICAgICByZXR1cm4gc2VnO1xuICAgIH0pKCk7XG5cbiAgICB0aGlzLmxvYWRpbmcuc2V0KG1vZGVsSWQsIGxvYWQpO1xuICAgIC8vIEEgZmFpbGVkIGxvYWQgbXVzdCBub3QgcG9pc29uIHRoZSBjYWNoZSDigJQgdGhlIG5leHQgY2FsbGVyIHNob3VsZCByZXRyeVxuICAgIC8vIHJhdGhlciB0aGFuIGluaGVyaXQgdGhlIHJlamVjdGVkIHByb21pc2UgZm9yZXZlci5cbiAgICBsb2FkLmNhdGNoKCgpID0+IHRoaXMubG9hZGluZy5kZWxldGUobW9kZWxJZCkpO1xuICAgIHJldHVybiBsb2FkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYSBtb2RlbCBpcyBhbHJlYWR5IGxvYWRlZCAod2FybSkuICovXG4gIGlzTG9hZGVkKG1vZGVsSWQ6IHN0cmluZyA9IGdldERlZmF1bHRZb2xvTW9kZWxJZCgpKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2VzLmhhcyhtb2RlbElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIG9uZSBtb2RlbCwgb3IgYWxsIG9mIHRoZW0uIFNhZmUgdG8gY2FsbCBvbiBhIG1vZGVsIG5ldmVyIGxvYWRlZC5cbiAgICpcbiAgICogSW4tZmxpZ2h0IGxvYWRzIGFyZSB0b3JuIGRvd24gdG9vLCBub3QganVzdCB3YXJtIG9uZXMuIFNpbXBseSBkcm9wcGluZyB0aGVcbiAgICogcGVuZGluZyBwcm9taXNlIGFuZCByZXR1cm5pbmcgd291bGQgbGV0IHRoZSBsb2FkIGZpbmlzaCBhZnRlcndhcmRzLFxuICAgKiByZS1wb3B1bGF0ZSB7QGxpbmsgaW5zdGFuY2VzfSwgYW5kIHN0cmFuZCBhIGxpdmUgd29ya2VyIGFuZCBPUlQgc2Vzc2lvbiB0aGF0XG4gICAqIG5vdGhpbmcgb3ducyDigJQgZGlzcG9zYWwgd291bGQgaGF2ZSByZXBvcnRlZCBzdWNjZXNzIHdoaWxlIGxlYWtpbmcuIFNvIGEgbG9hZFxuICAgKiB0aGF0IGlzIHN0aWxsIHJ1bm5pbmcgaXMgYXdhaXRlZCBhbmQgdGhlbiByZWxlYXNlZC5cbiAgICovXG4gIGFzeW5jIGRpc3Bvc2UobW9kZWxJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlkcyA9IG1vZGVsSWQgPyBbbW9kZWxJZF0gOiBbLi4ubmV3IFNldChbLi4udGhpcy5pbnN0YW5jZXMua2V5cygpLCAuLi50aGlzLmxvYWRpbmcua2V5cygpXSldO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGlkcy5tYXAoKGlkKSA9PiB0aGlzLmRpc3Bvc2VPbmUoaWQpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRpc3Bvc2VPbmUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLmxvYWRpbmcuZ2V0KGlkKTtcbiAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmluc3RhbmNlcy5nZXQoaWQpO1xuICAgIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZShpZCk7XG4gICAgdGhpcy5sb2FkaW5nLmRlbGV0ZShpZCk7XG5cbiAgICBpZiAobG9hZGVkKSBhd2FpdCBsb2FkZWQuZGlzcG9zZSgpO1xuICAgIGlmICghcGVuZGluZykgcmV0dXJuO1xuXG4gICAgLy8gQSBwZW5kaW5nIGxvYWQgYXNzaWducyBpbnN0YW5jZXNbaWRdIGJlZm9yZSBpdHMgcHJvbWlzZSByZXNvbHZlcywgc28gYnlcbiAgICAvLyB0aGUgdGltZSB0aGlzIGF3YWl0IHJldHVybnMgdGhlIGVudHJ5IGlzIGJhY2suIENsZWFyIGl0IG9ubHkgaWYgaXQgc3RpbGxcbiAgICAvLyBwb2ludHMgYXQgd2hhdCAqdGhpcyogbG9hZCBwcm9kdWNlZCDigJQgYSBuZXdlciBsb2FkIHN0YXJ0ZWQgaW4gdGhlXG4gICAgLy8gbWVhbnRpbWUgb3ducyBpdHMgb3duIGVudHJ5IGFuZCBtdXN0IG5vdCBiZSBldmljdGVkLlxuICAgIGNvbnN0IHNlZyA9IGF3YWl0IHBlbmRpbmcuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgaWYgKCFzZWcgfHwgc2VnID09PSBsb2FkZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5pbnN0YW5jZXMuZ2V0KGlkKSA9PT0gc2VnKSB0aGlzLmluc3RhbmNlcy5kZWxldGUoaWQpO1xuICAgIGF3YWl0IHNlZy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVNb2RlbChtb2RlbElkOiBzdHJpbmcpOiBZb2xvTW9kZWxEZWYge1xuICAgIGNvbnN0IGRlZiA9IGdldFlvbG9Nb2RlbChtb2RlbElkKTtcbiAgICBpZiAoIWRlZikgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIFlPTE8gbW9kZWwgaWQgXCIke21vZGVsSWR9XCIuYCk7XG4gICAgaWYgKCFkZWYubW9kZWxVcmwudHJpbSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFlPTE8gbW9kZWwgXCIke21vZGVsSWR9XCIgaXMgbm90IGNvbmZpZ3VyZWQg4oCUIGl0cyBtb2RlbFVybCBpcyBlbXB0eS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxufVxuIl19
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieW9sby1zZWdtZW50ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdG9vbGJhci9zZWdtZW50YXRpb24veW9sby1zZWdtZW50ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFxQixNQUFNLHVCQUF1QixDQUFDOztBQVcvRjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFbUIsY0FBUyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQzdDLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztLQWtLdEU7SUFoS0MsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixLQUFpRSxFQUNqRSxPQUErQixFQUFFLEVBQ2pDLFFBQWtDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZDLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDN0IsT0FBTyxFQUNQLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hCLElBQUksS0FBSztnQkFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2xELFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJ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QUMsZUFBZSxPQUFPLDhDQUE4QyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs4R0FuS1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FEUCxNQUFNOzsyRkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldE9ydFdhc21CYXNlIH0gZnJvbSAnLi9vcnQtcnVudGltZS1jb25maWcnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFlvbG9Nb2RlbElkLCBnZXRZb2xvTW9kZWwsIHR5cGUgWW9sb01vZGVsRGVmIH0gZnJvbSAnLi95b2xvLW1vZGVsLXJlZ2lzdHJ5JztcblxuaW1wb3J0IHR5cGUge1xuICBJSW5zdGFuY2VTZWdtZW50ZXIsXG4gIEluc3RhbmNlRGV0ZWN0aW9uLFxuICBJbnN0YW5jZVNlZ21lbnRhdGlvbixcbiAgSW5zdGFuY2VTZWdtZW50T3B0aW9ucyxcbiAgSW5zdGFuY2VTZWdtZW50UHJvZ3Jlc3MsXG59IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9pbnN0YW5jZS1zZWdtZW50ZXIuY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBZb2xvU2VnbWVudGVyIH0gZnJvbSAneW9sby1zZWdkZXRlY3QtanMnO1xuXG4vKipcbiAqIERlZmF1bHQgaW4tbGlicmFyeSB7QGxpbmsgSUluc3RhbmNlU2VnbWVudGVyfSwgYmFja2VkIGJ5IHlvbG8tc2VnZGV0ZWN0LWpzXG4gKiAoWU9MT3Y4LXNlZyBvbiBXZWJHUFUsIGZhbGxpbmcgYmFjayB0byBXQVNNKS5cbiAqXG4gKiBgeW9sby1zZWdkZXRlY3QtanNgIGlzIGEgcmVndWxhciBkZXBlbmRlbmN5IGJ1dCBpcyAqKmxhenktaW1wb3J0ZWQqKiBvbiBmaXJzdFxuICogdXNlLCBzbyBhcHBzIHRoYXQgbmV2ZXIgcnVuIFlPTE8gcGF5IG5vdGhpbmcgZm9yIGl0IOKAlCBvciBmb3Igb25ueHJ1bnRpbWUtd2ViIOKAlFxuICogaW4gdGhlaXIgaW5pdGlhbCBidW5kbGUuIFRoaXMgbWlycm9ycyB7QGxpbmsgQ2VsbHBvc2VTZWdtZW50ZXJTZXJ2aWNlfS5cbiAqXG4gKiBUaGUgb25lIHN0cnVjdHVyYWwgZGlmZmVyZW5jZSBmcm9tIHRoZSBDZWxscG9zZSBzZXJ2aWNlOiB0aGVyZSBhcmUgZm91ciBZT0xPXG4gKiBjaGVja3BvaW50cywgbm90IG9uZSwgc28gaW5zdGFuY2VzIGFyZSBjYWNoZWQgKipwZXIgbW9kZWwgaWQqKiByYXRoZXIgdGhhbiBhc1xuICogYSBzaW5nbGUgc2luZ2xldG9uLiBFYWNoIGVudHJ5IG93bnMgaXRzIG93biB3b3JrZXIgYW5kIE9SVCBzZXNzaW9uLCBzbyBhIGhvc3RcbiAqIHRoYXQgc3dpdGNoZXMgbW9kZWxzIHBheXMgYSBzZWNvbmQgbG9hZCBidXQga2VlcHMgdGhlIGZpcnN0IG9uZSB3YXJtLiBOb3RoaW5nXG4gKiBldmljdHMgYXV0b21hdGljYWxseSDigJQgdGhlc2UgYXJlIH4xNDQgTUIgZWFjaCwgc28gYSBob3N0IHRoYXQgY3ljbGVzIHRocm91Z2hcbiAqIGFsbCBmb3VyIHNob3VsZCBjYWxsIHtAbGluayBkaXNwb3NlfSBmb3IgdGhlIG9uZXMgaXQgaXMgZG9uZSB3aXRoLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFlvbG9TZWdtZW50ZXJTZXJ2aWNlIGltcGxlbWVudHMgSUluc3RhbmNlU2VnbWVudGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZXMgPSBuZXcgTWFwPHN0cmluZywgWW9sb1NlZ21lbnRlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8WW9sb1NlZ21lbnRlcj4+KCk7XG5cbiAgYXN5bmMgc2VnbWVudEluc3RhbmNlcyhcbiAgICBpbWFnZTogeyBkYXRhOiBVaW50OENsYW1wZWRBcnJheTsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICBvcHRzOiBJbnN0YW5jZVNlZ21lbnRPcHRpb25zID0ge30sXG4gICAgcHJvZ3Jlc3M/OiBJbnN0YW5jZVNlZ21lbnRQcm9ncmVzcyxcbiAgKTogUHJvbWlzZTxJbnN0YW5jZVNlZ21lbnRhdGlvbj4ge1xuICAgIGNvbnN0IG1vZGVsSWQgPSBvcHRzLm1vZGVsSWQgPz8gZ2V0RGVmYXVsdFlvbG9Nb2RlbElkKCk7XG4gICAgY29uc3QgZGVmID0gdGhpcy5yZXF1aXJlTW9kZWwobW9kZWxJZCk7XG5cbiAgICBsZXQgYW5ub3VuY2VkRG93bmxvYWQgPSBmYWxzZTtcbiAgICBjb25zdCBzZWcgPSBhd2FpdCB0aGlzLmdldE1vZGVsKFxuICAgICAgbW9kZWxJZCxcbiAgICAgIChsb2FkZWQsIHRvdGFsKSA9PiB7XG4gICAgICAgIGlmICh0b3RhbCkgcHJvZ3Jlc3M/Lm9uUHJvZ3Jlc3M/Lihsb2FkZWQgLyB0b3RhbCk7XG4gICAgICAgIHByb2dyZXNzPy5vbkJ5dGVzPy4obG9hZGVkLCB0b3RhbCk7XG4gICAgICAgIGlmIChsb2FkZWQgPiAwICYmICFhbm5vdW5jZWREb3dubG9hZCkge1xuICAgICAgICAgIGFubm91bmNlZERvd25sb2FkID0gdHJ1ZTtcbiAgICAgICAgICBwcm9ncmVzcz8ub25TdGF0dXM/LihgRG93bmxvYWRpbmcgJHtkZWYubGFiZWx9IG1vZGVs4oCmYCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoc3RhdHVzKSA9PiBwcm9ncmVzcz8ub25TdGF0dXM/LihzdGF0dXMpLFxuICAgICk7XG5cbiAgICBwcm9ncmVzcz8ub25TdGF0dXM/LignUnVubmluZyBpbmZlcmVuY2XigKYnKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZWcuc2VnbWVudChcbiAgICAgIHsgZGF0YTogaW1hZ2UuZGF0YSwgd2lkdGg6IGltYWdlLndpZHRoLCBoZWlnaHQ6IGltYWdlLmhlaWdodCB9LFxuICAgICAge1xuICAgICAgICBjb25mVGhyZXNob2xkOiBvcHRzLmNvbmZpZGVuY2UgPz8gZGVmLmRlZmF1bHRzLmNvbmZpZGVuY2UsXG4gICAgICAgIGlvdVRocmVzaG9sZDogb3B0cy5pb3VUaHJlc2hvbGQgPz8gZGVmLmRlZmF1bHRzLmlvdVRocmVzaG9sZCxcbiAgICAgICAgdGhyZXNob2xkOiBvcHRzLm1lcmdlVGhyZXNob2xkID8/IGRlZi5kZWZhdWx0cy5tZXJnZVRocmVzaG9sZCxcbiAgICAgICAgb3ZlcmxhcFg6IG9wdHMub3ZlcmxhcFggPz8gZGVmLmRlZmF1bHRzLm92ZXJsYXBYLFxuICAgICAgICBvdmVybGFwWTogb3B0cy5vdmVybGFwWSA/PyBkZWYuZGVmYXVsdHMub3ZlcmxhcFksXG4gICAgICAgIC4uLihvcHRzLm1hc2tUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCA/IHsgbWFza1RocmVzaG9sZDogb3B0cy5tYXNrVGhyZXNob2xkIH0gOiB7fSksXG4gICAgICAgIC4uLihvcHRzLm1heERldGVjdGlvbnMgIT09IHVuZGVmaW5lZCA/IHsgbWF4RGV0ZWN0aW9uczogb3B0cy5tYXhEZXRlY3Rpb25zIH0gOiB7fSksXG4gICAgICAgIC4uLihvcHRzLmNsYXNzRmlsdGVyID8geyBjbGFzc0ZpbHRlcjogb3B0cy5jbGFzc0ZpbHRlciB9IDoge30pLFxuICAgICAgICAuLi4ob3B0cy53aXRoTWFza3MgIT09IHVuZGVmaW5lZCA/IHsgd2l0aE1hc2tzOiBvcHRzLndpdGhNYXNrcyB9IDoge30pLFxuICAgICAgICAuLi4ob3B0cy5zaWduYWwgPyB7IHNpZ25hbDogb3B0cy5zaWduYWwgfSA6IHt9KSxcbiAgICAgICAgLy8gT25seSB3b3J0aCB0cmFjaW5nIHdoZW4gdGhlcmUgYXJlIG1hc2tzIHRvIHRyYWNlLlxuICAgICAgICB0cmFjZVBvbHlnb25zOiBvcHRzLndpdGhNYXNrcyAhPT0gZmFsc2UsXG4gICAgICAgIHRyYWNlT3B0aW9uczoge1xuICAgICAgICAgIC4uLihvcHRzLnNpbXBsaWZ5VG9sZXJhbmNlICE9PSB1bmRlZmluZWQgPyB7IHNpbXBsaWZ5VG9sZXJhbmNlOiBvcHRzLnNpbXBsaWZ5VG9sZXJhbmNlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdHMubWluQXJlYSAhPT0gdW5kZWZpbmVkID8geyBtaW5BcmVhOiBvcHRzLm1pbkFyZWEgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhlIHdvcmtlciBuYXJyYXRlcyBpdHMgb3duIHBoYXNlcyDigJQgc2hhZGVyIHdhcm0tdXAsIHBlciB0aWxlLCBtZXJnZSxcbiAgICAgICAgLy8gdHJhY2luZyDigJQgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoaWNoIG9uZSBpdCBpcyBpbi4gRGVyaXZpbmcgYSBzZWNvbmRcbiAgICAgICAgLy8gc3RhdHVzIGZyb20gdGlsZSBjb3VudHMgaGVyZSB3b3VsZCBqdXN0IGZpZ2h0IGl0LlxuICAgICAgICBvblN0YXR1czogKHMpID0+IHByb2dyZXNzPy5vblN0YXR1cz8uKHMpLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gRGV0ZWN0aW9ucyB3aXRob3V0IGdlb21ldHJ5IGFyZSBkcm9wcGVkIHJhdGhlciB0aGFuIHN1cmZhY2VkIGFzIGVtcHR5XG4gICAgLy8gcmVnaW9ucyDigJQgYSBkZXRlY3Rpb24gd2hvc2UgbWFzayB2YW5pc2hlZCB1bmRlciB0aHJlc2hvbGRpbmcgaGFzIG5vdGhpbmdcbiAgICAvLyBtZWFuaW5nZnVsIHRvIGRyYXcgb3IgZWRpdC5cbiAgICBjb25zdCBkZXRlY3Rpb25zOiBJbnN0YW5jZURldGVjdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBkIG9mIHJlc3VsdC5kZXRlY3Rpb25zKSB7XG4gICAgICBpZiAoIWQucG9seWdvbnMgfHwgZC5wb2x5Z29ucy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuICAgICAgZGV0ZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgcG9seWdvbnM6IGQucG9seWdvbnMubWFwKChwKSA9PiAoe1xuICAgICAgICAgIGV4dGVyaW9yOiBwLmV4dGVyaW9yLm1hcCgoW3gsIHldKTogW251bWJlciwgbnVtYmVyXSA9PiBbeCwgeV0pLFxuICAgICAgICAgIGhvbGVzOiBwLmhvbGVzLm1hcCgoaCkgPT4gaC5tYXAoKFt4LCB5XSk6IFtudW1iZXIsIG51bWJlcl0gPT4gW3gsIHldKSksXG4gICAgICAgIH0pKSxcbiAgICAgICAgYm94OiBbZC5ib3hbMF0sIGQuYm94WzFdLCBkLmJveFsyXSwgZC5ib3hbM11dLFxuICAgICAgICBzY29yZTogZC5zY29yZSxcbiAgICAgICAgY2xhc3NJZDogZC5jbGFzc0lkLFxuICAgICAgICBjbGFzc05hbWU6IGQuY2xhc3NOYW1lID8/IGBjbGFzcyR7ZC5jbGFzc0lkfWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGV0ZWN0aW9ucyxcbiAgICAgIHdpZHRoOiByZXN1bHQud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgICBjbGFzc05hbWVzOiByZXN1bHQuY2xhc3NOYW1lcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgc2VnbWVudGVyIGZvciBhIG1vZGVsIGlkLCBjcmVhdGVkIG9uIGZpcnN0IHVzZSBhbmQgcmV1c2VkXG4gICAqIHRoZXJlYWZ0ZXIgKGRlZHVwZWQgYWNyb3NzIGNvbmN1cnJlbnQgY2FsbGVycykuIEV4cG9zZWQgc28gYSBob3N0J3NcbiAgICogcHJvY2Vzc2luZyBwaXBlbGluZSBjYW4gZHJpdmUgcmljaGVyIGBzZWdtZW50KClgIG9wdGlvbnMgb24gdGhlIHNhbWUgbG9hZGVkXG4gICAqIHNlc3Npb24gaW5zdGVhZCBvZiBsb2FkaW5nIHRoZSBtb2RlbCB0d2ljZS5cbiAgICovXG4gIGdldE1vZGVsKFxuICAgIG1vZGVsSWQ6IHN0cmluZyA9IGdldERlZmF1bHRZb2xvTW9kZWxJZCgpLFxuICAgIG9uUHJvZ3Jlc3M/OiAobG9hZGVkOiBudW1iZXIsIHRvdGFsOiBudW1iZXIgfCBudWxsKSA9PiB2b2lkLFxuICAgIG9uU3RhdHVzPzogKHN0YXR1czogc3RyaW5nKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPFlvbG9TZWdtZW50ZXI+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuaW5zdGFuY2VzLmdldChtb2RlbElkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhpc3RpbmcpO1xuXG4gICAgY29uc3QgaW5GbGlnaHQgPSB0aGlzLmxvYWRpbmcuZ2V0KG1vZGVsSWQpO1xuICAgIGlmIChpbkZsaWdodCkgcmV0dXJuIGluRmxpZ2h0O1xuXG4gICAgY29uc3QgZGVmID0gdGhpcy5yZXF1aXJlTW9kZWwobW9kZWxJZCk7XG4gICAgY29uc3QgbG9hZCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBMYXp5OiBrZWVwIHlvbG8tc2VnZGV0ZWN0LWpzICsgaXRzIE9SVCBydW50aW1lIG91dCBvZiB0aGUgaW5pdGlhbCBidW5kbGUuXG4gICAgICBjb25zdCB7IFlvbG9TZWdtZW50ZXIsIGNvbmZpZ3VyZU9ydCB9ID0gYXdhaXQgaW1wb3J0KCd5b2xvLXNlZ2RldGVjdC1qcycpO1xuICAgICAgY29uZmlndXJlT3J0KHsgd2FzbVBhdGhzOiBnZXRPcnRXYXNtQmFzZSgpIH0pO1xuICAgICAgY29uc3Qgc2VnID0gYXdhaXQgWW9sb1NlZ21lbnRlci5mcm9tUHJldHJhaW5lZChkZWYubW9kZWxVcmwsIHtcbiAgICAgICAgcHJlbG9hZDogdHJ1ZSxcbiAgICAgICAgLi4uKGRlZi5tZXRhVXJsID8geyBtZXRhVXJsOiBkZWYubWV0YVVybCB9IDoge30pLFxuICAgICAgICBvblByb2dyZXNzOiAoeyBsb2FkZWQsIHRvdGFsIH0pID0+IG9uUHJvZ3Jlc3M/Lihsb2FkZWQsIHRvdGFsKSxcbiAgICAgICAgb25TdGF0dXM6IChzKSA9PiBvblN0YXR1cz8uKHMpLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmluc3RhbmNlcy5zZXQobW9kZWxJZCwgc2VnKTtcbiAgICAgIHJldHVybiBzZWc7XG4gICAgfSkoKTtcblxuICAgIHRoaXMubG9hZGluZy5zZXQobW9kZWxJZCwgbG9hZCk7XG4gICAgLy8gQSBmYWlsZWQgbG9hZCBtdXN0IG5vdCBwb2lzb24gdGhlIGNhY2hlIOKAlCB0aGUgbmV4dCBjYWxsZXIgc2hvdWxkIHJldHJ5XG4gICAgLy8gcmF0aGVyIHRoYW4gaW5oZXJpdCB0aGUgcmVqZWN0ZWQgcHJvbWlzZSBmb3JldmVyLlxuICAgIGxvYWQuY2F0Y2goKCkgPT4gdGhpcy5sb2FkaW5nLmRlbGV0ZShtb2RlbElkKSk7XG4gICAgcmV0dXJuIGxvYWQ7XG4gIH1cblxuICAvKiogV2hldGhlciBhIG1vZGVsIGlzIGFscmVhZHkgbG9hZGVkICh3YXJtKS4gKi9cbiAgaXNMb2FkZWQobW9kZWxJZDogc3RyaW5nID0gZ2V0RGVmYXVsdFlvbG9Nb2RlbElkKCkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuaGFzKG1vZGVsSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2Ugb25lIG1vZGVsLCBvciBhbGwgb2YgdGhlbS4gU2FmZSB0byBjYWxsIG9uIGEgbW9kZWwgbmV2ZXIgbG9hZGVkLlxuICAgKlxuICAgKiBJbi1mbGlnaHQgbG9hZHMgYXJlIHRvcm4gZG93biB0b28sIG5vdCBqdXN0IHdhcm0gb25lcy4gU2ltcGx5IGRyb3BwaW5nIHRoZVxuICAgKiBwZW5kaW5nIHByb21pc2UgYW5kIHJldHVybmluZyB3b3VsZCBsZXQgdGhlIGxvYWQgZmluaXNoIGFmdGVyd2FyZHMsXG4gICAqIHJlLXBvcHVsYXRlIHtAbGluayBpbnN0YW5jZXN9LCBhbmQgc3RyYW5kIGEgbGl2ZSB3b3JrZXIgYW5kIE9SVCBzZXNzaW9uIHRoYXRcbiAgICogbm90aGluZyBvd25zIOKAlCBkaXNwb3NhbCB3b3VsZCBoYXZlIHJlcG9ydGVkIHN1Y2Nlc3Mgd2hpbGUgbGVha2luZy4gU28gYSBsb2FkXG4gICAqIHRoYXQgaXMgc3RpbGwgcnVubmluZyBpcyBhd2FpdGVkIGFuZCB0aGVuIHJlbGVhc2VkLlxuICAgKi9cbiAgYXN5bmMgZGlzcG9zZShtb2RlbElkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWRzID0gbW9kZWxJZCA/IFttb2RlbElkXSA6IFsuLi5uZXcgU2V0KFsuLi50aGlzLmluc3RhbmNlcy5rZXlzKCksIC4uLnRoaXMubG9hZGluZy5rZXlzKCldKV07XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaWRzLm1hcCgoaWQpID0+IHRoaXMuZGlzcG9zZU9uZShpZCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGlzcG9zZU9uZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMubG9hZGluZy5nZXQoaWQpO1xuICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMuaW5zdGFuY2VzLmdldChpZCk7XG4gICAgdGhpcy5pbnN0YW5jZXMuZGVsZXRlKGlkKTtcbiAgICB0aGlzLmxvYWRpbmcuZGVsZXRlKGlkKTtcblxuICAgIGlmIChsb2FkZWQpIGF3YWl0IGxvYWRlZC5kaXNwb3NlKCk7XG4gICAgaWYgKCFwZW5kaW5nKSByZXR1cm47XG5cbiAgICAvLyBBIHBlbmRpbmcgbG9hZCBhc3NpZ25zIGluc3RhbmNlc1tpZF0gYmVmb3JlIGl0cyBwcm9taXNlIHJlc29sdmVzLCBzbyBieVxuICAgIC8vIHRoZSB0aW1lIHRoaXMgYXdhaXQgcmV0dXJucyB0aGUgZW50cnkgaXMgYmFjay4gQ2xlYXIgaXQgb25seSBpZiBpdCBzdGlsbFxuICAgIC8vIHBvaW50cyBhdCB3aGF0ICp0aGlzKiBsb2FkIHByb2R1Y2VkIOKAlCBhIG5ld2VyIGxvYWQgc3RhcnRlZCBpbiB0aGVcbiAgICAvLyBtZWFudGltZSBvd25zIGl0cyBvd24gZW50cnkgYW5kIG11c3Qgbm90IGJlIGV2aWN0ZWQuXG4gICAgY29uc3Qgc2VnID0gYXdhaXQgcGVuZGluZy5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICBpZiAoIXNlZyB8fCBzZWcgPT09IGxvYWRlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmluc3RhbmNlcy5nZXQoaWQpID09PSBzZWcpIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZShpZCk7XG4gICAgYXdhaXQgc2VnLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZU1vZGVsKG1vZGVsSWQ6IHN0cmluZyk6IFlvbG9Nb2RlbERlZiB7XG4gICAgY29uc3QgZGVmID0gZ2V0WW9sb01vZGVsKG1vZGVsSWQpO1xuICAgIGlmICghZGVmKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gWU9MTyBtb2RlbCBpZCBcIiR7bW9kZWxJZH1cIi5gKTtcbiAgICBpZiAoIWRlZi5tb2RlbFVybC50cmltKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWU9MTyBtb2RlbCBcIiR7bW9kZWxJZH1cIiBpcyBub3QgY29uZmlndXJlZCDigJQgaXRzIG1vZGVsVXJsIGlzIGVtcHR5LmApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmO1xuICB9XG59XG4iXX0=
|
|
@@ -521,6 +521,7 @@ class YoloSegmenterService {
|
|
|
521
521
|
const seg = await this.getModel(modelId, (loaded, total) => {
|
|
522
522
|
if (total)
|
|
523
523
|
progress?.onProgress?.(loaded / total);
|
|
524
|
+
progress?.onBytes?.(loaded, total);
|
|
524
525
|
if (loaded > 0 && !announcedDownload) {
|
|
525
526
|
announcedDownload = true;
|
|
526
527
|
progress?.onStatus?.(`Downloading ${def.label} model…`);
|
|
@@ -536,12 +537,18 @@ class YoloSegmenterService {
|
|
|
536
537
|
...(opts.maskThreshold !== undefined ? { maskThreshold: opts.maskThreshold } : {}),
|
|
537
538
|
...(opts.maxDetections !== undefined ? { maxDetections: opts.maxDetections } : {}),
|
|
538
539
|
...(opts.classFilter ? { classFilter: opts.classFilter } : {}),
|
|
539
|
-
|
|
540
|
+
...(opts.withMasks !== undefined ? { withMasks: opts.withMasks } : {}),
|
|
541
|
+
...(opts.signal ? { signal: opts.signal } : {}),
|
|
542
|
+
// Only worth tracing when there are masks to trace.
|
|
543
|
+
tracePolygons: opts.withMasks !== false,
|
|
540
544
|
traceOptions: {
|
|
541
545
|
...(opts.simplifyTolerance !== undefined ? { simplifyTolerance: opts.simplifyTolerance } : {}),
|
|
542
546
|
...(opts.minArea !== undefined ? { minArea: opts.minArea } : {}),
|
|
543
547
|
},
|
|
544
|
-
|
|
548
|
+
// The worker narrates its own phases — shader warm-up, per tile, merge,
|
|
549
|
+
// tracing — because only it knows which one it is in. Deriving a second
|
|
550
|
+
// status from tile counts here would just fight it.
|
|
551
|
+
onStatus: (s) => progress?.onStatus?.(s),
|
|
545
552
|
});
|
|
546
553
|
// Detections without geometry are dropped rather than surfaced as empty
|
|
547
554
|
// regions — a detection whose mask vanished under thresholding has nothing
|