@datagrok-libraries/bio 4.3.0 → 4.4.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/package.json CHANGED
@@ -3,14 +3,14 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "beta": true,
7
6
  "friendlyName": "Datagrok bio library",
8
- "version": "4.3.0",
7
+ "version": "4.4.4",
9
8
  "description": "",
10
9
  "dependencies": {
11
10
  "@datagrok-libraries/utils": "^1.6.2",
11
+ "@phylocanvas/phylocanvas.gl": "^1.44.0",
12
12
  "cash-dom": "latest",
13
- "datagrok-api": "^1.6.6",
13
+ "datagrok-api": "^1.6.12",
14
14
  "dayjs": "latest",
15
15
  "rxjs": "^6.5.5",
16
16
  "wu": "latest"
@@ -0,0 +1,6 @@
1
+ declare const Shapes: {
2
+ [key: string]: string;
3
+ };
4
+ declare const TreeTypes: any;
5
+ export { Shapes, TreeTypes };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM;;CAAc,CAAC;AAG3B,QAAA,MAAM,SAAS,KAAiB,CAAC;AAEjC,OAAO,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import * as pcgl from '@phylocanvas/phylocanvas.gl';
2
+ //@ts-ignore
3
+ const Shapes = pcgl.Shapes;
4
+ //@ts-ignore
5
+ const TreeTypes = pcgl.TreeTypes;
6
+ export { Shapes, TreeTypes };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLDZCQUE2QixDQUFDO0FBRXBELFlBQVk7QUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBRTNCLFlBQVk7QUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBQyxNQUFNLEVBQUUsU0FBUyxFQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwY2dsIGZyb20gJ0BwaHlsb2NhbnZhcy9waHlsb2NhbnZhcy5nbCc7XG5cbi8vQHRzLWlnbm9yZVxuY29uc3QgU2hhcGVzID0gcGNnbC5TaGFwZXM7XG5cbi8vQHRzLWlnbm9yZVxuY29uc3QgVHJlZVR5cGVzID0gcGNnbC5UcmVlVHlwZXM7XG5cbmV4cG9ydCB7U2hhcGVzLCBUcmVlVHlwZXN9O1xuIl19
@@ -0,0 +1,7 @@
1
+ interface NodeType {
2
+ name: string;
3
+ children: NodeType[];
4
+ branch_length: number;
5
+ }
6
+ export { NodeType as NodeType };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAEA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,OAAO,EAAC,QAAQ,IAAI,QAAQ,EAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ // import {NodeType} from '@phylocanvas/phylocanvas.gl';
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQge05vZGVUeXBlfSBmcm9tICdAcGh5bG9jYW52YXMvcGh5bG9jYW52YXMuZ2wnO1xuXG5pbnRlcmZhY2UgTm9kZVR5cGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBOb2RlVHlwZVtdO1xuICBicmFuY2hfbGVuZ3RoOiBudW1iZXI7XG59XG5cbmV4cG9ydCB7Tm9kZVR5cGUgYXMgTm9kZVR5cGV9OyJdfQ==
@@ -0,0 +1,12 @@
1
+ declare module '@phylocanvas/phylocanvas.gl' {
2
+ import {Deck} from '@deck.gl/core/typed';
3
+
4
+ export const TreeTypes;
5
+ export const Shapes: { [key: string]: string };
6
+
7
+ // export interface NodeType {
8
+ // name: string;
9
+ // children: NodeType[];
10
+ // branch_length: number;
11
+ // }
12
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"unknown.d.ts","sourceRoot":"","sources":["unknown.ts"],"names":[],"mappings":"AAIA,qBAAa,WAAW;WACR,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAW1C;AAED,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE1D,8BAAsB,iBAAkB,YAAW,UAAU;aAC3C,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CACvC;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IAC5C,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAG9B;AAGD,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAc,OAAO,EAAE,MAAM,EAAE,CAAsC;IAErE,OAAO,CAAC,MAAM,CAAC,YAAY;IAKpB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAK9B;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAa;IAEhC,WAAkB,IAAI,IAAI,UAAU,CAInC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAa;IAEjC,WAAkB,KAAK,IAAI,UAAU,CAIpC;CACF"}
1
+ {"version":3,"file":"unknown.d.ts","sourceRoot":"","sources":["unknown.ts"],"names":[],"mappings":"AA2BA,qBAAa,WAAW;WACR,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAW1C;AAED,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE1D,8BAAsB,iBAAkB,YAAW,UAAU;aAC3C,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CACvC;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IAC5C,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAG9B;AAGD,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,OAAc,OAAO,EAAE,MAAM,EAAE,CAAsC;IAErE,OAAO,CAAC,MAAM,CAAC,YAAY;IAKpB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAK9B;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAa;IAEhC,WAAkB,IAAI,IAAI,UAAU,CAInC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAa;IAEjC,WAAkB,KAAK,IAAI,UAAU,CAIpC;CACF"}
package/src/unknown.js CHANGED
@@ -1,3 +1,25 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ /** makes the color less white, makes the transparency effect always perceptible
3
+ * @param {string} color x coordinate.
4
+ * */
5
+ function correctColor(color) {
6
+ if (color == null)
7
+ return 'rgb(100,100,100)';
8
+ const dgColor = DG.Color.fromHtml(color);
9
+ const g = DG.Color.g(dgColor);
10
+ const r = DG.Color.r(dgColor);
11
+ const b = DG.Color.b(dgColor);
12
+ // calculate euclidean distance to white
13
+ const distToBlack = Math.sqrt(Math.pow(0 - r, 2) + Math.pow(0 - g, 2) + Math.pow(0 - b, 2));
14
+ // normalize vector r g b
15
+ const normR = r / distToBlack;
16
+ const normG = g / distToBlack;
17
+ const normB = b / distToBlack;
18
+ if (distToBlack > 210) {
19
+ return `rgb(${normR * 210},${normG * 210},${normB * 210})`;
20
+ }
21
+ return DG.Color.toRgb(dgColor);
22
+ }
1
23
  export class StringUtils {
2
24
  static hashCode(s) {
3
25
  let hash = 0;
@@ -27,7 +49,7 @@ export class UnknownColorPalette extends UnknownSeqPalette {
27
49
  get(m) {
28
50
  const hash = StringUtils.hashCode(m);
29
51
  const pI = hash % UnknownColorPalette.palette.length;
30
- return UnknownColorPalette.palette[pI];
52
+ return correctColor(UnknownColorPalette.palette[pI]);
31
53
  }
32
54
  }
33
55
  UnknownColorPalette.palette = UnknownColorPalette.buildPalette();
@@ -43,4 +65,4 @@ export class UnknownSeqPalettes extends SeqPaletteBase {
43
65
  return this.color;
44
66
  }
45
67
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5rbm93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVua25vd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLFdBQVc7SUFDZixNQUFNLENBQUMsUUFBUSxDQUFDLENBQVM7UUFDOUIsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxHQUFHLEdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBRUQsT0FBTyxFQUFhLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE1BQU0sT0FBZ0IsaUJBQWlCO0NBRXRDO0FBRUQsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUI7SUFDNUMsR0FBRyxDQUFDLENBQVM7UUFDbEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBR0QsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGlCQUFpQjtJQUdoRCxNQUFNLENBQUMsWUFBWTtRQUN6QixNQUFNLEdBQUcsR0FBSSxFQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNwRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxHQUFHLENBQUMsQ0FBUztRQUNsQixNQUFNLElBQUksR0FBVyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3JELE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7O0FBWGEsMkJBQU8sR0FBYSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQWN2RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsY0FBYztJQUc3QyxNQUFNLEtBQUssSUFBSTtRQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUlNLE1BQU0sS0FBSyxLQUFLO1FBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdVdGlscyB7XG4gIHB1YmxpYyBzdGF0aWMgaGFzaENvZGUoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaGFzaDogbnVtYmVyID0gMDtcbiAgICBpZiAocy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gaGFzaDtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hyOiBudW1iZXIgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaHI7XG4gICAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICAgIH1cbiAgICByZXR1cm4gaGFzaDtcbiAgfVxufVxuXG5pbXBvcnQge1NlcVBhbGV0dGUsIFNlcVBhbGV0dGVCYXNlfSBmcm9tICcuL3NlcS1wYWxldHRlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVbmtub3duU2VxUGFsZXR0ZSBpbXBsZW1lbnRzIFNlcVBhbGV0dGUge1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0KG06IHN0cmluZyk6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdyYXlBbGxQYWxldHRlIGV4dGVuZHMgVW5rbm93blNlcVBhbGV0dGUge1xuICBwdWJsaWMgZ2V0KG06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcjNjY2NjY2JztcbiAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBVbmtub3duQ29sb3JQYWxldHRlIGV4dGVuZHMgVW5rbm93blNlcVBhbGV0dGUge1xuICBwdWJsaWMgc3RhdGljIHBhbGV0dGU6IHN0cmluZ1tdID0gVW5rbm93bkNvbG9yUGFsZXR0ZS5idWlsZFBhbGV0dGUoKTtcblxuICBwcml2YXRlIHN0YXRpYyBidWlsZFBhbGV0dGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlcyA9IChbXSBhcyBzdHJpbmdbXSkuY29uY2F0KC4uLk9iamVjdC52YWx1ZXMoU2VxUGFsZXR0ZUJhc2UuY29sb3VyUGFsZXR0ZSkpO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0KG06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaDogbnVtYmVyID0gU3RyaW5nVXRpbHMuaGFzaENvZGUobSk7XG4gICAgY29uc3QgcEkgPSBoYXNoICUgVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlLmxlbmd0aDtcbiAgICByZXR1cm4gVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlW3BJXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93blNlcVBhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyBncmF5OiBTZXFQYWxldHRlO1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IEdyYXkoKTogU2VxUGFsZXR0ZSB7XG4gICAgaWYgKHRoaXMuZ3JheSA9PT0gdm9pZCAwKVxuICAgICAgdGhpcy5ncmF5ID0gbmV3IEdyYXlBbGxQYWxldHRlKCk7XG4gICAgcmV0dXJuIHRoaXMuZ3JheTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbG9yOiBTZXFQYWxldHRlO1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IENvbG9yKCk6IFNlcVBhbGV0dGUge1xuICAgIGlmICh0aGlzLmNvbG9yID09PSB2b2lkIDApXG4gICAgICB0aGlzLmNvbG9yID0gbmV3IFVua25vd25Db2xvclBhbGV0dGUoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgfVxufVxuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5rbm93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVua25vd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0Qzs7S0FFSztBQUNMLFNBQVMsWUFBWSxDQUFDLEtBQW9CO0lBQ3hDLElBQUksS0FBSyxJQUFJLElBQUk7UUFDZixPQUFPLGtCQUFrQixDQUFDO0lBRTVCLE1BQU0sT0FBTyxHQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLHdDQUF3QztJQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUYseUJBQXlCO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDOUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztJQUM5QixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO0lBQzlCLElBQUksV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUNyQixPQUFPLE9BQU8sS0FBSyxHQUFHLEdBQUcsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQztLQUM1RDtJQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sT0FBTyxXQUFXO0lBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFTO1FBQzlCLElBQUksSUFBSSxHQUFXLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sR0FBRyxHQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2xDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkI7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQUVELE9BQU8sRUFBYSxjQUFjLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxNQUFNLE9BQWdCLGlCQUFpQjtDQUV0QztBQUVELE1BQU0sT0FBTyxjQUFlLFNBQVEsaUJBQWlCO0lBQzVDLEdBQUcsQ0FBQyxDQUFTO1FBQ2xCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQUdELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxpQkFBaUI7SUFHaEQsTUFBTSxDQUFDLFlBQVk7UUFDekIsTUFBTSxHQUFHLEdBQUksRUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDcEYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sR0FBRyxDQUFDLENBQVM7UUFDbEIsTUFBTSxJQUFJLEdBQVcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxPQUFPLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDOztBQVhhLDJCQUFPLEdBQWEsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7QUFjdkUsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFHN0MsTUFBTSxLQUFLLElBQUk7UUFDcEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFJTSxNQUFNLEtBQUssS0FBSztRQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG4vKiogbWFrZXMgdGhlIGNvbG9yIGxlc3Mgd2hpdGUsIG1ha2VzIHRoZSB0cmFuc3BhcmVuY3kgZWZmZWN0IGFsd2F5cyBwZXJjZXB0aWJsZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIHggY29vcmRpbmF0ZS5cbiAqICovXG5mdW5jdGlvbiBjb3JyZWN0Q29sb3IoY29sb3I6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAoY29sb3IgPT0gbnVsbClcbiAgICByZXR1cm4gJ3JnYigxMDAsMTAwLDEwMCknO1xuXG4gIGNvbnN0IGRnQ29sb3I6IG51bWJlciA9IERHLkNvbG9yLmZyb21IdG1sKGNvbG9yKTtcbiAgY29uc3QgZyA9IERHLkNvbG9yLmcoZGdDb2xvcik7XG4gIGNvbnN0IHIgPSBERy5Db2xvci5yKGRnQ29sb3IpO1xuICBjb25zdCBiID0gREcuQ29sb3IuYihkZ0NvbG9yKTtcbiAgLy8gY2FsY3VsYXRlIGV1Y2xpZGVhbiBkaXN0YW5jZSB0byB3aGl0ZVxuICBjb25zdCBkaXN0VG9CbGFjayA9IE1hdGguc3FydChNYXRoLnBvdygwIC0gciwgMikgKyBNYXRoLnBvdygwIC0gZywgMikgKyBNYXRoLnBvdygwIC0gYiwgMikpO1xuICAvLyBub3JtYWxpemUgdmVjdG9yIHIgZyBiXG4gIGNvbnN0IG5vcm1SID0gciAvIGRpc3RUb0JsYWNrO1xuICBjb25zdCBub3JtRyA9IGcgLyBkaXN0VG9CbGFjaztcbiAgY29uc3Qgbm9ybUIgPSBiIC8gZGlzdFRvQmxhY2s7XG4gIGlmIChkaXN0VG9CbGFjayA+IDIxMCkge1xuICAgIHJldHVybiBgcmdiKCR7bm9ybVIgKiAyMTB9LCR7bm9ybUcgKiAyMTB9LCR7bm9ybUIgKiAyMTB9KWA7XG4gIH1cbiAgcmV0dXJuIERHLkNvbG9yLnRvUmdiKGRnQ29sb3IpO1xufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nVXRpbHMge1xuICBwdWJsaWMgc3RhdGljIGhhc2hDb2RlKHM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGhhc2g6IG51bWJlciA9IDA7XG4gICAgaWYgKHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIGhhc2g7XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNocjogbnVtYmVyID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xuICAgICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgICB9XG4gICAgcmV0dXJuIGhhc2g7XG4gIH1cbn1cblxuaW1wb3J0IHtTZXFQYWxldHRlLCBTZXFQYWxldHRlQmFzZX0gZnJvbSAnLi9zZXEtcGFsZXR0ZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVW5rbm93blNlcVBhbGV0dGUgaW1wbGVtZW50cyBTZXFQYWxldHRlIHtcbiAgcHVibGljIGFic3RyYWN0IGdldChtOiBzdHJpbmcpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBHcmF5QWxsUGFsZXR0ZSBleHRlbmRzIFVua25vd25TZXFQYWxldHRlIHtcbiAgcHVibGljIGdldChtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAnIzY2NjY2Nic7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkNvbG9yUGFsZXR0ZSBleHRlbmRzIFVua25vd25TZXFQYWxldHRlIHtcbiAgcHVibGljIHN0YXRpYyBwYWxldHRlOiBzdHJpbmdbXSA9IFVua25vd25Db2xvclBhbGV0dGUuYnVpbGRQYWxldHRlKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRQYWxldHRlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXMgPSAoW10gYXMgc3RyaW5nW10pLmNvbmNhdCguLi5PYmplY3QudmFsdWVzKFNlcVBhbGV0dGVCYXNlLmNvbG91clBhbGV0dGUpKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHVibGljIGdldChtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc2g6IG51bWJlciA9IFN0cmluZ1V0aWxzLmhhc2hDb2RlKG0pO1xuICAgIGNvbnN0IHBJID0gaGFzaCAlIFVua25vd25Db2xvclBhbGV0dGUucGFsZXR0ZS5sZW5ndGg7XG4gICAgcmV0dXJuIGNvcnJlY3RDb2xvcihVbmtub3duQ29sb3JQYWxldHRlLnBhbGV0dGVbcEldKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5rbm93blNlcVBhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyBncmF5OiBTZXFQYWxldHRlO1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IEdyYXkoKTogU2VxUGFsZXR0ZSB7XG4gICAgaWYgKHRoaXMuZ3JheSA9PT0gdm9pZCAwKVxuICAgICAgdGhpcy5ncmF5ID0gbmV3IEdyYXlBbGxQYWxldHRlKCk7XG4gICAgcmV0dXJuIHRoaXMuZ3JheTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbG9yOiBTZXFQYWxldHRlO1xuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IENvbG9yKCk6IFNlcVBhbGV0dGUge1xuICAgIGlmICh0aGlzLmNvbG9yID09PSB2b2lkIDApXG4gICAgICB0aGlzLmNvbG9yID0gbmV3IFVua25vd25Db2xvclBhbGV0dGUoKTtcbiAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgfVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ import * as DG from 'datagrok-api/dg';
1
2
  export declare enum DrawStyle {
2
3
  MSA = "MSA",
3
4
  classic = "classic"
@@ -19,11 +20,13 @@ export declare enum DrawStyle {
19
20
  * @param {boolean} [last=false] Is checker if element last or not.
20
21
  * @param drawStyle Is draw style. MSA - for multicharSeq, classic - for other seq.
21
22
  * @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.
23
+ * @param wordIdx Is index of word we currently draw.
24
+ * @param gridCell Is grid cell.
25
+ * @param referenceSequence Is reference sequence for diff mode.
26
+ * @param maxLengthOfMonomer Is max length of monomer.
24
27
  * @return {number} x coordinate to start printing at.
25
28
  */
26
29
  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
30
  [index: string]: number;
28
- }, maxWordIdx?: number, gridCell?: any): number;
31
+ }, wordIdx?: number, gridCell?: DG.GridCell | null, referenceSequence?: string[], maxLengthOfMonomer?: number | null): number;
29
32
  //# sourceMappingURL=cell-renderer.d.ts.map
@@ -1 +1 @@
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
+ {"version":3,"file":"cell-renderer.d.ts","sourceRoot":"","sources":["cell-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAQtC,oBAAY,SAAS;IACnB,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;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,GAAE,MAAuB,EACtE,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,OAAO,GAAE,MAAU,EAAE,QAAQ,GAAE,EAAE,CAAC,QAAQ,GAAG,IAAW,EAAE,iBAAiB,GAAE,MAAM,EAAO,EAAE,kBAAkB,GAAE,MAAM,GAAG,IAAW,GAAG,MAAM,CA0DlR"}
@@ -1,5 +1,8 @@
1
+ import { WebLogo } from '../viewers/web-logo';
1
2
  const undefinedColor = 'rgb(100,100,100)';
2
3
  const grayColor = '#808080';
4
+ const blackColor = 'rgb(0,0,0)';
5
+ const monomerToShortFunction = WebLogo.monomerToShort;
3
6
  export var DrawStyle;
4
7
  (function (DrawStyle) {
5
8
  DrawStyle["MSA"] = "MSA";
@@ -22,18 +25,33 @@ export var DrawStyle;
22
25
  * @param {boolean} [last=false] Is checker if element last or not.
23
26
  * @param drawStyle Is draw style. MSA - for multicharSeq, classic - for other seq.
24
27
  * @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.
28
+ * @param wordIdx Is index of word we currently draw.
29
+ * @param gridCell Is grid cell.
30
+ * @param referenceSequence Is reference sequence for diff mode.
31
+ * @param maxLengthOfMonomer Is max length of monomer.
27
32
  * @return {number} x coordinate to start printing at.
28
33
  */
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 = {}) {
30
- var _a;
34
+ 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 = {}, wordIdx = 0, gridCell = null, referenceSequence = [], maxLengthOfMonomer = null) {
35
+ var _a, _b;
31
36
  g.textAlign = 'start';
32
- const colorPart = s.substring(0);
37
+ let colorPart = s.substring(0);
33
38
  let grayPart = last ? '' : separator;
34
39
  if (drawStyle === DrawStyle.MSA) {
35
40
  grayPart = '';
36
41
  }
42
+ let colorCode = true;
43
+ let compareWithCurrent = true;
44
+ if (gridCell != null) {
45
+ colorCode = (((_a = gridCell.cell.column) === null || _a === void 0 ? void 0 : _a.temp['color-code']) != null) ? gridCell.cell.column.temp['color-code'] : true;
46
+ compareWithCurrent = (((_b = gridCell.cell.column) === null || _b === void 0 ? void 0 : _b.temp['compare-with-current']) != null) ? gridCell.cell.column.temp['compare-with-current'] : true;
47
+ }
48
+ const currentMonomer = referenceSequence[wordIdx];
49
+ if (compareWithCurrent && (referenceSequence.length > 0)) {
50
+ transparencyRate = (colorPart == currentMonomer) ? 0.3 : transparencyRate;
51
+ }
52
+ if (maxLengthOfMonomer != null) {
53
+ colorPart = monomerToShortFunction(colorPart, maxLengthOfMonomer);
54
+ }
37
55
  let textSize = g.measureText(colorPart + grayPart);
38
56
  const indent = 5;
39
57
  let maxColorTextSize = g.measureText(colorPart).width;
@@ -41,15 +59,12 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
41
59
  const dy = (textSize.fontBoundingBoxAscent + textSize.fontBoundingBoxDescent) / 2;
42
60
  textSize = textSize.width;
43
61
  if (drawStyle === DrawStyle.MSA) {
44
- maxColorTextSize = maxWord[maxWordIdx];
45
- textSize = maxWord[maxWordIdx];
46
- if (maxWordIdx > ((_a = maxWord['bio-maxIndex']) !== null && _a !== void 0 ? _a : 0)) {
47
- maxWord['bio-maxIndex'] = maxWordIdx;
48
- gridCell.cell.column.temp = maxWord;
49
- }
62
+ maxColorTextSize = maxWord[wordIdx];
63
+ textSize = maxWord[wordIdx];
50
64
  }
51
65
  function draw(dx1, dx2) {
52
- g.fillStyle = color;
66
+ const drawColor = colorCode ? color : blackColor;
67
+ g.fillStyle = drawColor;
53
68
  g.globalAlpha = transparencyRate;
54
69
  if (drawStyle === DrawStyle.classic) {
55
70
  g.fillText(colorPart, x + dx1, y + dy);
@@ -57,8 +72,8 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
57
72
  g.fillText(grayPart, x + dx2, y + dy);
58
73
  }
59
74
  if (drawStyle === DrawStyle.MSA) {
60
- g.fillStyle = color;
61
- g.fillText(colorPart, x + dx1 + ((maxWord[maxWordIdx] - colorTextSize) / 2), y + dy);
75
+ g.fillStyle = drawColor;
76
+ g.fillText(colorPart, x + dx1 + ((maxWord[wordIdx] - colorTextSize) / 2), y + dy);
62
77
  }
63
78
  }
64
79
  if (left || textSize > w) {
@@ -71,4 +86,4 @@ export function printLeftOrCentered(x, y, w, h, g, s, color = undefinedColor, pi
71
86
  return x + dx + maxColorTextSize;
72
87
  }
73
88
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNlbGwtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7QUFDMUMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTVCLE1BQU0sQ0FBTixJQUFZLFNBR1g7QUFIRCxXQUFZLFNBQVM7SUFDbkIsd0JBQVcsQ0FBQTtJQUNYLGdDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUMxQyxDQUEyQixFQUFFLENBQVMsRUFBRSxLQUFLLEdBQUcsY0FBYyxFQUM5RCxRQUFnQixDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxtQkFBMkIsR0FBRyxFQUMvRCxZQUFvQixFQUFFLEVBQUUsT0FBZ0IsS0FBSyxFQUFFLFlBQXVCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBdUMsRUFBRSxFQUFFLGFBQXFCLENBQUMsRUFBRSxXQUFnQixFQUFFOztJQUM5SyxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckMsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLFFBQVEsR0FBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUN4RCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFakIsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN0RCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNuRCxNQUFNLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDMUIsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUMvQixnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQixJQUFJLFVBQVUsR0FBRyxDQUFDLE1BQUEsT0FBTyxDQUFDLGNBQWMsQ0FBQyxtQ0FBSSxDQUFDLENBQUMsRUFBRTtZQUMvQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQ3JDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDckM7S0FDRjtJQUVELFNBQVMsSUFBSSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3BDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7UUFDakMsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUN4QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDcEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN0RjtJQUNILENBQUM7SUFFRCxJQUFJLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FFN0Q7U0FBTTtRQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztLQUNsQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB1bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbmNvbnN0IGdyYXlDb2xvciA9ICcjODA4MDgwJztcblxuZXhwb3J0IGVudW0gRHJhd1N0eWxlIHtcbiAgTVNBID0gJ01TQScsXG4gIGNsYXNzaWMgPSAnY2xhc3NpYycsXG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHByaW50cyBhIHN0cmluZyBhbGlnbmVkIHRvIGxlZnQgb3IgY2VudGVyZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggeCBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHkgeSBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHcgV2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gaCBIZWlnaHQuXG4gKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZyBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcyBTdHJpbmcgdG8gcHJpbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yPXVuZGVmaW5lZENvbG9yXSBTdHJpbmcgY29sb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW3Bpdm90PTBdIFBpcnZvdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlZnQ9ZmFsc2VdIElzIGxlZnQgYWxpZ25lZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdHJhbnNwYXJlbmN5UmF0ZT0wLjBdIFRyYW5zcGFyZW5jeSByYXRlIHdoZXJlIDEuMCBpcyBmdWxseSB0cmFuc3BhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IFtzZXBhcmF0b3I9JyddIElzIHNlcGFyYXRvciBmb3Igc2VxdWVuY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsYXN0PWZhbHNlXSBJcyBjaGVja2VyIGlmIGVsZW1lbnQgbGFzdCBvciBub3QuXG4gKiBAcGFyYW0gZHJhd1N0eWxlIElzIGRyYXcgc3R5bGUuIE1TQSAtIGZvciBtdWx0aWNoYXJTZXEsIGNsYXNzaWMgLSBmb3Igb3RoZXIgc2VxLlxuICogQHBhcmFtIG1heFdvcmQgSXMgYXJyYXkgb2YgbWF4IHdvcmRzIGZvciBlYWNoIGxpbmUuXG4gKiBAcGFyYW0gbWF4V29yZElkeCBJcyBpbmRleCBvZiB3b3JkIHdlIGN1cnJlbnRseSBkcmF3LlxuICogQHBhcmFtIGdyaWRDZWxsIElzIGdyaWQgY2VsbCwgbmV3IGZvciB1cGRhdGluZyBkYXRhIGluIG1heFdvcmQgd2hpbGUgcmVuZGVyaW5nLlxuICogQHJldHVybiB7bnVtYmVyfSB4IGNvb3JkaW5hdGUgdG8gc3RhcnQgcHJpbnRpbmcgYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludExlZnRPckNlbnRlcmVkKFxuICB4OiBudW1iZXIsIHk6IG51bWJlciwgdzogbnVtYmVyLCBoOiBudW1iZXIsXG4gIGc6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgczogc3RyaW5nLCBjb2xvciA9IHVuZGVmaW5lZENvbG9yLFxuICBwaXZvdDogbnVtYmVyID0gMCwgbGVmdCA9IGZhbHNlLCB0cmFuc3BhcmVuY3lSYXRlOiBudW1iZXIgPSAxLjAsXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gJycsIGxhc3Q6IGJvb2xlYW4gPSBmYWxzZSwgZHJhd1N0eWxlOiBEcmF3U3R5bGUgPSBEcmF3U3R5bGUuY2xhc3NpYywgbWF4V29yZDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9ID0ge30sIG1heFdvcmRJZHg6IG51bWJlciA9IDAsIGdyaWRDZWxsOiBhbnkgPSB7fSk6IG51bWJlciB7XG4gIGcudGV4dEFsaWduID0gJ3N0YXJ0JztcbiAgY29uc3QgY29sb3JQYXJ0ID0gcy5zdWJzdHJpbmcoMCk7XG4gIGxldCBncmF5UGFydCA9IGxhc3QgPyAnJyA6IHNlcGFyYXRvcjtcbiAgaWYgKGRyYXdTdHlsZSA9PT0gRHJhd1N0eWxlLk1TQSkge1xuICAgIGdyYXlQYXJ0ID0gJyc7XG4gIH1cblxuICBsZXQgdGV4dFNpemU6IGFueSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0ICsgZ3JheVBhcnQpO1xuICBjb25zdCBpbmRlbnQgPSA1O1xuXG4gIGxldCBtYXhDb2xvclRleHRTaXplID0gZy5tZWFzdXJlVGV4dChjb2xvclBhcnQpLndpZHRoO1xuICBsZXQgY29sb3JUZXh0U2l6ZSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0KS53aWR0aDtcbiAgY29uc3QgZHkgPSAodGV4dFNpemUuZm9udEJvdW5kaW5nQm94QXNjZW50ICsgdGV4dFNpemUuZm9udEJvdW5kaW5nQm94RGVzY2VudCkgLyAyO1xuICB0ZXh0U2l6ZSA9IHRleHRTaXplLndpZHRoO1xuICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuTVNBKSB7XG4gICAgbWF4Q29sb3JUZXh0U2l6ZSA9IG1heFdvcmRbbWF4V29yZElkeF07XG4gICAgdGV4dFNpemUgPSBtYXhXb3JkW21heFdvcmRJZHhdO1xuICAgIGlmIChtYXhXb3JkSWR4ID4gKG1heFdvcmRbJ2Jpby1tYXhJbmRleCddID8/IDApKSB7XG4gICAgICBtYXhXb3JkWydiaW8tbWF4SW5kZXgnXSA9IG1heFdvcmRJZHg7XG4gICAgICBncmlkQ2VsbC5jZWxsLmNvbHVtbi50ZW1wID0gbWF4V29yZDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3KGR4MTogbnVtYmVyLCBkeDI6IG51bWJlcik6IHZvaWQge1xuICAgIGcuZmlsbFN0eWxlID0gY29sb3I7XG4gICAgZy5nbG9iYWxBbHBoYSA9IHRyYW5zcGFyZW5jeVJhdGU7XG4gICAgaWYgKGRyYXdTdHlsZSA9PT0gRHJhd1N0eWxlLmNsYXNzaWMpIHtcbiAgICAgIGcuZmlsbFRleHQoY29sb3JQYXJ0LCB4ICsgZHgxLCB5ICsgZHkpO1xuICAgICAgZy5maWxsU3R5bGUgPSBncmF5Q29sb3I7XG4gICAgICBnLmZpbGxUZXh0KGdyYXlQYXJ0LCB4ICsgZHgyLCB5ICsgZHkpO1xuICAgIH1cbiAgICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuTVNBKSB7XG4gICAgICBnLmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgZy5maWxsVGV4dChjb2xvclBhcnQsIHggKyBkeDEgKyAoKG1heFdvcmRbbWF4V29yZElkeF0gLSBjb2xvclRleHRTaXplKSAvIDIpLCB5ICsgZHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsZWZ0IHx8IHRleHRTaXplID4gdykge1xuICAgIGRyYXcoaW5kZW50LCBpbmRlbnQgKyBtYXhDb2xvclRleHRTaXplKTtcbiAgICByZXR1cm4geCArIG1heENvbG9yVGV4dFNpemUgKyBnLm1lYXN1cmVUZXh0KGdyYXlQYXJ0KS53aWR0aDtcblxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGR4ID0gKHcgLSB0ZXh0U2l6ZSkgLyAyO1xuICAgIGRyYXcoZHgsIGR4ICsgbWF4Q29sb3JUZXh0U2l6ZSk7XG4gICAgcmV0dXJuIHggKyBkeCArIG1heENvbG9yVGV4dFNpemU7XG4gIH1cbn1cblxuIl19
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNlbGwtcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRTFELE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDO0FBQzFDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUM1QixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDaEMsTUFBTSxzQkFBc0IsR0FBMEQsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUU3RyxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ25CLHdCQUFXLENBQUE7SUFDWCxnQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsU0FBUyxLQUFULFNBQVMsUUFHcEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUMxQyxDQUEyQixFQUFFLENBQVMsRUFBRSxRQUFnQixjQUFjLEVBQ3RFLFFBQWdCLENBQUMsRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLG1CQUEyQixHQUFHLEVBQy9ELFlBQW9CLEVBQUUsRUFBRSxPQUFnQixLQUFLLEVBQUUsWUFBdUIsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUF1QyxFQUFFLEVBQUUsVUFBa0IsQ0FBQyxFQUFFLFdBQStCLElBQUksRUFBRSxvQkFBOEIsRUFBRSxFQUFFLHFCQUFvQyxJQUFJOztJQUN4USxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUN0QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckMs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Q0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDeEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUNuRjtJQUNILENBQUM7SUFFRCxJQUFJLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FFN0Q7U0FBTTtRQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQztLQUNsQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtTcGxpdHRlckZ1bmMsIFdlYkxvZ299IGZyb20gJy4uL3ZpZXdlcnMvd2ViLWxvZ28nO1xuXG5jb25zdCB1bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbmNvbnN0IGdyYXlDb2xvciA9ICcjODA4MDgwJztcbmNvbnN0IGJsYWNrQ29sb3IgPSAncmdiKDAsMCwwKSc7XG5jb25zdCBtb25vbWVyVG9TaG9ydEZ1bmN0aW9uOiAoYW1pbm86IHN0cmluZywgbWF4TGVuZ3RoT2ZNb25vbWVyOiBudW1iZXIpID0+IHN0cmluZyA9IFdlYkxvZ28ubW9ub21lclRvU2hvcnQ7XG5cbmV4cG9ydCBlbnVtIERyYXdTdHlsZSB7XG4gIE1TQSA9ICdNU0EnLFxuICBjbGFzc2ljID0gJ2NsYXNzaWMnLFxufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBwcmludHMgYSBzdHJpbmcgYWxpZ25lZCB0byBsZWZ0IG9yIGNlbnRlcmVkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHggY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB5IHkgY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3IFdpZHRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGggSGVpZ2h0LlxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGcgQ2FudmFzIHJlbmRlcmluZyBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IHMgU3RyaW5nIHRvIHByaW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj11bmRlZmluZWRDb2xvcl0gU3RyaW5nIGNvbG9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXZvdD0wXSBQaXJ2b3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWZ0PWZhbHNlXSBJcyBsZWZ0IGFsaWduZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RyYW5zcGFyZW5jeVJhdGU9MC4wXSBUcmFuc3BhcmVuY3kgcmF0ZSB3aGVyZSAxLjAgaXMgZnVsbHkgdHJhbnNwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc2VwYXJhdG9yPScnXSBJcyBzZXBhcmF0b3IgZm9yIHNlcXVlbmNlLlxuICogQHBhcmFtIHtib29sZWFufSBbbGFzdD1mYWxzZV0gSXMgY2hlY2tlciBpZiBlbGVtZW50IGxhc3Qgb3Igbm90LlxuICogQHBhcmFtIGRyYXdTdHlsZSBJcyBkcmF3IHN0eWxlLiBNU0EgLSBmb3IgbXVsdGljaGFyU2VxLCBjbGFzc2ljIC0gZm9yIG90aGVyIHNlcS5cbiAqIEBwYXJhbSBtYXhXb3JkIElzIGFycmF5IG9mIG1heCB3b3JkcyBmb3IgZWFjaCBsaW5lLlxuICogQHBhcmFtIHdvcmRJZHggSXMgaW5kZXggb2Ygd29yZCB3ZSBjdXJyZW50bHkgZHJhdy5cbiAqIEBwYXJhbSBncmlkQ2VsbCBJcyBncmlkIGNlbGwuXG4gKiBAcGFyYW0gcmVmZXJlbmNlU2VxdWVuY2UgSXMgcmVmZXJlbmNlIHNlcXVlbmNlIGZvciBkaWZmIG1vZGUuXG4gKiBAcGFyYW0gbWF4TGVuZ3RoT2ZNb25vbWVyIElzIG1heCBsZW5ndGggb2YgbW9ub21lci5cbiAqIEByZXR1cm4ge251bWJlcn0geCBjb29yZGluYXRlIHRvIHN0YXJ0IHByaW50aW5nIGF0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMZWZ0T3JDZW50ZXJlZChcbiAgeDogbnVtYmVyLCB5OiBudW1iZXIsIHc6IG51bWJlciwgaDogbnVtYmVyLFxuICBnOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHM6IHN0cmluZywgY29sb3I6IHN0cmluZyA9IHVuZGVmaW5lZENvbG9yLFxuICBwaXZvdDogbnVtYmVyID0gMCwgbGVmdCA9IGZhbHNlLCB0cmFuc3BhcmVuY3lSYXRlOiBudW1iZXIgPSAxLjAsXG4gIHNlcGFyYXRvcjogc3RyaW5nID0gJycsIGxhc3Q6IGJvb2xlYW4gPSBmYWxzZSwgZHJhd1N0eWxlOiBEcmF3U3R5bGUgPSBEcmF3U3R5bGUuY2xhc3NpYywgbWF4V29yZDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9ID0ge30sIHdvcmRJZHg6IG51bWJlciA9IDAsIGdyaWRDZWxsOiBERy5HcmlkQ2VsbCB8IG51bGwgPSBudWxsLCByZWZlcmVuY2VTZXF1ZW5jZTogc3RyaW5nW10gPSBbXSwgbWF4TGVuZ3RoT2ZNb25vbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IG51bWJlciB7XG4gIGcudGV4dEFsaWduID0gJ3N0YXJ0JztcbiAgbGV0IGNvbG9yUGFydCA9IHMuc3Vic3RyaW5nKDApO1xuICBsZXQgZ3JheVBhcnQgPSBsYXN0ID8gJycgOiBzZXBhcmF0b3I7XG4gIGlmIChkcmF3U3R5bGUgPT09IERyYXdTdHlsZS5NU0EpIHtcbiAgICBncmF5UGFydCA9ICcnO1xuICB9XG4gIGxldCBjb2xvckNvZGUgPSB0cnVlO1xuICBsZXQgY29tcGFyZVdpdGhDdXJyZW50ID0gdHJ1ZTtcbiAgaWYgKGdyaWRDZWxsICE9IG51bGwpIHtcbiAgICBjb2xvckNvZGUgPSAoZ3JpZENlbGwuY2VsbC5jb2x1bW4/LnRlbXBbJ2NvbG9yLWNvZGUnXSAhPSBudWxsKSA/IGdyaWRDZWxsLmNlbGwuY29sdW1uLnRlbXBbJ2NvbG9yLWNvZGUnXSA6IHRydWU7XG4gICAgY29tcGFyZVdpdGhDdXJyZW50ID0gKGdyaWRDZWxsLmNlbGwuY29sdW1uPy50ZW1wWydjb21wYXJlLXdpdGgtY3VycmVudCddICE9IG51bGwpID8gZ3JpZENlbGwuY2VsbC5jb2x1bW4udGVtcFsnY29tcGFyZS13aXRoLWN1cnJlbnQnXSA6IHRydWU7XG4gIH1cbiAgY29uc3QgY3VycmVudE1vbm9tZXI6IHN0cmluZyA9IHJlZmVyZW5jZVNlcXVlbmNlW3dvcmRJZHhdO1xuICBpZiAoY29tcGFyZVdpdGhDdXJyZW50ICYmIChyZWZlcmVuY2VTZXF1ZW5jZS5sZW5ndGggPiAwKSkge1xuICAgIHRyYW5zcGFyZW5jeVJhdGUgPSAoY29sb3JQYXJ0ID09IGN1cnJlbnRNb25vbWVyKSA/IDAuMyA6IHRyYW5zcGFyZW5jeVJhdGU7XG4gIH1cbiAgaWYgKG1heExlbmd0aE9mTW9ub21lciAhPSBudWxsKSB7XG4gICAgY29sb3JQYXJ0ID0gbW9ub21lclRvU2hvcnRGdW5jdGlvbihjb2xvclBhcnQsIG1heExlbmd0aE9mTW9ub21lcik7XG4gIH1cblxuXG4gIGxldCB0ZXh0U2l6ZTogYW55ID0gZy5tZWFzdXJlVGV4dChjb2xvclBhcnQgKyBncmF5UGFydCk7XG4gIGNvbnN0IGluZGVudCA9IDU7XG5cbiAgbGV0IG1heENvbG9yVGV4dFNpemUgPSBnLm1lYXN1cmVUZXh0KGNvbG9yUGFydCkud2lkdGg7XG4gIGxldCBjb2xvclRleHRTaXplID0gZy5tZWFzdXJlVGV4dChjb2xvclBhcnQpLndpZHRoO1xuICBjb25zdCBkeSA9ICh0ZXh0U2l6ZS5mb250Qm91bmRpbmdCb3hBc2NlbnQgKyB0ZXh0U2l6ZS5mb250Qm91bmRpbmdCb3hEZXNjZW50KSAvIDI7XG4gIHRleHRTaXplID0gdGV4dFNpemUud2lkdGg7XG4gIGlmIChkcmF3U3R5bGUgPT09IERyYXdTdHlsZS5NU0EpIHtcbiAgICBtYXhDb2xvclRleHRTaXplID0gbWF4V29yZFt3b3JkSWR4XTtcbiAgICB0ZXh0U2l6ZSA9IG1heFdvcmRbd29yZElkeF07XG4gIH1cblxuICBmdW5jdGlvbiBkcmF3KGR4MTogbnVtYmVyLCBkeDI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGRyYXdDb2xvciA9IGNvbG9yQ29kZSA/IGNvbG9yIDogYmxhY2tDb2xvcjtcbiAgICBnLmZpbGxTdHlsZSA9IGRyYXdDb2xvcjtcbiAgICBnLmdsb2JhbEFscGhhID0gdHJhbnNwYXJlbmN5UmF0ZTtcbiAgICBpZiAoZHJhd1N0eWxlID09PSBEcmF3U3R5bGUuY2xhc3NpYykge1xuICAgICAgZy5maWxsVGV4dChjb2xvclBhcnQsIHggKyBkeDEsIHkgKyBkeSk7XG4gICAgICBnLmZpbGxTdHlsZSA9IGdyYXlDb2xvcjtcbiAgICAgIGcuZmlsbFRleHQoZ3JheVBhcnQsIHggKyBkeDIsIHkgKyBkeSk7XG4gICAgfVxuICAgIGlmIChkcmF3U3R5bGUgPT09IERyYXdTdHlsZS5NU0EpIHtcbiAgICAgIGcuZmlsbFN0eWxlID0gZHJhd0NvbG9yO1xuICAgICAgZy5maWxsVGV4dChjb2xvclBhcnQsIHggKyBkeDEgKyAoKG1heFdvcmRbd29yZElkeF0gLSBjb2xvclRleHRTaXplKSAvIDIpLCB5ICsgZHkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsZWZ0IHx8IHRleHRTaXplID4gdykge1xuICAgIGRyYXcoaW5kZW50LCBpbmRlbnQgKyBtYXhDb2xvclRleHRTaXplKTtcbiAgICByZXR1cm4geCArIG1heENvbG9yVGV4dFNpemUgKyBnLm1lYXN1cmVUZXh0KGdyYXlQYXJ0KS53aWR0aDtcblxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGR4ID0gKHcgLSB0ZXh0U2l6ZSkgLyAyO1xuICAgIGRyYXcoZHgsIGR4ICsgbWF4Q29sb3JUZXh0U2l6ZSk7XG4gICAgcmV0dXJuIHggKyBkeCArIG1heENvbG9yVGV4dFNpemU7XG4gIH1cbn1cblxuIl19
@@ -49,6 +49,7 @@ export declare class UnitsHandler {
49
49
  isRna(): boolean;
50
50
  isDna(): boolean;
51
51
  isPeptide(): boolean;
52
+ isMsa(): boolean;
52
53
  /** Associate notation types with the corresponding units */
53
54
  /**
54
55
  * @return {NOTATION} Notation associated with the units type
@@ -1 +1 @@
1
- {"version":3,"file":"units-handler.d.ts","sourceRoot":"","sources":["units-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtC,0EAA0E;AAC1E,0BAAkB,QAAQ;IACxB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED,0BAAkB,QAAQ;IACxB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO;CACV;AAED,iEAAiE;AACjE,qBAAa,YAAY;IACvB,gBAAuB,IAAI;;;;;;MAMzB;IAEF,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB;;;;MAI9C;IAEF,gBAAuB,oBAAoB,cAGxC;IACH,gBAAuB,gBAAgB,cAAiC;IACxE,gBAAuB,gBAAgB,cAAiC;WAE1D,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM;IAwBlD,SAAS,KAAK,KAAK,IAAI,MAAM,CAAwB;IAErD,SAAS,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,CAAyB;IAE1D,IAAW,QAAQ,IAAI,QAAQ,CAA2B;IAE1D,IAAW,gBAAgB,IAAI,MAAM,CAAmC;IAExE,IAAW,SAAS,IAAI,MAAM,CAM7B;IAED,IAAW,OAAO,IAAI,MAAM,CAO3B;IAED,iCAAiC;IACjC,IAAW,QAAQ,IAAI,MAAM,CAO5B;IAEM,eAAe,IAAI,MAAM;IAoBzB,sBAAsB,IAAI,OAAO;IAQjC,OAAO,IAAI,OAAO;IAElB,WAAW,IAAI,OAAO;IAEtB,MAAM,IAAI,OAAO;IAEjB,KAAK,IAAI,OAAO;IAEhB,KAAK,IAAI,OAAO;IAEhB,SAAS,IAAI,OAAO;IAE3B,4DAA4D;IAC5D;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,QAAQ;IAWjC;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,GAAG,EAAE,CAAC,MAAM;IAyB3D;;;;;;OAMG;WACW,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;IAM7D;;;;;OAKG;WACW,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IASxD;;;;;;;;OAQG;WACW,sBAAsB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,EAAE,CAAC,MAAM;gBAYO,GAAG,EAAE,EAAE,CAAC,MAAM;CA8BlC"}
1
+ {"version":3,"file":"units-handler.d.ts","sourceRoot":"","sources":["units-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMtC,0EAA0E;AAC1E,0BAAkB,QAAQ;IACxB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED,0BAAkB,QAAQ;IACxB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO;CACV;AAED,iEAAiE;AACjE,qBAAa,YAAY;IACvB,gBAAuB,IAAI;;;;;;MAMzB;IAEF,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB;;;;MAI9C;IAEF,gBAAuB,oBAAoB,cAGxC;IACH,gBAAuB,gBAAgB,cAAiC;IACxE,gBAAuB,gBAAgB,cAAiC;WAE1D,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM;IAwBlD,SAAS,KAAK,KAAK,IAAI,MAAM,CAAwB;IAErD,SAAS,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,CAAyB;IAE1D,IAAW,QAAQ,IAAI,QAAQ,CAA2B;IAE1D,IAAW,gBAAgB,IAAI,MAAM,CAAmC;IAExE,IAAW,SAAS,IAAI,MAAM,CAM7B;IAED,IAAW,OAAO,IAAI,MAAM,CAO3B;IAED,iCAAiC;IACjC,IAAW,QAAQ,IAAI,MAAM,CAO5B;IAEM,eAAe,IAAI,MAAM;IAoBzB,sBAAsB,IAAI,OAAO;IAQjC,OAAO,IAAI,OAAO;IAElB,WAAW,IAAI,OAAO;IAEtB,MAAM,IAAI,OAAO;IAEjB,KAAK,IAAI,OAAO;IAEhB,KAAK,IAAI,OAAO;IAEhB,SAAS,IAAI,OAAO;IAEpB,KAAK,IAAI,OAAO;IAEvB,4DAA4D;IAC5D;;OAEG;IACH,SAAS,CAAC,WAAW,IAAI,QAAQ;IAWjC;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,QAAQ,GAAG,EAAE,CAAC,MAAM;IAyB3D;;;;;;OAMG;WACW,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;IAM7D;;;;;OAKG;WACW,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IASxD;;;;;;;;OAQG;WACW,sBAAsB,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,EAAE,CAAC,MAAM;gBAYO,GAAG,EAAE,EAAE,CAAC,MAAM;CA8BlC"}
@@ -112,6 +112,7 @@ export class UnitsHandler {
112
112
  isRna() { return this.alphabet === 'RNA'; }
113
113
  isDna() { return this.alphabet === 'DNA'; }
114
114
  isPeptide() { return this.alphabet === 'PT'; }
115
+ isMsa() { return this.aligned.toUpperCase().includes('MSA'); }
115
116
  /** Associate notation types with the corresponding units */
116
117
  /**
117
118
  * @return {NOTATION} Notation associated with the units type
@@ -217,4 +218,4 @@ UnitsHandler.PeptideFastaAlphabet = new Set([
217
218
  ]);
218
219
  UnitsHandler.DnaFastaAlphabet = new Set(['A', 'C', 'G', 'T']);
219
220
  UnitsHandler.RnaFastaAlphabet = new Set(['A', 'C', 'G', 'U']);
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVuaXRzLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl0QyxPQUFPLEVBQUMsT0FBTyxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFnQnpELGlFQUFpRTtBQUNqRSxNQUFNLE9BQU8sWUFBWTtJQWlPdkIsWUFBbUIsR0FBYztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxLQUFLLElBQUk7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O1lBRXBCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JGLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUQsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFL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R0FBRztJQUM1QixPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsVUFBVTtJQUNwQixZQUFZLEVBQUUsZUFBZTtJQUM3QixtQkFBbUIsRUFBRSxzQkFBc0I7SUFDM0MsU0FBUyxFQUFFLFdBQVc7Q0FDdkIsQ0FBQztBQU13QixtQ0FBc0IsR0FBRztJQUNqRCxJQUFJLEVBQUUsR0FBRztJQUNULFNBQVMsRUFBRSxFQUFFO0lBQ2IsS0FBSyxFQUFFLEdBQUc7Q0FDWCxDQUFDO0FBRXFCLGlDQUFvQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3BELEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7SUFDaEQsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztDQUNqRCxDQUFDLENBQUM7QUFDb0IsNkJBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELDZCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5cbmltcG9ydCB7V2ViTG9nbywgU2VxQ29sU3RhdHN9IGZyb20gJy4uL3ZpZXdlcnMvd2ViLWxvZ28nO1xuXG4vKiogZW51bSB0eXBlIHRvIHNpbXBsaWZ5IHNldHRpbmcgXCJ1c2VyLWZyaWVuZGx5XCIgbm90YXRpb24gaWYgbmVjZXNzYXJ5ICovXG5leHBvcnQgY29uc3QgZW51bSBOT1RBVElPTiB7XG4gIEZBU1RBID0gJ2Zhc3RhJyxcbiAgU0VQQVJBVE9SID0gJ3NlcGFyYXRvcicsXG4gIEhFTE0gPSAnaGVsbScsXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEFMUEhBQkVUIHtcbiAgRE5BID0gJ0ROQScsXG4gIFJOQSA9ICdSTkEnLFxuICBQVCA9ICdQVCcsXG4gIFVOID0gJ1VOJyxcbn1cblxuLyoqIENsYXNzIGZvciBoYW5kbGluZyBub3RhdGlvbiB1bml0cyBpbiBNYWNyb21vbGVjdWxlIGNvbHVtbnMgKi9cbmV4cG9ydCBjbGFzcyBVbml0c0hhbmRsZXIge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRBR1MgPSB7XG4gICAgYWxpZ25lZDogJ2FsaWduZWQnLFxuICAgIGFscGhhYmV0OiAnYWxwaGFiZXQnLFxuICAgIGFscGhhYmV0U2l6ZTogJy5hbHBoYWJldFNpemUnLFxuICAgIGFscGhhYmV0SXNNdWx0aWNoYXI6ICcuYWxwaGFiZXRJc011bHRpY2hhcicsXG4gICAgc2VwYXJhdG9yOiAnc2VwYXJhdG9yJyxcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbHVtbjogREcuQ29sdW1uOyAvLyB0aGUgY29sdW1uIHRvIGJlIGNvbnZlcnRlZFxuICBwcm90ZWN0ZWQgX3VuaXRzOiBzdHJpbmc7IC8vIHVuaXRzLCBvZiB0aGUgZm9ybSBmYXN0YSwgc2VwYXJhdG9yXG4gIHByb3RlY3RlZCBfbm90YXRpb246IE5PVEFUSU9OOyAvLyBjdXJyZW50IG5vdGF0aW9uICh3aXRob3V0IDpTRVE6TlQsIGV0Yy4pXG4gIHByb3RlY3RlZCBfZGVmYXVsdEdhcFN5bWJvbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IF9kZWZhdWx0R2FwU3ltYm9sc0RpY3QgPSB7XG4gICAgSEVMTTogJyonLFxuICAgIFNFUEFSQVRPUjogJycsXG4gICAgRkFTVEE6ICctJyxcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBlcHRpZGVGYXN0YUFscGhhYmV0ID0gbmV3IFNldChbXG4gICAgJ0cnLCAnTCcsICdZJywgJ1MnLCAnRScsICdRJywgJ0QnLCAnTicsICdGJywgJ0EnLFxuICAgICdLJywgJ1InLCAnSCcsICdDJywgJ1YnLCAnUCcsICdXJywgJ0knLCAnTScsICdUJyxcbiAgXSk7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRG5hRmFzdGFBbHBoYWJldCA9IG5ldyBTZXQoWydBJywgJ0MnLCAnRycsICdUJ10pO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJuYUZhc3RhQWxwaGFiZXQgPSBuZXcgU2V0KFsnQScsICdDJywgJ0cnLCAnVSddKTtcblxuICBwdWJsaWMgc3RhdGljIHNldFVuaXRzVG9GYXN0YUNvbHVtbihjb2w6IERHLkNvbHVtbikge1xuICAgIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYXN0YSBjb2x1bW4gbXVzdCBiZSBNQUNST01PTEVDVUxFJyk7XG5cbiAgICBjb25zdCBzdGF0czogU2VxQ29sU3RhdHMgPSBXZWJMb2dvLmdldFN0YXRzKGNvbCwgNSwgV2ViTG9nby5zcGxpdHRlckFzRmFzdGEpO1xuICAgIGNvbnN0IHNlcVR5cGUgPSBzdGF0cy5zYW1lTGVuZ3RoID8gJ1NFUS5NU0EnIDogJ1NFUSc7XG5cbiAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXM6IFtzdHJpbmcsIFNldDxzdHJpbmc+XVtdID0gW1xuICAgICAgW0FMUEhBQkVULlBULCBVbml0c0hhbmRsZXIuUGVwdGlkZUZhc3RhQWxwaGFiZXRdLFxuICAgICAgW0FMUEhBQkVULkROQSwgVW5pdHNIYW5kbGVyLkRuYUZhc3RhQWxwaGFiZXRdLFxuICAgICAgW0FMUEhBQkVULlJOQSwgVW5pdHNIYW5kbGVyLlJuYUZhc3RhQWxwaGFiZXRdLFxuICAgIF07XG5cbiAgICAvLyBDYWxjdWxhdGUgbGlrZWxpaG9vZHMgZm9yIGFscGhhYmV0X2NhbmRpZGF0ZXNcbiAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXNTaW06IG51bWJlcltdID0gYWxwaGFiZXRDYW5kaWRhdGVzLm1hcChcbiAgICAgIChjKSA9PiBXZWJMb2dvLmdldEFscGhhYmV0U2ltaWxhcml0eShzdGF0cy5mcmVxLCBjWzFdKSk7XG4gICAgY29uc3QgbWF4Q29zID0gTWF0aC5tYXgoLi4uYWxwaGFiZXRDYW5kaWRhdGVzU2ltKTtcbiAgICBjb25zdCBhbHBoYWJldCA9IG1heENvcyA+IDAuNjUgPyBhbHBoYWJldENhbmRpZGF0ZXNbYWxwaGFiZXRDYW5kaWRhdGVzU2ltLmluZGV4T2YobWF4Q29zKV1bMF0gOiAnVU4nO1xuXG4gICAgY29sLnNldFRhZyhERy5UQUdTLlVOSVRTLCBOT1RBVElPTi5GQVNUQSk7XG4gICAgY29sLnNldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbGlnbmVkLCBzZXFUeXBlKTtcbiAgICBjb2wuc2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0LCBhbHBoYWJldCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHVuaXRzKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl91bml0czsgfVxuXG4gIHByb3RlY3RlZCBnZXQgY29sdW1uKCk6IERHLkNvbHVtbiB7IHJldHVybiB0aGlzLl9jb2x1bW47IH1cblxuICBwdWJsaWMgZ2V0IG5vdGF0aW9uKCk6IE5PVEFUSU9OIHsgcmV0dXJuIHRoaXMuX25vdGF0aW9uOyB9XG5cbiAgcHVibGljIGdldCBkZWZhdWx0R2FwU3ltYm9sKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9kZWZhdWx0R2FwU3ltYm9sOyB9XG5cbiAgcHVibGljIGdldCBzZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLmNvbHVtbi5nZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1Muc2VwYXJhdG9yKTtcbiAgICBpZiAoc2VwYXJhdG9yICE9PSBudWxsKVxuICAgICAgcmV0dXJuIHNlcGFyYXRvcjtcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcGFyYXRvciBub3Qgc2V0Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsaWduZWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbGlnbmVkID0gdGhpcy5jb2x1bW4uZ2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFsaWduZWQpO1xuICAgIGlmIChhbGlnbmVkICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWxpZ25lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWcgYWxpZ25lZCBub3Qgc2V0Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFscGhhYmV0IG5hbWUgKHVwcGVyIGNhc2UpICovXG4gIHB1YmxpYyBnZXQgYWxwaGFiZXQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBhbHBoYWJldCA9IHRoaXMuY29sdW1uLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldCk7XG4gICAgaWYgKGFscGhhYmV0ICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gYWxwaGFiZXQudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWcgYWxwaGFiZXQgbm90IHNldCcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRBbHBoYWJldFNpemUoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5ub3RhdGlvbiA9PSBOT1RBVElPTi5IRUxNIHx8IHRoaXMuYWxwaGFiZXQgPT0gQUxQSEFCRVQuVU4pIHtcbiAgICAgIGNvbnN0IGFscGhhYmV0U2l6ZSA9IHBhcnNlSW50KHRoaXMuY29sdW1uLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldFNpemUpKTtcbiAgICAgIHJldHVybiBhbHBoYWJldFNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAodGhpcy5hbHBoYWJldCkge1xuICAgICAgY2FzZSBBTFBIQUJFVC5QVDpcbiAgICAgICAgcmV0dXJuIDIwO1xuICAgICAgY2FzZSBBTFBIQUJFVC5ETkE6XG4gICAgICBjYXNlIEFMUEhBQkVULlJOQTpcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBjYXNlICdOVCc6XG4gICAgICAgIGNvbnNvbGUud2FybihgVW5leHBlY3RlZCBhbHBoYWJldCAnTlQnLmApO1xuICAgICAgICByZXR1cm4gNDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBhbHBoYWJldCAnJHt0aGlzLmFscGhhYmV0fScuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEFscGhhYmV0SXNNdWx0aWNoYXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubm90YXRpb24gPT0gTk9UQVRJT04uSEVMTSB8fCB0aGlzLmFscGhhYmV0ID09IEFMUEhBQkVULlVOKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0SXNNdWx0aWNoYXIpID09ICd0cnVlJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0Zhc3RhKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uRkFTVEE7IH1cblxuICBwdWJsaWMgaXNTZXBhcmF0b3IoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLm5vdGF0aW9uID09PSBOT1RBVElPTi5TRVBBUkFUT1I7IH1cblxuICBwdWJsaWMgaXNIZWxtKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uSEVMTTsgfVxuXG4gIHB1YmxpYyBpc1JuYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09ICdSTkEnOyB9XG5cbiAgcHVibGljIGlzRG5hKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5hbHBoYWJldCA9PT0gJ0ROQSc7IH1cblxuICBwdWJsaWMgaXNQZXB0aWRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5hbHBoYWJldCA9PT0gJ1BUJzsgfVxuXG4gIC8qKiBBc3NvY2lhdGUgbm90YXRpb24gdHlwZXMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB1bml0cyAqL1xuICAvKipcbiAgICogQHJldHVybiB7Tk9UQVRJT059ICAgICBOb3RhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHVuaXRzIHR5cGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RhdGlvbigpOiBOT1RBVElPTiB7XG4gICAgaWYgKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkZBU1RBKSlcbiAgICAgIHJldHVybiBOT1RBVElPTi5GQVNUQTtcbiAgICBlbHNlIGlmICh0aGlzLnVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5TRVBBUkFUT1IpKVxuICAgICAgcmV0dXJuIE5PVEFUSU9OLlNFUEFSQVRPUjtcbiAgICBlbHNlIGlmICh0aGlzLnVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5IRUxNKSlcbiAgICAgIHJldHVybiBOT1RBVElPTi5IRUxNO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBoYXMgdW5leHBlY3RlZCBub3RhdGlvbiAnJHt0aGlzLnVuaXRzfScuYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVtcHR5IGNvbHVtbiBvZiB0aGUgc3BlY2lmaWVkIG5vdGF0aW9uIHR5cGUgYW5kIHRoZSBzYW1lXG4gICAqIGxlbmd0aCBhcyBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtOT1RBVElPTn0gdGFyZ2V0Tm90YXRpb25cbiAgICogQHJldHVybiB7REcuQ29sdW1ufVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5ld0NvbHVtbih0YXJnZXROb3RhdGlvbjogTk9UQVRJT04pOiBERy5Db2x1bW4ge1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1uO1xuICAgIGNvbnN0IGxlbiA9IGNvbC5sZW5ndGg7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldE5vdGF0aW9uLnRvTG93ZXJDYXNlKCkgKyAnKCcgKyBjb2wubmFtZSArICcpJztcbiAgICBjb25zdCBuZXdDb2xOYW1lID0gY29sLmRhdGFGcmFtZS5jb2x1bW5zLmdldFVudXNlZE5hbWUobmFtZSk7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gREcuQ29sdW1uLmZyb21MaXN0KCdzdHJpbmcnLCBuZXdDb2xOYW1lLCBuZXcgQXJyYXkobGVuKS5maWxsKCcnKSk7XG4gICAgbmV3Q29sdW1uLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEU7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhERy5UQUdTLlVOSVRTLCB0aGlzLm5vdGF0aW9uKTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuQ0VMTF9SRU5ERVJFUiwgJ01hY3JvbW9sZWN1bGUnKTtcblxuICAgIGNvbnN0IHNyY0FscGhhYmV0ID0gY29sLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldCk7XG4gICAgaWYgKHNyY0FscGhhYmV0KVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldCwgc3JjQWxwaGFiZXQpO1xuXG4gICAgY29uc3Qgc3JjQWxwaGFiZXRTaXplID0gY29sLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldFNpemUpO1xuICAgIGlmIChzcmNBbHBoYWJldFNpemUpXG4gICAgICBuZXdDb2x1bW4uc2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0U2l6ZSwgc3JjQWxwaGFiZXRTaXplKTtcblxuICAgIGNvbnN0IHNyY0FscGhhYmV0SXNNdWx0aWNoYXIgPSBjb2wuZ2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0SXNNdWx0aWNoYXIpO1xuICAgIGlmIChzcmNBbHBoYWJldElzTXVsdGljaGFyKVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyLCBzcmNBbHBoYWJldElzTXVsdGljaGFyKTtcblxuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVtcHR5IGNvbHVtbiB1c2luZyB0ZW1wbGF0ZUNvbCBhcyBhIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSB0ZW1wbGF0ZUNvbCAgdGhlIHByb3BlcnRpZXMgYW5kIHVuaXRzIG9mIHRoaXMgY29sdW1uIGFyZSB1c2VkIGFzIGFcbiAgICogdGVtcGxhdGUgdG8gYnVpbGQgdGhlIG5ldyBvbmVcbiAgICogQHJldHVybiB7REcuQ29sdW1ufVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXROZXdDb2x1bW4odGVtcGxhdGVDb2w6IERHLkNvbHVtbik6IERHLkNvbHVtbiB7XG4gICAgY29uc3QgY29sOiBVbml0c0hhbmRsZXIgPSBuZXcgVW5pdHNIYW5kbGVyKHRlbXBsYXRlQ29sKTtcbiAgICBjb25zdCB0YXJnZXROb3RhdGlvbiA9IGNvbC5ub3RhdGlvbjtcbiAgICByZXR1cm4gY29sLmdldE5ld0NvbHVtbih0YXJnZXROb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQSBoZWxwZXIgZnVuY3Rpb24gY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHRoZSAndW5pdHMnIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdHMgIHRoZSBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVuaXRzU3RyaW5nSXNWYWxpZCh1bml0czogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdW5pdHMgPSB1bml0cy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeGVzID0gW05PVEFUSU9OLkZBU1RBLCBOT1RBVElPTi5TRVBBUkFUT1IsIE5PVEFUSU9OLkhFTE1dO1xuICAgIGNvbnN0IHBvc3RmaXhlcyA9IFsncm5hJywgJ2RuYScsICdwdCddO1xuXG4gICAgY29uc3QgcHJlZml4Q3JpdGVyaW9uID0gcHJlZml4ZXMuc29tZSgocCkgPT4gdW5pdHMuc3RhcnRzV2l0aChwLnRvTG93ZXJDYXNlKCkpKTtcbiAgICByZXR1cm4gcHJlZml4Q3JpdGVyaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBjb2x1bW4gb2Ygc2VtYW50aWMgdHlwZSBNQUNST01PTEVDVUxFIGZyb20gdGhlIGxpc3Qgb2ZcbiAgICogc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgIGxlbiAgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgbmFtZSAgdGhlIG5hbWUgb2YgdGhlIG5ldyBjb2x1bW5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgIHVuaXRzICB0aGUgdW5pdHMgb2YgdGhlIG5ldyBjb2x1bW5cbiAgICogQHJldHVybiB7REcuQ29sdW1ufVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXROZXdDb2x1bW5Gcm9tUGFyYW1zKFxuICAgIGxlbjogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB1bml0czogc3RyaW5nXG4gICk6IERHLkNvbHVtbiB7XG4gICAgLy8gV0FSTklORzogaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpcyBpbXBvc3NpYmxlIHRvIHZlcmlmeSB0aGUgdW5pcXVlbmVzc1xuICAgIC8vIG9mIHRoZSBuZXcgY29sdW1uJ3MgbmFtZVxuICAgIC8vIFRPRE86IHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdW5pdHMgcGFyYW1ldGVyXG4gICAgaWYgKCFVbml0c0hhbmRsZXIudW5pdHNTdHJpbmdJc1ZhbGlkKHVuaXRzKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmb3JtYXQgb2YgXFwndW5pdHNcXCcgcGFyYW1ldGVyJyk7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gREcuQ29sdW1uLmZyb21MaXN0KCdzdHJpbmcnLCBuYW1lLCBuZXcgQXJyYXkobGVuKS5maWxsKCcnKSk7XG4gICAgbmV3Q29sdW1uLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEU7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhERy5UQUdTLlVOSVRTLCB1bml0cyk7XG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb2w6IERHLkNvbHVtbikge1xuICAgIHRoaXMuX2NvbHVtbiA9IGNvbDtcbiAgICBjb25zdCB1bml0cyA9IHRoaXMuX2NvbHVtbi50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICAgIGlmICh1bml0cyAhPT0gbnVsbClcbiAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBhcmUgbm90IHNwZWNpZmllZCBpbiBjb2x1bW4nKTtcbiAgICB0aGlzLl9ub3RhdGlvbiA9IHRoaXMuZ2V0Tm90YXRpb24oKTtcbiAgICB0aGlzLl9kZWZhdWx0R2FwU3ltYm9sID0gKHRoaXMuaXNGYXN0YSgpKSA/IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkZBU1RBIDpcbiAgICAgICh0aGlzLmlzSGVsbSgpKSA/IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkhFTE0gOlxuICAgICAgICBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5TRVBBUkFUT1I7XG5cbiAgICBpZiAoIXRoaXMuY29sdW1uLnRhZ3MuaGFzKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0U2l6ZSkpIHtcbiAgICAgIGlmICh0aGlzLmlzSGVsbSgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIG5vdGF0aW9uICcke3RoaXMubm90YXRpb259JyBgICtcbiAgICAgICAgICBgdGFnICcke1VuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0U2l6ZX0nIGlzIG1hbmRhdG9yeS5gKTtcbiAgICAgIGVsc2UgaWYgKFsnVU4nXS5pbmNsdWRlcyh0aGlzLmFscGhhYmV0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgY29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBvZiBhbHBoYWJldCAnJHt0aGlzLmFscGhhYmV0fScgYCArXG4gICAgICAgICAgYHRhZyAnJHtVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldFNpemV9JyBpcyBtYW5kYXRvcnkuYCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbHVtbi50YWdzLmhhcyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKSkge1xuICAgICAgaWYgKHRoaXMuaXNIZWxtKCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yIGNvbHVtbiAnJHt0aGlzLmNvbHVtbi5uYW1lfScgb2Ygbm90YXRpb24gJyR7dGhpcy5ub3RhdGlvbn0nIGAgK1xuICAgICAgICAgIGB0YWcgJyR7VW5pdHNIYW5kbGVyLlRBR1MuYWxwaGFiZXRJc011bHRpY2hhcn0nIGlzIG1hbmRhdG9yeS5gKTtcbiAgICAgIGVsc2UgaWYgKFsnVU4nXS5pbmNsdWRlcyh0aGlzLmFscGhhYmV0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgY29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBvZiBhbHBoYWJldCAnJHt0aGlzLmFscGhhYmV0fScgYCArXG4gICAgICAgICAgYHRhZyAnJHtVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyfScgaXMgbWFuZGF0b3J5LmApO1xuICAgIH1cbiAgfVxufVxuIl19
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdHMtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVuaXRzLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl0QyxPQUFPLEVBQUMsT0FBTyxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFnQnpELGlFQUFpRTtBQUNqRSxNQUFNLE9BQU8sWUFBWTtJQW1PdkIsWUFBbUIsR0FBYztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxLQUFLLElBQUk7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7O1lBRXBCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JGLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUQsWUFBWSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFL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RUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs7QUFoT3NCLGlCQUFJLEdBQUc7SUFDNUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsWUFBWSxFQUFFLGVBQWU7SUFDN0IsbUJBQW1CLEVBQUUsc0JBQXNCO0lBQzNDLFNBQVMsRUFBRSxXQUFXO0NBQ3ZCLENBQUM7QUFNd0IsbUNBQXNCLEdBQUc7SUFDakQsSUFBSSxFQUFFLEdBQUc7SUFDVCxTQUFTLEVBQUUsRUFBRTtJQUNiLEtBQUssRUFBRSxHQUFHO0NBQ1gsQ0FBQztBQUVxQixpQ0FBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNwRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO0lBQ2hELEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7Q0FDakQsQ0FBQyxDQUFDO0FBQ29CLDZCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCw2QkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuXG5pbXBvcnQge1dlYkxvZ28sIFNlcUNvbFN0YXRzfSBmcm9tICcuLi92aWV3ZXJzL3dlYi1sb2dvJztcblxuLyoqIGVudW0gdHlwZSB0byBzaW1wbGlmeSBzZXR0aW5nIFwidXNlci1mcmllbmRseVwiIG5vdGF0aW9uIGlmIG5lY2Vzc2FyeSAqL1xuZXhwb3J0IGNvbnN0IGVudW0gTk9UQVRJT04ge1xuICBGQVNUQSA9ICdmYXN0YScsXG4gIFNFUEFSQVRPUiA9ICdzZXBhcmF0b3InLFxuICBIRUxNID0gJ2hlbG0nLFxufVxuXG5leHBvcnQgY29uc3QgZW51bSBBTFBIQUJFVCB7XG4gIEROQSA9ICdETkEnLFxuICBSTkEgPSAnUk5BJyxcbiAgUFQgPSAnUFQnLFxuICBVTiA9ICdVTicsXG59XG5cbi8qKiBDbGFzcyBmb3IgaGFuZGxpbmcgbm90YXRpb24gdW5pdHMgaW4gTWFjcm9tb2xlY3VsZSBjb2x1bW5zICovXG5leHBvcnQgY2xhc3MgVW5pdHNIYW5kbGVyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUQUdTID0ge1xuICAgIGFsaWduZWQ6ICdhbGlnbmVkJyxcbiAgICBhbHBoYWJldDogJ2FscGhhYmV0JyxcbiAgICBhbHBoYWJldFNpemU6ICcuYWxwaGFiZXRTaXplJyxcbiAgICBhbHBoYWJldElzTXVsdGljaGFyOiAnLmFscGhhYmV0SXNNdWx0aWNoYXInLFxuICAgIHNlcGFyYXRvcjogJ3NlcGFyYXRvcicsXG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb2x1bW46IERHLkNvbHVtbjsgLy8gdGhlIGNvbHVtbiB0byBiZSBjb252ZXJ0ZWRcbiAgcHJvdGVjdGVkIF91bml0czogc3RyaW5nOyAvLyB1bml0cywgb2YgdGhlIGZvcm0gZmFzdGEsIHNlcGFyYXRvclxuICBwcm90ZWN0ZWQgX25vdGF0aW9uOiBOT1RBVElPTjsgLy8gY3VycmVudCBub3RhdGlvbiAod2l0aG91dCA6U0VROk5ULCBldGMuKVxuICBwcm90ZWN0ZWQgX2RlZmF1bHRHYXBTeW1ib2w6IHN0cmluZztcbiAgcHJvdGVjdGVkIHN0YXRpYyByZWFkb25seSBfZGVmYXVsdEdhcFN5bWJvbHNEaWN0ID0ge1xuICAgIEhFTE06ICcqJyxcbiAgICBTRVBBUkFUT1I6ICcnLFxuICAgIEZBU1RBOiAnLScsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQZXB0aWRlRmFzdGFBbHBoYWJldCA9IG5ldyBTZXQoW1xuICAgICdHJywgJ0wnLCAnWScsICdTJywgJ0UnLCAnUScsICdEJywgJ04nLCAnRicsICdBJyxcbiAgICAnSycsICdSJywgJ0gnLCAnQycsICdWJywgJ1AnLCAnVycsICdJJywgJ00nLCAnVCcsXG4gIF0pO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERuYUZhc3RhQWxwaGFiZXQgPSBuZXcgU2V0KFsnQScsICdDJywgJ0cnLCAnVCddKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSbmFGYXN0YUFscGhhYmV0ID0gbmV3IFNldChbJ0EnLCAnQycsICdHJywgJ1UnXSk7XG5cbiAgcHVibGljIHN0YXRpYyBzZXRVbml0c1RvRmFzdGFDb2x1bW4oY29sOiBERy5Db2x1bW4pIHtcbiAgICBpZiAoY29sLnNlbVR5cGUgIT09IERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFzdGEgY29sdW1uIG11c3QgYmUgTUFDUk9NT0xFQ1VMRScpO1xuXG4gICAgY29uc3Qgc3RhdHM6IFNlcUNvbFN0YXRzID0gV2ViTG9nby5nZXRTdGF0cyhjb2wsIDUsIFdlYkxvZ28uc3BsaXR0ZXJBc0Zhc3RhKTtcbiAgICBjb25zdCBzZXFUeXBlID0gc3RhdHMuc2FtZUxlbmd0aCA/ICdTRVEuTVNBJyA6ICdTRVEnO1xuXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzOiBbc3RyaW5nLCBTZXQ8c3RyaW5nPl1bXSA9IFtcbiAgICAgIFtBTFBIQUJFVC5QVCwgVW5pdHNIYW5kbGVyLlBlcHRpZGVGYXN0YUFscGhhYmV0XSxcbiAgICAgIFtBTFBIQUJFVC5ETkEsIFVuaXRzSGFuZGxlci5EbmFGYXN0YUFscGhhYmV0XSxcbiAgICAgIFtBTFBIQUJFVC5STkEsIFVuaXRzSGFuZGxlci5SbmFGYXN0YUFscGhhYmV0XSxcbiAgICBdO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGxpa2VsaWhvb2RzIGZvciBhbHBoYWJldF9jYW5kaWRhdGVzXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltOiBudW1iZXJbXSA9IGFscGhhYmV0Q2FuZGlkYXRlcy5tYXAoXG4gICAgICAoYykgPT4gV2ViTG9nby5nZXRBbHBoYWJldFNpbWlsYXJpdHkoc3RhdHMuZnJlcSwgY1sxXSkpO1xuICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgY29uc3QgYWxwaGFiZXQgPSBtYXhDb3MgPiAwLjY1ID8gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzBdIDogJ1VOJztcblxuICAgIGNvbC5zZXRUYWcoREcuVEFHUy5VTklUUywgTk9UQVRJT04uRkFTVEEpO1xuICAgIGNvbC5zZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1MuYWxpZ25lZCwgc2VxVHlwZSk7XG4gICAgY29sLnNldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldCwgYWxwaGFiZXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB1bml0cygpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fdW5pdHM7IH1cblxuICBwcm90ZWN0ZWQgZ2V0IGNvbHVtbigpOiBERy5Db2x1bW4geyByZXR1cm4gdGhpcy5fY29sdW1uOyB9XG5cbiAgcHVibGljIGdldCBub3RhdGlvbigpOiBOT1RBVElPTiB7IHJldHVybiB0aGlzLl9ub3RhdGlvbjsgfVxuXG4gIHB1YmxpYyBnZXQgZGVmYXVsdEdhcFN5bWJvbCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZGVmYXVsdEdhcFN5bWJvbDsgfVxuXG4gIHB1YmxpYyBnZXQgc2VwYXJhdG9yKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5jb2x1bW4uZ2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLnNlcGFyYXRvcik7XG4gICAgaWYgKHNlcGFyYXRvciAhPT0gbnVsbClcbiAgICAgIHJldHVybiBzZXBhcmF0b3I7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXBhcmF0b3Igbm90IHNldCcpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbGlnbmVkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxpZ25lZCA9IHRoaXMuY29sdW1uLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbGlnbmVkKTtcbiAgICBpZiAoYWxpZ25lZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFsaWduZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFnIGFsaWduZWQgbm90IHNldCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBbHBoYWJldCBuYW1lICh1cHBlciBjYXNlKSAqL1xuICBwdWJsaWMgZ2V0IGFscGhhYmV0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxwaGFiZXQgPSB0aGlzLmNvbHVtbi5nZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1MuYWxwaGFiZXQpO1xuICAgIGlmIChhbHBoYWJldCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFscGhhYmV0LnRvVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGFnIGFscGhhYmV0IG5vdCBzZXQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxwaGFiZXRTaXplKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMubm90YXRpb24gPT0gTk9UQVRJT04uSEVMTSB8fCB0aGlzLmFscGhhYmV0ID09IEFMUEhBQkVULlVOKSB7XG4gICAgICBjb25zdCBhbHBoYWJldFNpemUgPSBwYXJzZUludCh0aGlzLmNvbHVtbi5nZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1MuYWxwaGFiZXRTaXplKSk7XG4gICAgICByZXR1cm4gYWxwaGFiZXRTaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuYWxwaGFiZXQpIHtcbiAgICAgIGNhc2UgQUxQSEFCRVQuUFQ6XG4gICAgICAgIHJldHVybiAyMDtcbiAgICAgIGNhc2UgQUxQSEFCRVQuRE5BOlxuICAgICAgY2FzZSBBTFBIQUJFVC5STkE6XG4gICAgICAgIHJldHVybiA0O1xuICAgICAgY2FzZSAnTlQnOlxuICAgICAgICBjb25zb2xlLndhcm4oYFVuZXhwZWN0ZWQgYWxwaGFiZXQgJ05UJy5gKTtcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYWxwaGFiZXQgJyR7dGhpcy5hbHBoYWJldH0nLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRBbHBoYWJldElzTXVsdGljaGFyKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm5vdGF0aW9uID09IE5PVEFUSU9OLkhFTE0gfHwgdGhpcy5hbHBoYWJldCA9PSBBTFBIQUJFVC5VTikge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKSA9PSAndHJ1ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNGYXN0YSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubm90YXRpb24gPT09IE5PVEFUSU9OLkZBU1RBOyB9XG5cbiAgcHVibGljIGlzU2VwYXJhdG9yKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ub3RhdGlvbiA9PT0gTk9UQVRJT04uU0VQQVJBVE9SOyB9XG5cbiAgcHVibGljIGlzSGVsbSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMubm90YXRpb24gPT09IE5PVEFUSU9OLkhFTE07IH1cblxuICBwdWJsaWMgaXNSbmEoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmFscGhhYmV0ID09PSAnUk5BJzsgfVxuXG4gIHB1YmxpYyBpc0RuYSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09ICdETkEnOyB9XG5cbiAgcHVibGljIGlzUGVwdGlkZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWxwaGFiZXQgPT09ICdQVCc7IH1cblxuICBwdWJsaWMgaXNNc2EoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuYWxpZ25lZC50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCdNU0EnKTsgfVxuXG4gIC8qKiBBc3NvY2lhdGUgbm90YXRpb24gdHlwZXMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB1bml0cyAqL1xuICAvKipcbiAgICogQHJldHVybiB7Tk9UQVRJT059ICAgICBOb3RhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHVuaXRzIHR5cGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXROb3RhdGlvbigpOiBOT1RBVElPTiB7XG4gICAgaWYgKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkZBU1RBKSlcbiAgICAgIHJldHVybiBOT1RBVElPTi5GQVNUQTtcbiAgICBlbHNlIGlmICh0aGlzLnVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5TRVBBUkFUT1IpKVxuICAgICAgcmV0dXJuIE5PVEFUSU9OLlNFUEFSQVRPUjtcbiAgICBlbHNlIGlmICh0aGlzLnVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5IRUxNKSlcbiAgICAgIHJldHVybiBOT1RBVElPTi5IRUxNO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBoYXMgdW5leHBlY3RlZCBub3RhdGlvbiAnJHt0aGlzLnVuaXRzfScuYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVtcHR5IGNvbHVtbiBvZiB0aGUgc3BlY2lmaWVkIG5vdGF0aW9uIHR5cGUgYW5kIHRoZSBzYW1lXG4gICAqIGxlbmd0aCBhcyBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtOT1RBVElPTn0gdGFyZ2V0Tm90YXRpb25cbiAgICogQHJldHVybiB7REcuQ29sdW1ufVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE5ld0NvbHVtbih0YXJnZXROb3RhdGlvbjogTk9UQVRJT04pOiBERy5Db2x1bW4ge1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuY29sdW1uO1xuICAgIGNvbnN0IGxlbiA9IGNvbC5sZW5ndGg7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldE5vdGF0aW9uLnRvTG93ZXJDYXNlKCkgKyAnKCcgKyBjb2wubmFtZSArICcpJztcbiAgICBjb25zdCBuZXdDb2xOYW1lID0gY29sLmRhdGFGcmFtZS5jb2x1bW5zLmdldFVudXNlZE5hbWUobmFtZSk7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gREcuQ29sdW1uLmZyb21MaXN0KCdzdHJpbmcnLCBuZXdDb2xOYW1lLCBuZXcgQXJyYXkobGVuKS5maWxsKCcnKSk7XG4gICAgbmV3Q29sdW1uLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEU7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhERy5UQUdTLlVOSVRTLCB0aGlzLm5vdGF0aW9uKTtcbiAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuQ0VMTF9SRU5ERVJFUiwgJ01hY3JvbW9sZWN1bGUnKTtcblxuICAgIGNvbnN0IHNyY0FscGhhYmV0ID0gY29sLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldCk7XG4gICAgaWYgKHNyY0FscGhhYmV0KVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldCwgc3JjQWxwaGFiZXQpO1xuXG4gICAgY29uc3Qgc3JjQWxwaGFiZXRTaXplID0gY29sLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldFNpemUpO1xuICAgIGlmIChzcmNBbHBoYWJldFNpemUpXG4gICAgICBuZXdDb2x1bW4uc2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0U2l6ZSwgc3JjQWxwaGFiZXRTaXplKTtcblxuICAgIGNvbnN0IHNyY0FscGhhYmV0SXNNdWx0aWNoYXIgPSBjb2wuZ2V0VGFnKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0SXNNdWx0aWNoYXIpO1xuICAgIGlmIChzcmNBbHBoYWJldElzTXVsdGljaGFyKVxuICAgICAgbmV3Q29sdW1uLnNldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyLCBzcmNBbHBoYWJldElzTXVsdGljaGFyKTtcblxuICAgIHJldHVybiBuZXdDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVtcHR5IGNvbHVtbiB1c2luZyB0ZW1wbGF0ZUNvbCBhcyBhIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSB0ZW1wbGF0ZUNvbCAgdGhlIHByb3BlcnRpZXMgYW5kIHVuaXRzIG9mIHRoaXMgY29sdW1uIGFyZSB1c2VkIGFzIGFcbiAgICogdGVtcGxhdGUgdG8gYnVpbGQgdGhlIG5ldyBvbmVcbiAgICogQHJldHVybiB7REcuQ29sdW1ufVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXROZXdDb2x1bW4odGVtcGxhdGVDb2w6IERHLkNvbHVtbik6IERHLkNvbHVtbiB7XG4gICAgY29uc3QgY29sOiBVbml0c0hhbmRsZXIgPSBuZXcgVW5pdHNIYW5kbGVyKHRlbXBsYXRlQ29sKTtcbiAgICBjb25zdCB0YXJnZXROb3RhdGlvbiA9IGNvbC5ub3RhdGlvbjtcbiAgICByZXR1cm4gY29sLmdldE5ld0NvbHVtbih0YXJnZXROb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQSBoZWxwZXIgZnVuY3Rpb24gY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHRoZSAndW5pdHMnIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdHMgIHRoZSBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVuaXRzU3RyaW5nSXNWYWxpZCh1bml0czogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdW5pdHMgPSB1bml0cy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeGVzID0gW05PVEFUSU9OLkZBU1RBLCBOT1RBVElPTi5TRVBBUkFUT1IsIE5PVEFUSU9OLkhFTE1dO1xuICAgIGNvbnN0IHBvc3RmaXhlcyA9IFsncm5hJywgJ2RuYScsICdwdCddO1xuXG4gICAgY29uc3QgcHJlZml4Q3JpdGVyaW9uID0gcHJlZml4ZXMuc29tZSgocCkgPT4gdW5pdHMuc3RhcnRzV2l0aChwLnRvTG93ZXJDYXNlKCkpKTtcbiAgICByZXR1cm4gcHJlZml4Q3JpdGVyaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBjb2x1bW4gb2Ygc2VtYW50aWMgdHlwZSBNQUNST01PTEVDVUxFIGZyb20gdGhlIGxpc3Qgb2ZcbiAgICogc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9ICAgIGxlbiAgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ30gICAgbmFtZSAgdGhlIG5hbWUgb2YgdGhlIG5ldyBjb2x1bW5cbiAgICogQHBhcmFtIHtzdHJpbmd9ICAgIHVuaXRzICB0aGUgdW5pdHMgb2YgdGhlIG5ldyBjb2x1bW5cbiAgICogQHJldHVybiB7REcuQ29sdW1ufVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXROZXdDb2x1bW5Gcm9tUGFyYW1zKFxuICAgIGxlbjogbnVtYmVyLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB1bml0czogc3RyaW5nXG4gICk6IERHLkNvbHVtbiB7XG4gICAgLy8gV0FSTklORzogaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBpcyBpbXBvc3NpYmxlIHRvIHZlcmlmeSB0aGUgdW5pcXVlbmVzc1xuICAgIC8vIG9mIHRoZSBuZXcgY29sdW1uJ3MgbmFtZVxuICAgIC8vIFRPRE86IHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdW5pdHMgcGFyYW1ldGVyXG4gICAgaWYgKCFVbml0c0hhbmRsZXIudW5pdHNTdHJpbmdJc1ZhbGlkKHVuaXRzKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmb3JtYXQgb2YgXFwndW5pdHNcXCcgcGFyYW1ldGVyJyk7XG4gICAgY29uc3QgbmV3Q29sdW1uID0gREcuQ29sdW1uLmZyb21MaXN0KCdzdHJpbmcnLCBuYW1lLCBuZXcgQXJyYXkobGVuKS5maWxsKCcnKSk7XG4gICAgbmV3Q29sdW1uLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEU7XG4gICAgbmV3Q29sdW1uLnNldFRhZyhERy5UQUdTLlVOSVRTLCB1bml0cyk7XG4gICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb2w6IERHLkNvbHVtbikge1xuICAgIHRoaXMuX2NvbHVtbiA9IGNvbDtcbiAgICBjb25zdCB1bml0cyA9IHRoaXMuX2NvbHVtbi50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICAgIGlmICh1bml0cyAhPT0gbnVsbClcbiAgICAgIHRoaXMuX3VuaXRzID0gdW5pdHM7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBhcmUgbm90IHNwZWNpZmllZCBpbiBjb2x1bW4nKTtcbiAgICB0aGlzLl9ub3RhdGlvbiA9IHRoaXMuZ2V0Tm90YXRpb24oKTtcbiAgICB0aGlzLl9kZWZhdWx0R2FwU3ltYm9sID0gKHRoaXMuaXNGYXN0YSgpKSA/IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkZBU1RBIDpcbiAgICAgICh0aGlzLmlzSGVsbSgpKSA/IFVuaXRzSGFuZGxlci5fZGVmYXVsdEdhcFN5bWJvbHNEaWN0LkhFTE0gOlxuICAgICAgICBVbml0c0hhbmRsZXIuX2RlZmF1bHRHYXBTeW1ib2xzRGljdC5TRVBBUkFUT1I7XG5cbiAgICBpZiAoIXRoaXMuY29sdW1uLnRhZ3MuaGFzKFVuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0U2l6ZSkpIHtcbiAgICAgIGlmICh0aGlzLmlzSGVsbSgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvciBjb2x1bW4gJyR7dGhpcy5jb2x1bW4ubmFtZX0nIG9mIG5vdGF0aW9uICcke3RoaXMubm90YXRpb259JyBgICtcbiAgICAgICAgICBgdGFnICcke1VuaXRzSGFuZGxlci5UQUdTLmFscGhhYmV0U2l6ZX0nIGlzIG1hbmRhdG9yeS5gKTtcbiAgICAgIGVsc2UgaWYgKFsnVU4nXS5pbmNsdWRlcyh0aGlzLmFscGhhYmV0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgY29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBvZiBhbHBoYWJldCAnJHt0aGlzLmFscGhhYmV0fScgYCArXG4gICAgICAgICAgYHRhZyAnJHtVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldFNpemV9JyBpcyBtYW5kYXRvcnkuYCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbHVtbi50YWdzLmhhcyhVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyKSkge1xuICAgICAgaWYgKHRoaXMuaXNIZWxtKCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRm9yIGNvbHVtbiAnJHt0aGlzLmNvbHVtbi5uYW1lfScgb2Ygbm90YXRpb24gJyR7dGhpcy5ub3RhdGlvbn0nIGAgK1xuICAgICAgICAgIGB0YWcgJyR7VW5pdHNIYW5kbGVyLlRBR1MuYWxwaGFiZXRJc011bHRpY2hhcn0nIGlzIG1hbmRhdG9yeS5gKTtcbiAgICAgIGVsc2UgaWYgKFsnVU4nXS5pbmNsdWRlcyh0aGlzLmFscGhhYmV0KSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgY29sdW1uICcke3RoaXMuY29sdW1uLm5hbWV9JyBvZiBhbHBoYWJldCAnJHt0aGlzLmFscGhhYmV0fScgYCArXG4gICAgICAgICAgYHRhZyAnJHtVbml0c0hhbmRsZXIuVEFHUy5hbHBoYWJldElzTXVsdGljaGFyfScgaXMgbWFuZGF0b3J5LmApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import * as DG from 'datagrok-api/dg';
2
+ import { VdRegion } from '../vd-regions';
3
+ /** Interface for VdRegionsViewer from @datagrok/bio to unbind dependency to Bio package */
4
+ export interface IVdRegionsViewer {
5
+ get root(): HTMLElement;
6
+ init(): Promise<void>;
7
+ setDf(mlbDf: DG.DataFrame, regions: VdRegion[]): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=vd-regions-viewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vd-regions-viewer.d.ts","sourceRoot":"","sources":["vd-regions-viewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AAEvC,2FAA2F;AAC3F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,IAAI,WAAW,CAAC;IAExB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmQtcmVnaW9ucy12aWV3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2ZC1yZWdpb25zLXZpZXdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtWZFJlZ2lvbn0gZnJvbSAnLi4vdmQtcmVnaW9ucyc7XG5cbi8qKiBJbnRlcmZhY2UgZm9yIFZkUmVnaW9uc1ZpZXdlciBmcm9tIEBkYXRhZ3Jvay9iaW8gdG8gdW5iaW5kIGRlcGVuZGVuY3kgdG8gQmlvIHBhY2thZ2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZkUmVnaW9uc1ZpZXdlciB7XG4gIGdldCByb290KCk6IEhUTUxFbGVtZW50O1xuXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPjtcblxuICBzZXREZihtbGJEZjogREcuRGF0YUZyYW1lLCByZWdpb25zOiBWZFJlZ2lvbltdKTogUHJvbWlzZTx2b2lkPjtcbn0iXX0=
@@ -19,11 +19,9 @@ export declare type SeqColStats = {
19
19
  };
20
20
  export declare type SplitterFunc = (seq: string) => string[];
21
21
  export declare class PositionMonomerInfo {
22
- /** Sequences count with monomer in position
23
- */
22
+ /** Sequences count with monomer in position */
24
23
  count: number;
25
- /** Remember screen coords rect
26
- */
24
+ /** Remember screen coords rect */
27
25
  bounds: DG.Rect;
28
26
  constructor(count?: number, bounds?: DG.Rect);
29
27
  }
@@ -47,26 +45,30 @@ export declare class PositionInfo {
47
45
  export declare class WebLogo extends DG.JsViewer {
48
46
  static residuesSet: string;
49
47
  private static viewerCount;
50
- private viewerId;
48
+ private readonly viewerId;
51
49
  private unitsHandler;
52
50
  private initialized;
53
51
  protected cp: SeqPalette | null;
54
52
  private host?;
55
53
  private msgHost?;
56
- private canvas?;
57
- private slider?;
58
- private textBaseline;
54
+ private canvas;
55
+ private slider;
56
+ private readonly textBaseline;
59
57
  private axisHeight;
60
58
  private seqCol;
61
59
  private splitter;
62
60
  private positions;
63
61
  private rowsMasked;
64
62
  private rowsNull;
63
+ private visibleSlider;
64
+ private allowResize;
65
+ private currentRange;
65
66
  private _positionWidth;
66
67
  positionWidth: number;
67
68
  minHeight: number;
69
+ backgroundColor: number;
68
70
  maxHeight: number;
69
- considerNullSequences: boolean;
71
+ skipEmptySequences: boolean;
70
72
  sequenceColumnName: string | null;
71
73
  positionMarginState: string;
72
74
  positionMargin: number;
@@ -84,25 +86,49 @@ export declare class WebLogo extends DG.JsViewer {
84
86
  private endPosition;
85
87
  /** For startPosition equals to endPosition Length is 1 */
86
88
  private get Length();
89
+ /** Calculate new position data basic on {@link positionMarginState} and {@link positionMargin} */
87
90
  private get positionWidthWithMargin();
91
+ private get positionMarginValue();
92
+ /** Count of position rendered for calculations countOfRenderPositions */
93
+ private get countOfRenderPositions();
94
+ /** Position of start rendering */
95
+ private get firstVisibleIndex();
88
96
  private viewSubs;
89
97
  constructor();
90
98
  private init;
99
+ /** Handler of changing size WebLogo */
91
100
  private rootOnSizeChanged;
92
101
  /** Assigns {@link seqCol} and {@link cp} based on {@link sequenceColumnName} and calls {@link render}().
93
102
  */
94
103
  private updateSeqCol;
104
+ /** Updates {@link positionNames} and calculates {@link startPosition} and {@link endPosition}.
105
+ */
95
106
  private updatePositions;
107
+ private checkIsHideSlider;
108
+ setSliderVisibility(visible: boolean): void;
109
+ /** Sets {@link slider}, needed to set slider options and to update slider position.
110
+ */
111
+ private setSlider;
112
+ /** Handler of property change events. */
96
113
  onPropertyChanged(property: DG.Property): void;
97
- onTableAttached(): Promise<void>;
114
+ /** Add filter handlers when table is a attached */
115
+ onTableAttached(): void;
116
+ /** Remove all handlers when table is a detach */
98
117
  detach(): Promise<void>;
118
+ /** Helper function for rendering */
99
119
  protected _nullSequence(fillerResidue?: string): string;
120
+ /** Helper function for remove empty positions */
100
121
  protected removeWhere(array: Array<any>, predicate: (T: any) => boolean): Array<any>;
122
+ /** Function for removing empty positions */
101
123
  protected _removeEmptyPositions(): void;
102
124
  protected _calculate(r: number): void;
125
+ /** Render WebLogo sensitive to changes in params of rendering
126
+ *@param {boolean} recalc - indicates that need to recalculate data for rendering
127
+ */
103
128
  render(recalc?: boolean): void;
129
+ /** Calculate canvas size an positionWidth and updates properties */
104
130
  private calcSize;
105
- /**
131
+ /** Selects a suitable palette based on column data
106
132
  * @param {DG.Column} seqCol Column to look for a palette
107
133
  * @param {number} minLength minimum length of sequence to detect palette (empty strings are allowed)
108
134
  * @return {SeqPalette} Palette corresponding to the alphabet of the sequences in the column
@@ -116,9 +142,17 @@ export declare class WebLogo extends DG.JsViewer {
116
142
  * @return { SeqColStats }, sameLength: boolean } stats of column sequences
117
143
  */
118
144
  static getStats(seqCol: DG.Column, minLength: number, splitter: SplitterFunc): SeqColStats;
145
+ /** Calculate similarity in current sequence and alphabet.
146
+ * @param {MonomerFreqs} freq
147
+ * @param {Set<string>} alphabet
148
+ * @param {string} gapSymbol
149
+ * @return {number} Cosine similarity
150
+ */
119
151
  static getAlphabetSimilarity(freq: MonomerFreqs, alphabet: Set<string>, gapSymbol?: string): number;
120
- static pickUpSeqCol2(df: DG.DataFrame): DG.Column | null;
152
+ static pickUpSeqCol(df: DG.DataFrame): DG.Column | null;
121
153
  private static monomerRe;
154
+ /** Only some of the synonyms. These were obtained from the clustered oligopeptide dataset. */
155
+ private static aaSynonyms;
122
156
  /** Split sequence for single character monomers, square brackets multichar monomer names or gap symbol.
123
157
  * @param {any} seq object with sequence
124
158
  * @return {string[]} array of monomers
@@ -145,9 +179,13 @@ export declare class WebLogo extends DG.JsViewer {
145
179
  * @return {SplitterFunc}
146
180
  */
147
181
  static getSplitter(units: string, separator: string, limit?: number | undefined): SplitterFunc;
182
+ /** Generate splitter function for sequence column
183
+ * @param {DG.Column} col
184
+ * @return {SplitterFunc} Splitter function
185
+ */
148
186
  static getSplitterForColumn(col: DG.Column): SplitterFunc;
149
187
  private static longMonomerPartRe;
150
- static monomerToText(src: any): string;
188
+ /** Convert long monomer names to short ones */
151
189
  static monomerToShort(amino: string, maxLengthOfMonomer: number): string;
152
190
  }
153
191
  //# sourceMappingURL=web-logo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-logo.d.ts","sourceRoot":"","sources":["web-logo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-logo.d.ts","sourceRoot":"","sources":["web-logo.ts"],"names":[],"mappings":"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"}