@datagrok-libraries/utils 1.19.2 → 1.19.4

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/.eslintrc.json CHANGED
@@ -25,6 +25,7 @@
25
25
  ],
26
26
  "no-unused-vars": "warn",
27
27
  "require-jsdoc": "off",
28
+ "valid-jsdoc": "warn",
28
29
  "spaced-comment": "off",
29
30
  "linebreak-style": "off",
30
31
  "curly": [
@@ -39,19 +40,13 @@
39
40
  "allowSingleLine": true
40
41
  }
41
42
  ],
42
- "block-spacing": [
43
- 2,
44
- "always"
45
- ],
46
- "comma-dangle": [
47
- "error",
48
- {
43
+ "block-spacing": [2, "always"],
44
+ "comma-dangle": ["error", {
49
45
  "arrays": "only-multiline",
50
46
  "functions": "never",
51
47
  "objects": "only-multiline",
52
48
  "imports": "only-multiline"
53
- }
54
- ],
49
+ }],
55
50
  "guard-for-in": "off",
56
51
  "prefer-spread": "warn"
57
52
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "1.19.2",
7
+ "version": "1.19.4",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "fast-sha256": "^1.3.0",
package/src/color.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ /** Set alpha over {@link color} */
3
+ export declare function setAlpha(color: DG.ColorType, alpha: number): number;
4
+ export declare function toRgba(color: DG.ColorType): string;
5
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["color.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,GAAG,MAAM,CAElD"}
package/src/color.js ADDED
@@ -0,0 +1,13 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ /** Set alpha over {@link color} */
3
+ export function setAlpha(color, alpha) {
4
+ return 0 |
5
+ Math.round(DG.Color.a(color) * alpha) << 24 |
6
+ DG.Color.r(color) << 16 |
7
+ DG.Color.g(color) << 8 |
8
+ DG.Color.b(color);
9
+ }
10
+ export function toRgba(color) {
11
+ return `rgba(${DG.Color.r(color)}, ${DG.Color.g(color)}, ${DG.Color.b(color)}, ${DG.Color.a(color) / 255})`;
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb2xvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQW1CLEVBQUUsS0FBYTtJQUN6RCxPQUFPLENBQUM7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUU7UUFDM0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtRQUN2QixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQW1CO0lBQ3hDLE9BQU8sUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM5RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuLyoqIFNldCBhbHBoYSBvdmVyIHtAbGluayBjb2xvcn0gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbHBoYShjb2xvcjogREcuQ29sb3JUeXBlLCBhbHBoYTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIDAgfFxuICAgIE1hdGgucm91bmQoREcuQ29sb3IuYShjb2xvcikgKiBhbHBoYSkgPDwgMjQgfFxuICAgIERHLkNvbG9yLnIoY29sb3IpIDw8IDE2IHxcbiAgICBERy5Db2xvci5nKGNvbG9yKSA8PCA4IHxcbiAgICBERy5Db2xvci5iKGNvbG9yKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUmdiYShjb2xvcjogREcuQ29sb3JUeXBlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGByZ2JhKCR7REcuQ29sb3Iucihjb2xvcil9LCAke0RHLkNvbG9yLmcoY29sb3IpfSwgJHtERy5Db2xvci5iKGNvbG9yKX0sICR7REcuQ29sb3IuYShjb2xvcikgLyAyNTV9KWA7XG59XG4iXX0=
@@ -1,2 +1,3 @@
1
- export declare function getDiverseSubset(length: number, n: number, dist: (i1: number, i2: number) => number): number[];
1
+ import BitArray from './bit-array';
2
+ export declare function getDiverseSubset(fingerprints: BitArray[], length: number, n: number, dist: (i1: number, i2: number) => number): number[];
2
3
  //# sourceMappingURL=similarity-metrics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"similarity-metrics.d.ts","sourceRoot":"","sources":["similarity-metrics.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,YAmCnG"}
1
+ {"version":3,"file":"similarity-metrics.d.ts","sourceRoot":"","sources":["similarity-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,aAAa,CAAC;AAGnC,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,YAuC7H"}
@@ -1,5 +1,5 @@
1
1
  import { randomInt } from './random';
2
- export function getDiverseSubset(length, n, dist) {
2
+ export function getDiverseSubset(fingerprints, length, n, dist) {
3
3
  function maxBy(values, orderBy) {
4
4
  let maxValue = null;
5
5
  let maxOrderBy = null;
@@ -12,10 +12,13 @@ export function getDiverseSubset(length, n, dist) {
12
12
  }
13
13
  return maxValue;
14
14
  }
15
- const subset = [randomInt(length - 1)];
15
+ let randomIdx = randomInt(length - 1);
16
+ while (fingerprints[randomIdx].allFalse)
17
+ randomIdx = randomInt(length - 1);
18
+ const subset = [randomIdx];
16
19
  const complement = new Set();
17
20
  for (let i = 0; i < length; ++i) {
18
- if (!subset.includes(i))
21
+ if (!subset.includes(i) && !fingerprints[i].allFalse)
19
22
  complement.add(i);
20
23
  }
21
24
  while (subset.length < n) {
@@ -29,4 +32,4 @@ export function getDiverseSubset(length, n, dist) {
29
32
  }
30
33
  return subset;
31
34
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltaWxhcml0eS1tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2ltaWxhcml0eS1tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxDQUFTLEVBQUUsSUFBd0M7SUFDbEcsU0FBUyxLQUFLLENBQUMsTUFBZ0MsRUFBRSxPQUE4QjtRQUM3RSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXRCLEtBQUssTUFBTSxPQUFPLElBQUksTUFBTSxFQUFFO1lBQzVCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksY0FBYyxHQUFHLFVBQVUsRUFBRTtnQkFDckQsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDbkIsVUFBVSxHQUFHLGNBQWMsQ0FBQzthQUM3QjtTQUNGO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFFN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUNmLFVBQVUsQ0FBQyxNQUFNLEVBQThCLEVBQy9DLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBRSxLQUFLO1lBQ3hELE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JhbmRvbUludH0gZnJvbSAnLi9yYW5kb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2ZXJzZVN1YnNldChsZW5ndGg6IG51bWJlciwgbjogbnVtYmVyLCBkaXN0OiAoaTE6IG51bWJlciwgaTI6IG51bWJlcikgPT4gbnVtYmVyKSB7XG4gIGZ1bmN0aW9uIG1heEJ5KHZhbHVlczogSXRlcmFibGVJdGVyYXRvcjxudW1iZXI+LCBvcmRlckJ5OiAoaTogbnVtYmVyKSA9PiBudW1iZXIpIHtcbiAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cblxuICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSW50KGxlbmd0aCAtIDEpXTtcbiAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkpXG4gICAgICBjb21wbGVtZW50LmFkZChpKTtcbiAgfVxuXG4gIHdoaWxlIChzdWJzZXQubGVuZ3RoIDwgbikge1xuICAgIGNvbnN0IGlkeCA9IG1heEJ5KFxuICAgICAgY29tcGxlbWVudC52YWx1ZXMoKSBhcyBJdGVyYWJsZUl0ZXJhdG9yPG51bWJlcj4sXG4gICAgICAoaSkgPT4gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3Vic2V0Lm1hcChmdW5jdGlvbih2YWwsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICB9KSkpO1xuICAgIGlmIChpZHggIT0gbnVsbCkge1xuICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdWJzZXQ7XG59XG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltaWxhcml0eS1tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2ltaWxhcml0eS1tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFlBQXdCLEVBQUUsTUFBYyxFQUFFLENBQVMsRUFBRSxJQUF3QztJQUM1SCxTQUFTLEtBQUssQ0FBQyxNQUFnQyxFQUFFLE9BQThCO1FBQzdFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxNQUFNLEVBQUU7WUFDNUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxjQUFjLEdBQUcsVUFBVSxFQUFFO2dCQUNyRCxRQUFRLEdBQUcsT0FBTyxDQUFDO2dCQUNuQixVQUFVLEdBQUcsY0FBYyxDQUFDO2FBQzdCO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0QyxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRO1FBQ3JDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXBDLE1BQU0sTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDbEQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUNmLFVBQVUsQ0FBQyxNQUFNLEVBQThCLEVBQy9DLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFTLEdBQUcsRUFBRSxLQUFLO1lBQ3hELE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuaW1wb3J0IHtyYW5kb21JbnR9IGZyb20gJy4vcmFuZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpdmVyc2VTdWJzZXQoZmluZ2VycHJpbnRzOiBCaXRBcnJheVtdLCBsZW5ndGg6IG51bWJlciwgbjogbnVtYmVyLCBkaXN0OiAoaTE6IG51bWJlciwgaTI6IG51bWJlcikgPT4gbnVtYmVyKSB7XG4gIGZ1bmN0aW9uIG1heEJ5KHZhbHVlczogSXRlcmFibGVJdGVyYXRvcjxudW1iZXI+LCBvcmRlckJ5OiAoaTogbnVtYmVyKSA9PiBudW1iZXIpIHtcbiAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cblxuICBsZXQgcmFuZG9tSWR4ID0gcmFuZG9tSW50KGxlbmd0aCAtIDEpO1xuICB3aGlsZSAoZmluZ2VycHJpbnRzW3JhbmRvbUlkeF0uYWxsRmFsc2UpXG4gICAgcmFuZG9tSWR4ID0gcmFuZG9tSW50KGxlbmd0aCAtIDEpO1xuICAgIFxuICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSWR4XTtcbiAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkgJiYgIWZpbmdlcnByaW50c1tpXS5hbGxGYWxzZSlcbiAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICB9XG5cbiAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgY29uc3QgaWR4ID0gbWF4QnkoXG4gICAgICBjb21wbGVtZW50LnZhbHVlcygpIGFzIEl0ZXJhYmxlSXRlcmF0b3I8bnVtYmVyPixcbiAgICAgIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgIH0pKSk7XG4gICAgaWYgKGlkeCAhPSBudWxsKSB7XG4gICAgICBzdWJzZXQucHVzaChpZHgpO1xuICAgICAgY29tcGxlbWVudC5kZWxldGUoaWR4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN1YnNldDtcbn1cbiJdfQ==