@datagrok-libraries/statistics 1.2.7 → 1.2.9
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/CHANGELOG.md +20 -1
- package/package.json +2 -2
- package/src/fit/fit-curve.d.ts +1 -0
- package/src/fit/fit-curve.d.ts.map +1 -1
- package/src/fit/fit-curve.js +26 -8
- package/src/fit/fit-data.d.ts +1 -1
- package/src/fit/fit-data.d.ts.map +1 -1
- package/src/fit/fit-data.js +6 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# statistics changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.9 (2023-11-02)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Implemented linear function.
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Improved curves properties and rendering:
|
|
12
|
+
* Fixed AUC calculation for logarithmic values.
|
|
13
|
+
* Fixed exception if no x or y coordinates present.
|
|
14
|
+
|
|
15
|
+
## 1.2.8 (2023-10-16)
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* [#2103](https://github.com/datagrok-ai/public/issues/2103): Removed series name from fitSeriesProperties.
|
|
20
|
+
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Fixed proportional confidence interval rendering.
|
|
21
|
+
|
|
3
22
|
## 1.2.7 (2023-09-11)
|
|
4
23
|
|
|
5
24
|
### Features
|
|
@@ -7,7 +26,7 @@
|
|
|
7
26
|
* [#2103](https://github.com/datagrok-ai/public/issues/2103): Property panel changes:
|
|
8
27
|
* Added tags on the dataframe level
|
|
9
28
|
* Added proper tooltips on properties
|
|
10
|
-
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Added errorModel property
|
|
29
|
+
* [#2101](https://github.com/datagrok-ai/public/issues/2101): Added errorModel property.
|
|
11
30
|
|
|
12
31
|
### Bug Fixes
|
|
13
32
|
|
package/package.json
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"friendlyName": "statistics",
|
|
7
|
-
"version": "1.2.
|
|
7
|
+
"version": "1.2.9",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"datagrok-api": "^1.
|
|
10
|
+
"datagrok-api": "^1.17.0",
|
|
11
11
|
"@datagrok-libraries/utils": "^4.0.0",
|
|
12
12
|
"cash-dom": "latest",
|
|
13
13
|
"jstat": "latest",
|
package/src/fit/fit-curve.d.ts
CHANGED
|
@@ -207,6 +207,7 @@ export declare function getInvertedFunctions(data: {
|
|
|
207
207
|
y: number[];
|
|
208
208
|
}, paramValues: number[], confidenceLevel?: number, statistics?: boolean): FitInvertedFunctions | null;
|
|
209
209
|
export declare function sigmoid(params: number[], x: number): number;
|
|
210
|
+
export declare function linear(params: number[], x: number): number;
|
|
210
211
|
export declare function getAuc(fittedCurve: (x: number) => number, data: {
|
|
211
212
|
x: number[];
|
|
212
213
|
y: number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fit-curve.d.ts","sourceRoot":"","sources":["fit-curve.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,QAAQ,EAAC,MAAM,2BAA2B,CAAC;AAsBnD,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;+EAC+E;AAC/E,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,oBAAY,QAAQ,GAAG;IACrB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,oBAAY,sBAAsB,GAAG;IACnC,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC,CAAC;AAEF,oBAAY,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;EAoBE;AAEF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAClC,eAAO,MAAM,aAAa,QAAQ,CAAC;AACnC,eAAO,MAAM,OAAO,SAAS,CAAC;AAE9B,eAAO,MAAM,gCAAgC,yBAAyB,CAAC;AACvE,eAAO,MAAM,8BAA8B,0BAA0B,CAAC;AAEtE,eAAO,MAAM,gCAAgC;;;CAG5C,CAAC;AAEF,eAAO,MAAM,SAAS,UAAW,CAAC;AAElC,oBAAY,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GACpH,eAAe,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAEtD,oBAAY,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;AAExE,oBAAY,iBAAiB,GAAG,UAAU,GAAG,cAAc,CAAC;AAE5D,mHAAmH;AACnH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAGhB;AAED;mFACmF;AACnF,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mHAAmH;AACnH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,4DAA4D;AAC5D,qBAAa,YAAa,YAAW,aAAa;IAChD,YAAY,EAAE,gBAAgB,CAAM;IACpC,aAAa,EAAE,iBAAiB,CAAM;IACtC,MAAM,EAAE,UAAU,EAAE,CAAM;CAC3B;AAED,oHAAoH;AACpH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAAC;IAC/C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAID,gHAAgH;AAChH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,EAQ1C,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,EAe5C,CAAC;AAEF,oHAAoH;AACpH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,EAyBzC,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,aAAa,QAAQ,CAAC;AAInC,kCAAkC;AAClC,8BAAsB,WAAW;IAC/B,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;IAC5B,QAAQ,KAAK,cAAc,IAAI,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAC/C,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAClE;AAED,gDAAgD;AAChD,qBAAa,cAAe,SAAQ,WAAW;IAC7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAgBzD;AAED,iDAAiD;AACjD,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAkBzD;AAED,8CAA8C;AAC9C,qBAAa,UAAW,SAAQ,WAAW;IACzC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,eAAe,CAAW;gBAEtB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EACtE,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE;IAUrF,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAItC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAGzD;AAGD,eAAO,MAAM,YAAY,EAAE;IAAC,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAA;CAGvD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAoCD,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,uBAAuB,GAAG,WAAW,CAkBnG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAC/G,eAAe,CAAC,EAAE,cAAc,EAAE,GAAG,QAAQ,CAuC9C;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAC3G,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAIrB;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EACjG,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,eAAe,oBAAe,EAAE,UAAU,EAAE,iBAAiB,GACrH,sBAAsB,CA0BvB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EACnF,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,UAAU,GAAE,OAAc,GAAG,aAAa,CAYnG;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAC1F,eAAe,GAAE,MAAa,EAAE,UAAU,GAAE,OAAc,GAAG,oBAAoB,GAAG,IAAI,CAuCzF;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,UAIjD;AAED,wBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GAAG,MAAM,CAWnG;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE;IAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GAAG,MAAM,CAYxG"}
|
package/src/fit/fit-curve.js
CHANGED
|
@@ -77,17 +77,18 @@ export const fitChartDataProperties = [
|
|
|
77
77
|
];
|
|
78
78
|
/** Properties that describe {@link IFitSeriesOptions}. Useful for editing, initialization, transformations, etc. */
|
|
79
79
|
export const fitSeriesProperties = [
|
|
80
|
-
Property.js('name', TYPE.STRING),
|
|
81
80
|
Property.js('fitFunction', TYPE.STRING, { category: 'Fitting', choices: ['sigmoid', 'linear'], defaultValue: 'sigmoid' }),
|
|
82
81
|
Property.js('pointColor', TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
83
82
|
Property.js('fitLineColor', TYPE.STRING, { category: 'Rendering', nullable: true, inputType: 'Color' }),
|
|
84
83
|
Property.js('errorModel', TYPE.STRING, { category: 'Fitting', defaultValue: 'constant',
|
|
85
84
|
choices: ['constant', 'proportional'], nullable: false }),
|
|
86
|
-
Property.js('clickToToggle', TYPE.BOOL, { category: 'Fitting', description: '
|
|
85
|
+
Property.js('clickToToggle', TYPE.BOOL, { category: 'Fitting', description: 'Click on a point to mark it as outlier and refit', nullable: true, defaultValue: false }),
|
|
87
86
|
Property.js('showFitLine', TYPE.BOOL, { category: 'Fitting', defaultValue: true }),
|
|
88
|
-
Property.js('showPoints', TYPE.STRING,
|
|
87
|
+
Property.js('showPoints', TYPE.STRING, // rewrite description
|
|
88
|
+
{ category: 'Fitting', description: 'Whether points/candlesticks/none should be rendered',
|
|
89
89
|
defaultValue: 'points', choices: ['points', 'candlesticks', 'both'] }),
|
|
90
|
-
Property.js('showCurveConfidenceInterval', TYPE.BOOL, { category: 'Fitting', description: 'Whether confidence intervals should be rendered', defaultValue: false
|
|
90
|
+
Property.js('showCurveConfidenceInterval', TYPE.BOOL, { category: 'Fitting', description: 'Whether confidence intervals should be rendered', defaultValue: false,
|
|
91
|
+
caption: 'Confidence interval' }),
|
|
91
92
|
Property.js('markerType', TYPE.STRING, { category: 'Rendering', defaultValue: 'circle',
|
|
92
93
|
choices: ['asterisk', 'circle', 'cross border', 'diamond', 'square', 'star',
|
|
93
94
|
'triangle bottom', 'triangle left', 'triangle right', 'triangle top'], nullable: false }),
|
|
@@ -113,10 +114,22 @@ export class LinearFunction extends FitFunction {
|
|
|
113
114
|
return ['Slope', 'Intercept'];
|
|
114
115
|
}
|
|
115
116
|
y(params, x) {
|
|
116
|
-
|
|
117
|
+
return linear(params, x);
|
|
117
118
|
}
|
|
118
119
|
getInitialParameters(x, y) {
|
|
119
|
-
|
|
120
|
+
let minIndex = 0;
|
|
121
|
+
let maxIndex = 0;
|
|
122
|
+
for (let i = 1; i < x.length; i++) {
|
|
123
|
+
if (x[i] < x[minIndex])
|
|
124
|
+
minIndex = i;
|
|
125
|
+
if (x[i] > x[maxIndex])
|
|
126
|
+
maxIndex = i;
|
|
127
|
+
}
|
|
128
|
+
const deltaX = x[maxIndex] - x[minIndex];
|
|
129
|
+
const deltaY = y[maxIndex] - y[minIndex];
|
|
130
|
+
const A = deltaY / deltaX;
|
|
131
|
+
const B = y[maxIndex] - A * x[maxIndex];
|
|
132
|
+
return [A, B];
|
|
120
133
|
}
|
|
121
134
|
}
|
|
122
135
|
/** Class that implements the sigmoid function */
|
|
@@ -331,6 +344,11 @@ export function sigmoid(params, x) {
|
|
|
331
344
|
const D = params[3];
|
|
332
345
|
return (D + (A - D) / (1 + Math.pow(10, (x - C) * B)));
|
|
333
346
|
}
|
|
347
|
+
export function linear(params, x) {
|
|
348
|
+
const A = params[0];
|
|
349
|
+
const B = params[1];
|
|
350
|
+
return A * x + B;
|
|
351
|
+
}
|
|
334
352
|
export function getAuc(fittedCurve, data) {
|
|
335
353
|
let auc = 0;
|
|
336
354
|
const min = Math.min(...data.x);
|
|
@@ -421,6 +439,6 @@ function objectiveNormalProportional(targetFunc, data, params) {
|
|
|
421
439
|
sigma = Math.sqrt(sigmaSq);
|
|
422
440
|
for (let i = 0; i < residuesSquares.length; i++)
|
|
423
441
|
likelihood += residuesSquares[i] / sigmaSq + Math.log(2 * pi * sigmaSq);
|
|
424
|
-
return { value: -likelihood, const:
|
|
442
|
+
return { value: -likelihood, const: 0, mult: sigma };
|
|
425
443
|
}
|
|
426
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlCL0IsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0NBQzdCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsc0JBQXNCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsdUJBQXVCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUc7SUFDOUMsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUE0RGxDLDREQUE0RDtBQUM1RCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUNFLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUFzQixFQUFFLENB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RWhDLE9BQU8sSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2xDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtRQUM3QyxVQUFVLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFFMUUsT0FBTyxFQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtQcm9wZXJ0eX0gZnJvbSAnZGF0YWdyb2stYXBpL3NyYy9lbnRpdGllcyc7XG5pbXBvcnQge1RZUEV9IGZyb20gJ2RhdGFncm9rLWFwaS9zcmMvY29uc3QnO1xuXG5pbXBvcnQge2xpbWl0ZWRNZW1vcnlCRkdTfSBmcm9tICcuLi8uLi9sYmZncy9sYmZncyc7XG4vL0B0cy1pZ25vcmU6IG5vIHR5cGVzXG5pbXBvcnQgKiBhcyBqU3RhdCBmcm9tICdqc3RhdCc7XG5cblxudHlwZSBPcHRpbWl6YWJsZSA9IHtcbiAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4gbnVtYmVyLFxuICBnZXRHcmFkaWVudDogKHBhcmFtZXRlcnM6IG51bWJlcltdLCBncmFkaWVudDogbnVtYmVyW10pID0+IG51bWJlcltdLFxufVxuXG50eXBlIExpa2VsaWhvb2QgPSB7XG4gIHZhbHVlOiBudW1iZXIsXG4gIGNvbnN0OiBudW1iZXIsXG4gIG11bHQ6IG51bWJlclxufTtcblxudHlwZSBPYmplY3RpdmVGdW5jdGlvbiA9ICh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKSA9PiBMaWtlbGlob29kO1xuXG5leHBvcnQgY29uc3QgRml0RXJyb3JNb2RlbCA9IHtcbiAgQ09OU1RBTlQ6ICdjb25zdGFudCcsXG4gIFBST1BPUlRJT05BTDogJ3Byb3BvcnRpb25hbCcsXG59O1xuXG5leHBvcnQgdHlwZSBGaXRQYXJhbUJvdW5kcyA9IHtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG59O1xuXG4vKiogRml0IGZ1bmN0aW9uIGRlc2NyaXB0aW9uLiBBcHBsaWVzIHRvIGN1c3RvbSB1c2VyIGZpdCBmdW5jdGlvbnMuXG4gKiBSZXF1aXJlcyBKUyBhcnJvdyBmdW5jdGlvbnMgZm9yIHRoZSBmaXQgZnVuY3Rpb25zIGFuZCBpbml0aWFsIHBhcmFtZXRlcnMuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbjogc3RyaW5nO1xuICBnZXRJbml0aWFsUGFyYW1ldGVyczogc3RyaW5nO1xuICBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW107XG59XG5cbmV4cG9ydCB0eXBlIEZpdEN1cnZlID0ge1xuICBmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xuICBwYXJhbWV0ZXJzOiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMgPSB7XG4gIGNvbmZpZGVuY2VUb3A6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgY29uZmlkZW5jZUJvdHRvbTogKHg6IG51bWJlcikgPT4gbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRml0U3RhdGlzdGljcyA9IHtcbiAgclNxdWFyZWQ/OiBudW1iZXIsXG4gIGF1Yz86IG51bWJlcixcbiAgaW50ZXJjZXB0WDogbnVtYmVyLCAvLyBwYXJhbWV0ZXJzWzJdXG4gIGludGVyY2VwdFk6IG51bWJlciwgLy8gZml0dGVkQ3VydmVbcGFyYW1ldGVyc1syXV1cbiAgc2xvcGU6IG51bWJlciwgLy8gcGFyYW1ldGVyc1sxXVxuICB0b3A6IG51bWJlciwgLy8gcGFyYW1ldGVyc1swXVxuICBib3R0b206IG51bWJlciwgLy8gcGFyYW1ldGVyc1szXVxufTtcblxuZXhwb3J0IHR5cGUgRml0SW52ZXJ0ZWRGdW5jdGlvbnMgPSB7XG4gIGludmVydGVkOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGludmVydGVkVG9wOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGludmVydGVkQm90dG9tOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsXG59O1xuXG4vKipcbiAqICBEYXRhZ3JvayBjdXJ2ZSBmaXR0aW5nXG4gKlxuICogLSBGaXR0aW5nOiBjb21wdXRpbmcgcGFyYW1ldGVycyBvZiB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHRvIGJlc3QgZml0IHRoZSBkYXRhXG4gKiAgIC0gVXNlcyBCRkdTIG9wdGltaXphdGlvbiBhbGdvcml0aG0gKG11bHRpLXRocmVhZGluZyBmb3IgcGVyZm9ybWFuY2UpLlxuICogICAgIEZvciBkb3NlLXJlc3BvbnNlIGN1cnZlcywgd2UgYXJlIHR5cGljYWxseSBmaXR0aW5nIHRoZSBzaWdtb2lkIGZ1bmN0aW9uXG4gKiAgIC0gQWJpbGl0eSB0byBkeW5hbWljYWxseSByZWdpc3RlciBjdXN0b20gZml0dGluZyBmdW5jdGlvbnNcbiAqICAgICAtIEF1dG9tYXRpYyBmaXQgZnVuY3Rpb24gZGV0ZXJtaW5hdGlvblxuICogICAgIC0gQ2FjaGluZyBvZiBjdXN0b20gZml0dGluZyBmdW5jdGlvbnNcbiAqICAgLSBBYmlsaXR5IHRvIGdldCBmaXR0aW5nIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyAoci1zcXVhcmVkLCBjbGFzc2lmaWNhdGlvbiwgZXRjKVxuICogLSBEZWVwIGludGVncmF0aW9uIHdpdGggdGhlIERhdGFncm9rIGdyaWRcbiAqICAgLSBFaXRoZXIgZml0dGluZyBvbiB0aGUgZmx5LCBvciB1c2luZyB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gKyBwYXJhbWV0ZXJzXG4gKiAgIC0gTXVsdGlwbGUgc2VyaWVzIGluIG9uZSBjZWxsXG4gKiAgIC0gQ2FuZGxlc3RpY2tzLCBjb25maWRlbmNlIGludGVydmFscywgYW5kIGRyb3BsaW5lcyBkcmF3aW5nXG4gKiAgIC0gQWJpbGl0eSB0byBkZWZpbmUgY2hhcnQsIG1hcmtlciwgb3IgZml0dGluZyBvcHRpb25zIChzdWNoIGFzIGZpdCBmdW5jdGlvbiBvciBtYXJrZXIgY29sb3IpXG4gKiAgICAgb24gdGhlIGNvbHVtbiBsZXZlbCwgd2l0aCB0aGUgYWJpbGl0eSB0byBvdmVycmlkZSBpdCBvbiBhIGdyaWQgY2VsbCBvciBwb2ludCBsZXZlbFxuICogICAtIENsaWNraW5nIGEgcG9pbnQgaW4gYSBjaGFydCB3aXRoaW4gYSBncmlkIG1ha2VzIGl0IGFuIG91dGxpZXIgLT4gY3VydmUgaXMgcmUtZml0dGVkIG9uIHRoZSBmbHlcbiAqICAgLSBBYmlsaXR5IHRvIHNwZWNpZnkgYSBjaGFydCBhcyBcInJlZmVyZW5jZVwiIHNvIHRoYXQgaXQgaXMgc2hvd24gb24gZXZlcnkgb3RoZXIgY2hhcnQgZm9yIGNvbXBhcmlzb25cbiAqIC0gQWJpbGl0eSB0byBvdmVybGF5IGN1cnZlcyBmcm9tIG11bHRpcGxlIGdyaWQgY2VsbHMgKHNwZWNpYWwgdmlld2VyKVxuICogLSBXb3JrIHdpdGggc2VyaWVzIHN0b3JlZCBpbiBtdWx0aXBsZSBmb3JtYXRzIChiaW5hcnkgZm9yIHBlcmZvcm1hbmNlLCBqc29uIGZvciBmbGV4aWJpbGl0eSwgZXRjKVxuKi9cblxuZXhwb3J0IGNvbnN0IEZJVF9TRU1fVFlQRSA9ICdmaXQnO1xuZXhwb3J0IGNvbnN0IEZJVF9DRUxMX1RZUEUgPSAnZml0JztcbmV4cG9ydCBjb25zdCBUQUdfRklUID0gJy5maXQnO1xuXG5leHBvcnQgY29uc3QgQ09ORklERU5DRV9JTlRFUlZBTF9TVFJPS0VfQ09MT1IgPSAncmdiYSgyNTUsMTkxLDYzLDAuNCknO1xuZXhwb3J0IGNvbnN0IENPTkZJREVOQ0VfSU5URVJWQUxfRklMTF9DT0xPUiA9ICdyZ2JhKDI1NSwyMzgsMjA0LDAuMyknO1xuXG5leHBvcnQgY29uc3QgQ1VSVkVfQ09ORklERU5DRV9JTlRFUlZBTF9CT1VORFMgPSB7XG4gIFRPUDogJ3RvcCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG59O1xuXG5leHBvcnQgY29uc3QgRFJPUExJTkVTID0gWydJQzUwJ107XG5cbmV4cG9ydCB0eXBlIEZpdE1hcmtlclR5cGUgPSAnYXN0ZXJpc2snIHwgJ2NpcmNsZScgfCAnY3Jvc3MgYm9yZGVyJyB8ICdkaWFtb25kJyB8ICdzcXVhcmUnIHwgJ3N0YXInIHwgJ3RyaWFuZ2xlIGJvdHRvbScgfFxuICAndHJpYW5nbGUgbGVmdCcgfCAndHJpYW5nbGUgcmlnaHQnIHwgJ3RyaWFuZ2xlIHRvcCc7XG5cbmV4cG9ydCB0eXBlIEZpdExpbmVTdHlsZSA9ICdzb2xpZCcgfCAnZG90dGVkJyB8ICdkYXNoZWQnIHwgJ2Rhc2hkb3R0ZWQnO1xuXG5leHBvcnQgdHlwZSBGaXRFcnJvck1vZGVsVHlwZSA9ICdjb25zdGFudCcgfCAncHJvcG9ydGlvbmFsJztcblxuLyoqIEEgcG9pbnQgaW4gdGhlIGZpdCBzZXJpZXMuIE9ubHkgeCBhbmQgeSBhcmUgcmVxdWlyZWQuIENhbiBvdmVycmlkZSBzb21lIGZpZWxkcyBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0UG9pbnQge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgb3V0bGllcj86IGJvb2xlYW47ICAgICAgIC8vIGlmIHRydWUsIHJlbmRlcnMgYXMgJ3gnIGFuZCBnZXRzIGlnbm9yZWQgZm9yIGN1cnZlIGZpdHRpbmdcbiAgY29sb3I/OiBzdHJpbmc7ICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgbWFya2VyIGNvbG9yIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgbWFya2VyPzogRml0TWFya2VyVHlwZTsgIC8vIG92ZXJyaWRlcyB0aGUgbWFya2VyIHR5cGUgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9uc1xuICBzaXplPzogbnVtYmVyOyAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG1hcmtlciBzaXplXG4gIHN0ZGV2PzogbnVtYmVyOyAgICAgICAgICAvLyB3aGVuIGRlZmluZWQsIHJlbmRlcnMgYW4gZXJyb3IgYmFyIGNhbmRsZXN0aWNrXG4gIC8vIG1pblk/OiBudW1iZXI7ICAgICAgICAgICAvLyB3aGVuIGRlZmluZWQsIHRoZSBtYXJrZXIgcmVuZGVycyBhcyBhIGNhbmRsZXN0aWNrIHdpdGggd2hpc2tlcnMgW21pblksIG1heFldXG4gIC8vIG1heFk/OiBudW1iZXI7ICAgICAgICAgICAvLyB3aGVuIGRlZmluZWQsIHRoZSBtYXJrZXIgcmVuZGVycyBhcyBhIGNhbmRsZXN0aWNrIHdpdGggd2hpc2tlcnMgW21pblksIG1heFldXG59XG5cbi8qKiBBIHNlcmllcyBjb25zaXN0cyBvZiBwb2ludHMsIGhhcyBhIG5hbWUsIGFuZCBvcHRpb25zLlxuICogSWYgZGVmaW5lZCwgc2VyaWVzT3B0aW9ucyBhcmUgbWVyZ2VkIHdpdGgge0BsaW5rIElGaXRDaGFydERhdGEuc2VyaWVzT3B0aW9uc30gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllcyBleHRlbmRzIElGaXRTZXJpZXNPcHRpb25zIHtcbiAgcG9pbnRzOiBJRml0UG9pbnRbXTtcbn1cblxuLyoqIENoYXJ0IGxhYmVscyBvcHRpb25zLiBDb250cm9scyB0aGUgY2hhcnQgbGFiZWxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnRMYWJlbE9wdGlvbnMge1xuICB2aXNpYmxlOiBib29sZWFuOyAgICAgICAgIC8vIGlmIHRydWUsIHJlbmRlcnMgdGhlIGxhYmVsIG9uIHRoZSBwbG90XG4gIGNvbG9yOiBzdHJpbmc7ICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgY29sb3JcbiAgbmFtZTogc3RyaW5nOyAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBsYWJlbCBuYW1lXG59XG5cbi8qKiBDaGFydCBvcHRpb25zLiBGb3IgZml0dGVkIGN1cnZlcywgdGhpcyBvYmplY3QgaXMgc3RvcmVkIGluIHRoZSBncmlkIGNvbHVtbiB0YWdzIGFuZCBpcyB1c2VkIGJ5IHRoZSByZW5kZXJlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0T3B0aW9ucyB7XG4gIG1pblg/OiBudW1iZXI7XG4gIG1pblk/OiBudW1iZXI7XG4gIG1heFg/OiBudW1iZXI7XG4gIG1heFk/OiBudW1iZXI7XG5cbiAgdGl0bGU/OiBzdHJpbmc7ICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgcGxvdCB0aXRsZS4gSWYgdGhlIHBsb3Qgc2l6ZSBpcyBlbm91Z2gsIHdpbGwgcmVuZGVyIGl0LlxuICB4QXhpc05hbWU/OiBzdHJpbmc7ICAgICAgICAvLyBkZWZpbmVzIHRoZSB4IGF4aXMgbmFtZS4gSWYgdGhlIHBsb3Qgc2l6ZSBpcyBlbm91Z2gsIHdpbGwgcmVuZGVyIGl0LlxuICB5QXhpc05hbWU/OiBzdHJpbmc7ICAgICAgICAvLyBkZWZpbmVzIHRoZSBZIGF4aXMgbmFtZS4gSWYgdGhlIHBsb3Qgc2l6ZSBpcyBlbm91Z2gsIHdpbGwgcmVuZGVyIGl0LlxuXG4gIGxvZ1g/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeCBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcbiAgbG9nWT86IGJvb2xlYW47ICAgICAgICAgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRoZSB5IGRhdGEgc2hvdWxkIGJlIGxvZ2FyaXRobWljIG9yIG5vdFxuXG4gIHNob3dTdGF0aXN0aWNzPzogc3RyaW5nW107IC8vIGRlZmluZXMgdGhlIHN0YXRpc3RpY3MgdGhhdCB3b3VsZCBiZSBzaG93biBvbiB0aGUgcGxvdFxuICBsYWJlbE9wdGlvbnM/OiBJRml0Q2hhcnRMYWJlbE9wdGlvbnNbXTsgLy8gY29udHJvbHMgdGhlIHBsb3QgbGFiZWxzXG59XG5cbi8qKiBEYXRhIGZvciB0aGUgZml0IGNoYXJ0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zPzogSUZpdENoYXJ0T3B0aW9ucztcbiAgc2VyaWVzT3B0aW9ucz86IElGaXRTZXJpZXNPcHRpb25zOyAgLy8gRGVmYXVsdCBzZXJpZXMgb3B0aW9ucy4gSW5kaXZpZHVhbCBzZXJpZXMgY2FuIG92ZXJyaWRlIGl0LlxuICBzZXJpZXM/OiBJRml0U2VyaWVzW107XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMge0BsaW5rIElGaXRDaGFydERhdGF9IGludGVyZmFjZSAqL1xuZXhwb3J0IGNsYXNzIEZpdENoYXJ0RGF0YSBpbXBsZW1lbnRzIElGaXRDaGFydERhdGEge1xuICBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMgPSB7fTtcbiAgc2VyaWVzT3B0aW9uczogSUZpdFNlcmllc09wdGlvbnMgPSB7fTsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzOiBJRml0U2VyaWVzW10gPSBbXTtcbn1cblxuLyoqIFNlcmllcyBvcHRpb25zIGNhbiBiZSBlaXRoZXIgYXBwbGllZCBnbG9iYWxseSBvbiBhIGNvbHVtbiBsZXZlbCwgb3IgcGFydGlhbGx5IG92ZXJyaWRkZW4gaW4gcGFydGljdWxhciBzZXJpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFNlcmllc09wdGlvbnMge1xuICBuYW1lPzogc3RyaW5nOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgbmFtZVxuICBmaXRGdW5jdGlvbj86IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uOyAvLyBjb250cm9scyB0aGUgc2VyaWVzIGZpdCBmdW5jdGlvblxuICBwYXJhbWV0ZXJzPzogbnVtYmVyW107ICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xzIHRoZSBzZXJpZXMgcGFyYW1ldGVycywgYXV0by1maXR0aW5nIHdoZW4gbm90IGRlZmluZWRcbiAgcGFyYW1ldGVyQm91bmRzPzogRml0UGFyYW1Cb3VuZHNbXTsgICAvLyBkZWZpbmVzIHRoZSBhY2NlcHRhYmxlIHJhbmdlIG9mIGVhY2ggcGFyYW1ldGVyLCB3aGljaCBpcyB0YWtlbiBpbnRvIGFjY291bnQgZHVyaW5nIHRoZSBmaXR0aW5nLiBTZWUgYWxzbyBgcGFyYW1ldGVyc2AuXG4gIG1hcmtlclR5cGU/OiBGaXRNYXJrZXJUeXBlOyAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIG1hcmtlciB0eXBlXG4gIGxpbmVTdHlsZT86IEZpdExpbmVTdHlsZTsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgc2VyaWVzIGxpbmUgc3R5bGVcbiAgcG9pbnRDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgcG9pbnQgY29sb3JcbiAgZml0TGluZUNvbG9yPzogc3RyaW5nOyAgICAgICAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgZml0IGxpbmUgY29sb3JcbiAgY29uZmlkZW5jZUludGVydmFsQ29sb3I/OiBzdHJpbmc7ICAgICAvLyBvdmVycmlkZXMgdGhlIHN0YW5kYXJkaXplZCBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBjb2xvclxuICBzaG93Rml0TGluZT86IGJvb2xlYW47ICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0byBzaG93IHRoZSBmaXQgbGluZSBvciBub3RcbiAgc2hvd1BvaW50cz86IHN0cmluZzsgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHRoZSBkYXRhIGRpc3BsYXkgbW9kZVxuICBzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWw/OiBib29sZWFuOyAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgb3Igbm90XG4gIGVycm9yTW9kZWw/OiBGaXRFcnJvck1vZGVsVHlwZTtcbiAgY2xpY2tUb1RvZ2dsZT86IGJvb2xlYW47ICAgIC8vIGlmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZ1xuICBsYWJlbHM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07IC8vIGNvbnRyb2xsZWQgYnkgSUZpdENoYXJ0RGF0YSBsYWJlbE9wdGlvbnMsIHNob3dzIGxhYmVsc1xuICBkcm9wbGluZXM/OiBzdHJpbmdbXTsgICAgICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGRyb3BsaW5lcyB0aGF0IHdvdWxkIGJlIHNob3duIG9uIHRoZSBwbG90IChJQzUwKVxufVxuLy8gVE9ETzogc2hvdyBsYWJlbHMgaW4gcHJvcGVydHkgcGFuZWwgaWYgcHJlc2VudCwgY29sb3IgYnkgZGVmYXVsdCBmcm9tIHNlcmllc1xuXG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIEZpdFN0YXRpc3RpY3N9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBzdGF0aXN0aWNzUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgUHJvcGVydHkuanMoJ3JTcXVhcmVkJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2F1YycsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdpbnRlcmNlcHRZJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2ludGVyY2VwdFgnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2xvcGUnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygndG9wJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2JvdHRvbScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0Q2hhcnRPcHRpb25zfS4gVXNlZnVsIGZvciBlZGl0aW5nLCBpbml0aWFsaXphdGlvbiwgdHJhbnNmb3JtYXRpb25zLCBldGMuICovXG5leHBvcnQgY29uc3QgZml0Q2hhcnREYXRhUHJvcGVydGllczogUHJvcGVydHlbXSA9IFtcbiAgLy8gU3R5bGUgYW5kIHpvb21cbiAgUHJvcGVydHkuanMoJ21pblgnLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNaW5pbXVtIHZhbHVlIG9mIHRoZSBYIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbWluWScsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUgb2YgdGhlIFkgYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdtYXhYJywgVFlQRS5GTE9BVCwge2Rlc2NyaXB0aW9uOiAnTWF4aW11bSB2YWx1ZSBvZiB0aGUgWCBheGlzJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ21heFknLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlIG9mIHRoZSBZIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygndGl0bGUnLCBUWVBFLlNUUklORywge251bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCd4QXhpc05hbWUnLCBUWVBFLlNUUklORywge2Rlc2NyaXB0aW9uOlxuICAgICdMYWJlbCB0byBzaG93IG9uIHRoZSBYIGF4aXMuIElmIG5vdCBzcGVjaWZpZWQsIGNvcnJlc3BvbmRpbmcgZGF0YSBjb2x1bW4gbmFtZSBpcyB1c2VkJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ3lBeGlzTmFtZScsIFRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFkgYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbG9nWCcsIFRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWCBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2xvZ1knLCBUWVBFLkJPT0wsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIFkgYXhpcyBzaG91bGQgYmUgbG9nYXJpdGhtaWMnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzaG93U3RhdGlzdGljcycsIFRZUEUuU1RSSU5HX0xJU1QsIHtkZXNjcmlwdGlvbjogJ1doZXRoZXIgc3BlY2lmaWMgc3RhdGlzdGljcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IHN0YXRpc3RpY3NQcm9wZXJ0aWVzLm1hcCgoZnJwKSA9PiBmcnAubmFtZSksIGlucHV0VHlwZTogJ011bHRpQ2hvaWNlJ30pLFxuXTtcblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgSUZpdFNlcmllc09wdGlvbnN9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRTZXJpZXNQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICBQcm9wZXJ0eS5qcygnbmFtZScsIFRZUEUuU1RSSU5HKSxcbiAgUHJvcGVydHkuanMoJ2ZpdEZ1bmN0aW9uJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGNob2ljZXM6IFsnc2lnbW9pZCcsICdsaW5lYXInXSwgZGVmYXVsdFZhbHVlOiAnc2lnbW9pZCd9KSxcbiAgUHJvcGVydHkuanMoJ3BvaW50Q29sb3InLCBUWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIFByb3BlcnR5LmpzKCdmaXRMaW5lQ29sb3InLCBUWVBFLlNUUklORyxcbiAgICB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBudWxsYWJsZTogdHJ1ZSwgaW5wdXRUeXBlOiAnQ29sb3InfSksXG4gIFByb3BlcnR5LmpzKCdlcnJvck1vZGVsJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6ICdjb25zdGFudCcsXG4gICAgY2hvaWNlczogWydjb25zdGFudCcsICdwcm9wb3J0aW9uYWwnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdjbGlja1RvVG9nZ2xlJywgVFlQRS5CT09MLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVzY3JpcHRpb246XG4gICAgJ0lmIHRydWUsIGNsaWNraW5nIG9uIHRoZSBwb2ludCB0b2dnbGVzIGl0cyBvdXRsaWVyIHN0YXR1cyBhbmQgY2F1c2VzIGN1cnZlIHJlZml0dGluZycsIG51bGxhYmxlOiB0cnVlLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzaG93Rml0TGluZScsIFRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlZmF1bHRWYWx1ZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnc2hvd1BvaW50cycsIFRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIFByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBUWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdtYXJrZXJUeXBlJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ2NpcmNsZScsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2xpbmVTdHlsZScsIFRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsXG4gICAgY2hvaWNlczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2Rhc2hkb3R0ZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdkcm9wbGluZXMnLCBUWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIGRyb3BsaW5lcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnc2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdsaW5lYXInO1xuXG5leHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbmV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuLy8gVE9ETz86IGFkZCBtZXRob2QgdG8gcmV0dXJuIHBhcmFtZXRlcnMgLSBnZXQgcGFyYW1ldGVycyBmcm9tIGZpdCBmdW5jdGlvblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBzaWdtb2lkIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgU2lnbW9pZEZ1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBGSVRfRlVOQ1RJT05fU0lHTU9JRDtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnVG9wJywgJ0JvdHRvbScsICdTbG9wZScsICdJQzUwJ107XG4gIH1cblxuICB5KHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNpZ21vaWQocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBjb25zdCBkYXRhQm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeCwgeSk7XG4gICAgY29uc3QgbWVkWSA9IChkYXRhQm91bmRzLmJvdHRvbSAtIGRhdGFCb3VuZHMudG9wKSAvIDIgKyBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbWF4WUludGVydmFsID0gZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcDtcbiAgICBsZXQgbmVhcmVzdFhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSBNYXRoLmFicyh5W2ldIC0gbWVkWSk7XG4gICAgICBpZiAoY3VycmVudEludGVydmFsIDwgbWF4WUludGVydmFsKSB7XG4gICAgICAgIG1heFlJbnRlcnZhbCA9IGN1cnJlbnRJbnRlcnZhbDtcbiAgICAgICAgbmVhcmVzdFhJbmRleCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHhBdE1lZFkgPSB4W25lYXJlc3RYSW5kZXhdO1xuICAgIGNvbnN0IHNsb3BlID0geVswXSA+IHlbeS5sZW5ndGggLSAxXSA/IDEgOiAtMTtcblxuICAgIC8vIHBhcmFtcyBhcmU6IFttYXgsIHRhbiwgSUM1MCwgbWluXVxuICAgIHJldHVybiBbZGF0YUJvdW5kcy5ib3R0b20sIHNsb3BlLCB4QXRNZWRZLCBkYXRhQm91bmRzLnRvcF07XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB1c2VyIEpTIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGNsYXNzIEpzRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIHByaXZhdGUgX25hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgeUZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgICBnZXRJbml0UGFyYW1zRnVuYzogKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSkgPT4gbnVtYmVyW10sIHBhcmFtZXRlck5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLl9wYXJhbWV0ZXJOYW1lcyA9IHBhcmFtZXRlck5hbWVzO1xuXG4gICAgdGhpcy55ID0geUZ1bmM7XG4gICAgdGhpcy5nZXRJbml0aWFsUGFyYW1ldGVycyA9IGdldEluaXRQYXJhbXNGdW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIGdldCBwYXJhbWV0ZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlck5hbWVzO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG4vLyBPYmplY3Qgd2l0aCBmaXQgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZml0RnVuY3Rpb25zOiB7W2luZGV4OiBzdHJpbmddOiBGaXRGdW5jdGlvbn0gPSB7XG4gICdsaW5lYXInOiBuZXcgTGluZWFyRnVuY3Rpb24oKSxcbiAgJ3NpZ21vaWQnOiBuZXcgU2lnbW9pZEZ1bmN0aW9uKCksXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElGaXRPcHRpb25zIHtcbiAgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGU7XG4gIGNvbmZpZGVuY2VMZXZlbDogbnVtYmVyO1xuICBzdGF0aXN0aWNzOiBib29sZWFuO1xufVxuXG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTogT2JqZWN0aXZlRnVuY3Rpb24ge1xuICBsZXQgb2Y6IE9iamVjdGl2ZUZ1bmN0aW9uO1xuXG4gIHN3aXRjaCAoZXJyb3JNb2RlbCkge1xuICBjYXNlIEZpdEVycm9yTW9kZWwuQ09OU1RBTlQ6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICBicmVhaztcbiAgY2FzZSBGaXRFcnJvck1vZGVsLlBST1BPUlRJT05BTDpcbiAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbFByb3BvcnRpb25hbDtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBvZiA9IG9iamVjdGl2ZU5vcm1hbENvbnN0YW50O1xuICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIG9mO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcHRpbWl6YWJsZShkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBvZjogT2JqZWN0aXZlRnVuY3Rpb24sIGZpeGVkOiBudW1iZXJbXSk6IE9wdGltaXphYmxlIHtcbiAgcmV0dXJuIHtcbiAgICBnZXRWYWx1ZTogKHBhcmFtZXRlcnM6IG51bWJlcltdKSA9PiB7XG4gICAgICByZXR1cm4gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycykudmFsdWU7XG4gICAgfSxcbiAgICBnZXRHcmFkaWVudDogKHBhcmFtZXRlcnM6IG51bWJlcltdLCBncmFkaWVudDogbnVtYmVyW10pID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKylcbiAgICAgICAgZ3JhZGllbnRbaV0gPSBmaXhlZC5pbmNsdWRlcyhpKSA/IDAgOiBnZXRPYmplY3RpdmVEZXJpdmF0aXZlKG9mLCBjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbWV0ZXJzLCBpKTtcblxuICAgICAgcmV0dXJuIGdyYWRpZW50O1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPckNyZWF0ZUZpdEZ1bmN0aW9uKHNlcmllc0ZpdEZ1bmM6IHN0cmluZyB8IElGaXRGdW5jdGlvbkRlc2NyaXB0aW9uKTogRml0RnVuY3Rpb24ge1xuICBpZiAodHlwZW9mIHNlcmllc0ZpdEZ1bmMgPT09ICdzdHJpbmcnKVxuICAgIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuY107XG4gIGVsc2UgaWYgKCFmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXSkge1xuICAgIGNvbnN0IG5hbWUgPSBzZXJpZXNGaXRGdW5jLm5hbWU7XG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IHNlcmllc0ZpdEZ1bmMucGFyYW1ldGVyTmFtZXM7XG4gICAgY29uc3QgZml0RnVuY3Rpb25QYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZnVuY3Rpb24uc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZ2V0SW5pdFBhcmFtc1BhcnRzID0gc2VyaWVzRml0RnVuYy5nZXRJbml0aWFsUGFyYW1ldGVycy5zcGxpdCgnPT4nKS5tYXAoKGVsZW0pID0+IGVsZW0udHJpbSgpKTtcbiAgICBjb25zdCBmaXRGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbihmaXRGdW5jdGlvblBhcnRzWzBdLnNsaWNlKDEsIGZpdEZ1bmN0aW9uUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgJHtmaXRGdW5jdGlvblBhcnRzWzFdLmluY2x1ZGVzKCc7JykgPyAnJyA6ICdyZXR1cm4gJ30ke2ZpdEZ1bmN0aW9uUGFydHNbMV19YCk7XG4gICAgY29uc3QgZ2V0SW5pdFBhcmFtc0Z1bmMgPSBuZXcgRnVuY3Rpb24oZ2V0SW5pdFBhcmFtc1BhcnRzWzBdLnNsaWNlKDEsIGdldEluaXRQYXJhbXNQYXJ0c1swXS5sZW5ndGggLSAxKSxcbiAgICAgIGByZXR1cm4gJHtnZXRJbml0UGFyYW1zUGFydHNbMV19YCk7XG4gICAgY29uc3QgZml0RnVuYyA9IG5ldyBKc0Z1bmN0aW9uKG5hbWUsIChmaXRGdW5jdGlvbiBhcyAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIpLFxuICAgICAgKGdldEluaXRQYXJhbXNGdW5jIGFzICh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pID0+IG51bWJlcltdKSwgcGFyYW1OYW1lcyk7XG4gICAgZml0RnVuY3Rpb25zW25hbWVdID0gZml0RnVuYztcbiAgfVxuXG4gIHJldHVybiBmaXRGdW5jdGlvbnNbc2VyaWVzRml0RnVuYy5uYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpdERhdGEoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGZpdEZ1bmN0aW9uOiBGaXRGdW5jdGlvbiwgZXJyb3JNb2RlbDogRml0RXJyb3JNb2RlbFR5cGUsXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW10pOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGN1cnZlRnVuY3Rpb24gPSBmaXRGdW5jdGlvbi55O1xuICBjb25zdCBwYXJhbVZhbHVlcyA9IGZpdEZ1bmN0aW9uLmdldEluaXRpYWxQYXJhbWV0ZXJzKGRhdGEueCwgZGF0YS55KTtcblxuICBjb25zdCBvZiA9IGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWwpO1xuICBjb25zdCBmaXhlZDogbnVtYmVyW10gPSBbXTtcbiAgbGV0IG92ZXJMaW1pdHMgPSB0cnVlO1xuXG4gIHdoaWxlIChvdmVyTGltaXRzKSB7XG4gICAgY29uc3Qgb3B0aW1pemFibGUgPSBjcmVhdGVPcHRpbWl6YWJsZShkYXRhLCBjdXJ2ZUZ1bmN0aW9uLCBvZiwgZml4ZWQpO1xuICAgIGxpbWl0ZWRNZW1vcnlCRkdTKG9wdGltaXphYmxlLCBwYXJhbVZhbHVlcyk7XG4gICAgbGltaXRlZE1lbW9yeUJGR1Mob3B0aW1pemFibGUsIHBhcmFtVmFsdWVzKTtcblxuICAgIG92ZXJMaW1pdHMgPSBmYWxzZTtcbiAgICBpZiAoIXBhcmFtZXRlckJvdW5kcylcbiAgICAgIGJyZWFrO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJCb3VuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0/Lm1heCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtVmFsdWVzW2ldID4gcGFyYW1ldGVyQm91bmRzW2ldLm1heCEpIHtcbiAgICAgICAgb3ZlckxpbWl0cyA9IHRydWU7XG4gICAgICAgIGZpeGVkLnB1c2goaSk7XG4gICAgICAgIHBhcmFtVmFsdWVzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1heCE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtZXRlckJvdW5kc1tpXT8ubWluICE9PSB1bmRlZmluZWQgJiYgcGFyYW1WYWx1ZXNbaV0gPCBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluISkge1xuICAgICAgICBvdmVyTGltaXRzID0gdHJ1ZTtcbiAgICAgICAgZml4ZWQucHVzaChpKTtcbiAgICAgICAgcGFyYW1WYWx1ZXNbaV0gPSBwYXJhbWV0ZXJCb3VuZHNbaV0ubWluITtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXR0ZWRDdXJ2ZTogZml0dGVkQ3VydmUsXG4gICAgcGFyYW1ldGVyczogcGFyYW1WYWx1ZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsIHBhcmFtVmFsdWVzOiBudW1iZXJbXSk6XG4gKHg6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgcmV0dXJuICh4OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlKTpcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IG9mID0gY3JlYXRlT2JqZWN0aXZlRnVuY3Rpb24oZXJyb3JNb2RlbCk7XG5cbiAgY29uc3QgZXJyb3IgPSBlcnJvck1vZGVsID09PSBGaXRFcnJvck1vZGVsLlBST1BPUlRJT05BTCA/XG4gICAgb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1WYWx1ZXMpLm11bHQgOlxuICAgIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtVmFsdWVzKS5jb25zdDtcblxuICBjb25zdCBxdWFudGlsZSA9IGpTdGF0Lm5vcm1hbC5pbnYoMSAtIGNvbmZpZGVuY2VMZXZlbC8yLCAwLCAxKTtcblxuICBjb25zdCB0b3AgPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT05TVEFOVClcbiAgICAgIHJldHVybiB2YWx1ZSArIHF1YW50aWxlICogZXJyb3I7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHZhbHVlICsgcXVhbnRpbGUgKiBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvcjtcbiAgfTtcblxuICBjb25zdCBib3R0b20gPSAoeDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjdXJ2ZUZ1bmN0aW9uKHBhcmFtVmFsdWVzLCB4KTtcbiAgICBpZiAoZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5DT05TVEFOVClcbiAgICAgIHJldHVybiB2YWx1ZSAtIHF1YW50aWxlICogZXJyb3I7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHZhbHVlIC0gcXVhbnRpbGUgKiBNYXRoLmFicyh2YWx1ZSkgKiBlcnJvcjtcbiAgfTtcblxuICByZXR1cm4ge2NvbmZpZGVuY2VUb3A6IHRvcCwgY29uZmlkZW5jZUJvdHRvbTogYm90dG9tfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpc3RpY3MoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBzdGF0aXN0aWNzOiBib29sZWFuID0gdHJ1ZSk6IEZpdFN0YXRpc3RpY3Mge1xuICBjb25zdCBmaXR0ZWRDdXJ2ZSA9IGdldEZpdHRlZEN1cnZlKGN1cnZlRnVuY3Rpb24sIHBhcmFtVmFsdWVzKTtcblxuICByZXR1cm4ge1xuICAgIHJTcXVhcmVkOiBzdGF0aXN0aWNzID8gZ2V0RGV0Q29lZmYoZml0dGVkQ3VydmUsIGRhdGEpIDogdW5kZWZpbmVkLFxuICAgIGF1Yzogc3RhdGlzdGljcyA/IGdldEF1YyhmaXR0ZWRDdXJ2ZSwgZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgaW50ZXJjZXB0WDogcGFyYW1WYWx1ZXNbMl0sXG4gICAgaW50ZXJjZXB0WTogZml0dGVkQ3VydmUocGFyYW1WYWx1ZXNbMl0pLFxuICAgIHNsb3BlOiBwYXJhbVZhbHVlc1sxXSxcbiAgICB0b3A6IHBhcmFtVmFsdWVzWzBdLFxuICAgIGJvdHRvbTogcGFyYW1WYWx1ZXNbM10sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZlcnRlZEZ1bmN0aW9ucyhkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1WYWx1ZXM6IG51bWJlcltdLFxuICBjb25maWRlbmNlTGV2ZWw6IG51bWJlciA9IDAuMDUsIHN0YXRpc3RpY3M6IGJvb2xlYW4gPSB0cnVlKTogRml0SW52ZXJ0ZWRGdW5jdGlvbnMgfCBudWxsIHtcbiAgY29uc3Qgc3R1ZGVudFEgPSBqU3RhdC5zdHVkZW50dC5pbnYoMSAtIGNvbmZpZGVuY2VMZXZlbCAvIDIsIGRhdGEueC5sZW5ndGggLSBwYXJhbVZhbHVlcy5sZW5ndGgpO1xuXG4gIGxldCBpbnY6ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgbGV0IGludlRvcDogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuICBsZXQgaW52Qm90dG9tOiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgaWYgKHN0YXRpc3RpY3MpIHtcbiAgICBpbnYgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICAvL3Nob3VsZCBjaGVjayBpZiBtb3JlIHRoYW4gYm90dG9tIGFuZCBsZXNzIHRoYW4gdG9wXG4gICAgICByZXR1cm4gcGFyYW1WYWx1ZXNbMl0gLyBNYXRoLnBvdygocGFyYW1WYWx1ZXNbMF0gLSB5KSAvICh5IC0gcGFyYW1WYWx1ZXNbM10pLCAxIC8gcGFyYW1WYWx1ZXNbMV0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlcnJvciA9IGdldEludkVycm9yKGludiwgZGF0YSk7XG5cbiAgICBpbnZUb3AgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGludih5KTtcbiAgICAgIHJldHVybiB2YWx1ZSArIHN0dWRlbnRRICogZXJyb3IgLyBNYXRoLnNxcnQoZGF0YS55Lmxlbmd0aCk7XG4gICAgfTtcblxuICAgIGludkJvdHRvbSA9ICh5OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW52KHkpO1xuICAgICAgcmV0dXJuIHZhbHVlIC0gc3R1ZGVudFEgKiBlcnJvciAvIE1hdGguc3FydChkYXRhLnkubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGludmVydGVkOiBpbnYsXG4gICAgICBpbnZlcnRlZFRvcDogaW52VG9wLFxuICAgICAgaW52ZXJ0ZWRCb3R0b206IGludkJvdHRvbSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWdtb2lkKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIGNvbnN0IEMgPSBwYXJhbXNbMl07XG4gIGNvbnN0IEQgPSBwYXJhbXNbM107XG4gIHJldHVybiAoRCArIChBIC0gRCkgLyAoMSArIE1hdGgucG93KDEwLCAoeCAtIEMpICogQikpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1YyhmaXR0ZWRDdXJ2ZTogKHg6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBhdWMgPSAwO1xuXG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmRhdGEueCk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueCk7XG4gIGNvbnN0IGludGVncmF0aW9uU3RlcCA9IChtYXggLSBtaW4pIC8gMTAwMDtcblxuICBmb3IgKGxldCB4ID0gbWluOyB4IDwgbWF4OyB4Kz0gaW50ZWdyYXRpb25TdGVwKVxuICAgIGF1YyArPSBpbnRlZ3JhdGlvblN0ZXAgKiBmaXR0ZWRDdXJ2ZSh4KTtcblxuICByZXR1cm4gYXVjO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV0Q29lZmYoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgc3NSZXMgPSAwO1xuICBsZXQgc3NUb3QgPSAwO1xuXG4gIGNvbnN0IHlNZWFuID0galN0YXQubWVhbihkYXRhLnkpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgc3NSZXMgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0gZml0dGVkQ3VydmUoZGF0YS54W2ldKSwgMik7XG4gICAgc3NUb3QgKz0gTWF0aC5wb3coZGF0YS55W2ldIC0geU1lYW4sIDIpO1xuICB9XG5cbiAgcmV0dXJuIDEgLSBzc1JlcyAvIHNzVG90O1xufVxuXG5mdW5jdGlvbiBnZXRJbnZFcnJvcih0YXJnZXRGdW5jOiAoeTogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuXG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS55Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS55Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS54W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKGRhdGEueVtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcblxuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIHJldHVybiBzaWdtYTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZjogT2JqZWN0aXZlRnVuY3Rpb24sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtczogbnVtYmVyW10sIHNlbGVjdGVkUGFyYW06IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHN0ZXAgPSAocGFyYW1zW3NlbGVjdGVkUGFyYW1dICogMC4wMDAxKSA9PT0gMCA/IDAuMDAxIDogKHBhcmFtc1tzZWxlY3RlZFBhcmFtXSAqIDAuMDAwMSk7XG4gIGNvbnN0IHBhcmFtc1RvcDogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgcGFyYW1zQm90dG9tOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID09PSBzZWxlY3RlZFBhcmFtKSB7XG4gICAgICBwYXJhbXNUb3AucHVzaChwYXJhbXNbaV0gKyBzdGVwKTtcbiAgICAgIHBhcmFtc0JvdHRvbS5wdXNoKHBhcmFtc1tpXSAtIHN0ZXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXNUb3AucHVzaChwYXJhbXNbaV0pO1xuICAgICAgcGFyYW1zQm90dG9tLnB1c2gocGFyYW1zW2ldKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZHJ2VG9wID0gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1zVG9wKS52YWx1ZTtcbiAgY29uc3QgZHJ2Qm90dG9tID0gb2YoY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1zQm90dG9tKS52YWx1ZTtcblxuICByZXR1cm4gKGRydlRvcCAtIGRydkJvdHRvbSkgLyAoMiAqIHN0ZXApO1xufVxuXG5mdW5jdGlvbiBvYmplY3RpdmVOb3JtYWxDb25zdGFudCh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3EgKyBNYXRoLmxvZygyICogcGkgKiBzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IHNpZ21hLCBtdWx0OiAwfTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsUHJvcG9ydGlvbmFsKHRhcmdldEZ1bmM6IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgZGF0YToge3k6IG51bWJlcltdLCB4OiBudW1iZXJbXX0sIHBhcmFtczogbnVtYmVyW10pOiBMaWtlbGlob29kIHtcbiAgLy9hc3N1cmUgb2JzZXJ2ZWQgYW5kIGFyZ3Mgc2FtZSBsZW5ndGhcbiAgY29uc3QgcGkgPSBNYXRoLlBJO1xuICBsZXQgc2lnbWEgPSAwO1xuICBsZXQgc2lnbWFTcSA9IDA7XG4gIGxldCBsaWtlbGlob29kID0gMDtcblxuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueC5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueVtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhwYXJhbXMsIGRhdGEueFtpXSk7XG4gICAgcmVzaWR1ZXNTcXVhcmVzW2ldID0gTWF0aC5wb3cob2JzIC0gcHJlZCwgMik7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBzaWdtYVNxICs9IHJlc2lkdWVzU3F1YXJlc1tpXTtcblxuICBzaWdtYVNxIC89IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7XG4gIHNpZ21hID0gTWF0aC5zcXJ0KHNpZ21hU3EpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIGxpa2VsaWhvb2QgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldIC8gc2lnbWFTcSArIE1hdGgubG9nKDIgKiBwaSAqIHNpZ21hU3EpO1xuXG4gIHJldHVybiB7dmFsdWU6IC1saWtlbGlob29kLCBjb25zdDogc2lnbWEsIG11bHQ6IDB9O1xufVxuIl19
|
|
444
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWN1cnZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZml0LWN1cnZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixvQ0FBb0M7QUFDcEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRTVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELHNCQUFzQjtBQUN0QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQWlCL0IsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFlBQVksRUFBRSxjQUFjO0NBQzdCLENBQUM7QUEwQ0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBb0JFO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsc0JBQXNCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsdUJBQXVCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUc7SUFDOUMsR0FBRyxFQUFFLEtBQUs7SUFDVixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUE0RGxDLDREQUE0RDtBQUM1RCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUNFLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxrQkFBYSxHQUFzQixFQUFFLENB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QUU7UUFDN0MsVUFBVSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBRTFFLE9BQU8sRUFBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7QUFDckQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcyAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gJ2RhdGFncm9rLWFwaS9zcmMvZW50aXRpZXMnO1xuaW1wb3J0IHtUWVBFfSBmcm9tICdkYXRhZ3Jvay1hcGkvc3JjL2NvbnN0JztcblxuaW1wb3J0IHtsaW1pdGVkTWVtb3J5QkZHU30gZnJvbSAnLi4vLi4vbGJmZ3MvbGJmZ3MnO1xuLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xuXG5cbnR5cGUgT3B0aW1pemFibGUgPSB7XG4gIGdldFZhbHVlOiAocGFyYW1ldGVyczogbnVtYmVyW10pID0+IG51bWJlcixcbiAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiBudW1iZXJbXSxcbn1cblxudHlwZSBMaWtlbGlob29kID0ge1xuICB2YWx1ZTogbnVtYmVyLFxuICBjb25zdDogbnVtYmVyLFxuICBtdWx0OiBudW1iZXJcbn07XG5cbnR5cGUgT2JqZWN0aXZlRnVuY3Rpb24gPSAodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSkgPT4gTGlrZWxpaG9vZDtcblxuZXhwb3J0IGNvbnN0IEZpdEVycm9yTW9kZWwgPSB7XG4gIENPTlNUQU5UOiAnY29uc3RhbnQnLFxuICBQUk9QT1JUSU9OQUw6ICdwcm9wb3J0aW9uYWwnLFxufTtcblxuZXhwb3J0IHR5cGUgRml0UGFyYW1Cb3VuZHMgPSB7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufTtcblxuLyoqIEZpdCBmdW5jdGlvbiBkZXNjcmlwdGlvbi4gQXBwbGllcyB0byBjdXN0b20gdXNlciBmaXQgZnVuY3Rpb25zLlxuICogUmVxdWlyZXMgSlMgYXJyb3cgZnVuY3Rpb25zIGZvciB0aGUgZml0IGZ1bmN0aW9ucyBhbmQgaW5pdGlhbCBwYXJhbWV0ZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb246IHN0cmluZztcbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnM6IHN0cmluZztcbiAgcGFyYW1ldGVyTmFtZXM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgdHlwZSBGaXRDdXJ2ZSA9IHtcbiAgZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbiAgcGFyYW1ldGVyczogbnVtYmVyW107XG59O1xuXG5leHBvcnQgdHlwZSBGaXRDb25maWRlbmNlSW50ZXJ2YWxzID0ge1xuICBjb25maWRlbmNlVG9wOiAoeDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIGNvbmZpZGVuY2VCb3R0b206ICh4OiBudW1iZXIpID0+IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIEZpdFN0YXRpc3RpY3MgPSB7XG4gIHJTcXVhcmVkPzogbnVtYmVyLFxuICBhdWM/OiBudW1iZXIsXG4gIGludGVyY2VwdFg6IG51bWJlciwgLy8gcGFyYW1ldGVyc1syXVxuICBpbnRlcmNlcHRZOiBudW1iZXIsIC8vIGZpdHRlZEN1cnZlW3BhcmFtZXRlcnNbMl1dXG4gIHNsb3BlOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMV1cbiAgdG9wOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbMF1cbiAgYm90dG9tOiBudW1iZXIsIC8vIHBhcmFtZXRlcnNbM11cbn07XG5cbmV4cG9ydCB0eXBlIEZpdEludmVydGVkRnVuY3Rpb25zID0ge1xuICBpbnZlcnRlZDogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxuICBpbnZlcnRlZFRvcDogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxuICBpbnZlcnRlZEJvdHRvbTogKHk6IG51bWJlcikgPT4gbnVtYmVyLFxufTtcblxuLyoqXG4gKiAgRGF0YWdyb2sgY3VydmUgZml0dGluZ1xuICpcbiAqIC0gRml0dGluZzogY29tcHV0aW5nIHBhcmFtZXRlcnMgb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiB0byBiZXN0IGZpdCB0aGUgZGF0YVxuICogICAtIFVzZXMgQkZHUyBvcHRpbWl6YXRpb24gYWxnb3JpdGhtIChtdWx0aS10aHJlYWRpbmcgZm9yIHBlcmZvcm1hbmNlKS5cbiAqICAgICBGb3IgZG9zZS1yZXNwb25zZSBjdXJ2ZXMsIHdlIGFyZSB0eXBpY2FsbHkgZml0dGluZyB0aGUgc2lnbW9pZCBmdW5jdGlvblxuICogICAtIEFiaWxpdHkgdG8gZHluYW1pY2FsbHkgcmVnaXN0ZXIgY3VzdG9tIGZpdHRpbmcgZnVuY3Rpb25zXG4gKiAgICAgLSBBdXRvbWF0aWMgZml0IGZ1bmN0aW9uIGRldGVybWluYXRpb25cbiAqICAgICAtIENhY2hpbmcgb2YgY3VzdG9tIGZpdHRpbmcgZnVuY3Rpb25zXG4gKiAgIC0gQWJpbGl0eSB0byBnZXQgZml0dGluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MgKHItc3F1YXJlZCwgY2xhc3NpZmljYXRpb24sIGV0YylcbiAqIC0gRGVlcCBpbnRlZ3JhdGlvbiB3aXRoIHRoZSBEYXRhZ3JvayBncmlkXG4gKiAgIC0gRWl0aGVyIGZpdHRpbmcgb24gdGhlIGZseSwgb3IgdXNpbmcgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uICsgcGFyYW1ldGVyc1xuICogICAtIE11bHRpcGxlIHNlcmllcyBpbiBvbmUgY2VsbFxuICogICAtIENhbmRsZXN0aWNrcywgY29uZmlkZW5jZSBpbnRlcnZhbHMsIGFuZCBkcm9wbGluZXMgZHJhd2luZ1xuICogICAtIEFiaWxpdHkgdG8gZGVmaW5lIGNoYXJ0LCBtYXJrZXIsIG9yIGZpdHRpbmcgb3B0aW9ucyAoc3VjaCBhcyBmaXQgZnVuY3Rpb24gb3IgbWFya2VyIGNvbG9yKVxuICogICAgIG9uIHRoZSBjb2x1bW4gbGV2ZWwsIHdpdGggdGhlIGFiaWxpdHkgdG8gb3ZlcnJpZGUgaXQgb24gYSBncmlkIGNlbGwgb3IgcG9pbnQgbGV2ZWxcbiAqICAgLSBDbGlja2luZyBhIHBvaW50IGluIGEgY2hhcnQgd2l0aGluIGEgZ3JpZCBtYWtlcyBpdCBhbiBvdXRsaWVyIC0+IGN1cnZlIGlzIHJlLWZpdHRlZCBvbiB0aGUgZmx5XG4gKiAgIC0gQWJpbGl0eSB0byBzcGVjaWZ5IGEgY2hhcnQgYXMgXCJyZWZlcmVuY2VcIiBzbyB0aGF0IGl0IGlzIHNob3duIG9uIGV2ZXJ5IG90aGVyIGNoYXJ0IGZvciBjb21wYXJpc29uXG4gKiAtIEFiaWxpdHkgdG8gb3ZlcmxheSBjdXJ2ZXMgZnJvbSBtdWx0aXBsZSBncmlkIGNlbGxzIChzcGVjaWFsIHZpZXdlcilcbiAqIC0gV29yayB3aXRoIHNlcmllcyBzdG9yZWQgaW4gbXVsdGlwbGUgZm9ybWF0cyAoYmluYXJ5IGZvciBwZXJmb3JtYW5jZSwganNvbiBmb3IgZmxleGliaWxpdHksIGV0YylcbiovXG5cbmV4cG9ydCBjb25zdCBGSVRfU0VNX1RZUEUgPSAnZml0JztcbmV4cG9ydCBjb25zdCBGSVRfQ0VMTF9UWVBFID0gJ2ZpdCc7XG5leHBvcnQgY29uc3QgVEFHX0ZJVCA9ICcuZml0JztcblxuZXhwb3J0IGNvbnN0IENPTkZJREVOQ0VfSU5URVJWQUxfU1RST0tFX0NPTE9SID0gJ3JnYmEoMjU1LDE5MSw2MywwLjQpJztcbmV4cG9ydCBjb25zdCBDT05GSURFTkNFX0lOVEVSVkFMX0ZJTExfQ09MT1IgPSAncmdiYSgyNTUsMjM4LDIwNCwwLjMpJztcblxuZXhwb3J0IGNvbnN0IENVUlZFX0NPTkZJREVOQ0VfSU5URVJWQUxfQk9VTkRTID0ge1xuICBUT1A6ICd0b3AnLFxuICBCT1RUT006ICdib3R0b20nLFxufTtcblxuZXhwb3J0IGNvbnN0IERST1BMSU5FUyA9IFsnSUM1MCddO1xuXG5leHBvcnQgdHlwZSBGaXRNYXJrZXJUeXBlID0gJ2FzdGVyaXNrJyB8ICdjaXJjbGUnIHwgJ2Nyb3NzIGJvcmRlcicgfCAnZGlhbW9uZCcgfCAnc3F1YXJlJyB8ICdzdGFyJyB8ICd0cmlhbmdsZSBib3R0b20nIHxcbiAgJ3RyaWFuZ2xlIGxlZnQnIHwgJ3RyaWFuZ2xlIHJpZ2h0JyB8ICd0cmlhbmdsZSB0b3AnO1xuXG5leHBvcnQgdHlwZSBGaXRMaW5lU3R5bGUgPSAnc29saWQnIHwgJ2RvdHRlZCcgfCAnZGFzaGVkJyB8ICdkYXNoZG90dGVkJztcblxuZXhwb3J0IHR5cGUgRml0RXJyb3JNb2RlbFR5cGUgPSAnY29uc3RhbnQnIHwgJ3Byb3BvcnRpb25hbCc7XG5cbi8qKiBBIHBvaW50IGluIHRoZSBmaXQgc2VyaWVzLiBPbmx5IHggYW5kIHkgYXJlIHJlcXVpcmVkLiBDYW4gb3ZlcnJpZGUgc29tZSBmaWVsZHMgZGVmaW5lZCBpbiBJRml0U2VyaWVzT3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdFBvaW50IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIG91dGxpZXI/OiBib29sZWFuOyAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIGFzICd4JyBhbmQgZ2V0cyBpZ25vcmVkIGZvciBjdXJ2ZSBmaXR0aW5nXG4gIGNvbG9yPzogc3RyaW5nOyAgICAgICAgICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciBjb2xvciBkZWZpbmVkIGluIElGaXRTZXJpZXNPcHRpb25zXG4gIG1hcmtlcj86IEZpdE1hcmtlclR5cGU7ICAvLyBvdmVycmlkZXMgdGhlIG1hcmtlciB0eXBlIGRlZmluZWQgaW4gSUZpdFNlcmllc09wdGlvbnNcbiAgc2l6ZT86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBtYXJrZXIgc2l6ZVxuICBzdGRldj86IG51bWJlcjsgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCByZW5kZXJzIGFuIGVycm9yIGJhciBjYW5kbGVzdGlja1xuICAvLyBtaW5ZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxuICAvLyBtYXhZPzogbnVtYmVyOyAgICAgICAgICAgLy8gd2hlbiBkZWZpbmVkLCB0aGUgbWFya2VyIHJlbmRlcnMgYXMgYSBjYW5kbGVzdGljayB3aXRoIHdoaXNrZXJzIFttaW5ZLCBtYXhZXVxufVxuXG4vKiogQSBzZXJpZXMgY29uc2lzdHMgb2YgcG9pbnRzLCBoYXMgYSBuYW1lLCBhbmQgb3B0aW9ucy5cbiAqIElmIGRlZmluZWQsIHNlcmllc09wdGlvbnMgYXJlIG1lcmdlZCB3aXRoIHtAbGluayBJRml0Q2hhcnREYXRhLnNlcmllc09wdGlvbnN9ICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXMgZXh0ZW5kcyBJRml0U2VyaWVzT3B0aW9ucyB7XG4gIHBvaW50czogSUZpdFBvaW50W107XG59XG5cbi8qKiBDaGFydCBsYWJlbHMgb3B0aW9ucy4gQ29udHJvbHMgdGhlIGNoYXJ0IGxhYmVscy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0TGFiZWxPcHRpb25zIHtcbiAgdmlzaWJsZTogYm9vbGVhbjsgICAgICAgICAvLyBpZiB0cnVlLCByZW5kZXJzIHRoZSBsYWJlbCBvbiB0aGUgcGxvdFxuICBjb2xvcjogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIGxhYmVsIGNvbG9yXG4gIG5hbWU6IHN0cmluZzsgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgbGFiZWwgbmFtZVxufVxuXG4vKiogQ2hhcnQgb3B0aW9ucy4gRm9yIGZpdHRlZCBjdXJ2ZXMsIHRoaXMgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgZ3JpZCBjb2x1bW4gdGFncyBhbmQgaXMgdXNlZCBieSB0aGUgcmVuZGVyZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRDaGFydE9wdGlvbnMge1xuICBtaW5YPzogbnVtYmVyO1xuICBtaW5ZPzogbnVtYmVyO1xuICBtYXhYPzogbnVtYmVyO1xuICBtYXhZPzogbnVtYmVyO1xuXG4gIHRpdGxlPzogc3RyaW5nOyAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHBsb3QgdGl0bGUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeEF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgeCBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cbiAgeUF4aXNOYW1lPzogc3RyaW5nOyAgICAgICAgLy8gZGVmaW5lcyB0aGUgWSBheGlzIG5hbWUuIElmIHRoZSBwbG90IHNpemUgaXMgZW5vdWdoLCB3aWxsIHJlbmRlciBpdC5cblxuICBsb2dYPzogYm9vbGVhbjsgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdGhlIHggZGF0YSBzaG91bGQgYmUgbG9nYXJpdGhtaWMgb3Igbm90XG4gIGxvZ1k/OiBib29sZWFuOyAgICAgICAgICAgIC8vIGRlZmluZXMgd2hldGhlciB0aGUgeSBkYXRhIHNob3VsZCBiZSBsb2dhcml0aG1pYyBvciBub3RcblxuICBzaG93U3RhdGlzdGljcz86IHN0cmluZ1tdOyAvLyBkZWZpbmVzIHRoZSBzdGF0aXN0aWNzIHRoYXQgd291bGQgYmUgc2hvd24gb24gdGhlIHBsb3RcbiAgbGFiZWxPcHRpb25zPzogSUZpdENoYXJ0TGFiZWxPcHRpb25zW107IC8vIGNvbnRyb2xzIHRoZSBwbG90IGxhYmVsc1xufVxuXG4vKiogRGF0YSBmb3IgdGhlIGZpdCBjaGFydC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUZpdENoYXJ0RGF0YSB7XG4gIGNoYXJ0T3B0aW9ucz86IElGaXRDaGFydE9wdGlvbnM7XG4gIHNlcmllc09wdGlvbnM/OiBJRml0U2VyaWVzT3B0aW9uczsgIC8vIERlZmF1bHQgc2VyaWVzIG9wdGlvbnMuIEluZGl2aWR1YWwgc2VyaWVzIGNhbiBvdmVycmlkZSBpdC5cbiAgc2VyaWVzPzogSUZpdFNlcmllc1tdO1xufVxuXG4vKiogQ2xhc3MgdGhhdCBpbXBsZW1lbnRzIHtAbGluayBJRml0Q2hhcnREYXRhfSBpbnRlcmZhY2UgKi9cbmV4cG9ydCBjbGFzcyBGaXRDaGFydERhdGEgaW1wbGVtZW50cyBJRml0Q2hhcnREYXRhIHtcbiAgY2hhcnRPcHRpb25zOiBJRml0Q2hhcnRPcHRpb25zID0ge307XG4gIHNlcmllc09wdGlvbnM6IElGaXRTZXJpZXNPcHRpb25zID0ge307ICAvLyBEZWZhdWx0IHNlcmllcyBvcHRpb25zLiBJbmRpdmlkdWFsIHNlcmllcyBjYW4gb3ZlcnJpZGUgaXQuXG4gIHNlcmllczogSUZpdFNlcmllc1tdID0gW107XG59XG5cbi8qKiBTZXJpZXMgb3B0aW9ucyBjYW4gYmUgZWl0aGVyIGFwcGxpZWQgZ2xvYmFsbHkgb24gYSBjb2x1bW4gbGV2ZWwsIG9yIHBhcnRpYWxseSBvdmVycmlkZGVuIGluIHBhcnRpY3VsYXIgc2VyaWVzICovXG5leHBvcnQgaW50ZXJmYWNlIElGaXRTZXJpZXNPcHRpb25zIHtcbiAgbmFtZT86IHN0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9scyB0aGUgc2VyaWVzIG5hbWVcbiAgZml0RnVuY3Rpb24/OiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbjsgLy8gY29udHJvbHMgdGhlIHNlcmllcyBmaXQgZnVuY3Rpb25cbiAgcGFyYW1ldGVycz86IG51bWJlcltdOyAgICAgICAgICAgICAgICAvLyBjb250cm9scyB0aGUgc2VyaWVzIHBhcmFtZXRlcnMsIGF1dG8tZml0dGluZyB3aGVuIG5vdCBkZWZpbmVkXG4gIHBhcmFtZXRlckJvdW5kcz86IEZpdFBhcmFtQm91bmRzW107ICAgLy8gZGVmaW5lcyB0aGUgYWNjZXB0YWJsZSByYW5nZSBvZiBlYWNoIHBhcmFtZXRlciwgd2hpY2ggaXMgdGFrZW4gaW50byBhY2NvdW50IGR1cmluZyB0aGUgZml0dGluZy4gU2VlIGFsc28gYHBhcmFtZXRlcnNgLlxuICBtYXJrZXJUeXBlPzogRml0TWFya2VyVHlwZTsgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBtYXJrZXIgdHlwZVxuICBsaW5lU3R5bGU/OiBGaXRMaW5lU3R5bGU7ICAgICAgICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBsaW5lIHN0eWxlXG4gIHBvaW50Q29sb3I/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIHBvaW50IGNvbG9yXG4gIGZpdExpbmVDb2xvcj86IHN0cmluZzsgICAgICAgICAgICAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGZpdCBsaW5lIGNvbG9yXG4gIGNvbmZpZGVuY2VJbnRlcnZhbENvbG9yPzogc3RyaW5nOyAgICAgLy8gb3ZlcnJpZGVzIHRoZSBzdGFuZGFyZGl6ZWQgc2VyaWVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwgY29sb3JcbiAgc2hvd0ZpdExpbmU/OiBib29sZWFuOyAgICAgICAgICAgICAgICAvLyBkZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgZml0IGxpbmUgb3Igbm90XG4gIHNob3dQb2ludHM/OiBzdHJpbmc7ICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgZGF0YSBkaXNwbGF5IG1vZGVcbiAgc2hvd0N1cnZlQ29uZmlkZW5jZUludGVydmFsPzogYm9vbGVhbjsgICAgLy8gZGVmaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9yIG5vdFxuICBlcnJvck1vZGVsPzogRml0RXJyb3JNb2RlbFR5cGU7ICAgICAgIC8vIGRlZmluZXMgdGhlIHNlcmllcyBlcnJvciBtb2RlbFxuICBjbGlja1RvVG9nZ2xlPzogYm9vbGVhbjsgICAgLy8gaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIHBvaW50IHRvZ2dsZXMgaXRzIG91dGxpZXIgc3RhdHVzIGFuZCBjYXVzZXMgY3VydmUgcmVmaXR0aW5nXG4gIGxhYmVscz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufTsgLy8gY29udHJvbGxlZCBieSBJRml0Q2hhcnREYXRhIGxhYmVsT3B0aW9ucywgc2hvd3MgbGFiZWxzXG4gIGRyb3BsaW5lcz86IHN0cmluZ1tdOyAgICAgICAgICAgICAgICAgLy8gZGVmaW5lcyB0aGUgZHJvcGxpbmVzIHRoYXQgd291bGQgYmUgc2hvd24gb24gdGhlIHBsb3QgKElDNTApXG59XG4vLyBUT0RPOiBzaG93IGxhYmVscyBpbiBwcm9wZXJ0eSBwYW5lbCBpZiBwcmVzZW50LCBjb2xvciBieSBkZWZhdWx0IGZyb20gc2VyaWVzXG5cblxuLyoqIFByb3BlcnRpZXMgdGhhdCBkZXNjcmliZSB7QGxpbmsgRml0U3RhdGlzdGljc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IHN0YXRpc3RpY3NQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICBQcm9wZXJ0eS5qcygnclNxdWFyZWQnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnYXVjJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2ludGVyY2VwdFknLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnaW50ZXJjZXB0WCcsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdzbG9wZScsIFRZUEUuRkxPQVQsIHt1c2VyRWRpdGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCd0b3AnLCBUWVBFLkZMT0FULCB7dXNlckVkaXRhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnYm90dG9tJywgVFlQRS5GTE9BVCwge3VzZXJFZGl0YWJsZTogZmFsc2V9KSxcbl07XG5cbi8qKiBQcm9wZXJ0aWVzIHRoYXQgZGVzY3JpYmUge0BsaW5rIElGaXRDaGFydE9wdGlvbnN9LiBVc2VmdWwgZm9yIGVkaXRpbmcsIGluaXRpYWxpemF0aW9uLCB0cmFuc2Zvcm1hdGlvbnMsIGV0Yy4gKi9cbmV4cG9ydCBjb25zdCBmaXRDaGFydERhdGFQcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdID0gW1xuICAvLyBTdHlsZSBhbmQgem9vbVxuICBQcm9wZXJ0eS5qcygnbWluWCcsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01pbmltdW0gdmFsdWUgb2YgdGhlIFggYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdtaW5ZJywgVFlQRS5GTE9BVCwge2Rlc2NyaXB0aW9uOiAnTWluaW11bSB2YWx1ZSBvZiB0aGUgWSBheGlzJywgbnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ21heFgnLCBUWVBFLkZMT0FULCB7ZGVzY3JpcHRpb246ICdNYXhpbXVtIHZhbHVlIG9mIHRoZSBYIGF4aXMnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygnbWF4WScsIFRZUEUuRkxPQVQsIHtkZXNjcmlwdGlvbjogJ01heGltdW0gdmFsdWUgb2YgdGhlIFkgYXhpcycsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCd0aXRsZScsIFRZUEUuU1RSSU5HLCB7bnVsbGFibGU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ3hBeGlzTmFtZScsIFRZUEUuU1RSSU5HLCB7ZGVzY3JpcHRpb246XG4gICAgJ0xhYmVsIHRvIHNob3cgb24gdGhlIFggYXhpcy4gSWYgbm90IHNwZWNpZmllZCwgY29ycmVzcG9uZGluZyBkYXRhIGNvbHVtbiBuYW1lIGlzIHVzZWQnLCBudWxsYWJsZTogdHJ1ZX0pLFxuICBQcm9wZXJ0eS5qcygneUF4aXNOYW1lJywgVFlQRS5TVFJJTkcsIHtkZXNjcmlwdGlvbjpcbiAgICAnTGFiZWwgdG8gc2hvdyBvbiB0aGUgWSBheGlzLiBJZiBub3Qgc3BlY2lmaWVkLCBjb3JyZXNwb25kaW5nIGRhdGEgY29sdW1uIG5hbWUgaXMgdXNlZCcsIG51bGxhYmxlOiB0cnVlfSksXG4gIFByb3BlcnR5LmpzKCdsb2dYJywgVFlQRS5CT09MLCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHRoZSBYIGF4aXMgc2hvdWxkIGJlIGxvZ2FyaXRobWljJywgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnbG9nWScsIFRZUEUuQk9PTCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciB0aGUgWSBheGlzIHNob3VsZCBiZSBsb2dhcml0aG1pYycsIGRlZmF1bHRWYWx1ZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ3Nob3dTdGF0aXN0aWNzJywgVFlQRS5TVFJJTkdfTElTVCwge2Rlc2NyaXB0aW9uOiAnV2hldGhlciBzcGVjaWZpYyBzdGF0aXN0aWNzIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgY2hvaWNlczogc3RhdGlzdGljc1Byb3BlcnRpZXMubWFwKChmcnApID0+IGZycC5uYW1lKSwgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG4vKiogUHJvcGVydGllcyB0aGF0IGRlc2NyaWJlIHtAbGluayBJRml0U2VyaWVzT3B0aW9uc30uIFVzZWZ1bCBmb3IgZWRpdGluZywgaW5pdGlhbGl6YXRpb24sIHRyYW5zZm9ybWF0aW9ucywgZXRjLiAqL1xuZXhwb3J0IGNvbnN0IGZpdFNlcmllc1Byb3BlcnRpZXM6IFByb3BlcnR5W10gPSBbXG4gIFByb3BlcnR5LmpzKCdmaXRGdW5jdGlvbicsIFRZUEUuU1RSSU5HLFxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBjaG9pY2VzOiBbJ3NpZ21vaWQnLCAnbGluZWFyJ10sIGRlZmF1bHRWYWx1ZTogJ3NpZ21vaWQnfSksXG4gIFByb3BlcnR5LmpzKCdwb2ludENvbG9yJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgbnVsbGFibGU6IHRydWUsIGlucHV0VHlwZTogJ0NvbG9yJ30pLFxuICBQcm9wZXJ0eS5qcygnZml0TGluZUNvbG9yJywgVFlQRS5TVFJJTkcsXG4gICAge2NhdGVnb3J5OiAnUmVuZGVyaW5nJywgbnVsbGFibGU6IHRydWUsIGlucHV0VHlwZTogJ0NvbG9yJ30pLFxuICBQcm9wZXJ0eS5qcygnZXJyb3JNb2RlbCcsIFRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdGaXR0aW5nJywgZGVmYXVsdFZhbHVlOiAnY29uc3RhbnQnLFxuICAgIGNob2ljZXM6IFsnY29uc3RhbnQnLCAncHJvcG9ydGlvbmFsJ10sIG51bGxhYmxlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnY2xpY2tUb1RvZ2dsZScsIFRZUEUuQk9PTCwge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOlxuICAgICdDbGljayBvbiBhIHBvaW50IHRvIG1hcmsgaXQgYXMgb3V0bGllciBhbmQgcmVmaXQnLCBudWxsYWJsZTogdHJ1ZSwgZGVmYXVsdFZhbHVlOiBmYWxzZX0pLFxuICBQcm9wZXJ0eS5qcygnc2hvd0ZpdExpbmUnLCBUWVBFLkJPT0wsIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZWZhdWx0VmFsdWU6IHRydWV9KSxcbiAgUHJvcGVydHkuanMoJ3Nob3dQb2ludHMnLCBUWVBFLlNUUklORywgLy8gcmV3cml0ZSBkZXNjcmlwdGlvblxuICAgIHtjYXRlZ29yeTogJ0ZpdHRpbmcnLCBkZXNjcmlwdGlvbjogJ1doZXRoZXIgcG9pbnRzL2NhbmRsZXN0aWNrcy9ub25lIHNob3VsZCBiZSByZW5kZXJlZCcsXG4gICAgICBkZWZhdWx0VmFsdWU6ICdwb2ludHMnLCBjaG9pY2VzOiBbJ3BvaW50cycsICdjYW5kbGVzdGlja3MnLCAnYm90aCddfSksXG4gIFByb3BlcnR5LmpzKCdzaG93Q3VydmVDb25maWRlbmNlSW50ZXJ2YWwnLCBUWVBFLkJPT0wsXG4gICAge2NhdGVnb3J5OiAnRml0dGluZycsIGRlc2NyaXB0aW9uOiAnV2hldGhlciBjb25maWRlbmNlIGludGVydmFscyBzaG91bGQgYmUgcmVuZGVyZWQnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgY2FwdGlvbjogJ0NvbmZpZGVuY2UgaW50ZXJ2YWwnfSksXG4gIFByb3BlcnR5LmpzKCdtYXJrZXJUeXBlJywgVFlQRS5TVFJJTkcsIHtjYXRlZ29yeTogJ1JlbmRlcmluZycsIGRlZmF1bHRWYWx1ZTogJ2NpcmNsZScsXG4gICAgY2hvaWNlczogWydhc3RlcmlzaycsICdjaXJjbGUnLCAnY3Jvc3MgYm9yZGVyJywgJ2RpYW1vbmQnLCAnc3F1YXJlJywgJ3N0YXInLFxuICAgICAgJ3RyaWFuZ2xlIGJvdHRvbScsICd0cmlhbmdsZSBsZWZ0JywgJ3RyaWFuZ2xlIHJpZ2h0JywgJ3RyaWFuZ2xlIHRvcCddLCBudWxsYWJsZTogZmFsc2V9KSxcbiAgUHJvcGVydHkuanMoJ2xpbmVTdHlsZScsIFRZUEUuU1RSSU5HLCB7Y2F0ZWdvcnk6ICdSZW5kZXJpbmcnLCBkZWZhdWx0VmFsdWU6ICdzb2xpZCcsXG4gICAgY2hvaWNlczogWydzb2xpZCcsICdkb3R0ZWQnLCAnZGFzaGVkJywgJ2Rhc2hkb3R0ZWQnXSwgbnVsbGFibGU6IGZhbHNlfSksXG4gIFByb3BlcnR5LmpzKCdkcm9wbGluZXMnLCBUWVBFLlNUUklOR19MSVNULCB7ZGVzY3JpcHRpb246ICdXaGV0aGVyIHNwZWNpZmljIGRyb3BsaW5lcyBzaG91bGQgYmUgcmVuZGVyZWQnLFxuICAgIGNob2ljZXM6IERST1BMSU5FUywgaW5wdXRUeXBlOiAnTXVsdGlDaG9pY2UnfSksXG5dO1xuXG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX1NJR01PSUQgPSAnc2lnbW9pZCc7XG5leHBvcnQgY29uc3QgRklUX0ZVTkNUSU9OX0xJTkVBUiA9ICdsaW5lYXInO1xuXG5leHBvcnQgY29uc3QgRklUX1NUQVRTX1JTUVVBUkVEID0gJ3JTcXVhcmVkJztcbmV4cG9ydCBjb25zdCBGSVRfU1RBVFNfQVVDID0gJ2F1Yyc7XG5cblxuLy8gVE9ETz86IGFkZCBtZXRob2QgdG8gcmV0dXJuIHBhcmFtZXRlcnMgLSBnZXQgcGFyYW1ldGVycyBmcm9tIGZpdCBmdW5jdGlvblxuLyoqIENsYXNzIGZvciB0aGUgZml0IGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpdEZ1bmN0aW9uIHtcbiAgYWJzdHJhY3QgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICBhYnN0cmFjdCBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW107XG4gIGFic3RyYWN0IHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyO1xuICBhYnN0cmFjdCBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXTtcbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgbGluZWFyIGZ1bmN0aW9uICovXG5leHBvcnQgY2xhc3MgTGluZWFyRnVuY3Rpb24gZXh0ZW5kcyBGaXRGdW5jdGlvbiB7XG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZJVF9GVU5DVElPTl9MSU5FQVI7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1Nsb3BlJywgJ0ludGVyY2VwdCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBsaW5lYXIocGFyYW1zLCB4KTtcbiAgfVxuXG4gIGdldEluaXRpYWxQYXJhbWV0ZXJzKHg6IG51bWJlcltdLCB5OiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgICBsZXQgbWluSW5kZXggPSAwO1xuICAgIGxldCBtYXhJbmRleCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoeFtpXSA8IHhbbWluSW5kZXhdKVxuICAgICAgICBtaW5JbmRleCA9IGk7XG4gICAgICBpZiAoeFtpXSA+IHhbbWF4SW5kZXhdKVxuICAgICAgICBtYXhJbmRleCA9IGk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFYID0geFttYXhJbmRleF0gLSB4W21pbkluZGV4XTtcbiAgICBjb25zdCBkZWx0YVkgPSB5W21heEluZGV4XSAtIHlbbWluSW5kZXhdO1xuICAgIGNvbnN0IEEgPSBkZWx0YVkgLyBkZWx0YVg7XG4gICAgY29uc3QgQiA9IHlbbWF4SW5kZXhdIC0gQSAqIHhbbWF4SW5kZXhdO1xuICAgIHJldHVybiBbQSwgQl07XG4gIH1cbn1cblxuLyoqIENsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgc2lnbW9pZCBmdW5jdGlvbiAqL1xuZXhwb3J0IGNsYXNzIFNpZ21vaWRGdW5jdGlvbiBleHRlbmRzIEZpdEZ1bmN0aW9uIHtcbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRklUX0ZVTkNUSU9OX1NJR01PSUQ7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ1RvcCcsICdCb3R0b20nLCAnU2xvcGUnLCAnSUM1MCddO1xuICB9XG5cbiAgeShwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaWdtb2lkKHBhcmFtcywgeCk7XG4gIH1cblxuICBnZXRJbml0aWFsUGFyYW1ldGVycyh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgZGF0YUJvdW5kcyA9IERHLlJlY3QuZnJvbVhZQXJyYXlzKHgsIHkpO1xuICAgIGNvbnN0IG1lZFkgPSAoZGF0YUJvdW5kcy5ib3R0b20gLSBkYXRhQm91bmRzLnRvcCkgLyAyICsgZGF0YUJvdW5kcy50b3A7XG4gICAgbGV0IG1heFlJbnRlcnZhbCA9IGRhdGFCb3VuZHMuYm90dG9tIC0gZGF0YUJvdW5kcy50b3A7XG4gICAgbGV0IG5lYXJlc3RYSW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudEludGVydmFsID0gTWF0aC5hYnMoeVtpXSAtIG1lZFkpO1xuICAgICAgaWYgKGN1cnJlbnRJbnRlcnZhbCA8IG1heFlJbnRlcnZhbCkge1xuICAgICAgICBtYXhZSW50ZXJ2YWwgPSBjdXJyZW50SW50ZXJ2YWw7XG4gICAgICAgIG5lYXJlc3RYSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB4QXRNZWRZID0geFtuZWFyZXN0WEluZGV4XTtcbiAgICBjb25zdCBzbG9wZSA9IHlbMF0gPiB5W3kubGVuZ3RoIC0gMV0gPyAxIDogLTE7XG5cbiAgICAvLyBwYXJhbXMgYXJlOiBbbWF4LCB0YW4sIElDNTAsIG1pbl1cbiAgICByZXR1cm4gW2RhdGFCb3VuZHMuYm90dG9tLCBzbG9wZSwgeEF0TWVkWSwgZGF0YUJvdW5kcy50b3BdO1xuICB9XG59XG5cbi8qKiBDbGFzcyB0aGF0IGltcGxlbWVudHMgdXNlciBKUyBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBKc0Z1bmN0aW9uIGV4dGVuZHMgRml0RnVuY3Rpb24ge1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhcmFtZXRlck5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHlGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgZ2V0SW5pdFBhcmFtc0Z1bmM6ICh4OiBudW1iZXJbXSwgeTogbnVtYmVyW10pID0+IG51bWJlcltdLCBwYXJhbWV0ZXJOYW1lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fcGFyYW1ldGVyTmFtZXMgPSBwYXJhbWV0ZXJOYW1lcztcblxuICAgIHRoaXMueSA9IHlGdW5jO1xuICAgIHRoaXMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMgPSBnZXRJbml0UGFyYW1zRnVuYztcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVyTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbWV0ZXJOYW1lcztcbiAgfVxuXG4gIHkocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgZ2V0SW5pdGlhbFBhcmFtZXRlcnMoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cblxuLy8gT2JqZWN0IHdpdGggZml0IGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGZpdEZ1bmN0aW9uczoge1tpbmRleDogc3RyaW5nXTogRml0RnVuY3Rpb259ID0ge1xuICAnbGluZWFyJzogbmV3IExpbmVhckZ1bmN0aW9uKCksXG4gICdzaWdtb2lkJzogbmV3IFNpZ21vaWRGdW5jdGlvbigpLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBJRml0T3B0aW9ucyB7XG4gIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlO1xuICBjb25maWRlbmNlTGV2ZWw6IG51bWJlcjtcbiAgc3RhdGlzdGljczogYm9vbGVhbjtcbn1cblxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6IE9iamVjdGl2ZUZ1bmN0aW9uIHtcbiAgbGV0IG9mOiBPYmplY3RpdmVGdW5jdGlvbjtcblxuICBzd2l0Y2ggKGVycm9yTW9kZWwpIHtcbiAgY2FzZSBGaXRFcnJvck1vZGVsLkNPTlNUQU5UOlxuICAgIG9mID0gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQ7XG4gICAgYnJlYWs7XG4gIGNhc2UgRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUw6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxQcm9wb3J0aW9uYWw7XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgb2YgPSBvYmplY3RpdmVOb3JtYWxDb25zdGFudDtcbiAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBvZjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT3B0aW1pemFibGUoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlcixcbiAgb2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBmaXhlZDogbnVtYmVyW10pOiBPcHRpbWl6YWJsZSB7XG4gIHJldHVybiB7XG4gICAgZ2V0VmFsdWU6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSkgPT4ge1xuICAgICAgcmV0dXJuIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtZXRlcnMpLnZhbHVlO1xuICAgIH0sXG4gICAgZ2V0R3JhZGllbnQ6IChwYXJhbWV0ZXJzOiBudW1iZXJbXSwgZ3JhZGllbnQ6IG51bWJlcltdKSA9PiB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspXG4gICAgICAgIGdyYWRpZW50W2ldID0gZml4ZWQuaW5jbHVkZXMoaSkgPyAwIDogZ2V0T2JqZWN0aXZlRGVyaXZhdGl2ZShvZiwgY3VydmVGdW5jdGlvbiwgZGF0YSwgcGFyYW1ldGVycywgaSk7XG5cbiAgICAgIHJldHVybiBncmFkaWVudDtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXNGaXRGdW5jOiBzdHJpbmcgfCBJRml0RnVuY3Rpb25EZXNjcmlwdGlvbik6IEZpdEZ1bmN0aW9uIHtcbiAgaWYgKHR5cGVvZiBzZXJpZXNGaXRGdW5jID09PSAnc3RyaW5nJylcbiAgICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmNdO1xuICBlbHNlIGlmICghZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV0pIHtcbiAgICBjb25zdCBuYW1lID0gc2VyaWVzRml0RnVuYy5uYW1lO1xuICAgIGNvbnN0IHBhcmFtTmFtZXMgPSBzZXJpZXNGaXRGdW5jLnBhcmFtZXRlck5hbWVzO1xuICAgIGNvbnN0IGZpdEZ1bmN0aW9uUGFydHMgPSBzZXJpZXNGaXRGdW5jLmZ1bmN0aW9uLnNwbGl0KCc9PicpLm1hcCgoZWxlbSkgPT4gZWxlbS50cmltKCkpO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNQYXJ0cyA9IHNlcmllc0ZpdEZ1bmMuZ2V0SW5pdGlhbFBhcmFtZXRlcnMuc3BsaXQoJz0+JykubWFwKChlbGVtKSA9PiBlbGVtLnRyaW0oKSk7XG4gICAgY29uc3QgZml0RnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24oZml0RnVuY3Rpb25QYXJ0c1swXS5zbGljZSgxLCBmaXRGdW5jdGlvblBhcnRzWzBdLmxlbmd0aCAtIDEpLFxuICAgICAgYCR7Zml0RnVuY3Rpb25QYXJ0c1sxXS5pbmNsdWRlcygnOycpID8gJycgOiAncmV0dXJuICd9JHtmaXRGdW5jdGlvblBhcnRzWzFdfWApO1xuICAgIGNvbnN0IGdldEluaXRQYXJhbXNGdW5jID0gbmV3IEZ1bmN0aW9uKGdldEluaXRQYXJhbXNQYXJ0c1swXS5zbGljZSgxLCBnZXRJbml0UGFyYW1zUGFydHNbMF0ubGVuZ3RoIC0gMSksXG4gICAgICBgcmV0dXJuICR7Z2V0SW5pdFBhcmFtc1BhcnRzWzFdfWApO1xuICAgIGNvbnN0IGZpdEZ1bmMgPSBuZXcgSnNGdW5jdGlvbihuYW1lLCAoZml0RnVuY3Rpb24gYXMgKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyKSxcbiAgICAgIChnZXRJbml0UGFyYW1zRnVuYyBhcyAoeDogbnVtYmVyW10sIHk6IG51bWJlcltdKSA9PiBudW1iZXJbXSksIHBhcmFtTmFtZXMpO1xuICAgIGZpdEZ1bmN0aW9uc1tuYW1lXSA9IGZpdEZ1bmM7XG4gIH1cblxuICByZXR1cm4gZml0RnVuY3Rpb25zW3Nlcmllc0ZpdEZ1bmMubmFtZV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXREYXRhKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBmaXRGdW5jdGlvbjogRml0RnVuY3Rpb24sIGVycm9yTW9kZWw6IEZpdEVycm9yTW9kZWxUeXBlLFxuICBwYXJhbWV0ZXJCb3VuZHM/OiBGaXRQYXJhbUJvdW5kc1tdKTogRml0Q3VydmUge1xuICBjb25zdCBjdXJ2ZUZ1bmN0aW9uID0gZml0RnVuY3Rpb24ueTtcbiAgY29uc3QgcGFyYW1WYWx1ZXMgPSBmaXRGdW5jdGlvbi5nZXRJbml0aWFsUGFyYW1ldGVycyhkYXRhLngsIGRhdGEueSk7XG5cbiAgY29uc3Qgb2YgPSBjcmVhdGVPYmplY3RpdmVGdW5jdGlvbihlcnJvck1vZGVsKTtcbiAgY29uc3QgZml4ZWQ6IG51bWJlcltdID0gW107XG4gIGxldCBvdmVyTGltaXRzID0gdHJ1ZTtcblxuICB3aGlsZSAob3ZlckxpbWl0cykge1xuICAgIGNvbnN0IG9wdGltaXphYmxlID0gY3JlYXRlT3B0aW1pemFibGUoZGF0YSwgY3VydmVGdW5jdGlvbiwgb2YsIGZpeGVkKTtcbiAgICBsaW1pdGVkTWVtb3J5QkZHUyhvcHRpbWl6YWJsZSwgcGFyYW1WYWx1ZXMpO1xuICAgIGxpbWl0ZWRNZW1vcnlCRkdTKG9wdGltaXphYmxlLCBwYXJhbVZhbHVlcyk7XG5cbiAgICBvdmVyTGltaXRzID0gZmFsc2U7XG4gICAgaWYgKCFwYXJhbWV0ZXJCb3VuZHMpXG4gICAgICBicmVhaztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVyQm91bmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFyYW1ldGVyQm91bmRzW2ldPy5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJhbVZhbHVlc1tpXSA+IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghKSB7XG4gICAgICAgIG92ZXJMaW1pdHMgPSB0cnVlO1xuICAgICAgICBmaXhlZC5wdXNoKGkpO1xuICAgICAgICBwYXJhbVZhbHVlc1tpXSA9IHBhcmFtZXRlckJvdW5kc1tpXS5tYXghO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbWV0ZXJCb3VuZHNbaV0/Lm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcmFtVmFsdWVzW2ldIDwgcGFyYW1ldGVyQm91bmRzW2ldLm1pbiEpIHtcbiAgICAgICAgb3ZlckxpbWl0cyA9IHRydWU7XG4gICAgICAgIGZpeGVkLnB1c2goaSk7XG4gICAgICAgIHBhcmFtVmFsdWVzW2ldID0gcGFyYW1ldGVyQm91bmRzW2ldLm1pbiE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpdHRlZEN1cnZlID0gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbiwgcGFyYW1WYWx1ZXMpO1xuXG4gIHJldHVybiB7XG4gICAgZml0dGVkQ3VydmU6IGZpdHRlZEN1cnZlLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtVmFsdWVzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rml0dGVkQ3VydmUoY3VydmVGdW5jdGlvbjogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLCBwYXJhbVZhbHVlczogbnVtYmVyW10pOlxuICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiAoeDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGN1cnZlRnVuY3Rpb24ocGFyYW1WYWx1ZXMsIHgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlciwgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBlcnJvck1vZGVsOiBGaXRFcnJvck1vZGVsVHlwZSk6XG4gIEZpdENvbmZpZGVuY2VJbnRlcnZhbHMge1xuICBjb25zdCBvZiA9IGNyZWF0ZU9iamVjdGl2ZUZ1bmN0aW9uKGVycm9yTW9kZWwpO1xuXG4gIGNvbnN0IGVycm9yID0gZXJyb3JNb2RlbCA9PT0gRml0RXJyb3JNb2RlbC5QUk9QT1JUSU9OQUwgP1xuICAgIG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtVmFsdWVzKS5tdWx0IDpcbiAgICBvZihjdXJ2ZUZ1bmN0aW9uLCBkYXRhLCBwYXJhbVZhbHVlcykuY29uc3Q7XG5cbiAgY29uc3QgcXVhbnRpbGUgPSBqU3RhdC5ub3JtYWwuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwvMiwgMCwgMSk7XG5cbiAgY29uc3QgdG9wID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQpXG4gICAgICByZXR1cm4gdmFsdWUgKyBxdWFudGlsZSAqIGVycm9yO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZSArIHF1YW50aWxlICogTWF0aC5hYnModmFsdWUpICogZXJyb3I7XG4gIH07XG5cbiAgY29uc3QgYm90dG9tID0gKHg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gY3VydmVGdW5jdGlvbihwYXJhbVZhbHVlcywgeCk7XG4gICAgaWYgKGVycm9yTW9kZWwgPT09IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQpXG4gICAgICByZXR1cm4gdmFsdWUgLSBxdWFudGlsZSAqIGVycm9yO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiB2YWx1ZSAtIHF1YW50aWxlICogTWF0aC5hYnModmFsdWUpICogZXJyb3I7XG4gIH07XG5cbiAgcmV0dXJuIHtjb25maWRlbmNlVG9wOiB0b3AsIGNvbmZpZGVuY2VCb3R0b206IGJvdHRvbX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aXN0aWNzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbVZhbHVlczogbnVtYmVyW10sXG4gIGN1cnZlRnVuY3Rpb246IChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpID0+IG51bWJlciwgc3RhdGlzdGljczogYm9vbGVhbiA9IHRydWUpOiBGaXRTdGF0aXN0aWNzIHtcbiAgY29uc3QgZml0dGVkQ3VydmUgPSBnZXRGaXR0ZWRDdXJ2ZShjdXJ2ZUZ1bmN0aW9uLCBwYXJhbVZhbHVlcyk7XG5cbiAgcmV0dXJuIHtcbiAgICByU3F1YXJlZDogc3RhdGlzdGljcyA/IGdldERldENvZWZmKGZpdHRlZEN1cnZlLCBkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICBhdWM6IHN0YXRpc3RpY3MgPyBnZXRBdWMoZml0dGVkQ3VydmUsIGRhdGEpIDogdW5kZWZpbmVkLFxuICAgIGludGVyY2VwdFg6IHBhcmFtVmFsdWVzWzJdLFxuICAgIGludGVyY2VwdFk6IGZpdHRlZEN1cnZlKHBhcmFtVmFsdWVzWzJdKSxcbiAgICBzbG9wZTogcGFyYW1WYWx1ZXNbMV0sXG4gICAgdG9wOiBwYXJhbVZhbHVlc1swXSxcbiAgICBib3R0b206IHBhcmFtVmFsdWVzWzNdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52ZXJ0ZWRGdW5jdGlvbnMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0sIHBhcmFtVmFsdWVzOiBudW1iZXJbXSxcbiAgY29uZmlkZW5jZUxldmVsOiBudW1iZXIgPSAwLjA1LCBzdGF0aXN0aWNzOiBib29sZWFuID0gdHJ1ZSk6IEZpdEludmVydGVkRnVuY3Rpb25zIHwgbnVsbCB7XG4gIGNvbnN0IHN0dWRlbnRRID0galN0YXQuc3R1ZGVudHQuaW52KDEgLSBjb25maWRlbmNlTGV2ZWwgLyAyLCBkYXRhLngubGVuZ3RoIC0gcGFyYW1WYWx1ZXMubGVuZ3RoKTtcblxuICBsZXQgaW52OiAoeTogbnVtYmVyKSA9PiBudW1iZXIgPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIGxldCBpbnZUb3A6ICh5OiBudW1iZXIpID0+IG51bWJlciA9ICh5OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgbGV0IGludkJvdHRvbTogKHk6IG51bWJlcikgPT4gbnVtYmVyID0gKHk6IG51bWJlcikgPT4ge1xuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIGlmIChzdGF0aXN0aWNzKSB7XG4gICAgaW52ID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgLy9zaG91bGQgY2hlY2sgaWYgbW9yZSB0aGFuIGJvdHRvbSBhbmQgbGVzcyB0aGFuIHRvcFxuICAgICAgcmV0dXJuIHBhcmFtVmFsdWVzWzJdIC8gTWF0aC5wb3coKHBhcmFtVmFsdWVzWzBdIC0geSkgLyAoeSAtIHBhcmFtVmFsdWVzWzNdKSwgMSAvIHBhcmFtVmFsdWVzWzFdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXJyb3IgPSBnZXRJbnZFcnJvcihpbnYsIGRhdGEpO1xuXG4gICAgaW52VG9wID0gKHk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnYoeSk7XG4gICAgICByZXR1cm4gdmFsdWUgKyBzdHVkZW50USAqIGVycm9yIC8gTWF0aC5zcXJ0KGRhdGEueS5sZW5ndGgpO1xuICAgIH07XG5cbiAgICBpbnZCb3R0b20gPSAoeTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGludih5KTtcbiAgICAgIHJldHVybiB2YWx1ZSAtIHN0dWRlbnRRICogZXJyb3IgLyBNYXRoLnNxcnQoZGF0YS55Lmxlbmd0aCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnZlcnRlZDogaW52LFxuICAgICAgaW52ZXJ0ZWRUb3A6IGludlRvcCxcbiAgICAgIGludmVydGVkQm90dG9tOiBpbnZCb3R0b20sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbW9pZChwYXJhbXM6IG51bWJlcltdLCB4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBBID0gcGFyYW1zWzBdO1xuICBjb25zdCBCID0gcGFyYW1zWzFdO1xuICBjb25zdCBDID0gcGFyYW1zWzJdO1xuICBjb25zdCBEID0gcGFyYW1zWzNdO1xuICByZXR1cm4gKEQgKyAoQSAtIEQpIC8gKDEgKyBNYXRoLnBvdygxMCwgKHggLSBDKSAqIEIpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXIocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSB7XG4gIGNvbnN0IEEgPSBwYXJhbXNbMF07XG4gIGNvbnN0IEIgPSBwYXJhbXNbMV07XG4gIHJldHVybiBBICogeCArIEI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdWMoZml0dGVkQ3VydmU6ICh4OiBudW1iZXIpID0+IG51bWJlciwgZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiBudW1iZXIge1xuICBsZXQgYXVjID0gMDtcblxuICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5kYXRhLngpO1xuICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5kYXRhLngpO1xuICBjb25zdCBpbnRlZ3JhdGlvblN0ZXAgPSAobWF4IC0gbWluKSAvIDEwMDA7XG5cbiAgZm9yIChsZXQgeCA9IG1pbjsgeCA8IG1heDsgeCs9IGludGVncmF0aW9uU3RlcClcbiAgICBhdWMgKz0gaW50ZWdyYXRpb25TdGVwICogZml0dGVkQ3VydmUoeCk7XG5cbiAgcmV0dXJuIGF1Yztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERldENvZWZmKGZpdHRlZEN1cnZlOiAoeDogbnVtYmVyKSA9PiBudW1iZXIsIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KTogbnVtYmVyIHtcbiAgbGV0IHNzUmVzID0gMDtcbiAgbGV0IHNzVG90ID0gMDtcblxuICBjb25zdCB5TWVhbiA9IGpTdGF0Lm1lYW4oZGF0YS55KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgIHNzUmVzICs9IE1hdGgucG93KGRhdGEueVtpXSAtIGZpdHRlZEN1cnZlKGRhdGEueFtpXSksIDIpO1xuICAgIHNzVG90ICs9IE1hdGgucG93KGRhdGEueVtpXSAtIHlNZWFuLCAyKTtcbiAgfVxuXG4gIHJldHVybiAxIC0gc3NSZXMgLyBzc1RvdDtcbn1cblxuZnVuY3Rpb24gZ2V0SW52RXJyb3IodGFyZ2V0RnVuYzogKHk6IG51bWJlcikgPT4gbnVtYmVyLCBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSk6IG51bWJlciB7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcblxuICBjb25zdCByZXNpZHVlc1NxdWFyZXMgPSBuZXcgRmxvYXQzMkFycmF5KGRhdGEueS5sZW5ndGgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG9icyA9IGRhdGEueFtpXTtcbiAgICBjb25zdCBwcmVkID0gdGFyZ2V0RnVuYyhkYXRhLnlbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICByZXR1cm4gc2lnbWE7XG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdGl2ZURlcml2YXRpdmUob2Y6IE9iamVjdGl2ZUZ1bmN0aW9uLCBjdXJ2ZUZ1bmN0aW9uOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdLCBzZWxlY3RlZFBhcmFtOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBzdGVwID0gKHBhcmFtc1tzZWxlY3RlZFBhcmFtXSAqIDAuMDAwMSkgPT09IDAgPyAwLjAwMSA6IChwYXJhbXNbc2VsZWN0ZWRQYXJhbV0gKiAwLjAwMDEpO1xuICBjb25zdCBwYXJhbXNUb3A6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHBhcmFtc0JvdHRvbTogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA9PT0gc2VsZWN0ZWRQYXJhbSkge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldICsgc3RlcCk7XG4gICAgICBwYXJhbXNCb3R0b20ucHVzaChwYXJhbXNbaV0gLSBzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zVG9wLnB1c2gocGFyYW1zW2ldKTtcbiAgICAgIHBhcmFtc0JvdHRvbS5wdXNoKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGRydlRvcCA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc1RvcCkudmFsdWU7XG4gIGNvbnN0IGRydkJvdHRvbSA9IG9mKGN1cnZlRnVuY3Rpb24sIGRhdGEsIHBhcmFtc0JvdHRvbSkudmFsdWU7XG5cbiAgcmV0dXJuIChkcnZUb3AgLSBkcnZCb3R0b20pIC8gKDIgKiBzdGVwKTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0aXZlTm9ybWFsQ29uc3RhbnQodGFyZ2V0RnVuYzogKHBhcmFtczogbnVtYmVyW10sIHg6IG51bWJlcikgPT4gbnVtYmVyLFxuICBkYXRhOiB7eTogbnVtYmVyW10sIHg6IG51bWJlcltdfSwgcGFyYW1zOiBudW1iZXJbXSk6IExpa2VsaWhvb2Qge1xuICAvL2Fzc3VyZSBvYnNlcnZlZCBhbmQgYXJncyBzYW1lIGxlbmd0aFxuICBjb25zdCBwaSA9IE1hdGguUEk7XG4gIGxldCBzaWdtYSA9IDA7XG4gIGxldCBzaWdtYVNxID0gMDtcbiAgbGV0IGxpa2VsaWhvb2QgPSAwO1xuXG4gIGNvbnN0IHJlc2lkdWVzU3F1YXJlcyA9IG5ldyBGbG9hdDMyQXJyYXkoZGF0YS54Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgb2JzID0gZGF0YS55W2ldO1xuICAgIGNvbnN0IHByZWQgPSB0YXJnZXRGdW5jKHBhcmFtcywgZGF0YS54W2ldKTtcbiAgICByZXNpZHVlc1NxdWFyZXNbaV0gPSBNYXRoLnBvdyhvYnMgLSBwcmVkLCAyKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDsgaSsrKVxuICAgIHNpZ21hU3EgKz0gcmVzaWR1ZXNTcXVhcmVzW2ldO1xuXG4gIHNpZ21hU3EgLz0gcmVzaWR1ZXNTcXVhcmVzLmxlbmd0aDtcbiAgc2lnbWEgPSBNYXRoLnNxcnQoc2lnbWFTcSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgbGlrZWxpaG9vZCArPSByZXNpZHVlc1NxdWFyZXNbaV0gLyBzaWdtYVNxICsgTWF0aC5sb2coMiAqIHBpICogc2lnbWFTcSk7XG5cbiAgcmV0dXJuIHt2YWx1ZTogLWxpa2VsaWhvb2QsIGNvbnN0OiBzaWdtYSwgbXVsdDogMH07XG59XG5cbmZ1bmN0aW9uIG9iamVjdGl2ZU5vcm1hbFByb3BvcnRpb25hbCh0YXJnZXRGdW5jOiAocGFyYW1zOiBudW1iZXJbXSwgeDogbnVtYmVyKSA9PiBudW1iZXIsXG4gIGRhdGE6IHt5OiBudW1iZXJbXSwgeDogbnVtYmVyW119LCBwYXJhbXM6IG51bWJlcltdKTogTGlrZWxpaG9vZCB7XG4gIC8vYXNzdXJlIG9ic2VydmVkIGFuZCBhcmdzIHNhbWUgbGVuZ3RoXG4gIGNvbnN0IHBpID0gTWF0aC5QSTtcbiAgbGV0IHNpZ21hID0gMDtcbiAgbGV0IHNpZ21hU3EgPSAwO1xuICBsZXQgbGlrZWxpaG9vZCA9IDA7XG5cbiAgY29uc3QgcmVzaWR1ZXNTcXVhcmVzID0gbmV3IEZsb2F0MzJBcnJheShkYXRhLngubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBvYnMgPSBkYXRhLnlbaV07XG4gICAgY29uc3QgcHJlZCA9IHRhcmdldEZ1bmMocGFyYW1zLCBkYXRhLnhbaV0pO1xuICAgIHJlc2lkdWVzU3F1YXJlc1tpXSA9IE1hdGgucG93KG9icyAtIHByZWQsIDIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNpZHVlc1NxdWFyZXMubGVuZ3RoOyBpKyspXG4gICAgc2lnbWFTcSArPSByZXNpZHVlc1NxdWFyZXNbaV07XG5cbiAgc2lnbWFTcSAvPSByZXNpZHVlc1NxdWFyZXMubGVuZ3RoO1xuICBzaWdtYSA9IE1hdGguc3FydChzaWdtYVNxKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc2lkdWVzU3F1YXJlcy5sZW5ndGg7IGkrKylcbiAgICBsaWtlbGlob29kICs9IHJlc2lkdWVzU3F1YXJlc1tpXSAvIHNpZ21hU3EgKyBNYXRoLmxvZygyICogcGkgKiBzaWdtYVNxKTtcblxuICByZXR1cm4ge3ZhbHVlOiAtbGlrZWxpaG9vZCwgY29uc3Q6IDAsIG11bHQ6IHNpZ21hfTtcbn1cbiJdfQ==
|
package/src/fit/fit-data.d.ts
CHANGED
|
@@ -26,5 +26,5 @@ export declare function fitSeries(series: IFitSeries, fitFunc: FitFunction, logO
|
|
|
26
26
|
/** Returns series confidence interval functions */
|
|
27
27
|
export declare function getSeriesConfidenceInterval(series: IFitSeries, fitFunc: FitFunction, userParamsFlag: boolean, logOptions?: LogOptions): FitConfidenceIntervals;
|
|
28
28
|
/** Returns series statistics */
|
|
29
|
-
export declare function getSeriesStatistics(series: IFitSeries, fitFunc: FitFunction): FitStatistics;
|
|
29
|
+
export declare function getSeriesStatistics(series: IFitSeries, fitFunc: FitFunction, logOptions?: LogOptions): FitStatistics;
|
|
30
30
|
//# sourceMappingURL=fit-data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAOX,MAAM,aAAa,CAAC;AAErB,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,aAAa,CAExE;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,aAAa,CAEtE;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AAgED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"fit-data.d.ts","sourceRoot":"","sources":["fit-data.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAKL,WAAW,EAEX,aAAa,EACb,sBAAsB,EACtB,QAAQ,EAER,SAAS,EACT,aAAa,EACb,UAAU,EAOX,MAAM,aAAa,CAAC;AAErB,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B,CAAC;AAcF,mDAAmD;AACnD,wBAAgB,sBAAsB,IAAI,aAAa,CAKtD;AAED,wEAAwE;AACxE,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,aAAa,CAExE;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,aAAa,CAEtE;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG;IAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAC,CAQjF;AAgED,4DAA4D;AAC5D,wBAAgB,cAAc,CAAC,SAAS,EAAE,aAAa,GAAG,EAAE,CAAC,IAAI,CAehE;AAED,kCAAkC;AAClC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,CAEpE;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAExF;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAOrG;AAED,mDAAmD;AACnD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAClF,cAAc,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAS1E;AAED,gCAAgC;AAChC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,aAAa,CAMpH"}
|
package/src/fit/fit-data.js
CHANGED
|
@@ -106,6 +106,8 @@ export function getChartBounds(chartData) {
|
|
|
106
106
|
let bounds = DG.Rect.fromXYArrays(xs, ys);
|
|
107
107
|
for (let i = 1; i < chartData.series.length; i++) {
|
|
108
108
|
const { xs, ys } = getPointsArrays(chartData.series[i].points);
|
|
109
|
+
if (xs.some((x) => !x) || ys.some((y) => !y))
|
|
110
|
+
continue;
|
|
109
111
|
bounds = bounds.union(DG.Rect.fromXYArrays(xs, ys));
|
|
110
112
|
}
|
|
111
113
|
return o ? changeBounds(bounds, o) : bounds;
|
|
@@ -140,11 +142,11 @@ export function getSeriesConfidenceInterval(series, fitFunc, userParamsFlag, log
|
|
|
140
142
|
return getCurveConfidenceIntervals(data, series.parameters, fitFunc.y, 0.05, (_a = series.errorModel) !== null && _a !== void 0 ? _a : FitErrorModel.CONSTANT);
|
|
141
143
|
}
|
|
142
144
|
/** Returns series statistics */
|
|
143
|
-
export function getSeriesStatistics(series, fitFunc) {
|
|
144
|
-
const data = { x: series.points.filter((p) => !p.outlier).map((p) => p.x),
|
|
145
|
-
y: series.points.filter((p) => !p.outlier).map((p) => p.y) };
|
|
145
|
+
export function getSeriesStatistics(series, fitFunc, logOptions) {
|
|
146
|
+
const data = { x: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logX) ? Math.log10(p.x) : p.x),
|
|
147
|
+
y: series.points.filter((p) => !p.outlier).map((p) => (logOptions === null || logOptions === void 0 ? void 0 : logOptions.logY) ? Math.log10(p.y) : p.y) };
|
|
146
148
|
if (!series.parameters)
|
|
147
149
|
series.parameters = fitSeries(series, fitFunc).parameters;
|
|
148
150
|
return getStatistics(data, series.parameters, fitFunc.y, true);
|
|
149
151
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBSVIsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsRUFBZ0I7OztJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLGFBQUMsRUFBRSxDQUFDLElBQUksRUFBQyxPQUFPLHdDQUFQLE9BQU8sSUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWlCOzs7SUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxhQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUMsT0FBTyx3Q0FBUCxPQUFPLElBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBbUI7SUFDakQsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUNELE9BQU8sRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLFNBQVMsZUFBZSxDQUFDLElBQWdDO0lBQ3ZELE1BQU0sWUFBWSxHQUErQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2hFLE1BQU0sYUFBYSxHQUErQixFQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUNuRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsU0FBUztTQUNWO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuSCxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsYUFBYSxD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QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO0lBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNwQixNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVELE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQge1xuICBGaXRFcnJvck1vZGVsLFxuICBmaXREYXRhLFxuICBnZXRDdXJ2ZUNvbmZpZGVuY2VJbnRlcnZhbHMsXG4gIGdldFN0YXRpc3RpY3MsXG4gIEZpdEZ1bmN0aW9uLFxuICBnZXRGaXR0ZWRDdXJ2ZSxcbiAgRml0U3RhdGlzdGljcyxcbiAgRml0Q29uZmlkZW5jZUludGVydmFscyxcbiAgRml0Q3VydmUsXG4gIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24sXG4gIElGaXRQb2ludCxcbiAgSUZpdENoYXJ0RGF0YSxcbiAgSUZpdFNlcmllcyxcbiAgZml0U2VyaWVzUHJvcGVydGllcyxcbiAgZml0Q2hhcnREYXRhUHJvcGVydGllcyxcbiAgVEFHX0ZJVCxcbiAgRml0UGFyYW1Cb3VuZHMsXG4gIElGaXRDaGFydE9wdGlvbnMsXG4gIEZpdEVycm9yTW9kZWxUeXBlLFxufSBmcm9tICcuL2ZpdC1jdXJ2ZSc7XG5cbmV4cG9ydCB0eXBlIExvZ09wdGlvbnMgPSB7XG4gIGxvZ1g6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIGxvZ1k6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn07XG5cblxuLyoqIENyZWF0ZXMgbmV3IG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBzcGVjaWZpZWQgaW4ge0BsaW5rIHByb3BlcnRpZXN9ICovXG5mdW5jdGlvbiBjcmVhdGVGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBERy5Qcm9wZXJ0eVtdKTogYW55IHtcbiAgY29uc3QgbzogYW55ID0ge307XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZGVmYXVsdFZhbHVlICE9PSBudWxsKVxuICAgICAgb1twLm5hbWVdID0gcC5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgcmV0dXJuIG87XG59XG5cbi8vIFRPRE86IHNldCBjb2x1bW4gd2l0aCBmaXQgcmVhZG9ubHkgdmFsdWUgKGluIGRldGVjdG9ycykgLSB0cnkgdG8gb25seSBzaG93IGNoYXJ0IC0gcmVtb3ZlIGVkaXRhYmxlIG9yIHByZXZlbnQgaXQ/P1xuLyoqIENyZWF0ZXMgZGVmYXVsdCB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENoYXJ0RGF0YSgpOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIHtcbiAgICBjaGFydE9wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdENoYXJ0RGF0YVByb3BlcnRpZXMpLFxuICAgIHNlcmllc09wdGlvbnM6IGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKGZpdFNlcmllc1Byb3BlcnRpZXMpLFxuICB9O1xufVxuXG4vKiogUmV0dXJucyBleGlzdGluZywgb3IgY3JlYXRlcyBuZXcgZGF0YWZyYW1lIGRlZmF1bHQgY2hhcnQgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhRnJhbWVDaGFydE9wdGlvbnMoZGY6IERHLkRhdGFGcmFtZSk6IElGaXRDaGFydERhdGEge1xuICByZXR1cm4gSlNPTi5wYXJzZShkZi50YWdzW1RBR19GSVRdID8/PSBKU09OLnN0cmluZ2lmeShjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCkpKTtcbn1cblxuLyoqIFJldHVybnMgZXhpc3RpbmcsIG9yIGNyZWF0ZXMgbmV3IGNvbHVtbiBkZWZhdWx0IGNoYXJ0IG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQ2hhcnRPcHRpb25zKGNvbHVtbjogREcuQ29sdW1uKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGNvbHVtbi50YWdzW1RBR19GSVRdID8/PSBKU09OLnN0cmluZ2lmeShjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCkpKTtcbn1cblxuLyoqIFJldHVybnMgcG9pbnRzIGFycmF5cyBmcm9tIHtAbGluayBJRml0UG9pbnR9IGFycmF5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRzQXJyYXlzKHBvaW50czogSUZpdFBvaW50W10pOiB7eHM6IG51bWJlcltdLCB5czogbnVtYmVyW119IHtcbiAgY29uc3QgeHM6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHlzOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgIHhzW2ldID0gcG9pbnRzW2ldLng7XG4gICAgeXNbaV0gPSBwb2ludHNbaV0ueTtcbiAgfVxuICByZXR1cm4ge3hzOiB4cywgeXM6IHlzfTtcbn1cblxuLyoqIFJldHVybnMgbWVkaWFuIHBvaW50cyBmcm9tIHdpdGhpbiBtdWx0aXBsZSBwb2ludHMgd2l0aCB0aGUgc2FtZSB4LiAqL1xuZnVuY3Rpb24gZ2V0TWVkaWFuUG9pbnRzKGRhdGE6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119KToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0ge1xuICBjb25zdCBtZWRpYW5Qb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119ID0ge3g6IFtdLCB5OiBbXX07XG4gIGNvbnN0IGN1cnJlbnRQb2ludHM6IHt4OiBudW1iZXJbXSwgeTogbnVtYmVyW119ID0ge3g6IFtkYXRhLnhbMF1dLCB5OiBbZGF0YS55WzBdXX07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRhdGEueFtpXSA9PT0gY3VycmVudFBvaW50cy54WzBdKSB7XG4gICAgICBjdXJyZW50UG9pbnRzLnhbY3VycmVudFBvaW50cy54Lmxlbmd0aF0gPSBkYXRhLnhbaV07XG4gICAgICBjdXJyZW50UG9pbnRzLnlbY3VycmVudFBvaW50cy55Lmxlbmd0aF0gPSBkYXRhLnlbaV07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcihjdXJyZW50UG9pbnRzLnkubGVuZ3RoIC8gMik7XG4gICAgY29uc3Qgc29ydGVkUG9pbnRzID0gY3VycmVudFBvaW50cy55LnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBjb25zdCBtZWRpYW4gPSBzb3J0ZWRQb2ludHMubGVuZ3RoICUgMiA9PT0gMCA/IChzb3J0ZWRQb2ludHNbbWlkIC0gMV0gKyBzb3J0ZWRQb2ludHNbbWlkXSkgLyAyIDogc29ydGVkUG9pbnRzW21pZF07XG5cbiAgICBtZWRpYW5Qb2ludHMueFttZWRpYW5Qb2ludHMueC5sZW5ndGhdID0gY3VycmVudFBvaW50cy54WzBdO1xuICAgIG1lZGlhblBvaW50cy55W21lZGlhblBvaW50cy55Lmxlbmd0aF0gPSBtZWRpYW47XG4gICAgY3VycmVudFBvaW50cy54ID0gW2RhdGEueFtpXV07XG4gICAgY3VycmVudFBvaW50cy55ID0gW2RhdGEueVtpXV07XG4gIH1cblxuICByZXR1cm4gbWVkaWFuUG9pbnRzO1xufVxuXG4vKiogUmV0dXJucyBsb2dhcml0aG1pYyBJQzUwIHBhcmFtZXRlciBib3VuZHMuICovXG5mdW5jdGlvbiBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKGljNTBCb3VuZHM6IEZpdFBhcmFtQm91bmRzKTogRml0UGFyYW1Cb3VuZHMge1xuICBpZiAoaWM1MEJvdW5kcykge1xuICAgIGlmIChpYzUwQm91bmRzLm1heCAhPT0gdW5kZWZpbmVkKVxuICAgICAgaWM1MEJvdW5kcy5tYXggPSBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWF4KTtcbiAgICBpZiAoaWM1MEJvdW5kcy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWM1MEJvdW5kcy5taW4gPSBpYzUwQm91bmRzLm1pbiA9PT0gMCA/XG4gICAgICAgIC1OdW1iZXIuTUFYX1ZBTFVFIDogTWF0aC5sb2cxMChpYzUwQm91bmRzLm1pbik7XG4gICAgfVxuICB9XG4gIHJldHVybiBpYzUwQm91bmRzO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VCb3VuZHMoYm91bmRzOiBERy5SZWN0LCBjaGFydE9wdGlvbnM6IElGaXRDaGFydE9wdGlvbnMpOiBERy5SZWN0IHtcbiAgbGV0IHggPSBib3VuZHMueDtcbiAgbGV0IHkgPSBib3VuZHMueTtcbiAgbGV0IHdpZHRoID0gYm91bmRzLndpZHRoO1xuICBsZXQgaGVpZ2h0ID0gYm91bmRzLmhlaWdodDtcblxuICBpZiAoY2hhcnRPcHRpb25zLm1pblggIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWCAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dYKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1ggJiYgY2hhcnRPcHRpb25zLm1pblggPiAwKSkpIHtcbiAgICB3aWR0aCArPSB4IC0gY2hhcnRPcHRpb25zLm1pblg7XG4gICAgeCA9IGNoYXJ0T3B0aW9ucy5taW5YO1xuICB9XG4gIGlmIChjaGFydE9wdGlvbnMubWF4WCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5tYXhYICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1gpIHx8IChjaGFydE9wdGlvbnMubG9nWCAmJiBjaGFydE9wdGlvbnMubWF4WCA+IDApKSlcbiAgICB3aWR0aCArPSBjaGFydE9wdGlvbnMubWF4WCAtICh4ICsgd2lkdGgpO1xuICBpZiAoY2hhcnRPcHRpb25zLm1pblkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWluWSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1pblkgPiAwKSkpIHtcbiAgICBoZWlnaHQgKz0geSAtIGNoYXJ0T3B0aW9ucy5taW5ZO1xuICAgIHkgPSBjaGFydE9wdGlvbnMubWluWTtcbiAgfVxuICBpZiAoY2hhcnRPcHRpb25zLm1heFkgIT09IHVuZGVmaW5lZCAmJiBjaGFydE9wdGlvbnMubWF4WSAhPT0gbnVsbCAmJlxuICAgICgoIWNoYXJ0T3B0aW9ucy5sb2dZKSB8fCAoY2hhcnRPcHRpb25zLmxvZ1kgJiYgY2hhcnRPcHRpb25zLm1heFkgPiAwKSkpXG4gICAgaGVpZ2h0ICs9IGNoYXJ0T3B0aW9ucy5tYXhZIC0gKHkgKyBoZWlnaHQpO1xuXG4gIHJldHVybiBuZXcgREcuUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiB7QGxpbmsgSUZpdENoYXJ0RGF0YX0gb2JqZWN0ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhcnRCb3VuZHMoY2hhcnREYXRhOiBJRml0Q2hhcnREYXRhKTogREcuUmVjdCB7XG4gIGNvbnN0IG8gPSBjaGFydERhdGEuY2hhcnRPcHRpb25zO1xuICBpZiAoIWNoYXJ0RGF0YS5zZXJpZXM/Lmxlbmd0aCB8fCBjaGFydERhdGEuc2VyaWVzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gbmV3IERHLlJlY3QoMCwgMCwgMSwgMSk7XG4gIGVsc2Uge1xuICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbMF0ucG9pbnRzKTtcbiAgICBsZXQgYm91bmRzID0gREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGNoYXJ0RGF0YS5zZXJpZXMhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB7eHMsIHlzfSA9IGdldFBvaW50c0FycmF5cyhjaGFydERhdGEuc2VyaWVzW2ldLnBvaW50cyk7XG4gICAgICBib3VuZHMgPSBib3VuZHMudW5pb24oREcuUmVjdC5mcm9tWFlBcnJheXMoeHMsIHlzKSk7XG4gICAgfVxuICAgIHJldHVybiBvID8gY2hhbmdlQm91bmRzKGJvdW5kcywgbyEpOiBib3VuZHM7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgc2VyaWVzIGZpdCBmdW5jdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0ZpdEZ1bmN0aW9uKHNlcmllczogSUZpdFNlcmllcyk6IEZpdEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGdldE9yQ3JlYXRlRml0RnVuY3Rpb24oc2VyaWVzLmZpdEZ1bmN0aW9uISk7XG59XG5cbi8qKiBSZXR1cm5zIGEgY3VydmUgZnVuY3Rpb24sIGVpdGhlciB1c2luZyB0aGUgcHJlLWNvbXB1dGVkIHBhcmFtZXRlcnMgb3IgYnkgZml0dGluZyBvbi10aGUtZmx5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VydmUoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6ICh4OiBudW1iZXIpID0+IG51bWJlciB7XG4gIHJldHVybiBnZXRGaXR0ZWRDdXJ2ZShmaXRGdW5jLnksIHNlcmllcy5wYXJhbWV0ZXJzISk7XG59XG5cbi8qKiBGaXRzIHRoZSBzZXJpZXMgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIHNlcmllcyBmaXR0aW5nIHNldHRpbmdzICovXG5leHBvcnQgZnVuY3Rpb24gZml0U2VyaWVzKHNlcmllczogSUZpdFNlcmllcywgZml0RnVuYzogRml0RnVuY3Rpb24sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q3VydmUge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbiAgaWYgKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMgJiYgbG9nT3B0aW9ucz8ubG9nWClcbiAgICBzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdID0gbG9nSUM1MFBhcmFtZXRlckJvdW5kcyhzZXJpZXMucGFyYW1ldGVyQm91bmRzWzJdKTtcbiAgcmV0dXJuIGZpdERhdGEoZ2V0TWVkaWFuUG9pbnRzKGRhdGEpLCBmaXRGdW5jLCBzZXJpZXMuZXJyb3JNb2RlbCA/PyBGaXRFcnJvck1vZGVsLkNPTlNUQU5UIGFzIEZpdEVycm9yTW9kZWxUeXBlLFxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHMpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgY29uZmlkZW5jZSBpbnRlcnZhbCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXJpZXNDb25maWRlbmNlSW50ZXJ2YWwoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbixcbiAgdXNlclBhcmFtc0ZsYWc6IGJvb2xlYW4sIGxvZ09wdGlvbnM/OiBMb2dPcHRpb25zKTogRml0Q29uZmlkZW5jZUludGVydmFscyB7XG4gIGNvbnN0IGRhdGEgPSB1c2VyUGFyYW1zRmxhZyA/IHt4OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfSA6XG4gICAge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoIXNlcmllcy5wYXJhbWV0ZXJzKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJzID0gZml0U2VyaWVzKHNlcmllcywgZml0RnVuYykucGFyYW1ldGVycztcbiAgcmV0dXJuIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCAwLjA1LFxuICAgIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUpO1xufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgc3RhdGlzdGljcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc1N0YXRpc3RpY3Moc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbik6IEZpdFN0YXRpc3RpY3Mge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpXG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICByZXR1cm4gZ2V0U3RhdGlzdGljcyhkYXRhLCBzZXJpZXMucGFyYW1ldGVycywgZml0RnVuYy55LCB0cnVlKTtcbn1cbiJdfQ==
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxFQUNiLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsYUFBYSxFQUViLGNBQWMsRUFJZCxzQkFBc0IsRUFJdEIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixPQUFPLEdBSVIsTUFBTSxhQUFhLENBQUM7QUFRckIsaUZBQWlGO0FBQ2pGLFNBQVMsb0JBQW9CLENBQUMsVUFBeUI7SUFDckQsTUFBTSxDQUFDLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztLQUM5QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELHFIQUFxSDtBQUNySCxtREFBbUQ7QUFDbkQsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDO1FBQzFELGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVELHdFQUF3RTtBQUN4RSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsRUFBZ0I7OztJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLGFBQUMsRUFBRSxDQUFDLElBQUksRUFBQyxPQUFPLHdDQUFQLE9BQU8sSUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWlCOzs7SUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxhQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUMsT0FBTyx3Q0FBUCxPQUFPLElBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBbUI7SUFDakQsTUFBTSxFQUFFLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLE1BQU0sRUFBRSxHQUFhLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUNELE9BQU8sRUFBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLFNBQVMsZUFBZSxDQUFDLElBQWdDO0lBQ3ZELE1BQU0sWUFBWSxHQUErQixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBQyxDQUFDO0lBQ2hFLE1BQU0sYUFBYSxHQUErQixFQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUNuRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsU0FBUztTQUNWO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVuSCxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsYUFBYSxD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NEQ7QUFDNUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxTQUF3Qjs7SUFDckQsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQztJQUNqQyxJQUFJLENBQUMsQ0FBQSxNQUFBLFNBQVMsQ0FBQyxNQUFNLDBDQUFFLE1BQU0sQ0FBQSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDNUQsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDNUI7UUFDSCxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUUsRUFBQyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLFNBQVM7WUFDWCxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUNELE9BQU8sQ0FBQyxDQUFDLENB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QUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7SUFDbkcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ3BCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDNUQsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdmFsaWQtanNkb2MgKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB7XG4gIEZpdEVycm9yTW9kZWwsXG4gIGZpdERhdGEsXG4gIGdldEN1cnZlQ29uZmlkZW5jZUludGVydmFscyxcbiAgZ2V0U3RhdGlzdGljcyxcbiAgRml0RnVuY3Rpb24sXG4gIGdldEZpdHRlZEN1cnZlLFxuICBGaXRTdGF0aXN0aWNzLFxuICBGaXRDb25maWRlbmNlSW50ZXJ2YWxzLFxuICBGaXRDdXJ2ZSxcbiAgZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbixcbiAgSUZpdFBvaW50LFxuICBJRml0Q2hhcnREYXRhLFxuICBJRml0U2VyaWVzLFxuICBmaXRTZXJpZXNQcm9wZXJ0aWVzLFxuICBmaXRDaGFydERhdGFQcm9wZXJ0aWVzLFxuICBUQUdfRklULFxuICBGaXRQYXJhbUJvdW5kcyxcbiAgSUZpdENoYXJ0T3B0aW9ucyxcbiAgRml0RXJyb3JNb2RlbFR5cGUsXG59IGZyb20gJy4vZml0LWN1cnZlJztcblxuZXhwb3J0IHR5cGUgTG9nT3B0aW9ucyA9IHtcbiAgbG9nWDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgbG9nWTogYm9vbGVhbiB8IHVuZGVmaW5lZFxufTtcblxuXG4vKiogQ3JlYXRlcyBuZXcgb2JqZWN0IHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIHNwZWNpZmllZCBpbiB7QGxpbmsgcHJvcGVydGllc30gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXM6IERHLlByb3BlcnR5W10pOiBhbnkge1xuICBjb25zdCBvOiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBwIG9mIHByb3BlcnRpZXMpIHtcbiAgICBpZiAocC5kZWZhdWx0VmFsdWUgIT09IG51bGwpXG4gICAgICBvW3AubmFtZV0gPSBwLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICByZXR1cm4gbztcbn1cblxuLy8gVE9ETzogc2V0IGNvbHVtbiB3aXRoIGZpdCByZWFkb25seSB2YWx1ZSAoaW4gZGV0ZWN0b3JzKSAtIHRyeSB0byBvbmx5IHNob3cgY2hhcnQgLSByZW1vdmUgZWRpdGFibGUgb3IgcHJldmVudCBpdD8/XG4vKiogQ3JlYXRlcyBkZWZhdWx0IHtAbGluayBJRml0Q2hhcnREYXRhfSBvYmplY3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2hhcnREYXRhKCk6IElGaXRDaGFydERhdGEge1xuICByZXR1cm4ge1xuICAgIGNoYXJ0T3B0aW9uczogY3JlYXRlRnJvbVByb3BlcnRpZXMoZml0Q2hhcnREYXRhUHJvcGVydGllcyksXG4gICAgc2VyaWVzT3B0aW9uczogY3JlYXRlRnJvbVByb3BlcnRpZXMoZml0U2VyaWVzUHJvcGVydGllcyksXG4gIH07XG59XG5cbi8qKiBSZXR1cm5zIGV4aXN0aW5nLCBvciBjcmVhdGVzIG5ldyBkYXRhZnJhbWUgZGVmYXVsdCBjaGFydCBvcHRpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFGcmFtZUNoYXJ0T3B0aW9ucyhkZjogREcuRGF0YUZyYW1lKTogSUZpdENoYXJ0RGF0YSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGRmLnRhZ3NbVEFHX0ZJVF0gPz89IEpTT04uc3RyaW5naWZ5KGNyZWF0ZURlZmF1bHRDaGFydERhdGEoKSkpO1xufVxuXG4vKiogUmV0dXJucyBleGlzdGluZywgb3IgY3JlYXRlcyBuZXcgY29sdW1uIGRlZmF1bHQgY2hhcnQgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5DaGFydE9wdGlvbnMoY29sdW1uOiBERy5Db2x1bW4pOiBJRml0Q2hhcnREYXRhIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoY29sdW1uLnRhZ3NbVEFHX0ZJVF0gPz89IEpTT04uc3RyaW5naWZ5KGNyZWF0ZURlZmF1bHRDaGFydERhdGEoKSkpO1xufVxuXG4vKiogUmV0dXJucyBwb2ludHMgYXJyYXlzIGZyb20ge0BsaW5rIElGaXRQb2ludH0gYXJyYXkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2ludHNBcnJheXMocG9pbnRzOiBJRml0UG9pbnRbXSk6IHt4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXX0ge1xuICBjb25zdCB4czogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgeXM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgeHNbaV0gPSBwb2ludHNbaV0ueDtcbiAgICB5c1tpXSA9IHBvaW50c1tpXS55O1xuICB9XG4gIHJldHVybiB7eHM6IHhzLCB5czogeXN9O1xufVxuXG4vKiogUmV0dXJucyBtZWRpYW4gcG9pbnRzIGZyb20gd2l0aGluIG11bHRpcGxlIHBvaW50cyB3aXRoIHRoZSBzYW1lIHguICovXG5mdW5jdGlvbiBnZXRNZWRpYW5Qb2ludHMoZGF0YToge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0pOiB7eDogbnVtYmVyW10sIHk6IG51bWJlcltdfSB7XG4gIGNvbnN0IG1lZGlhblBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW10sIHk6IFtdfTtcbiAgY29uc3QgY3VycmVudFBvaW50czoge3g6IG51bWJlcltdLCB5OiBudW1iZXJbXX0gPSB7eDogW2RhdGEueFswXV0sIHk6IFtkYXRhLnlbMF1dfTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBkYXRhLngubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoZGF0YS54W2ldID09PSBjdXJyZW50UG9pbnRzLnhbMF0pIHtcbiAgICAgIGN1cnJlbnRQb2ludHMueFtjdXJyZW50UG9pbnRzLngubGVuZ3RoXSA9IGRhdGEueFtpXTtcbiAgICAgIGN1cnJlbnRQb2ludHMueVtjdXJyZW50UG9pbnRzLnkubGVuZ3RoXSA9IGRhdGEueVtpXTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtaWQgPSBNYXRoLmZsb29yKGN1cnJlbnRQb2ludHMueS5sZW5ndGggLyAyKTtcbiAgICBjb25zdCBzb3J0ZWRQb2ludHMgPSBjdXJyZW50UG9pbnRzLnkuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGNvbnN0IG1lZGlhbiA9IHNvcnRlZFBvaW50cy5sZW5ndGggJSAyID09PSAwID8gKHNvcnRlZFBvaW50c1ttaWQgLSAxXSArIHNvcnRlZFBvaW50c1ttaWRdKSAvIDIgOiBzb3J0ZWRQb2ludHNbbWlkXTtcblxuICAgIG1lZGlhblBvaW50cy54W21lZGlhblBvaW50cy54Lmxlbmd0aF0gPSBjdXJyZW50UG9pbnRzLnhbMF07XG4gICAgbWVkaWFuUG9pbnRzLnlbbWVkaWFuUG9pbnRzLnkubGVuZ3RoXSA9IG1lZGlhbjtcbiAgICBjdXJyZW50UG9pbnRzLnggPSBbZGF0YS54W2ldXTtcbiAgICBjdXJyZW50UG9pbnRzLnkgPSBbZGF0YS55W2ldXTtcbiAgfVxuXG4gIHJldHVybiBtZWRpYW5Qb2ludHM7XG59XG5cbi8qKiBSZXR1cm5zIGxvZ2FyaXRobWljIElDNTAgcGFyYW1ldGVyIGJvdW5kcy4gKi9cbmZ1bmN0aW9uIGxvZ0lDNTBQYXJhbWV0ZXJCb3VuZHMoaWM1MEJvdW5kczogRml0UGFyYW1Cb3VuZHMpOiBGaXRQYXJhbUJvdW5kcyB7XG4gIGlmIChpYzUwQm91bmRzKSB7XG4gICAgaWYgKGljNTBCb3VuZHMubWF4ICE9PSB1bmRlZmluZWQpXG4gICAgICBpYzUwQm91bmRzLm1heCA9IE1hdGgubG9nMTAoaWM1MEJvdW5kcy5tYXgpO1xuICAgIGlmIChpYzUwQm91bmRzLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpYzUwQm91bmRzLm1pbiA9IGljNTBCb3VuZHMubWluID09PSAwID9cbiAgICAgICAgLU51bWJlci5NQVhfVkFMVUUgOiBNYXRoLmxvZzEwKGljNTBCb3VuZHMubWluKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGljNTBCb3VuZHM7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUJvdW5kcyhib3VuZHM6IERHLlJlY3QsIGNoYXJ0T3B0aW9uczogSUZpdENoYXJ0T3B0aW9ucyk6IERHLlJlY3Qge1xuICBsZXQgeCA9IGJvdW5kcy54O1xuICBsZXQgeSA9IGJvdW5kcy55O1xuICBsZXQgd2lkdGggPSBib3VuZHMud2lkdGg7XG4gIGxldCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0O1xuXG4gIGlmIChjaGFydE9wdGlvbnMubWluWCAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5taW5YICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1gpIHx8IChjaGFydE9wdGlvbnMubG9nWCAmJiBjaGFydE9wdGlvbnMubWluWCA+IDApKSkge1xuICAgIHdpZHRoICs9IHggLSBjaGFydE9wdGlvbnMubWluWDtcbiAgICB4ID0gY2hhcnRPcHRpb25zLm1pblg7XG4gIH1cbiAgaWYgKGNoYXJ0T3B0aW9ucy5tYXhYICE9PSB1bmRlZmluZWQgJiYgY2hhcnRPcHRpb25zLm1heFggIT09IG51bGwgJiZcbiAgICAoKCFjaGFydE9wdGlvbnMubG9nWCkgfHwgKGNoYXJ0T3B0aW9ucy5sb2dYICYmIGNoYXJ0T3B0aW9ucy5tYXhYID4gMCkpKVxuICAgIHdpZHRoICs9IGNoYXJ0T3B0aW9ucy5tYXhYIC0gKHggKyB3aWR0aCk7XG4gIGlmIChjaGFydE9wdGlvbnMubWluWSAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5taW5ZICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1kpIHx8IChjaGFydE9wdGlvbnMubG9nWSAmJiBjaGFydE9wdGlvbnMubWluWSA+IDApKSkge1xuICAgIGhlaWdodCArPSB5IC0gY2hhcnRPcHRpb25zLm1pblk7XG4gICAgeSA9IGNoYXJ0T3B0aW9ucy5taW5ZO1xuICB9XG4gIGlmIChjaGFydE9wdGlvbnMubWF4WSAhPT0gdW5kZWZpbmVkICYmIGNoYXJ0T3B0aW9ucy5tYXhZICE9PSBudWxsICYmXG4gICAgKCghY2hhcnRPcHRpb25zLmxvZ1kpIHx8IChjaGFydE9wdGlvbnMubG9nWSAmJiBjaGFydE9wdGlvbnMubWF4WSA+IDApKSlcbiAgICBoZWlnaHQgKz0gY2hhcnRPcHRpb25zLm1heFkgLSAoeSArIGhlaWdodCk7XG5cbiAgcmV0dXJuIG5ldyBERy5SZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xufVxuXG4vKiogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIHtAbGluayBJRml0Q2hhcnREYXRhfSBvYmplY3QgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydEJvdW5kcyhjaGFydERhdGE6IElGaXRDaGFydERhdGEpOiBERy5SZWN0IHtcbiAgY29uc3QgbyA9IGNoYXJ0RGF0YS5jaGFydE9wdGlvbnM7XG4gIGlmICghY2hhcnREYXRhLnNlcmllcz8ubGVuZ3RoIHx8IGNoYXJ0RGF0YS5zZXJpZXMubGVuZ3RoID09PSAwKVxuICAgIHJldHVybiBuZXcgREcuUmVjdCgwLCAwLCAxLCAxKTtcbiAgZWxzZSB7XG4gICAgY29uc3Qge3hzLCB5c30gPSBnZXRQb2ludHNBcnJheXMoY2hhcnREYXRhLnNlcmllc1swXS5wb2ludHMpO1xuICAgIGxldCBib3VuZHMgPSBERy5SZWN0LmZyb21YWUFycmF5cyh4cywgeXMpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgY2hhcnREYXRhLnNlcmllcyEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHt4cywgeXN9ID0gZ2V0UG9pbnRzQXJyYXlzKGNoYXJ0RGF0YS5zZXJpZXNbaV0ucG9pbnRzKTtcbiAgICAgIGlmICh4cy5zb21lKCh4KSA9PiAheCkgfHwgeXMuc29tZSgoeSkgPT4gIXkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGJvdW5kcyA9IGJvdW5kcy51bmlvbihERy5SZWN0LmZyb21YWUFycmF5cyh4cywgeXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG8gPyBjaGFuZ2VCb3VuZHMoYm91bmRzLCBvISk6IGJvdW5kcztcbiAgfVxufVxuXG4vKiogUmV0dXJucyBzZXJpZXMgZml0IGZ1bmN0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWVzRml0RnVuY3Rpb24oc2VyaWVzOiBJRml0U2VyaWVzKTogRml0RnVuY3Rpb24ge1xuICByZXR1cm4gZ2V0T3JDcmVhdGVGaXRGdW5jdGlvbihzZXJpZXMuZml0RnVuY3Rpb24hKTtcbn1cblxuLyoqIFJldHVybnMgYSBjdXJ2ZSBmdW5jdGlvbiwgZWl0aGVyIHVzaW5nIHRoZSBwcmUtY29tcHV0ZWQgcGFyYW1ldGVycyBvciBieSBmaXR0aW5nIG9uLXRoZS1mbHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJ2ZShzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uKTogKHg6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgcmV0dXJuIGdldEZpdHRlZEN1cnZlKGZpdEZ1bmMueSwgc2VyaWVzLnBhcmFtZXRlcnMhKTtcbn1cblxuLyoqIEZpdHMgdGhlIHNlcmllcyBkYXRhIGFjY29yZGluZyB0byB0aGUgc2VyaWVzIGZpdHRpbmcgc2V0dGluZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXRTZXJpZXMoc2VyaWVzOiBJRml0U2VyaWVzLCBmaXRGdW5jOiBGaXRGdW5jdGlvbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDdXJ2ZSB7XG4gIGNvbnN0IGRhdGEgPSB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgeTogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9O1xuICBpZiAoc2VyaWVzLnBhcmFtZXRlckJvdW5kcyAmJiBsb2dPcHRpb25zPy5sb2dYKVxuICAgIHNlcmllcy5wYXJhbWV0ZXJCb3VuZHNbMl0gPSBsb2dJQzUwUGFyYW1ldGVyQm91bmRzKHNlcmllcy5wYXJhbWV0ZXJCb3VuZHNbMl0pO1xuICByZXR1cm4gZml0RGF0YShnZXRNZWRpYW5Qb2ludHMoZGF0YSksIGZpdEZ1bmMsIHNlcmllcy5lcnJvck1vZGVsID8/IEZpdEVycm9yTW9kZWwuQ09OU1RBTlQgYXMgRml0RXJyb3JNb2RlbFR5cGUsXG4gICAgc2VyaWVzLnBhcmFtZXRlckJvdW5kcyk7XG59XG5cbi8qKiBSZXR1cm5zIHNlcmllcyBjb25maWRlbmNlIGludGVydmFsIGZ1bmN0aW9ucyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlcmllc0NvbmZpZGVuY2VJbnRlcnZhbChzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uLFxuICB1c2VyUGFyYW1zRmxhZzogYm9vbGVhbiwgbG9nT3B0aW9ucz86IExvZ09wdGlvbnMpOiBGaXRDb25maWRlbmNlSW50ZXJ2YWxzIHtcbiAgY29uc3QgZGF0YSA9IHVzZXJQYXJhbXNGbGFnID8ge3g6IHNlcmllcy5wb2ludHMubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dYID8gTWF0aC5sb2cxMChwLngpIDogcC54KSxcbiAgICB5OiBzZXJpZXMucG9pbnRzLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWSA/IE1hdGgubG9nMTAocC55KSA6IHAueSl9IDpcbiAgICB7eDogc2VyaWVzLnBvaW50cy5maWx0ZXIoKHApID0+ICFwLm91dGxpZXIpLm1hcCgocCkgPT4gbG9nT3B0aW9ucz8ubG9nWCA/IE1hdGgubG9nMTAocC54KSA6IHAueCksXG4gICAgICB5OiBzZXJpZXMucG9pbnRzLmZpbHRlcigocCkgPT4gIXAub3V0bGllcikubWFwKChwKSA9PiBsb2dPcHRpb25zPy5sb2dZID8gTWF0aC5sb2cxMChwLnkpIDogcC55KX07XG4gIGlmICghc2VyaWVzLnBhcmFtZXRlcnMpXG4gICAgc2VyaWVzLnBhcmFtZXRlcnMgPSBmaXRTZXJpZXMoc2VyaWVzLCBmaXRGdW5jKS5wYXJhbWV0ZXJzO1xuICByZXR1cm4gZ2V0Q3VydmVDb25maWRlbmNlSW50ZXJ2YWxzKGRhdGEsIHNlcmllcy5wYXJhbWV0ZXJzLCBmaXRGdW5jLnksIDAuMDUsXG4gICAgc2VyaWVzLmVycm9yTW9kZWwgPz8gRml0RXJyb3JNb2RlbC5DT05TVEFOVCBhcyBGaXRFcnJvck1vZGVsVHlwZSk7XG59XG5cbi8qKiBSZXR1cm5zIHNlcmllcyBzdGF0aXN0aWNzICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VyaWVzU3RhdGlzdGljcyhzZXJpZXM6IElGaXRTZXJpZXMsIGZpdEZ1bmM6IEZpdEZ1bmN0aW9uLCBsb2dPcHRpb25zPzogTG9nT3B0aW9ucyk6IEZpdFN0YXRpc3RpY3Mge1xuICBjb25zdCBkYXRhID0ge3g6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1ggPyBNYXRoLmxvZzEwKHAueCkgOiBwLngpLFxuICAgIHk6IHNlcmllcy5wb2ludHMuZmlsdGVyKChwKSA9PiAhcC5vdXRsaWVyKS5tYXAoKHApID0+IGxvZ09wdGlvbnM/LmxvZ1kgPyBNYXRoLmxvZzEwKHAueSkgOiBwLnkpfTtcbiAgaWYgKCFzZXJpZXMucGFyYW1ldGVycylcbiAgICBzZXJpZXMucGFyYW1ldGVycyA9IGZpdFNlcmllcyhzZXJpZXMsIGZpdEZ1bmMpLnBhcmFtZXRlcnM7XG4gIHJldHVybiBnZXRTdGF0aXN0aWNzKGRhdGEsIHNlcmllcy5wYXJhbWV0ZXJzLCBmaXRGdW5jLnksIHRydWUpO1xufVxuIl19
|