@datagrok-libraries/bio 5.7.0 → 5.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +6 -4
- package/index.d.ts.map +1 -1
- package/index.js +8 -4
- package/index.ts +25 -4
- package/package.json +3 -2
- package/src/monomer-works.d.ts +1 -1
- package/src/monomer-works.d.ts.map +1 -1
- package/src/monomer-works.js +1 -1
- package/src/types/index.d.ts +6 -11
- package/src/types/index.d.ts.map +1 -1
- package/src/types/index.js +1 -12
- package/src/typings/index.d.ts +6 -7
- package/src/utils/cell-renderer.d.ts +2 -2
- package/src/utils/cell-renderer.d.ts.map +1 -1
- package/src/utils/cell-renderer.js +4 -4
- package/src/utils/macromolecule.d.ts +7 -8
- package/src/utils/macromolecule.d.ts.map +1 -1
- package/src/utils/macromolecule.js +14 -6
- package/src/utils/monomer-lib.d.ts +1 -1
- package/src/utils/monomer-lib.d.ts.map +1 -1
- package/src/utils/monomer-lib.js +1 -1
- package/src/utils/monomer-utils.d.ts.map +1 -1
- package/src/utils/monomer-utils.js +6 -8
- package/src/utils/to-atomic-level.d.ts +1 -1
- package/src/utils/to-atomic-level.d.ts.map +1 -1
- package/src/utils/to-atomic-level.js +4 -4
- package/src/utils/tree-helper.d.ts +16 -0
- package/src/utils/tree-helper.d.ts.map +1 -0
- package/src/utils/tree-helper.js +20 -0
- package/src/viewers/phylocanvas-gl-viewer.d.ts +46 -0
- package/src/viewers/phylocanvas-gl-viewer.d.ts.map +1 -1
- package/src/viewers/phylocanvas-gl-viewer.js +36 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as DG from 'datagrok-api/dg';
|
|
2
|
+
import { NodeType } from '../types';
|
|
3
|
+
export interface ITreeHelper {
|
|
4
|
+
toNewick(node: NodeType | null): string;
|
|
5
|
+
getLeafList(node: NodeType): NodeType[];
|
|
6
|
+
getNodeList(node: NodeType): NodeType[];
|
|
7
|
+
treeFilterByLeaves(node: NodeType, leaves: {
|
|
8
|
+
[name: string]: any;
|
|
9
|
+
}): NodeType | null;
|
|
10
|
+
treeCutAsLeaves(node: NodeType, cutHeight: number, currentHeight?: number): NodeType[];
|
|
11
|
+
treeCutAsTree(node: NodeType, cutHeight: number, currentHeight?: number): NodeType | null;
|
|
12
|
+
setGridOrder(node: NodeType, grid: DG.Grid, leafColName: string): [NodeType, string[]];
|
|
13
|
+
cutTreeToGrid(node: NodeType, cutHeight: number, dataDf: DG.DataFrame, leafColName: string, clusterColName: string): void;
|
|
14
|
+
}
|
|
15
|
+
export declare function getTreeHelper(): Promise<ITreeHelper>;
|
|
16
|
+
//# sourceMappingURL=tree-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree-helper.d.ts","sourceRoot":"","sources":["tree-helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,QAAQ,EAAC,MAAM,UAAU,CAAC;AAGlC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;IAExC,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAExC,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAExC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;IAErF,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAEvF,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IAE1F,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAEvF,aAAa,CAAC,IAAI,EAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1H;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,CAO1D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import * as DG from 'datagrok-api/dg';
|
|
11
|
+
export function getTreeHelper() {
|
|
12
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
const funcList = DG.Func.find({ package: 'PhyloTreeViewer', name: 'getTreeHelper' });
|
|
14
|
+
if (funcList.length === 0)
|
|
15
|
+
throw new Error('Package "PhyloTreeViewer"" must be installed for TreeHelper.');
|
|
16
|
+
const res = (yield funcList[0].prepare().call()).getOutputParamValue();
|
|
17
|
+
return res;
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0cmVlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBdUJ0QyxNQUFNLFVBQWdCLGFBQWE7O1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUVsRixNQUFNLEdBQUcsR0FBZ0IsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixFQUFpQixDQUFDO1FBQ25HLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtOb2RlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWVIZWxwZXIge1xuICB0b05ld2ljayhub2RlOiBOb2RlVHlwZSB8IG51bGwpOiBzdHJpbmc7XG5cbiAgZ2V0TGVhZkxpc3Qobm9kZTogTm9kZVR5cGUpOiBOb2RlVHlwZVtdO1xuXG4gIGdldE5vZGVMaXN0KG5vZGU6IE5vZGVUeXBlKTogTm9kZVR5cGVbXTtcblxuICB0cmVlRmlsdGVyQnlMZWF2ZXMobm9kZTogTm9kZVR5cGUsIGxlYXZlczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiBOb2RlVHlwZSB8IG51bGw7XG5cbiAgdHJlZUN1dEFzTGVhdmVzKG5vZGU6IE5vZGVUeXBlLCBjdXRIZWlnaHQ6IG51bWJlciwgY3VycmVudEhlaWdodD86IG51bWJlcik6IE5vZGVUeXBlW107XG5cbiAgdHJlZUN1dEFzVHJlZShub2RlOiBOb2RlVHlwZSwgY3V0SGVpZ2h0OiBudW1iZXIsIGN1cnJlbnRIZWlnaHQ/OiBudW1iZXIpOiBOb2RlVHlwZSB8IG51bGw7XG5cbiAgc2V0R3JpZE9yZGVyKG5vZGU6IE5vZGVUeXBlLCBncmlkOiBERy5HcmlkLCBsZWFmQ29sTmFtZTogc3RyaW5nKTogW05vZGVUeXBlLCBzdHJpbmdbXV07XG5cbiAgY3V0VHJlZVRvR3JpZChub2RlOk5vZGVUeXBlLCBjdXRIZWlnaHQ6IG51bWJlciwgZGF0YURmOiBERy5EYXRhRnJhbWUsIGxlYWZDb2xOYW1lOiBzdHJpbmcsIGNsdXN0ZXJDb2xOYW1lOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJlZUhlbHBlcigpOiBQcm9taXNlPElUcmVlSGVscGVyPiB7XG4gIGNvbnN0IGZ1bmNMaXN0ID0gREcuRnVuYy5maW5kKHtwYWNrYWdlOiAnUGh5bG9UcmVlVmlld2VyJywgbmFtZTogJ2dldFRyZWVIZWxwZXInfSk7XG4gIGlmIChmdW5jTGlzdC5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYWNrYWdlIFwiUGh5bG9UcmVlVmlld2VyXCJcIiBtdXN0IGJlIGluc3RhbGxlZCBmb3IgVHJlZUhlbHBlci4nKTtcblxuICBjb25zdCByZXM6IElUcmVlSGVscGVyID0gKGF3YWl0IGZ1bmNMaXN0WzBdLnByZXBhcmUoKS5jYWxsKCkpLmdldE91dHB1dFBhcmFtVmFsdWUoKSBhcyBJVHJlZUhlbHBlcjtcbiAgcmV0dXJuIHJlcztcbn0iXX0=
|
|
@@ -1,16 +1,62 @@
|
|
|
1
1
|
import * as DG from 'datagrok-api/dg';
|
|
2
2
|
import { IViewer } from './viewer';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { MjolnirPointerEvent } from 'mjolnir.js';
|
|
5
|
+
import { PickingInfo } from '@deck.gl/core/typed';
|
|
3
6
|
export declare type NodeStyleType = {
|
|
4
7
|
[propName: string]: any;
|
|
5
8
|
};
|
|
6
9
|
export declare type StylesType = {
|
|
7
10
|
[nodeName: string]: NodeStyleType;
|
|
8
11
|
};
|
|
12
|
+
export declare enum TreeTypesNames {
|
|
13
|
+
Radial = "Radial",
|
|
14
|
+
/** Rectangular edges, leaves listed __vertically__ */
|
|
15
|
+
Rectangular = "Rectangular",
|
|
16
|
+
Polar = "Polar",
|
|
17
|
+
Diagonal = "Diagonal",
|
|
18
|
+
/** Rectangular edges, leaves listed __horizontally__ */
|
|
19
|
+
Orthogonal = "Orthogonal"
|
|
20
|
+
}
|
|
9
21
|
export interface IPhylocanvasGlViewer extends IViewer {
|
|
10
22
|
get nwkDf(): DG.DataFrame;
|
|
11
23
|
set nwkDf(value: DG.DataFrame);
|
|
12
24
|
setProps(updater: {
|
|
13
25
|
[propName: string]: any;
|
|
14
26
|
}): void;
|
|
27
|
+
get onAfterRender(): Observable<{
|
|
28
|
+
gl: WebGLRenderingContext;
|
|
29
|
+
}>;
|
|
30
|
+
get onHover(): Observable<{
|
|
31
|
+
info: PickingInfo;
|
|
32
|
+
event: MjolnirPointerEvent;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export declare type PhylocanvasGlTask = {
|
|
36
|
+
name: string;
|
|
37
|
+
backColor: number;
|
|
38
|
+
props: {
|
|
39
|
+
[propName: string]: any;
|
|
40
|
+
};
|
|
41
|
+
onAfterRender: CanvasCallback;
|
|
42
|
+
};
|
|
43
|
+
export declare type CanvasCallback = (canvas: HTMLCanvasElement) => void;
|
|
44
|
+
export declare abstract class PhylocanvasGlServiceBase {
|
|
45
|
+
static noneSource: {
|
|
46
|
+
type: string;
|
|
47
|
+
data: any;
|
|
48
|
+
};
|
|
49
|
+
/** Queues PhylocanvasGL render task
|
|
50
|
+
* @param key Specify to skip previously queued tasks with the same key
|
|
51
|
+
*/
|
|
52
|
+
abstract render(args: PhylocanvasGlTask, key?: keyof any): void;
|
|
53
|
+
/** Default implementation of rendering tree on grid cell
|
|
54
|
+
* @param gCtx Context to draw on grid
|
|
55
|
+
* @param bd Bound rect to clip drawing on task moment
|
|
56
|
+
* @param gCell Grid cell to draw
|
|
57
|
+
* @param canvas Image of the tree rendered
|
|
58
|
+
*/
|
|
59
|
+
abstract renderOnGridCell(gCtx: CanvasRenderingContext2D, bd: DG.Rect, gCell: DG.GridCell, canvas: CanvasImageSource): void;
|
|
15
60
|
}
|
|
61
|
+
export declare function getPhylocanvasGlService(): Promise<PhylocanvasGlServiceBase>;
|
|
16
62
|
//# sourceMappingURL=phylocanvas-gl-viewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phylocanvas-gl-viewer.d.ts","sourceRoot":"","sources":["phylocanvas-gl-viewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"phylocanvas-gl-viewer.d.ts","sourceRoot":"","sources":["phylocanvas-gl-viewer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,UAAU,CAAC;AACjC,OAAO,EAAC,UAAU,EAAC,MAAM,MAAM,CAAC;AAChC,OAAO,EAAC,mBAAmB,EAAC,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAGhD,oBAAY,aAAa,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AACxD,oBAAY,UAAU,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AAE/D,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,sDAAsD;IACtD,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,wDAAwD;IACxD,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,IAAI,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;IAE1B,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,EAAE;IAE/B,QAAQ,CAAC,OAAO,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI,CAAC;IAErD,IAAI,aAAa,IAAI,UAAU,CAAC;QAAE,EAAE,EAAE,qBAAqB,CAAA;KAAE,CAAC,CAAC;IAE/D,IAAI,OAAO,IAAI,UAAU,CAAC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,CAAC,CAAC;CAC9E;AAMD,oBAAY,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;IAAC,aAAa,EAAE,cAAc,CAAA;CAAE,CAAC;AAEvI,oBAAY,cAAc,GAAG,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEjE,8BAAsB,wBAAwB;IAC5C,OAAc,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAGnD;IAEF;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,IAAI;IAE/D;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CACvB,IAAI,EAAE,wBAAwB,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI;CACpG;AAGD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAOjF"}
|
|
@@ -1,2 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import * as DG from 'datagrok-api/dg';
|
|
11
|
+
export var TreeTypesNames;
|
|
12
|
+
(function (TreeTypesNames) {
|
|
13
|
+
TreeTypesNames["Radial"] = "Radial";
|
|
14
|
+
/** Rectangular edges, leaves listed __vertically__ */
|
|
15
|
+
TreeTypesNames["Rectangular"] = "Rectangular";
|
|
16
|
+
TreeTypesNames["Polar"] = "Polar";
|
|
17
|
+
TreeTypesNames["Diagonal"] = "Diagonal";
|
|
18
|
+
/** Rectangular edges, leaves listed __horizontally__ */
|
|
19
|
+
TreeTypesNames["Orthogonal"] = "Orthogonal";
|
|
20
|
+
})(TreeTypesNames || (TreeTypesNames = {}));
|
|
21
|
+
export class PhylocanvasGlServiceBase {
|
|
22
|
+
}
|
|
23
|
+
PhylocanvasGlServiceBase.noneSource = {
|
|
24
|
+
type: 'biojs',
|
|
25
|
+
data: { name: 'none', branch_length: 1, children: [] }
|
|
26
|
+
};
|
|
27
|
+
export function getPhylocanvasGlService() {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const funcList = DG.Func.find({ package: 'PhyloTreeViewer', name: 'getPhylocanvasGlService' });
|
|
30
|
+
if (funcList.length === 0)
|
|
31
|
+
throw new Error('Package "PhyloTreeViewer"" must be installed for PhylocanvasGL services.');
|
|
32
|
+
const svc = (yield funcList[0].prepare().call()).getOutputParamValue();
|
|
33
|
+
return svc;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5bG9jYW52YXMtZ2wtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGh5bG9jYW52YXMtZ2wtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFXdEMsTUFBTSxDQUFOLElBQVksY0FRWDtBQVJELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixzREFBc0Q7SUFDdEQsNkNBQTJCLENBQUE7SUFDM0IsaUNBQWUsQ0FBQTtJQUNmLHVDQUFxQixDQUFBO0lBQ3JCLHdEQUF3RDtJQUN4RCwyQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBUlcsY0FBYyxLQUFkLGNBQWMsUUFRekI7QUFzQkQsTUFBTSxPQUFnQix3QkFBd0I7O0FBQzlCLG1DQUFVLEdBQWdDO0lBQ3RELElBQUksRUFBRSxPQUFPO0lBQ2IsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUM7Q0FDckQsQ0FBQztBQWtCSixNQUFNLFVBQWdCLHVCQUF1Qjs7UUFDM0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFDLENBQUMsQ0FBQztRQUM3RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFFOUYsTUFBTSxHQUFHLEdBQTZCLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBOEIsQ0FBQztRQUM3SCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7SVZpZXdlcn0gZnJvbSAnLi92aWV3ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TWpvbG5pclBvaW50ZXJFdmVudH0gZnJvbSAnbWpvbG5pci5qcyc7XG5pbXBvcnQge1BpY2tpbmdJbmZvfSBmcm9tICdAZGVjay5nbC9jb3JlL3R5cGVkJztcblxuXG5leHBvcnQgdHlwZSBOb2RlU3R5bGVUeXBlID0geyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9O1xuZXhwb3J0IHR5cGUgU3R5bGVzVHlwZSA9IHsgW25vZGVOYW1lOiBzdHJpbmddOiBOb2RlU3R5bGVUeXBlIH07XG5cbmV4cG9ydCBlbnVtIFRyZWVUeXBlc05hbWVzIHtcbiAgUmFkaWFsID0gJ1JhZGlhbCcsXG4gIC8qKiBSZWN0YW5ndWxhciBlZGdlcywgbGVhdmVzIGxpc3RlZCBfX3ZlcnRpY2FsbHlfXyAqL1xuICBSZWN0YW5ndWxhciA9ICdSZWN0YW5ndWxhcicsXG4gIFBvbGFyID0gJ1BvbGFyJyxcbiAgRGlhZ29uYWwgPSAnRGlhZ29uYWwnLFxuICAvKiogUmVjdGFuZ3VsYXIgZWRnZXMsIGxlYXZlcyBsaXN0ZWQgX19ob3Jpem9udGFsbHlfXyAqL1xuICBPcnRob2dvbmFsID0gJ09ydGhvZ29uYWwnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaHlsb2NhbnZhc0dsVmlld2VyIGV4dGVuZHMgSVZpZXdlciB7XG4gIGdldCBud2tEZigpOiBERy5EYXRhRnJhbWU7XG5cbiAgc2V0IG53a0RmKHZhbHVlOiBERy5EYXRhRnJhbWUpO1xuXG4gIHNldFByb3BzKHVwZGF0ZXI6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBhbnkgfSk6IHZvaWQ7XG5cbiAgZ2V0IG9uQWZ0ZXJSZW5kZXIoKTogT2JzZXJ2YWJsZTx7IGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQgfT47XG5cbiAgZ2V0IG9uSG92ZXIoKTogT2JzZXJ2YWJsZTx7IGluZm86IFBpY2tpbmdJbmZvLCBldmVudDogTWpvbG5pclBvaW50ZXJFdmVudCB9Pjtcbn1cblxuLy8gZXhwb3J0IGludGVyZmFjZSBJUGh5bG9jYW52YXNHbFJlbmRlcmVyIHtcbi8vICAgZ2V0IG9uQWZ0ZXJSZW5kZXIoKTogT2JzZXJ2YWJsZTxIVE1MQ2FudmFzRWxlbWVudD47XG4vLyB9XG5cbmV4cG9ydCB0eXBlIFBoeWxvY2FudmFzR2xUYXNrID0geyBuYW1lOiBzdHJpbmcsIGJhY2tDb2xvcjogbnVtYmVyLCBwcm9wczogeyBbcHJvcE5hbWU6IHN0cmluZ106IGFueSB9LCBvbkFmdGVyUmVuZGVyOiBDYW52YXNDYWxsYmFjayB9O1xuXG5leHBvcnQgdHlwZSBDYW52YXNDYWxsYmFjayA9IChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSA9PiB2b2lkO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBub25lU291cmNlOiB7IHR5cGU6IHN0cmluZywgZGF0YTogYW55IH0gPSB7XG4gICAgdHlwZTogJ2Jpb2pzJyxcbiAgICBkYXRhOiB7bmFtZTogJ25vbmUnLCBicmFuY2hfbGVuZ3RoOiAxLCBjaGlsZHJlbjogW119XG4gIH07XG5cbiAgLyoqIFF1ZXVlcyBQaHlsb2NhbnZhc0dMIHJlbmRlciB0YXNrXG4gICAqIEBwYXJhbSBrZXkgIFNwZWNpZnkgdG8gc2tpcCBwcmV2aW91c2x5IHF1ZXVlZCB0YXNrcyB3aXRoIHRoZSBzYW1lIGtleVxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyKGFyZ3M6IFBoeWxvY2FudmFzR2xUYXNrLCBrZXk/OiBrZXlvZiBhbnkpOiB2b2lkO1xuXG4gIC8qKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHJlbmRlcmluZyB0cmVlIG9uIGdyaWQgY2VsbFxuICAgKiBAcGFyYW0gZ0N0eCAgICBDb250ZXh0IHRvIGRyYXcgb24gZ3JpZFxuICAgKiBAcGFyYW0gYmQgICAgICBCb3VuZCByZWN0IHRvIGNsaXAgZHJhd2luZyBvbiB0YXNrIG1vbWVudFxuICAgKiBAcGFyYW0gZ0NlbGwgICBHcmlkIGNlbGwgdG8gZHJhd1xuICAgKiBAcGFyYW0gY2FudmFzICBJbWFnZSBvZiB0aGUgdHJlZSByZW5kZXJlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyT25HcmlkQ2VsbChcbiAgICBnQ3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGJkOiBERy5SZWN0LCBnQ2VsbDogREcuR3JpZENlbGwsIGNhbnZhczogQ2FudmFzSW1hZ2VTb3VyY2UpOiB2b2lkO1xufVxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaHlsb2NhbnZhc0dsU2VydmljZSgpOiBQcm9taXNlPFBoeWxvY2FudmFzR2xTZXJ2aWNlQmFzZT4ge1xuICBjb25zdCBmdW5jTGlzdCA9IERHLkZ1bmMuZmluZCh7cGFja2FnZTogJ1BoeWxvVHJlZVZpZXdlcicsIG5hbWU6ICdnZXRQaHlsb2NhbnZhc0dsU2VydmljZSd9KTtcbiAgaWYgKGZ1bmNMaXN0Lmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgXCJQaHlsb1RyZWVWaWV3ZXJcIlwiIG11c3QgYmUgaW5zdGFsbGVkIGZvciBQaHlsb2NhbnZhc0dMIHNlcnZpY2VzLicpO1xuXG4gIGNvbnN0IHN2YzogUGh5bG9jYW52YXNHbFNlcnZpY2VCYXNlID0gKGF3YWl0IGZ1bmNMaXN0WzBdLnByZXBhcmUoKS5jYWxsKCkpLmdldE91dHB1dFBhcmFtVmFsdWUoKSBhcyBQaHlsb2NhbnZhc0dsU2VydmljZUJhc2U7XG4gIHJldHVybiBzdmM7XG59Il19
|