@datagrok-libraries/bio 4.0.2 → 4.0.3

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/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  },
6
6
  "beta": true,
7
7
  "friendlyName": "Datagrok bio library",
8
- "version": "4.0.2",
8
+ "version": "4.0.3",
9
9
  "description": "",
10
10
  "dependencies": {
11
11
  "@datagrok-libraries/utils": "^1.6.2",
@@ -1,3 +1,7 @@
1
+ export declare enum DrawStyle {
2
+ MSA = "MSA",
3
+ classic = "classic"
4
+ }
1
5
  /**
2
6
  * A function that prints a string aligned to left or centered.
3
7
  *
@@ -13,7 +17,13 @@
13
17
  * @param {number} [transparencyRate=0.0] Transparency rate where 1.0 is fully transparent
14
18
  * @param {string} [separator=''] Is separator for sequence.
15
19
  * @param {boolean} [last=false] Is checker if element last or not.
20
+ * @param drawStyle Is draw style. MSA - for multicharSeq, classic - for other seq.
21
+ * @param maxWord Is array of max words for each line.
22
+ * @param maxWordIdx Is index of word we currently draw.
23
+ * @param gridCell Is grid cell, new for updating data in maxWord while rendering.
16
24
  * @return {number} x coordinate to start printing at.
17
25
  */
18
- export declare function printLeftOrCentered(x: number, y: number, w: number, h: number, g: CanvasRenderingContext2D, s: string, color?: string, pivot?: number, left?: boolean, transparencyRate?: number, separator?: string, last?: boolean, drawStyle?: string, maxWord?: any, maxWordIdx?: number, gridCell?: any): number;
26
+ export declare function printLeftOrCentered(x: number, y: number, w: number, h: number, g: CanvasRenderingContext2D, s: string, color?: string, pivot?: number, left?: boolean, transparencyRate?: number, separator?: string, last?: boolean, drawStyle?: DrawStyle, maxWord?: {
27
+ [index: string]: number;
28
+ }, maxWordIdx?: number, gridCell?: any): number;
19
29
  //# sourceMappingURL=cell-renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cell-renderer.d.ts","sourceRoot":"","sources":["cell-renderer.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACF,wBAAgB,mBAAmB,CAChC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAC1C,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,SAAiB,EAC9D,KAAK,GAAE,MAAU,EAAE,IAAI,UAAQ,EAAE,gBAAgB,GAAE,MAAY,EAC/D,SAAS,GAAE,MAAW,EAAE,IAAI,GAAE,OAAe,EAAE,SAAS,GAAE,MAAkB,EAAE,OAAO,GAAE,GAAQ,EAAE,UAAU,GAAE,MAAU,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM,CA+CrJ"}
1
+ {"version":3,"file":"cell-renderer.d.ts","sourceRoot":"","sources":["cell-renderer.ts"],"names":[],"mappings":"AAGA,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAC1C,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,SAAiB,EAC9D,KAAK,GAAE,MAAU,EAAE,IAAI,UAAQ,EAAE,gBAAgB,GAAE,MAAY,EAC/D,SAAS,GAAE,MAAW,EAAE,IAAI,GAAE,OAAe,EAAE,SAAS,GAAE,SAA6B,EAAE,OAAO,GAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,EAAE,UAAU,GAAE,MAAU,EAAE,QAAQ,GAAE,GAAQ,GAAG,MAAM,CA+CxL"}
@@ -1,5 +1,10 @@
1
1
  const undefinedColor = 'rgb(100,100,100)';
2
2
  const grayColor = '#808080';
3
+ export var DrawStyle;
4
+ (function (DrawStyle) {
5
+ DrawStyle["MSA"] = "MSA";
6
+ DrawStyle["classic"] = "classic";
7
+ })(DrawStyle || (DrawStyle = {}));
3
8
  /**
4
9
  * A function that prints a string aligned to left or centered.
5
10
  *
@@ -15,14 +20,18 @@ const grayColor = '#808080';
15
20
  * @param {number} [transparencyRate=0.0] Transparency rate where 1.0 is fully transparent
16
21
  * @param {string} [separator=''] Is separator for sequence.
17
22
  * @param {boolean} [last=false] Is checker if element last or not.
23
+ * @param drawStyle Is draw style. MSA - for multicharSeq, classic - for other seq.
24
+ * @param maxWord Is array of max words for each line.
25
+ * @param maxWordIdx Is index of word we currently draw.
26
+ * @param gridCell Is grid cell, new for updating data in maxWord while rendering.
18
27
  * @return {number} x coordinate to start printing at.
19
28
  */
20
- export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pivot = 0, left = false, transparencyRate = 1.0, separator = '', last = false, drawStyle = 'classic', maxWord = {}, maxWordIdx = 0, gridCell = {}) {
29
+ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pivot = 0, left = false, transparencyRate = 1.0, separator = '', last = false, drawStyle = DrawStyle.classic, maxWord = {}, maxWordIdx = 0, gridCell = {}) {
21
30
  var _a;
22
31
  g.textAlign = 'start';
23
32
  const colorPart = s.substring(0);
24
33
  let grayPart = last ? '' : separator;
25
- if (drawStyle === 'msa') {
34
+ if (drawStyle === DrawStyle.MSA) {
26
35
  grayPart = '';
27
36
  }
28
37
  let textSize = g.measureText(colorPart + grayPart);
@@ -31,7 +40,7 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
31
40
  let colorTextSize = g.measureText(colorPart).width;
32
41
  const dy = (textSize.fontBoundingBoxAscent + textSize.fontBoundingBoxDescent) / 2;
33
42
  textSize = textSize.width;
34
- if (drawStyle === 'msa') {
43
+ if (drawStyle === DrawStyle.MSA) {
35
44
  maxColorTextSize = maxWord[maxWordIdx];
36
45
  textSize = maxWord[maxWordIdx];
37
46
  if (maxWordIdx > ((_a = maxWord['bio-maxIndex']) !== null && _a !== void 0 ? _a : 0)) {
@@ -42,12 +51,12 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
42
51
  function draw(dx1, dx2) {
43
52
  g.fillStyle = color;
44
53
  g.globalAlpha = transparencyRate;
45
- if (drawStyle === 'classic') {
54
+ if (drawStyle === DrawStyle.classic) {
46
55
  g.fillText(colorPart, x + dx1, y + dy);
47
56
  g.fillStyle = grayColor;
48
57
  g.fillText(grayPart, x + dx2, y + dy);
49
58
  }
50
- if (drawStyle === 'msa') {
59
+ if (drawStyle === DrawStyle.MSA) {
51
60
  g.fillStyle = color;
52
61
  g.fillText(colorPart, x + dx1 + ((maxWord[maxWordIdx] - colorTextSize) / 2), y + dy);
53
62
  }
@@ -62,4 +71,4 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
62
71
  return x + dx + maxColorTextSize;
63
72
  }
64
73
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNlbGwtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFDMUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTVCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0YsTUFBTSxVQUFVLG1CQUFtQixDQUNoQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQzFDLENBQTJCLEVBQUUsQ0FBUyxFQUFFLEtBQUssR0FBRyxjQUFjLEVBQzlELFFBQWdCLENBQUMsRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLG1CQUEyQixHQUFHLEVBQy9ELFlBQW9CLEVBQUUsRUFBRSxPQUFnQixLQUFLLEVBQUUsWUFBb0IsU0FBUyxFQUFFLFVBQWUsRUFBRSxFQUFFLGFBQXFCLENBQUMsRUFBRSxXQUFnQixFQUFFOztJQUMzSSxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckMsSUFBSSxTQUFTLEtBQUssS0FBSyxFQUFFO1FBQ3ZCLFFBQVEsR0FBRyxFQUFFLENBQUM7S0FDZjtJQUVELElBQUksUUFBUSxHQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVqQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3RELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ25ELE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRixRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUMxQixJQUFJLFNBQVMsS0FBSyxLQUFLLEVBQUU7UUFDdkIsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxNQUFBLE9BQU8sQ0FBQyxjQUFjLENBQUMsbUNBQUksQ0FBQyxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1NBQ3JDO0tBQ0Y7SUFFRCxTQUFTLElBQUksQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUNwQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNwQixDQUFDLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDO1FBQ2pDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMzQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksU0FBUyxLQUFLLEtBQUssRUFBRTtZQUN2QixDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNwQixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3RGO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBRyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUU3RDtTQUFNO1FBQ0wsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixDQUFDO0tBQ2xDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHVuZGVmaW5lZENvbG9yID0gJ3JnYigxMDAsMTAwLDEwMCknO1xuY29uc3QgZ3JheUNvbG9yID0gJyM4MDgwODAnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBwcmludHMgYSBzdHJpbmcgYWxpZ25lZCB0byBsZWZ0IG9yIGNlbnRlcmVkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHggY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB5IHkgY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3IFdpZHRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGggSGVpZ2h0LlxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGcgQ2FudmFzIHJlbmRlcmluZyBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IHMgU3RyaW5nIHRvIHByaW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj11bmRlZmluZWRDb2xvcl0gU3RyaW5nIGNvbG9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXZvdD0wXSBQaXJ2b3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWZ0PWZhbHNlXSBJcyBsZWZ0IGFsaWduZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RyYW5zcGFyZW5jeVJhdGU9MC4wXSBUcmFuc3BhcmVuY3kgcmF0ZSB3aGVyZSAxLjAgaXMgZnVsbHkgdHJhbnNwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VwYXJhdG9yPScnXSBJcyBzZXBhcmF0b3IgZm9yIHNlcXVlbmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbbGFzdD1mYWxzZV0gSXMgY2hlY2tlciBpZiBlbGVtZW50IGxhc3Qgb3Igbm90LlxuICogQHJldHVybiB7bnVtYmVyfSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgcHJpbnRpbmcgYXQuXG4gKi9cbiBleHBvcnQgZnVuY3Rpb24gcHJpbnRMZWZ0T3JDZW50ZXJlZChcbiAgICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gICAgZzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBzOiBzdHJpbmcsIGNvbG9yID0gdW5kZWZpbmVkQ29sb3IsXG4gICAgcGl2b3Q6IG51bWJlciA9IDAsIGxlZnQgPSBmYWxzZSwgdHJhbnNwYXJlbmN5UmF0ZTogbnVtYmVyID0gMS4wLFxuICAgIHNlcGFyYXRvcjogc3RyaW5nID0gJycsIGxhc3Q6IGJvb2xlYW4gPSBmYWxzZSwgZHJhd1N0eWxlOiBzdHJpbmcgPSAnY2xhc3NpYycsIG1heFdvcmQ6IGFueSA9IHt9LCBtYXhXb3JkSWR4OiBudW1iZXIgPSAwLCBncmlkQ2VsbDogYW55ID0ge30pOiBudW1iZXIge1xuICAgIGcudGV4dEFsaWduID0gJ3N0YXJ0JztcbiAgICBjb25zdCBjb2xvclBhcnQgPSBzLnN1YnN0cmluZygwKTtcbiAgICBsZXQgZ3JheVBhcnQgPSBsYXN0ID8gJycgOiBzZXBhcmF0b3I7XG4gICAgaWYgKGRyYXdTdHlsZSA9PT0gJ21zYScpIHtcbiAgICAgIGdyYXlQYXJ0ID0gJyc7XG4gICAgfVxuXG4gICAgbGV0IHRleHRTaXplOiBhbnkgPSBnLm1lYXN1cmVUZXh0KGNvbG9yUGFydCArIGdyYXlQYXJ0KTtcbiAgICBjb25zdCBpbmRlbnQgPSA1O1xuXG4gICAgbGV0IG1heENvbG9yVGV4dFNpemUgPSBnLm1lYXN1cmVUZXh0KGNvbG9yUGFydCkud2lkdGg7XG4gICAgbGV0IGNvbG9yVGV4dFNpemUgPSBnLm1lYXN1cmVUZXh0KGNvbG9yUGFydCkud2lkdGg7XG4gICAgY29uc3QgZHkgPSAodGV4dFNpemUuZm9udEJvdW5kaW5nQm94QXNjZW50ICsgdGV4dFNpemUuZm9udEJvdW5kaW5nQm94RGVzY2VudCkgLyAyO1xuICAgIHRleHRTaXplID0gdGV4dFNpemUud2lkdGg7XG4gICAgaWYgKGRyYXdTdHlsZSA9PT0gJ21zYScpIHtcbiAgICAgIG1heENvbG9yVGV4dFNpemUgPSBtYXhXb3JkW21heFdvcmRJZHhdO1xuICAgICAgdGV4dFNpemUgPSBtYXhXb3JkW21heFdvcmRJZHhdO1xuICAgICAgaWYgKG1heFdvcmRJZHggPiAobWF4V29yZFsnYmlvLW1heEluZGV4J10gPz8gMCkpIHtcbiAgICAgICAgbWF4V29yZFsnYmlvLW1heEluZGV4J10gPSBtYXhXb3JkSWR4O1xuICAgICAgICBncmlkQ2VsbC5jZWxsLmNvbHVtbi50ZW1wID0gbWF4V29yZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkcmF3KGR4MTogbnVtYmVyLCBkeDI6IG51bWJlcik6IHZvaWQge1xuICAgICAgZy5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgIGcuZ2xvYmFsQWxwaGEgPSB0cmFuc3BhcmVuY3lSYXRlO1xuICAgICAgaWYgKGRyYXdTdHlsZSA9PT0gJ2NsYXNzaWMnKSB7XG4gICAgICAgIGcuZmlsbFRleHQoY29sb3JQYXJ0LCB4ICsgZHgxLCB5ICsgZHkpO1xuICAgICAgICBnLmZpbGxTdHlsZSA9IGdyYXlDb2xvcjtcbiAgICAgICAgZy5maWxsVGV4dChncmF5UGFydCwgeCArIGR4MiwgeSArIGR5KTtcbiAgICAgIH1cbiAgICAgIGlmIChkcmF3U3R5bGUgPT09ICdtc2EnKSB7XG4gICAgICAgIGcuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgIGcuZmlsbFRleHQoY29sb3JQYXJ0LCB4ICsgZHgxICsgKChtYXhXb3JkW21heFdvcmRJZHhdIC0gY29sb3JUZXh0U2l6ZSkgLyAyKSwgeSArIGR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGVmdCB8fCB0ZXh0U2l6ZSA+IHcpIHtcbiAgICAgIGRyYXcoaW5kZW50LCBpbmRlbnQgKyBtYXhDb2xvclRleHRTaXplKTtcbiAgICAgIHJldHVybiB4ICsgbWF4Q29sb3JUZXh0U2l6ZSArIGcubWVhc3VyZVRleHQoZ3JheVBhcnQpLndpZHRoO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGR4ID0gKHcgLSB0ZXh0U2l6ZSkgLyAyO1xuICAgICAgZHJhdyhkeCwgZHggKyBtYXhDb2xvclRleHRTaXplKTtcbiAgICAgIHJldHVybiB4ICsgZHggKyBtYXhDb2xvclRleHRTaXplO1xuICAgIH1cbiAgfVxuXG4iXX0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNlbGwtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFDMUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTVCLE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDbkIsd0JBQVcsQ0FBQTtJQUNYLGdDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUMxQyxDQUEyQixFQUFFLENBQVMsRUFBRSxLQUFLLEdBQUcsY0FBYyxFQUM5RCxRQUFnQixDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxtQkFBMkIsR0FBRyxFQUMvRCxZQUFvQixFQUFFLEVBQUUsT0FBZ0IsS0FBSyxFQUFFLFlBQXVCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBdUMsRUFBRSxFQUFFLGFBQXFCLENBQUMsRUFBRSxXQUFnQixFQUFFOztJQUM5SyxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckMsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLFFBQVEsR0FBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFakIsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0RCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNuRCxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDMUIsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixJQUFJLFVBQVUsR0FBRyxDQUFDLE1BQUEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsRUFBRTtZQUMvQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDckM7S0FDRjtJQUVELFNBQVMsSUFBSSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3BDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7UUFDakMsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRCxJQUFJLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FFN0Q7U0FBTTtRQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztLQUNsQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB1bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbmNvbnN0IGdyYXlDb2xvciA9ICcjODA4MDgwJztcblxuZXhwb3J0IGVudW0gRHJhd1N0eWxlIHtcbiAgTVNBID0gJ01TQScsXG4gIGNsYXNzaWMgPSAnY2xhc3NpYycsXG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHByaW50cyBhIHN0cmluZyBhbGlnbmVkIHRvIGxlZnQgb3IgY2VudGVyZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggeCBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHkgeSBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHcgV2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gaCBIZWlnaHQuXG4gKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZyBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcyBTdHJpbmcgdG8gcHJpbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yPXVuZGVmaW5lZENvbG9yXSBTdHJpbmcgY29sb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW3Bpdm90PTBdIFBpcnZvdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlZnQ9ZmFsc2VdIElzIGxlZnQgYWxpZ25lZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdHJhbnNwYXJlbmN5UmF0ZT0wLjBdIFRyYW5zcGFyZW5jeSByYXRlIHdoZXJlIDEuMCBpcyBmdWxseSB0cmFuc3BhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtzZXBhcmF0b3I9JyddIElzIHNlcGFyYXRvciBmb3Igc2VxdWVuY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsYXN0PWZhbHNlXSBJcyBjaGVja2VyIGlmIGVsZW1lbnQgbGFzdCBvciBub3QuXG4gKiBAcGFyYW0gZHJhd1N0eWxlIElzIGRyYXcgc3R5bGUuIE1TQSAtIGZvciBtdWx0aWNoYXJTZXEsIGNsYXNzaWMgLSBmb3Igb3RoZXIgc2VxLlxuICogQHBhcmFtIG1heFdvcmQgSXMgYXJyYXkgb2YgbWF4IHdvcmRzIGZvciBlYWNoIGxpbmUuXG4gKiBAcGFyYW0gbWF4V29yZElkeCBJcyBpbmRleCBvZiB3b3JkIHdlIGN1cnJlbnRseSBkcmF3LlxuICogQHBhcmFtIGdyaWRDZWxsIElzIGdyaWQgY2VsbCwgbmV3IGZvciB1cGRhdGluZyBkYXRhIGluIG1heFdvcmQgd2hpbGUgcmVuZGVyaW5nLlxuICogQHJldHVybiB7bnVtYmVyfSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgcHJpbnRpbmcgYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludExlZnRPckNlbnRlcmVkKFxuICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gIGc6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgczogc3RyaW5nLCBjb2xvciA9IHVuZGVmaW5lZENvbG9yLFxuICBwaXZvdDogbnVtYmVyID0gMCwgbGVmdCA9IGZhbHNlLCB0cmFuc3BhcmVuY3lSYXRlOiBudW1iZXIgPSAxLjAsXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gJycsIGxhc3Q6IGJvb2xlYW4gPSBmYWxzZSwgZHJhd1N0eWxlOiBEcmF3U3R5bGUgPSBEcmF3U3R5bGUuY2xhc3NpYywgbWF4V29yZDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9ID0ge30sIG1heFdvcmRJZHg6IG51bWJlciA9IDAsIGdyaWRDZWxsOiBhbnkgPSB7fSk6IG51bWJlciB7XG4gIGcudGV4dEFsaWduID0gJ3N0YXJ0JztcbiAgY29uc3QgY29sb3JQYXJ0ID0gcy5zdWJzdHJpbmcoMCk7XG4gIGxldCBncmF5UGFydCA9IGxhc3QgPyAnJyA6IHNlcGFyYXRvcjtcbiAgaWYgKGRyYXdTdHlsZSA9PT0gRHJhd1N0eWxlLk1TQSkge1xuICAgIGdyYXlQYXJ0ID0gJyc7XG4gIH1cblxuICBsZXQgdGV4dFNpemU6IGFueSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0ICsgZ3JheVBhcnQpO1xuICBjb25zdCBpbmRlbnQgPSA1O1xuXG4gIGxldCBtYXhDb2xvclRleHRTaXplID0gZy5tZWFzdXJlVGV4dChjb2xvclBhcnQpLndpZHRoO1xuICBsZXQgY29sb3JUZXh0U2l6ZSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0KS53aWR0aDtcbiAgY29uc3QgZHkgPSAodGV4dFNpemUuZm9udEJvdW5kaW5nQm94QXNjZW50ICsgdGV4dFNpemUuZm9udEJvdW5kaW5nQm94RGVzY2VudCkgLyAyO1xuICB0ZXh0U2l6ZSA9IHRleHRTaXplLndpZHRoO1xuICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuTVNBKSB7XG4gICAgbWF4Q29sb3JUZXh0U2l6ZSA9IG1heFdvcmRbbWF4V29yZElkeF07XG4gICAgdGV4dFNpemUgPSBtYXhXb3JkW21heFdvcmRJZHhdO1xuICAgIGlmIChtYXhXb3JkSWR4ID4gKG1heFdvcmRbJ2Jpby1tYXhJbmRleCddID8/IDApKSB7XG4gICAgICBtYXhXb3JkWydiaW8tbWF4SW5kZXgnXSA9IG1heFdvcmRJZHg7XG4gICAgICBncmlkQ2VsbC5jZWxsLmNvbHVtbi50ZW1wID0gbWF4V29yZDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3KGR4MTogbnVtYmVyLCBkeDI6IG51bWJlcik6IHZvaWQge1xuICAgIGcuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgZy5nbG9iYWxBbHBoYSA9IHRyYW5zcGFyZW5jeVJhdGU7XG4gICAgaWYgKGRyYXdTdHlsZSA9PT0gRHJhd1N0eWxlLmNsYXNzaWMpIHtcbiAgICAgIGcuZmlsbFRleHQoY29sb3JQYXJ0LCB4ICsgZHgxLCB5ICsgZHkpO1xuICAgICAgZy5maWxsU3R5bGUgPSBncmF5Q29sb3I7XG4gICAgICBnLmZpbGxUZXh0KGdyYXlQYXJ0LCB4ICsgZHgyLCB5ICsgZHkpO1xuICAgIH1cbiAgICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuTVNBKSB7XG4gICAgICBnLmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgZy5maWxsVGV4dChjb2xvclBhcnQsIHggKyBkeDEgKyAoKG1heFdvcmRbbWF4V29yZElkeF0gLSBjb2xvclRleHRTaXplKSAvIDIpLCB5ICsgZHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsZWZ0IHx8IHRleHRTaXplID4gdykge1xuICAgIGRyYXcoaW5kZW50LCBpbmRlbnQgKyBtYXhDb2xvclRleHRTaXplKTtcbiAgICByZXR1cm4geCArIG1heENvbG9yVGV4dFNpemUgKyBnLm1lYXN1cmVUZXh0KGdyYXlQYXJ0KS53aWR0aDtcblxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGR4ID0gKHcgLSB0ZXh0U2l6ZSkgLyAyO1xuICAgIGRyYXcoZHgsIGR4ICsgbWF4Q29sb3JUZXh0U2l6ZSk7XG4gICAgcmV0dXJuIHggKyBkeCArIG1heENvbG9yVGV4dFNpemU7XG4gIH1cbn1cblxuIl19