@flowmap.gl/data 8.0.0-alpha.23 → 8.0.0-alpha.24
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/dist/FlowmapSelectors.d.ts +4 -4
- package/dist/FlowmapSelectors.d.ts.map +1 -1
- package/dist/FlowmapSelectors.js +1 -1
- package/dist/FlowmapState.d.ts +1 -1
- package/dist/FlowmapState.d.ts.map +1 -1
- package/dist/FlowmapState.js +1 -1
- package/dist/cluster/ClusterIndex.d.ts +1 -1
- package/dist/cluster/ClusterIndex.d.ts.map +1 -1
- package/dist/cluster/ClusterIndex.js +1 -1
- package/package.json +2 -2
- package/src/FlowmapSelectors.ts +27 -24
- package/src/FlowmapState.ts +1 -1
- package/src/cluster/ClusterIndex.ts +1 -1
|
@@ -17,7 +17,7 @@ export default class FlowmapSelectors<L, F> {
|
|
|
17
17
|
getLocationsFromProps: (state: FlowmapState, props: FlowmapData<L, F>) => Iterable<L> | undefined;
|
|
18
18
|
getClusterLevelsFromProps: (state: FlowmapState, props: FlowmapData<L, F>) => ClusterLevels | undefined;
|
|
19
19
|
getMaxTopFlowsDisplayNum: (state: FlowmapState, props: FlowmapData<L, F>) => number;
|
|
20
|
-
getSelectedLocations: (state: FlowmapState, props: FlowmapData<L, F>) => string[] | undefined;
|
|
20
|
+
getSelectedLocations: (state: FlowmapState, props: FlowmapData<L, F>) => (string | number)[] | undefined;
|
|
21
21
|
getLocationFilterMode: (state: FlowmapState, props: FlowmapData<L, F>) => LocationFilterMode | undefined;
|
|
22
22
|
getClusteringEnabled: (state: FlowmapState, props: FlowmapData<L, F>) => boolean;
|
|
23
23
|
getLocationTotalsEnabled: (state: FlowmapState, props: FlowmapData<L, F>) => boolean;
|
|
@@ -34,7 +34,7 @@ export default class FlowmapSelectors<L, F> {
|
|
|
34
34
|
getInvalidLocationIds: Selector<L, F, (string | number)[] | undefined>;
|
|
35
35
|
getLocations: Selector<L, F, Iterable<L> | undefined>;
|
|
36
36
|
getLocationIds: Selector<L, F, Set<string | number> | undefined>;
|
|
37
|
-
getSelectedLocationsSet: Selector<L, F, Set<string> | undefined>;
|
|
37
|
+
getSelectedLocationsSet: Selector<L, F, Set<string | number> | undefined>;
|
|
38
38
|
getSortedFlowsForKnownLocations: Selector<L, F, F[] | undefined>;
|
|
39
39
|
getActualTimeExtent: Selector<L, F, [Date, Date] | undefined>;
|
|
40
40
|
getTimeGranularityKey: Selector<L, F, TimeGranularityKey | undefined>;
|
|
@@ -53,7 +53,7 @@ export default class FlowmapSelectors<L, F> {
|
|
|
53
53
|
locations: Iterable<L> | undefined;
|
|
54
54
|
flows: Iterable<F> | undefined;
|
|
55
55
|
clusterLevels?: ClusterLevels | undefined;
|
|
56
|
-
}, ...params_1: {}[]) => number[] | undefined) & import("reselect").OutputSelectorFields<(args_0: ClusterIndex<F> | undefined, args_1: string[] | undefined) => number[] & {
|
|
56
|
+
}, ...params_1: {}[]) => number[] | undefined) & import("reselect").OutputSelectorFields<(args_0: ClusterIndex<F> | undefined, args_1: (string | number)[] | undefined) => number[] & {
|
|
57
57
|
clearCache: () => void;
|
|
58
58
|
}> & {
|
|
59
59
|
clearCache: () => void;
|
|
@@ -90,7 +90,7 @@ export default class FlowmapSelectors<L, F> {
|
|
|
90
90
|
};
|
|
91
91
|
getUnknownLocations: Selector<L, F, Set<string | number> | undefined>;
|
|
92
92
|
getSortedAggregatedFilteredFlows: Selector<L, F, (F | AggregateFlow)[] | undefined>;
|
|
93
|
-
getExpandedSelectedLocationsSet: Selector<L, F, Set<string> | undefined>;
|
|
93
|
+
getExpandedSelectedLocationsSet: Selector<L, F, Set<string | number> | undefined>;
|
|
94
94
|
getTotalCountsByTime: Selector<L, F, CountByTime[] | undefined>;
|
|
95
95
|
getMaxLocationCircleSize: Selector<L, F, number>;
|
|
96
96
|
getViewportBoundingBox: Selector<L, F, [number, number, number, number]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowmapSelectors.d.ts","sourceRoot":"","sources":["../src/FlowmapSelectors.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAC,WAAW,EAAY,MAAM,UAAU,CAAC;AAEhD,OAAO,EAIL,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAEL,YAAY,EAEZ,oBAAoB,EAErB,MAAM,wBAAwB,CAAC;AAChC,OAAkB,EAChB,UAAU,EACV,cAAc,EAMf,MAAM,UAAU,CAAC;AAClB,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAM5C,OAAO,EAIL,kBAAkB,EACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,aAAa,EACb,OAAO,EACP,aAAa,EACb,WAAW,EACX,WAAW,EAEX,0BAA0B,EAC1B,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EAGpB,UAAU,EACV,kBAAkB,EAClB,cAAc,EACf,MAAM,SAAS,CAAC;AAGjB,aAAK,UAAU,GAAG,GAAG,CAAC;AAEtB,oBAAY,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAChD,YAAY,EACZ,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACjB,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC;IACxC,SAAS,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE/B,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAKjD,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIlD,qBAAqB,IAAI,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC;IAIxD,iBAAiB,UAAW,YAAY,SAAS,YAAY,CAAC,EAAE,CAAC,CAAC,6BACpD;IACd,qBAAqB,UAAW,YAAY,SAAS,YAAY,CAAC,EAAE,CAAC,CAAC,6BACpD;IAClB,yBAAyB,UAChB,YAAY,SACZ,YAAY,CAAC,EAAE,CAAC,CAAC,+BAGxB;IACF,wBAAwB,UAAW,YAAY,SAAS,YAAY,CAAC,EAAE,CAAC,CAAC,YAClC;IACvC,oBAAoB,UAAW,YAAY,SAAS,YAAY,CAAC,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"FlowmapSelectors.d.ts","sourceRoot":"","sources":["../src/FlowmapSelectors.ts"],"names":[],"mappings":"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"}
|
package/dist/FlowmapSelectors.js
CHANGED
|
@@ -861,4 +861,4 @@ export function getFlowLineAttributesByIndex(lineAttributes, index) {
|
|
|
861
861
|
: undefined)),
|
|
862
862
|
};
|
|
863
863
|
}
|
|
864
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9GbG93bWFwU2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEUsT0FBTyxFQUFjLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsY0FBYyxHQUVmLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNMLFVBQVUsRUFFVix3QkFBd0IsRUFFeEIsd0JBQXdCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxTQUFTLEVBQUUsRUFHaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLHlCQUF5QixNQUFNLDZCQUE2QixDQUFDO0FBRXBFLE9BQU8sRUFDTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHlCQUF5QixHQUUxQixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBWUwscUJBQXFCLEVBRXJCLGtCQUFrQixHQUVuQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQVNsQyxNQUFNLENBQUMs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RSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLEVBQUUsQ0FBQzthQUNSLEVBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLEVBQUUsQ0FBQzthQUNSLEVBQ0QsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxFQUFFLENBQUM7YUFDUixJQUNFLENBQUMsYUFBYTtZQUNmLENBQUMsQ0FBQztnQkFDRSxhQUFhLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLEVBQUUsQ0FBQztpQkFDUjthQUNGO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNmO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHthc2NlbmRpbmcsIGRlc2NlbmRpbmcsIGV4dGVudCwgbWluLCByb2xsdXB9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7U2NhbGVMaW5lYXIsIHNjYWxlU3FydH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IEtEQnVzaCBmcm9tICdrZGJ1c2gnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcixcbiAgZGVmYXVsdE1lbW9pemUsXG4gIFBhcmFtZXRyaWNTZWxlY3Rvcixcbn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHthbGVhfSBmcm9tICdzZWVkcmFuZG9tJztcbmltcG9ydCB7Y2x1c3RlckxvY2F0aW9uc30gZnJvbSAnLi9jbHVzdGVyL2NsdXN0ZXInO1xuaW1wb3J0IHtcbiAgYnVpbGRJbmRleCxcbiAgQ2x1c3RlckluZGV4LFxuICBmaW5kQXBwcm9wcmlhdGVab29tTGV2ZWwsXG4gIExvY2F0aW9uV2VpZ2h0R2V0dGVyLFxuICBtYWtlTG9jYXRpb25XZWlnaHRHZXR0ZXIsXG59IGZyb20gJy4vY2x1c3Rlci9DbHVzdGVySW5kZXgnO1xuaW1wb3J0IGdldENvbG9ycywge1xuICBDb2xvcnNSR0JBLFxuICBEaWZmQ29sb3JzUkdCQSxcbiAgZ2V0Q29sb3JzUkdCQSxcbiAgZ2V0RGlmZkNvbG9yc1JHQkEsXG4gIGdldEZsb3dDb2xvclNjYWxlLFxuICBpc0RpZmZDb2xvcnMsXG4gIGlzRGlmZkNvbG9yc1JHQkEsXG59IGZyb20gJy4vY29sb3JzJztcbmltcG9ydCBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzIGZyb20gJy4vRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyc7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuaW1wb3J0IHtcbiAgYWRkQ2x1c3Rlck5hbWVzLFxuICBnZXRGbG93VGhpY2tuZXNzU2NhbGUsXG4gIGdldFZpZXdwb3J0Qm91bmRpbmdCb3gsXG59IGZyb20gJy4vc2VsZWN0b3ItZnVuY3Rpb25zJztcbmltcG9ydCB7XG4gIGdldFRpbWVHcmFudWxhcml0eUJ5S2V5LFxuICBnZXRUaW1lR3JhbnVsYXJpdHlCeU9yZGVyLFxuICBnZXRUaW1lR3JhbnVsYXJpdHlGb3JEYXRlLFxuICBUaW1lR3JhbnVsYXJpdHlLZXksXG59IGZyb20gJy4vdGltZSc7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVGbG93LFxuICBDbHVzdGVyLFxuICBDbHVzdGVyTGV2ZWxzLFxuICBDbHVzdGVyTm9kZSxcbiAgQ291bnRCeVRpbWUsXG4gIEZsb3dBY2Nlc3NvcnMsXG4gIEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMsXG4gIEZsb3dtYXBEYXRhLFxuICBGbG93bWFwRGF0YUFjY2Vzc29ycyxcbiAgaXNDbHVzdGVyLFxuICBpc0xvY2F0aW9uQ2x1c3Rlck5vZGUsXG4gIExheWVyc0RhdGEsXG4gIExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgTG9jYXRpb25Ub3RhbHMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBNQVhfQ0xVU1RFUl9aT09NX0xFVkVMID0gMjA7XG50eXBlIEtEQnVzaFRyZWUgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yPEwsIEYsIFQ+ID0gUGFyYW1ldHJpY1NlbGVjdG9yPFxuICBGbG93bWFwU3RhdGUsXG4gIEZsb3dtYXBEYXRhPEwsIEY+LFxuICBUXG4+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG93bWFwU2VsZWN0b3JzPEwsIEY+IHtcbiAgYWNjZXNzb3JzOiBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+O1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yczogRmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4pIHtcbiAgICB0aGlzLmFjY2Vzc29ycyA9IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzKGFjY2Vzc29ycyk7XG4gICAgdGhpcy5zZXRBY2Nlc3NvcnMoYWNjZXNzb3JzKTtcbiAgfVxuXG4gIHNldEFjY2Vzc29ycyhhY2Nlc3NvcnM6IEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+KSB7XG4gICAgdGhpcy5hY2Nlc3NvcnMgPSBuZXcgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyhhY2Nlc3NvcnMpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlQWNjZXNzb3JzKCk6IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnM8TCwgRj4ge1xuICAgIHJldHVybiB0aGlzLmFjY2Vzc29ycztcbiAgfVxuXG4gIGdldEZsb3dzRnJvbVByb3BzID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBwcm9wcy5mbG93cztcbiAgZ2V0TG9jYXRpb25zRnJvbVByb3BzID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBwcm9wcy5sb2NhdGlvbnM7XG4gIGdldENsdXN0ZXJMZXZlbHNGcm9tUHJvcHMgPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4ge1xuICAgIHJldHVybiBwcm9wcy5jbHVzdGVyTGV2ZWxzO1xuICB9O1xuICBnZXRNYXhUb3BGbG93c0Rpc3BsYXlOdW0gPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLnNldHRpbmdzLm1heFRvcEZsb3dzRGlzcGxheU51bTtcbiAgZ2V0U2VsZWN0ZWRMb2NhdGlvbnMgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLmZpbHRlcj8uc2VsZWN0ZWRMb2NhdGlvbnM7XG4gIGdldExvY2F0aW9uRmlsdGVyTW9kZSA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUuZmlsdGVyPy5sb2NhdGlvbkZpbHRlck1vZGU7XG4gIGdldENsdXN0ZXJpbmdFbmFibGVkID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5zZXR0aW5ncy5jbHVzdGVyaW5nRW5hYmxlZDtcbiAgZ2V0TG9jYXRpb25Ub3RhbHNFbmFibGVkID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5zZXR0aW5ncy5sb2NhdGlvblRvdGFsc0VuYWJsZWQ7XG4gIGdldExvY2F0aW9uTGFiZWxzRW5hYmxlZCA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUuc2V0dGluZ3MubG9jYXRpb25MYWJlbHNFbmFibGVkO1xuICBnZXRab29tID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS52aWV3cG9ydC56b29tO1xuICBnZXRWaWV3cG9ydCA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUudmlld3BvcnQ7XG4gIGdldFNlbGVjdGVkVGltZVJhbmdlID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5maWx0ZXI/LnNlbGVjdGVkVGltZVJhbmdlO1xuXG4gIGdldENvbG9yU2NoZW1lOiBTZWxlY3RvcjxMLCBGLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3MuY29sb3JTY2hlbWU7XG5cbiAgZ2V0RGFya01vZGU6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzLmRhcmtNb2RlO1xuXG4gIGdldEZhZGVFbmFibGVkOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKSA9PiBzdGF0ZS5zZXR0aW5ncy5mYWRlRW5hYmxlZDtcblxuICBnZXRGYWRlT3BhY2l0eUVuYWJsZWQ6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzLmZhZGVPcGFjaXR5RW5hYmxlZDtcblxuICBnZXRGYWRlQW1vdW50OiBTZWxlY3RvcjxMLCBGLCBudW1iZXI+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzLmZhZGVBbW91bnQ7XG5cbiAgZ2V0QW5pbWF0ZTogU2VsZWN0b3I8TCwgRiwgYm9vbGVhbj4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3MuYW5pbWF0aW9uRW5hYmxlZDtcblxuICBnZXRJbnZhbGlkTG9jYXRpb25JZHM6IFNlbGVjdG9yPEwsIEYsIChzdHJpbmcgfCBudW1iZXIpW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldExvY2F0aW9uc0Zyb21Qcm9wcywgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbnZhbGlkID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBsb24gPSB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxvbihsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGxhdCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uTGF0KGxvY2F0aW9uKTtcbiAgICAgICAgaWYgKCEoLTkwIDw9IGxhdCAmJiBsYXQgPD0gOTApIHx8ICEoLTE4MCA8PSBsb24gJiYgbG9uIDw9IDE4MCkpIHtcbiAgICAgICAgICBpbnZhbGlkLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW52YWxpZC5sZW5ndGggPiAwID8gaW52YWxpZCA6IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICBnZXRMb2NhdGlvbnM6IFNlbGVjdG9yPEwsIEYsIEl0ZXJhYmxlPEw+IHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zRnJvbVByb3BzLFxuICAgIHRoaXMuZ2V0SW52YWxpZExvY2F0aW9uSWRzLFxuICAgIChsb2NhdGlvbnMsIGludmFsaWRJZHMpID0+IHtcbiAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFpbnZhbGlkSWRzIHx8IGludmFsaWRJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgY29uc3QgaW52YWxpZCA9IG5ldyBTZXQoaW52YWxpZElkcyk7XG4gICAgICBjb25zdCBmaWx0ZXJlZDogTFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBpZiAoIWludmFsaWQuaGFzKGlkKSkge1xuICAgICAgICAgIGZpbHRlcmVkLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbklkczogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldExvY2F0aW9ucywgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpZHMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgbG9jYXRpb25zKSB7XG4gICAgICAgIGlkcy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChpZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcblxuICBnZXRTZWxlY3RlZExvY2F0aW9uc1NldDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zLCAoaWRzKSA9PlxuICAgICAgaWRzICYmIGlkcy5sZW5ndGggPiAwID8gbmV3IFNldChpZHMpIDogdW5kZWZpbmVkLFxuICAgICk7XG5cbiAgZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9uczogU2VsZWN0b3I8TCwgRiwgRltdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldEZsb3dzRnJvbVByb3BzLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbklkcyxcbiAgICAgIChmbG93cywgaWRzKSA9PiB7XG4gICAgICAgIGlmICghaWRzIHx8ICFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3Qgc3JjSWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgICAgY29uc3QgZHN0SWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpO1xuICAgICAgICAgIGlmIChpZHMuaGFzKHNyY0lkKSAmJiBpZHMuaGFzKGRzdElkKSkge1xuICAgICAgICAgICAgZmlsdGVyZWQucHVzaChmbG93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkLnNvcnQoKGE6IEYsIGI6IEYpID0+XG4gICAgICAgICAgZGVzY2VuZGluZyhcbiAgICAgICAgICAgIE1hdGguYWJzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoYSkpLFxuICAgICAgICAgICAgTWF0aC5hYnModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShiKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRBY3R1YWxUaW1lRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsIChmbG93cykgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGxldCBzdGFydCA9IG51bGw7XG4gICAgICBsZXQgZW5kID0gbnVsbDtcbiAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd1RpbWUoZmxvdyk7XG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPiB0aW1lKSBzdGFydCA9IHRpbWU7XG4gICAgICAgICAgaWYgKGVuZCA9PSBudWxsIHx8IGVuZCA8IHRpbWUpIGVuZCA9IHRpbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnQgfHwgIWVuZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBbc3RhcnQsIGVuZF07XG4gICAgfSk7XG5cbiAgZ2V0VGltZUdyYW51bGFyaXR5S2V5OiBTZWxlY3RvcjxMLCBGLCBUaW1lR3JhbnVsYXJpdHlLZXkgfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAgIHRoaXMuZ2V0QWN0dWFsVGltZUV4dGVudCxcbiAgICAgIChmbG93cywgdGltZUV4dGVudCkgPT4ge1xuICAgICAgICBpZiAoIWZsb3dzIHx8ICF0aW1lRXh0ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IG1pbk9yZGVyID0gbWluKGZsb3dzLCAoZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93VGltZShkKTtcbiAgICAgICAgICByZXR1cm4gdCA/IGdldFRpbWVHcmFudWxhcml0eUZvckRhdGUodCkub3JkZXIgOiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1pbk9yZGVyID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHRpbWVHcmFudWxhcml0eSA9IGdldFRpbWVHcmFudWxhcml0eUJ5T3JkZXIobWluT3JkZXIpO1xuICAgICAgICByZXR1cm4gdGltZUdyYW51bGFyaXR5ID8gdGltZUdyYW51bGFyaXR5LmtleSA6IHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRUaW1lRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRBY3R1YWxUaW1lRXh0ZW50LFxuICAgIHRoaXMuZ2V0VGltZUdyYW51bGFyaXR5S2V5LFxuICAgICh0aW1lRXh0ZW50LCB0aW1lR3JhbnVsYXJpdHlLZXkpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVHcmFudWxhcml0eSA9IHRpbWVHcmFudWxhcml0eUtleVxuICAgICAgICA/IGdldFRpbWVHcmFudWxhcml0eUJ5S2V5KHRpbWVHcmFudWxhcml0eUtleSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXRpbWVFeHRlbnQgfHwgIXRpbWVHcmFudWxhcml0eT8uaW50ZXJ2YWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB7aW50ZXJ2YWx9ID0gdGltZUdyYW51bGFyaXR5O1xuICAgICAgcmV0dXJuIFt0aW1lRXh0ZW50WzBdLCBpbnRlcnZhbC5vZmZzZXQoaW50ZXJ2YWwuZmxvb3IodGltZUV4dGVudFsxXSksIDEpXTtcbiAgICB9LFxuICApO1xuXG4gIGdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnNGaWx0ZXJlZEJ5VGltZTogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIEZbXSB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgIHRoaXMuZ2V0VGltZUV4dGVudCxcbiAgICB0aGlzLmdldFNlbGVjdGVkVGltZVJhbmdlLFxuICAgIChmbG93cywgdGltZUV4dGVudCwgdGltZVJhbmdlKSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICAhdGltZUV4dGVudCB8fFxuICAgICAgICAhdGltZVJhbmdlIHx8XG4gICAgICAgICh0aW1lRXh0ZW50WzBdID09PSB0aW1lUmFuZ2VbMF0gJiYgdGltZUV4dGVudFsxXSA9PT0gdGltZVJhbmdlWzFdKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmbG93cztcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbG93cy5maWx0ZXIoKGZsb3cpID0+IHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dUaW1lKGZsb3cpO1xuICAgICAgICByZXR1cm4gdGltZSAmJiB0aW1lUmFuZ2VbMF0gPD0gdGltZSAmJiB0aW1lIDwgdGltZVJhbmdlWzFdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbnNIYXZpbmdGbG93czogU2VsZWN0b3I8TCwgRiwgSXRlcmFibGU8TD4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zLFxuICAgICAgKGZsb3dzLCBsb2NhdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhdGlvbnMgfHwgIWZsb3dzKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgICBjb25zdCB3aXRoRmxvd3MgPSBuZXcgU2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIHdpdGhGbG93cy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpKTtcbiAgICAgICAgICB3aXRoRmxvd3MuYWRkKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgaWYgKHdpdGhGbG93cy5oYXModGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbikpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uc0J5SWQ6IFNlbGVjdG9yPEwsIEYsIE1hcDxzdHJpbmcgfCBudW1iZXIsIEw+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cywgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBsb2NhdGlvbnNCeUlkID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIEw+KCk7XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBsb2NhdGlvbnNCeUlkLnNldCh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGxvY2F0aW9uKSwgbG9jYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvY2F0aW9uc0J5SWQ7XG4gICAgfSk7XG5cbiAgZ2V0TG9jYXRpb25XZWlnaHRHZXR0ZXI6IFNlbGVjdG9yPEwsIEYsIExvY2F0aW9uV2VpZ2h0R2V0dGVyIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLCAoZmxvd3MpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBnZXRMb2NhdGlvbldlaWdodCA9IG1ha2VMb2NhdGlvbldlaWdodEdldHRlcihcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dtYXBEYXRhQWNjZXNzb3JzKCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdldExvY2F0aW9uV2VpZ2h0O1xuICAgIH0pO1xuXG4gIGdldENsdXN0ZXJMZXZlbHM6IFNlbGVjdG9yPEwsIEYsIENsdXN0ZXJMZXZlbHMgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRDbHVzdGVyTGV2ZWxzRnJvbVByb3BzLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3MsXG4gICAgdGhpcy5nZXRMb2NhdGlvbldlaWdodEdldHRlcixcbiAgICAoY2x1c3RlckxldmVsc0Zyb21Qcm9wcywgbG9jYXRpb25zLCBnZXRMb2NhdGlvbldlaWdodCkgPT4ge1xuICAgICAgaWYgKGNsdXN0ZXJMZXZlbHNGcm9tUHJvcHMpIHJldHVybiBjbHVzdGVyTGV2ZWxzRnJvbVByb3BzO1xuICAgICAgaWYgKCFsb2NhdGlvbnMgfHwgIWdldExvY2F0aW9uV2VpZ2h0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY2x1c3RlckxldmVscyA9IGNsdXN0ZXJMb2NhdGlvbnMoXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgZ2V0TG9jYXRpb25XZWlnaHQsXG4gICAgICAgIHtcbiAgICAgICAgICBtYXhab29tOiBNQVhfQ0xVU1RFUl9aT09NX0xFVkVMLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjbHVzdGVyTGV2ZWxzO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Q2x1c3RlckluZGV4OiBTZWxlY3RvcjxMLCBGLCBDbHVzdGVySW5kZXg8Rj4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNCeUlkLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25XZWlnaHRHZXR0ZXIsXG4gICAgdGhpcy5nZXRDbHVzdGVyTGV2ZWxzLFxuICAgIChsb2NhdGlvbnNCeUlkLCBnZXRMb2NhdGlvbldlaWdodCwgY2x1c3RlckxldmVscykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnNCeUlkIHx8ICFnZXRMb2NhdGlvbldlaWdodCB8fCAhY2x1c3RlckxldmVscylcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgY2x1c3RlckluZGV4ID0gYnVpbGRJbmRleDxGPihjbHVzdGVyTGV2ZWxzKTtcbiAgICAgIC8vIEFkZGluZyBtZWFuaW5nZnVsIG5hbWVzXG4gICAgICBhZGRDbHVzdGVyTmFtZXMoXG4gICAgICAgIGNsdXN0ZXJJbmRleCxcbiAgICAgICAgY2x1c3RlckxldmVscyxcbiAgICAgICAgbG9jYXRpb25zQnlJZCxcbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgZ2V0TG9jYXRpb25XZWlnaHQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNsdXN0ZXJJbmRleDtcbiAgICB9LFxuICApO1xuXG4gIGdldEF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9ucyxcbiAgICAoY2x1c3RlckluZGV4LCBzZWxlY3RlZExvY2F0aW9ucyk6IG51bWJlcltdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGlmICghY2x1c3RlckluZGV4KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBtYXhab29tID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgbGV0IG1pblpvb20gPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgICAgIGNvbnN0IGFkanVzdCA9ICh6b25lSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gY2x1c3RlckluZGV4LmdldENsdXN0ZXJCeUlkKHpvbmVJZCk7XG4gICAgICAgIGlmIChjbHVzdGVyKSB7XG4gICAgICAgICAgbWluWm9vbSA9IE1hdGgubWF4KG1pblpvb20sIGNsdXN0ZXIuem9vbSk7XG4gICAgICAgICAgbWF4Wm9vbSA9IE1hdGgubWluKG1heFpvb20sIGNsdXN0ZXIuem9vbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgem9vbSA9IGNsdXN0ZXJJbmRleC5nZXRNaW5ab29tRm9yTG9jYXRpb24oem9uZUlkKTtcbiAgICAgICAgICBtaW5ab29tID0gTWF0aC5tYXgobWluWm9vbSwgem9vbSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGVkTG9jYXRpb25zKSB7XG4gICAgICAgICAgYWRqdXN0KGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2x1c3RlckluZGV4LmF2YWlsYWJsZVpvb21MZXZlbHMuZmlsdGVyKFxuICAgICAgICAobGV2ZWwpID0+IG1pblpvb20gPD0gbGV2ZWwgJiYgbGV2ZWwgPD0gbWF4Wm9vbSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBfZ2V0Q2x1c3Rlclpvb206IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICB0aGlzLmdldFpvb20sXG4gICAgdGhpcy5nZXRBdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscyxcbiAgICAoY2x1c3RlckluZGV4LCBtYXBab29tLCBhdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscykgPT4ge1xuICAgICAgaWYgKCFjbHVzdGVySW5kZXgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzIHx8IG1hcFpvb20gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjbHVzdGVyWm9vbSA9IGZpbmRBcHByb3ByaWF0ZVpvb21MZXZlbChcbiAgICAgICAgYXZhaWxhYmxlQ2x1c3Rlclpvb21MZXZlbHMsXG4gICAgICAgIG1hcFpvb20sXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNsdXN0ZXJab29tO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Q2x1c3Rlclpvb20gPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PiB7XG4gICAgY29uc3Qge3NldHRpbmdzfSA9IHN0YXRlO1xuICAgIGlmICghc2V0dGluZ3MuY2x1c3RlcmluZ0VuYWJsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHNldHRpbmdzLmNsdXN0ZXJpbmdBdXRvIHx8IHNldHRpbmdzLmNsdXN0ZXJpbmdMZXZlbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q2x1c3Rlclpvb20oc3RhdGUsIHByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldHRpbmdzLmNsdXN0ZXJpbmdMZXZlbDtcbiAgfTtcblxuICBnZXRMb2NhdGlvbnNGb3JTZWFyY2hCb3g6IFNlbGVjdG9yPEwsIEYsIChMIHwgQ2x1c3RlcilbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRDbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3MsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgICAgKFxuICAgICAgICBjbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgICAgbG9jYXRpb25zLFxuICAgICAgICBzZWxlY3RlZExvY2F0aW9ucyxcbiAgICAgICAgY2x1c3Rlclpvb20sXG4gICAgICAgIGNsdXN0ZXJJbmRleCxcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3VsdDogKEwgfCBDbHVzdGVyKVtdID0gQXJyYXkuZnJvbShsb2NhdGlvbnMpO1xuICAgICAgICAvLyBpZiAoY2x1c3RlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgLy8gICBpZiAoY2x1c3RlckluZGV4KSB7XG4gICAgICAgIC8vICAgICBjb25zdCB6b29tSXRlbXMgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3Rlck5vZGVzRm9yKGNsdXN0ZXJab29tKTtcbiAgICAgICAgLy8gICAgIGlmICh6b29tSXRlbXMpIHtcbiAgICAgICAgLy8gICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh6b29tSXRlbXMuZmlsdGVyKGlzQ2x1c3RlcikpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChjbHVzdGVySW5kZXggJiYgc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCB0b0FwcGVuZCA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3RlckJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjbHVzdGVyICYmXG4gICAgICAgICAgICAgICFyZXN1bHQuZmluZChcbiAgICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICAgIChpc0xvY2F0aW9uQ2x1c3Rlck5vZGUoZClcbiAgICAgICAgICAgICAgICAgICAgPyBkLmlkXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChkKSkgPT09IGlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdG9BcHBlbmQucHVzaChjbHVzdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvQXBwZW5kLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodG9BcHBlbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldERpZmZNb2RlOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Rmxvd3NGcm9tUHJvcHMsXG4gICAgKGZsb3dzKSA9PiB7XG4gICAgICBpZiAoZmxvd3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICApO1xuXG4gIF9nZXRGbG93bWFwQ29sb3JzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXREaWZmTW9kZSxcbiAgICB0aGlzLmdldENvbG9yU2NoZW1lLFxuICAgIHRoaXMuZ2V0RGFya01vZGUsXG4gICAgdGhpcy5nZXRGYWRlRW5hYmxlZCxcbiAgICB0aGlzLmdldEZhZGVPcGFjaXR5RW5hYmxlZCxcbiAgICB0aGlzLmdldEZhZGVBbW91bnQsXG4gICAgdGhpcy5nZXRBbmltYXRlLFxuICAgIGdldENvbG9ycyxcbiAgKTtcblxuICBnZXRGbG93bWFwQ29sb3JzUkdCQSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuX2dldEZsb3dtYXBDb2xvcnMsXG4gICAgKGZsb3dtYXBDb2xvcnMpID0+IHtcbiAgICAgIHJldHVybiBpc0RpZmZDb2xvcnMoZmxvd21hcENvbG9ycylcbiAgICAgICAgPyBnZXREaWZmQ29sb3JzUkdCQShmbG93bWFwQ29sb3JzKVxuICAgICAgICA6IGdldENvbG9yc1JHQkEoZmxvd21hcENvbG9ycyk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRVbmtub3duTG9jYXRpb25zOiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbklkcyxcbiAgICAgIHRoaXMuZ2V0Rmxvd3NGcm9tUHJvcHMsXG4gICAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgICAoaWRzLCBmbG93cywgZmxvd3NGb3JLbm93bkxvY2F0aW9ucykgPT4ge1xuICAgICAgICBpZiAoIWlkcyB8fCAhZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmbG93c0Zvcktub3duTG9jYXRpb25zXG4gICAgICAgICAgLy8gJiYgZmxvd3MubGVuZ3RoID09PSBmbG93c0Zvcktub3duTG9jYXRpb25zLmxlbmd0aFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBpZiAoIWlkcy5oYXModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpKSlcbiAgICAgICAgICAgIG1pc3NpbmcuYWRkKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KSk7XG4gICAgICAgICAgaWYgKCFpZHMuaGFzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdykpKVxuICAgICAgICAgICAgbWlzc2luZy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pc3Npbmc7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3M6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgIHRoaXMuZ2V0Q2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zRmlsdGVyZWRCeVRpbWUsXG4gICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICB0aGlzLmdldFRpbWVFeHRlbnQsXG4gICAgKGNsdXN0ZXJUcmVlLCBpc0NsdXN0ZXJpbmdFbmFibGVkLCBmbG93cywgY2x1c3Rlclpvb20sIHRpbWVFeHRlbnQpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBsZXQgYWdncmVnYXRlZDogKEYgfCBBZ2dyZWdhdGVGbG93KVtdO1xuICAgICAgaWYgKGlzQ2x1c3RlcmluZ0VuYWJsZWQgJiYgY2x1c3RlclRyZWUgJiYgY2x1c3Rlclpvb20gIT0gbnVsbCkge1xuICAgICAgICBhZ2dyZWdhdGVkID0gY2x1c3RlclRyZWUuYWdncmVnYXRlRmxvd3MoXG4gICAgICAgICAgLy8gVE9ETzogYWdncmVnYXRlIGFjcm9zcyB0aW1lXG4gICAgICAgICAgLy8gdGltZUV4dGVudCAhPSBudWxsXG4gICAgICAgICAgLy8gICA/IGFnZ3JlZ2F0ZUZsb3dzKGZsb3dzKSAvLyBjbHVzdGVyVHJlZS5hZ2dyZWdhdGVGbG93cyB3b24ndCBhZ2dyZWdhdGUgdW5jbHVzdGVyZWQgYWNyb3NzIHRpbWVcbiAgICAgICAgICAvLyAgIDogZmxvd3MsXG4gICAgICAgICAgZmxvd3MsXG4gICAgICAgICAgY2x1c3Rlclpvb20sXG4gICAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVGbG93cyhcbiAgICAgICAgICBmbG93cyxcbiAgICAgICAgICB0aGlzLmFjY2Vzc29ycy5nZXRGbG93bWFwRGF0YUFjY2Vzc29ycygpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYWdncmVnYXRlZC5zb3J0KChhLCBiKSA9PlxuICAgICAgICBkZXNjZW5kaW5nKFxuICAgICAgICAgIE1hdGguYWJzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoYSkpLFxuICAgICAgICAgIE1hdGguYWJzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoYikpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGVkO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0RXhwYW5kZWRTZWxlY3RlZExvY2F0aW9uc1NldDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgICAoY2x1c3RlcmluZ0VuYWJsZWQsIHNlbGVjdGVkTG9jYXRpb25zLCBjbHVzdGVySW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZExvY2F0aW9ucyB8fCAhY2x1c3RlckluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb25JZCBvZiBzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3RlckJ5SWQobG9jYXRpb25JZCk7XG4gICAgICAgICAgaWYgKGNsdXN0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gY2x1c3RlckluZGV4LmV4cGFuZENsdXN0ZXIoY2x1c3Rlcik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5hZGQoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKGxvY2F0aW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldFRvdGFsQ291bnRzQnlUaW1lOiBTZWxlY3RvcjxMLCBGLCBDb3VudEJ5VGltZVtdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgICB0aGlzLmdldFRpbWVHcmFudWxhcml0eUtleSxcbiAgICAgIHRoaXMuZ2V0VGltZUV4dGVudCxcbiAgICAgIHRoaXMuZ2V0RXhwYW5kZWRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgKFxuICAgICAgICBmbG93cyxcbiAgICAgICAgdGltZUdyYW51bGFyaXR5S2V5LFxuICAgICAgICB0aW1lRXh0ZW50LFxuICAgICAgICBzZWxlY3RlZExvY2F0aW9uU2V0LFxuICAgICAgICBsb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgdGltZUdyYW51bGFyaXR5ID0gdGltZUdyYW51bGFyaXR5S2V5XG4gICAgICAgICAgPyBnZXRUaW1lR3JhbnVsYXJpdHlCeUtleSh0aW1lR3JhbnVsYXJpdHlLZXkpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghZmxvd3MgfHwgIXRpbWVHcmFudWxhcml0eSB8fCAhdGltZUV4dGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgYnlUaW1lID0gZmxvd3MucmVkdWNlKChtLCBmbG93KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc0Zsb3dJblNlbGVjdGlvbihcbiAgICAgICAgICAgICAgZmxvdyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRMb2NhdGlvblNldCxcbiAgICAgICAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGltZUdyYW51bGFyaXR5XG4gICAgICAgICAgICAgIC5pbnRlcnZhbCh0aGlzLmFjY2Vzc29ycy5nZXRGbG93VGltZShmbG93KSlcbiAgICAgICAgICAgICAgLmdldFRpbWUoKTtcbiAgICAgICAgICAgIG0uc2V0KFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIChtLmdldChrZXkpID8/IDApICsgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmbG93KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICB9LCBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpKTtcblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShieVRpbWUuZW50cmllcygpKS5tYXAoKFttaWxsaXMsIGNvdW50XSkgPT4gKHtcbiAgICAgICAgICB0aW1lOiBuZXcgRGF0ZShtaWxsaXMpLFxuICAgICAgICAgIGNvdW50LFxuICAgICAgICB9KSk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0TWF4TG9jYXRpb25DaXJjbGVTaXplOiBTZWxlY3RvcjxMLCBGLCBudW1iZXI+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvblRvdGFsc0VuYWJsZWQsXG4gICAgKGxvY2F0aW9uVG90YWxzRW5hYmxlZCkgPT4gKGxvY2F0aW9uVG90YWxzRW5hYmxlZCA/IDE3IDogMSksXG4gICk7XG5cbiAgZ2V0Vmlld3BvcnRCb3VuZGluZ0JveDogU2VsZWN0b3I8TCwgRiwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0Vmlld3BvcnQsXG4gICAgICB0aGlzLmdldE1heExvY2F0aW9uQ2lyY2xlU2l6ZSxcbiAgICAgIGdldFZpZXdwb3J0Qm91bmRpbmdCb3gsXG4gICAgKTtcblxuICBnZXRMb2NhdGlvbnNGb3Jab29tOiBTZWxlY3RvcjxMLCBGLCBJdGVyYWJsZTxMPiB8IENsdXN0ZXJOb2RlW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uc0hhdmluZ0Zsb3dzLFxuICAgICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgICB0aGlzLmdldENsdXN0ZXJab29tLFxuICAgICAgKGNsdXN0ZXJpbmdFbmFibGVkLCBsb2NhdGlvbnNIYXZpbmdGbG93cywgY2x1c3RlckluZGV4LCBjbHVzdGVyWm9vbSkgPT4ge1xuICAgICAgICBpZiAoY2x1c3RlcmluZ0VuYWJsZWQgJiYgY2x1c3RlckluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGNsdXN0ZXJJbmRleC5nZXRDbHVzdGVyTm9kZXNGb3IoY2x1c3Rlclpvb20pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBsb2NhdGlvbnNIYXZpbmdGbG93cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uVG90YWxzOiBTZWxlY3RvcjxcbiAgICBMLFxuICAgIEYsXG4gICAgTWFwPHN0cmluZyB8IG51bWJlciwgTG9jYXRpb25Ub3RhbHM+IHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uc0Zvclpvb20sXG4gICAgdGhpcy5nZXRTb3J0ZWRBZ2dyZWdhdGVkRmlsdGVyZWRGbG93cyxcbiAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgIHRoaXMuZ2V0TG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgIChsb2NhdGlvbnMsIGZsb3dzLCBzZWxlY3RlZExvY2F0aW9uc1NldCwgbG9jYXRpb25GaWx0ZXJNb2RlKSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdG90YWxzID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIExvY2F0aW9uVG90YWxzPigpO1xuICAgICAgY29uc3QgYWRkID0gKFxuICAgICAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBkOiBQYXJ0aWFsPExvY2F0aW9uVG90YWxzPixcbiAgICAgICk6IExvY2F0aW9uVG90YWxzID0+IHtcbiAgICAgICAgY29uc3QgcnYgPSB0b3RhbHMuZ2V0KGlkKSA/PyB7XG4gICAgICAgICAgaW5jb21pbmdDb3VudDogMCxcbiAgICAgICAgICBvdXRnb2luZ0NvdW50OiAwLFxuICAgICAgICAgIGludGVybmFsQ291bnQ6IDAsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChkLmluY29taW5nQ291bnQgIT0gbnVsbCkgcnYuaW5jb21pbmdDb3VudCArPSBkLmluY29taW5nQ291bnQ7XG4gICAgICAgIGlmIChkLm91dGdvaW5nQ291bnQgIT0gbnVsbCkgcnYub3V0Z29pbmdDb3VudCArPSBkLm91dGdvaW5nQ291bnQ7XG4gICAgICAgIGlmIChkLmludGVybmFsQ291bnQgIT0gbnVsbCkgcnYuaW50ZXJuYWxDb3VudCArPSBkLmludGVybmFsQ291bnQ7XG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH07XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmxvd3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oZiwgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZik7XG4gICAgICAgICAgY29uc3QgZGVzdElkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmKTtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZik7XG4gICAgICAgICAgaWYgKG9yaWdpbklkID09PSBkZXN0SWQpIHtcbiAgICAgICAgICAgIHRvdGFscy5zZXQob3JpZ2luSWQsIGFkZChvcmlnaW5JZCwge2ludGVybmFsQ291bnQ6IGNvdW50fSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b3RhbHMuc2V0KG9yaWdpbklkLCBhZGQob3JpZ2luSWQsIHtvdXRnb2luZ0NvdW50OiBjb3VudH0pKTtcbiAgICAgICAgICAgIHRvdGFscy5zZXQoZGVzdElkLCBhZGQoZGVzdElkLCB7aW5jb21pbmdDb3VudDogY291bnR9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdG90YWxzO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25zVHJlZTogU2VsZWN0b3I8TCwgRiwgS0RCdXNoVHJlZT4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uc0Zvclpvb20sXG4gICAgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgS0RCdXNoKFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgKGxvY2F0aW9uOiBMIHwgQ2x1c3Rlck5vZGUpID0+XG4gICAgICAgICAgbG5nWCh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxvbihsb2NhdGlvbikpLFxuICAgICAgICAobG9jYXRpb246IEwgfCBDbHVzdGVyTm9kZSkgPT5cbiAgICAgICAgICBsYXRZKHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uTGF0KGxvY2F0aW9uKSksXG4gICAgICApO1xuICAgIH0sXG4gICk7XG5cbiAgX2dldExvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zVHJlZSxcbiAgICAgIHRoaXMuZ2V0Vmlld3BvcnRCb3VuZGluZ0JveCxcbiAgICAgICh0cmVlOiBLREJ1c2hUcmVlLCBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkgPT4ge1xuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLl9nZXRMb2NhdGlvbnNJbkJib3hJbmRpY2VzKHRyZWUsIGJib3gpO1xuICAgICAgICBpZiAoaWRzKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBTZXQoXG4gICAgICAgICAgICBpZHMubWFwKChpZHg6IG51bWJlcikgPT4gdHJlZS5wb2ludHNbaWR4XS5pZCkgYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0OiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcihcbiAgICAgIGRlZmF1bHRNZW1vaXplLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgKFxuICAgICAgICBzMTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgICAgIHMyOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgaW5kZXg6IG51bWJlcixcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoczEgPT09IHMyKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHMxID09IG51bGwgfHwgczIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoczEuc2l6ZSAhPT0gczIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgczEpIGlmICghczIuaGFzKGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICApKFxuICAgICAgdGhpcy5fZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgKGxvY2F0aW9uSWRzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAoIWxvY2F0aW9uSWRzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbG9jYXRpb25JZHM7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0VG90YWxVbmZpbHRlcmVkQ291bnQ6IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgKGZsb3dzKSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGZsb3dzLnJlZHVjZShcbiAgICAgICAgKG0sIGZsb3cpID0+IG0gKyB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIGdldFRvdGFsRmlsdGVyZWRDb3VudDogU2VsZWN0b3I8TCwgRiwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAoZmxvd3MsIHNlbGVjdGVkTG9jYXRpb25TZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSkgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNvdW50ID0gZmxvd3MucmVkdWNlKChtLCBmbG93KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKGZsb3csIHNlbGVjdGVkTG9jYXRpb25TZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG0gKyB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGZsb3cpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfSwgMCk7XG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfSxcbiAgKTtcblxuICBfZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQ6IFNlbGVjdG9yPEwsIEYsIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldExvY2F0aW9uVG90YWxzLCAobG9jYXRpb25Ub3RhbHMpID0+XG4gICAgICBjYWxjTG9jYXRpb25Ub3RhbHNFeHRlbnQobG9jYXRpb25Ub3RhbHMsIHVuZGVmaW5lZCksXG4gICAgKTtcblxuICBfZ2V0TG9jYXRpb25Ub3RhbHNGb3JWaWV3cG9ydEV4dGVudDogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgKGxvY2F0aW9uVG90YWxzLCBsb2NhdGlvbnNJblZpZXdwb3J0KSA9PlxuICAgICAgY2FsY0xvY2F0aW9uVG90YWxzRXh0ZW50KGxvY2F0aW9uVG90YWxzLCBsb2NhdGlvbnNJblZpZXdwb3J0KSxcbiAgKTtcblxuICBnZXRMb2NhdGlvblRvdGFsc0V4dGVudCA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHN0YXRlLnNldHRpbmdzLmFkYXB0aXZlU2NhbGVzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldExvY2F0aW9uVG90YWxzRm9yVmlld3BvcnRFeHRlbnQoc3RhdGUsIHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldExvY2F0aW9uVG90YWxzRXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfVxuICB9O1xuXG4gIGdldEZsb3dzRm9yRmxvd21hcExheWVyOiBTZWxlY3RvcjxMLCBGLCAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgICB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgIHRoaXMuZ2V0TWF4VG9wRmxvd3NEaXNwbGF5TnVtLFxuICAgICAgKFxuICAgICAgICBmbG93cyxcbiAgICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgICBzZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKCFmbG93cyB8fCAhbG9jYXRpb25JZHNJblZpZXdwb3J0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBwaWNrZWQ6IChGIHwgQWdncmVnYXRlRmxvdylbXSA9IFtdO1xuICAgICAgICBsZXQgcGlja2VkQ291bnQgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgICAgY29uc3QgZGVzdCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LmhhcyhvcmlnaW4pIHx8XG4gICAgICAgICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQuaGFzKGRlc3QpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgZmxvdyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAob3JpZ2luICE9PSBkZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gZXhjbHVkZSBzZWxmLWxvb3BzXG4gICAgICAgICAgICAgICAgcGlja2VkLnB1c2goZmxvdyk7XG4gICAgICAgICAgICAgICAgcGlja2VkQ291bnQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBPbmx5IGtlZXAgdG9wXG4gICAgICAgICAgaWYgKHBpY2tlZENvdW50ID4gbWF4VG9wRmxvd3NEaXNwbGF5TnVtKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3N1bWluZyB0aGV5IGFyZSBzb3J0ZWQgaW4gZGVzY2VuZGluZyBvcmRlcixcbiAgICAgICAgLy8gd2UgbmVlZCBhc2NlbmRpbmcgZm9yIHJlbmRlcmluZ1xuICAgICAgICByZXR1cm4gcGlja2VkLnJldmVyc2UoKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBfZ2V0Rmxvd01hZ25pdHVkZUV4dGVudDogU2VsZWN0b3I8TCwgRiwgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRBZ2dyZWdhdGVkRmlsdGVyZWRGbG93cyxcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgIChmbG93cywgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSkgPT4ge1xuICAgICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnY6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBmbG93cykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmKSAhPT1cbiAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmKSAmJlxuICAgICAgICAgICAgdGhpcy5pc0Zsb3dJblNlbGVjdGlvbihmLCBzZWxlY3RlZExvY2F0aW9uc1NldCwgbG9jYXRpb25GaWx0ZXJNb2RlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGYpO1xuICAgICAgICAgICAgaWYgKHJ2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcnYgPSBbY291bnQsIGNvdW50XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChjb3VudCA8IHJ2WzBdKSBydlswXSA9IGNvdW50O1xuICAgICAgICAgICAgICBpZiAoY291bnQgPiBydlsxXSkgcnZbMV0gPSBjb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSxcbiAgICApO1xuXG4gIF9nZXRBZGFwdGl2ZUZsb3dNYWduaXR1ZGVFeHRlbnQ6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldEZsb3dzRm9yRmxvd21hcExheWVyLCAoZmxvd3MpID0+IHtcbiAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJ2ID0gZXh0ZW50KGZsb3dzLCB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKTtcbiAgICByZXR1cm4gcnZbMF0gIT09IHVuZGVmaW5lZCAmJiBydlsxXSAhPT0gdW5kZWZpbmVkID8gcnYgOiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGdldEZsb3dNYWduaXR1ZGVFeHRlbnQgPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICk6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChzdGF0ZS5zZXR0aW5ncy5hZGFwdGl2ZVNjYWxlc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRBZGFwdGl2ZUZsb3dNYWduaXR1ZGVFeHRlbnQoc3RhdGUsIHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEZsb3dNYWduaXR1ZGVFeHRlbnQoc3RhdGUsIHByb3BzKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0TG9jYXRpb25NYXhBYnNUb3RhbEdldHRlciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgKGxvY2F0aW9uVG90YWxzKSA9PiB7XG4gICAgICByZXR1cm4gKGxvY2F0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGxvY2F0aW9uVG90YWxzPy5nZXQobG9jYXRpb25JZCk7XG4gICAgICAgIGlmICghdG90YWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgICBNYXRoLmFicyh0b3RhbC5pbmNvbWluZ0NvdW50ICsgdG90YWwuaW50ZXJuYWxDb3VudCksXG4gICAgICAgICAgTWF0aC5hYnModG90YWwub3V0Z29pbmdDb3VudCArIHRvdGFsLmludGVybmFsQ291bnQpLFxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9LFxuICApO1xuXG4gIGdldEZsb3dUaGlja25lc3NTY2FsZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Rmxvd01hZ25pdHVkZUV4dGVudCxcbiAgICBnZXRGbG93VGhpY2tuZXNzU2NhbGUsXG4gICk7XG5cbiAgZ2V0Q2lyY2xlU2l6ZVNjYWxlID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRNYXhMb2NhdGlvbkNpcmNsZVNpemUsXG4gICAgdGhpcy5nZXRMb2NhdGlvblRvdGFsc0VuYWJsZWQsXG4gICAgdGhpcy5nZXRMb2NhdGlvblRvdGFsc0V4dGVudCxcbiAgICAobWF4TG9jYXRpb25DaXJjbGVTaXplLCBsb2NhdGlvblRvdGFsc0VuYWJsZWQsIGxvY2F0aW9uVG90YWxzRXh0ZW50KSA9PiB7XG4gICAgICBpZiAoIWxvY2F0aW9uVG90YWxzRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gKCkgPT4gbWF4TG9jYXRpb25DaXJjbGVTaXplO1xuICAgICAgfVxuICAgICAgaWYgKCFsb2NhdGlvblRvdGFsc0V4dGVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBzY2FsZVNxcnQoKVxuICAgICAgICAucmFuZ2UoWzAsIG1heExvY2F0aW9uQ2lyY2xlU2l6ZV0pXG4gICAgICAgIC5kb21haW4oW1xuICAgICAgICAgIDAsXG4gICAgICAgICAgLy8gc2hvdWxkIHN1cHBvcnQgZGlmZiBtb2RlIHRvb1xuICAgICAgICAgIE1hdGgubWF4LmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGxvY2F0aW9uVG90YWxzRXh0ZW50Lm1hcCgoeDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PlxuICAgICAgICAgICAgICBNYXRoLmFicyh4IHx8IDApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICBdKTtcbiAgICB9LFxuICApO1xuXG4gIGdldEluQ2lyY2xlU2l6ZUdldHRlciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2lyY2xlU2l6ZVNjYWxlLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgKGNpcmNsZVNpemVTY2FsZSwgbG9jYXRpb25Ub3RhbHMpID0+IHtcbiAgICAgIHJldHVybiAobG9jYXRpb25JZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gbG9jYXRpb25Ub3RhbHM/LmdldChsb2NhdGlvbklkKTtcbiAgICAgICAgaWYgKHRvdGFsICYmIGNpcmNsZVNpemVTY2FsZSkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjaXJjbGVTaXplU2NhbGUoXG4gICAgICAgICAgICAgIE1hdGguYWJzKHRvdGFsLmluY29taW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgICAgICkgfHwgMFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9O1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0T3V0Q2lyY2xlU2l6ZUdldHRlciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2lyY2xlU2l6ZVNjYWxlLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHMsXG4gICAgKGNpcmNsZVNpemVTY2FsZSwgbG9jYXRpb25Ub3RhbHMpID0+IHtcbiAgICAgIHJldHVybiAobG9jYXRpb25JZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gbG9jYXRpb25Ub3RhbHM/LmdldChsb2NhdGlvbklkKTtcbiAgICAgICAgaWYgKHRvdGFsICYmIGNpcmNsZVNpemVTY2FsZSkge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjaXJjbGVTaXplU2NhbGUoXG4gICAgICAgICAgICAgIE1hdGguYWJzKHRvdGFsLm91dGdvaW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgICAgICkgfHwgMFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9O1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0U29ydGVkTG9jYXRpb25zRm9yWm9vbTogU2VsZWN0b3I8TCwgRiwgTFtdIHwgQ2x1c3Rlck5vZGVbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnNGb3Jab29tLFxuICAgICAgdGhpcy5nZXRJbkNpcmNsZVNpemVHZXR0ZXIsXG4gICAgICB0aGlzLmdldE91dENpcmNsZVNpemVHZXR0ZXIsXG4gICAgICAobG9jYXRpb25zLCBnZXRJbkNpcmNsZVNpemUsIGdldE91dENpcmNsZVNpemUpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG5leHRMb2NhdGlvbnMgPSBbLi4ubG9jYXRpb25zXSBhcyBMW10gfCBDbHVzdGVyTm9kZVtdO1xuICAgICAgICByZXR1cm4gbmV4dExvY2F0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWRBID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChhKTtcbiAgICAgICAgICBjb25zdCBpZEIgPSB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGIpO1xuICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcoXG4gICAgICAgICAgICBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUoaWRBKSwgZ2V0T3V0Q2lyY2xlU2l6ZShpZEEpKSxcbiAgICAgICAgICAgIE1hdGgubWF4KGdldEluQ2lyY2xlU2l6ZShpZEIpLCBnZXRPdXRDaXJjbGVTaXplKGlkQikpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllcjogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIEFycmF5PEwgfCBDbHVzdGVyTm9kZT4gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0U29ydGVkTG9jYXRpb25zRm9yWm9vbSxcbiAgICAvLyB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAoXG4gICAgICBsb2NhdGlvbnMsXG4gICAgICAvLyBsb2NhdGlvbklkc0luVmlld3BvcnRcbiAgICApID0+IHtcbiAgICAgIC8vIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgLy8gaWYgKCFsb2NhdGlvbklkc0luVmlld3BvcnQpIHJldHVybiBsb2NhdGlvbnM7XG4gICAgICAvLyBpZiAobG9jYXRpb25JZHNJblZpZXdwb3J0LnNpemUgPT09IGxvY2F0aW9ucy5sZW5ndGgpIHJldHVybiBsb2NhdGlvbnM7XG4gICAgICAvLyBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgLy8gZm9yIChjb25zdCBsb2Mgb2YgbG9jYXRpb25zKSB7XG4gICAgICAvLyAgIGlmIChsb2NhdGlvbklkc0luVmlld3BvcnQuaGFzKGxvYy5pZCkpIHtcbiAgICAgIC8vICAgICBmaWx0ZXJlZC5wdXNoKGxvYyk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIC8vIHJldHVybiBsb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgLy8gICAobG9jOiBMIHwgQ2x1c3Rlck5vZGUpID0+IGxvY2F0aW9uSWRzSW5WaWV3cG9ydCEuaGFzKGxvYy5pZClcbiAgICAgIC8vICk7XG4gICAgICAvLyBUT0RPOiByZXR1cm4gbG9jYXRpb24gaW4gdmlld3BvcnQgKyBcImNvbm5lY3RlZFwiIG9uZXNcbiAgICAgIHJldHVybiBsb2NhdGlvbnM7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXJCeUlkOiBTZWxlY3RvcjxcbiAgICBMLFxuICAgIEYsXG4gICAgTWFwPHN0cmluZywgTCB8IENsdXN0ZXJOb2RlPiB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXIsIChsb2NhdGlvbnMpID0+IHtcbiAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbG9jYXRpb25zLnJlZHVjZShcbiAgICAgIChtLCBkKSA9PiAobS5zZXQodGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChkKSwgZCksIG0pLFxuICAgICAgbmV3IE1hcCgpLFxuICAgICk7XG4gIH0pO1xuXG4gIGdldExvY2F0aW9uT3JDbHVzdGVyQnlJZEdldHRlciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zQnlJZCxcbiAgICAoY2x1c3RlckluZGV4LCBsb2NhdGlvbnNCeUlkKSA9PiB7XG4gICAgICByZXR1cm4gKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgICAgIGNsdXN0ZXJJbmRleD8uZ2V0Q2x1c3RlckJ5SWQoaWQpID8/IGxvY2F0aW9uc0J5SWQ/LmdldChpZCk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMYXllcnNEYXRhOiBTZWxlY3RvcjxMLCBGLCBMYXllcnNEYXRhPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyLFxuICAgIHRoaXMuZ2V0Rmxvd3NGb3JGbG93bWFwTGF5ZXIsXG4gICAgdGhpcy5nZXRGbG93bWFwQ29sb3JzUkdCQSxcbiAgICB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllckJ5SWQsXG4gICAgdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgdGhpcy5nZXRJbkNpcmNsZVNpemVHZXR0ZXIsXG4gICAgdGhpcy5nZXRPdXRDaXJjbGVTaXplR2V0dGVyLFxuICAgIHRoaXMuZ2V0Rmxvd1RoaWNrbmVzc1NjYWxlLFxuICAgIHRoaXMuZ2V0QW5pbWF0ZSxcbiAgICB0aGlzLmdldExvY2F0aW9uTGFiZWxzRW5hYmxlZCxcbiAgICAoXG4gICAgICBsb2NhdGlvbnMsXG4gICAgICBmbG93cyxcbiAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICBsb2NhdGlvbnNCeUlkLFxuICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgZ2V0SW5DaXJjbGVTaXplLFxuICAgICAgZ2V0T3V0Q2lyY2xlU2l6ZSxcbiAgICAgIGZsb3dUaGlja25lc3NTY2FsZSxcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQsXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUxheWVyc0RhdGEoXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICAgIGxvY2F0aW9uc0J5SWQsXG4gICAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgICAgZ2V0SW5DaXJjbGVTaXplLFxuICAgICAgICBnZXRPdXRDaXJjbGVTaXplLFxuICAgICAgICBmbG93VGhpY2tuZXNzU2NhbGUsXG4gICAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICAgIGxvY2F0aW9uTGFiZWxzRW5hYmxlZCxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBwcmVwYXJlTGF5ZXJzRGF0YShzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pOiBMYXllcnNEYXRhIHtcbiAgICBjb25zdCBsb2NhdGlvbnMgPSB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllcihzdGF0ZSwgcHJvcHMpIHx8IFtdO1xuICAgIGNvbnN0IGZsb3dzID0gdGhpcy5nZXRGbG93c0ZvckZsb3dtYXBMYXllcihzdGF0ZSwgcHJvcHMpIHx8IFtdO1xuICAgIGNvbnN0IGZsb3dtYXBDb2xvcnMgPSB0aGlzLmdldEZsb3dtYXBDb2xvcnNSR0JBKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgbG9jYXRpb25zQnlJZCA9IHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyQnlJZChzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGxvY2F0aW9uSWRzSW5WaWV3cG9ydCA9IHRoaXMuZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0KHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgZ2V0SW5DaXJjbGVTaXplID0gdGhpcy5nZXRJbkNpcmNsZVNpemVHZXR0ZXIoc3RhdGUsIHByb3BzKTtcbiAgICBjb25zdCBnZXRPdXRDaXJjbGVTaXplID0gdGhpcy5nZXRPdXRDaXJjbGVTaXplR2V0dGVyKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgZmxvd1RoaWNrbmVzc1NjYWxlID0gdGhpcy5nZXRGbG93VGhpY2tuZXNzU2NhbGUoc3RhdGUsIHByb3BzKTtcbiAgICBjb25zdCBsb2NhdGlvbkxhYmVsc0VuYWJsZWQgPSB0aGlzLmdldExvY2F0aW9uTGFiZWxzRW5hYmxlZChzdGF0ZSwgcHJvcHMpO1xuICAgIHJldHVybiB0aGlzLl9wcmVwYXJlTGF5ZXJzRGF0YShcbiAgICAgIGxvY2F0aW9ucyxcbiAgICAgIGZsb3dzLFxuICAgICAgZmxvd21hcENvbG9ycyxcbiAgICAgIGxvY2F0aW9uc0J5SWQsXG4gICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgICBnZXRJbkNpcmNsZVNpemUsXG4gICAgICBnZXRPdXRDaXJjbGVTaXplLFxuICAgICAgZmxvd1RoaWNrbmVzc1NjYWxlLFxuICAgICAgc3RhdGUuc2V0dGluZ3MuYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgIGxvY2F0aW9uTGFiZWxzRW5hYmxlZCxcbiAgICApO1xuICB9XG5cbiAgX3ByZXBhcmVMYXllcnNEYXRhKFxuICAgIGxvY2F0aW9uczogKEwgfCBDbHVzdGVyTm9kZSlbXSB8IHVuZGVmaW5lZCxcbiAgICBmbG93czogKEYgfCBBZ2dyZWdhdGVGbG93KVtdIHwgdW5kZWZpbmVkLFxuICAgIGZsb3dtYXBDb2xvcnM6IERpZmZDb2xvcnNSR0JBIHwgQ29sb3JzUkdCQSxcbiAgICBsb2NhdGlvbnNCeUlkOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBMIHwgQ2x1c3Rlck5vZGU+IHwgdW5kZWZpbmVkLFxuICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQsXG4gICAgZ2V0SW5DaXJjbGVTaXplOiAobG9jYXRpb25JZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgZ2V0T3V0Q2lyY2xlU2l6ZTogKGxvY2F0aW9uSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIGZsb3dUaGlja25lc3NTY2FsZTogU2NhbGVMaW5lYXI8bnVtYmVyLCBudW1iZXIsIG5ldmVyPiB8IHVuZGVmaW5lZCxcbiAgICBhbmltYXRpb25FbmFibGVkOiBib29sZWFuLFxuICAgIGxvY2F0aW9uTGFiZWxzRW5hYmxlZDogYm9vbGVhbixcbiAgKTogTGF5ZXJzRGF0YSB7XG4gICAgaWYgKCFsb2NhdGlvbnMpIGxvY2F0aW9ucyA9IFtdO1xuICAgIGlmICghZmxvd3MpIGZsb3dzID0gW107XG4gICAgY29uc3Qge1xuICAgICAgZ2V0Rmxvd09yaWdpbklkLFxuICAgICAgZ2V0Rmxvd0Rlc3RJZCxcbiAgICAgIGdldEZsb3dNYWduaXR1ZGUsXG4gICAgICBnZXRMb2NhdGlvbklkLFxuICAgICAgZ2V0TG9jYXRpb25Mb24sXG4gICAgICBnZXRMb2NhdGlvbkxhdCxcbiAgICAgIGdldExvY2F0aW9uTmFtZSxcbiAgICB9ID0gdGhpcy5hY2Nlc3NvcnM7XG5cbiAgICBjb25zdCBmbG93TWFnbml0dWRlRXh0ZW50ID0gZXh0ZW50KGZsb3dzLCAoZikgPT4gZ2V0Rmxvd01hZ25pdHVkZShmKSkgYXMgW1xuICAgICAgbnVtYmVyLFxuICAgICAgbnVtYmVyLFxuICAgIF07XG4gICAgY29uc3QgZmxvd0NvbG9yU2NhbGUgPSBnZXRGbG93Q29sb3JTY2FsZShcbiAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICBmbG93TWFnbml0dWRlRXh0ZW50LFxuICAgICAgZmFsc2UsXG4gICAgKTtcblxuICAgIC8vIFVzaW5nIGEgZ2VuZXJhdG9yIGhlcmUgaGVscHMgdG8gYXZvaWQgY3JlYXRpbmcgaW50ZXJtZWRpYXJ5IGFycmF5c1xuICAgIGNvbnN0IGNpcmNsZVBvc2l0aW9ucyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgeWllbGQgZ2V0TG9jYXRpb25Mb24obG9jYXRpb24pO1xuICAgICAgICAgIHlpZWxkIGdldExvY2F0aW9uTGF0KGxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuXG4gICAgLy8gVE9ETzogZGlmZiBtb2RlXG4gICAgY29uc3QgY2lyY2xlQ29sb3IgPSBpc0RpZmZDb2xvcnNSR0JBKGZsb3dtYXBDb2xvcnMpXG4gICAgICA/IGZsb3dtYXBDb2xvcnMucG9zaXRpdmUubG9jYXRpb25DaXJjbGVzLmlubmVyXG4gICAgICA6IGZsb3dtYXBDb2xvcnMubG9jYXRpb25DaXJjbGVzLmlubmVyO1xuXG4gICAgY29uc3QgY2lyY2xlQ29sb3JzID0gVWludDhBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgeWllbGQqIGNpcmNsZUNvbG9yO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG5cbiAgICBjb25zdCBpbkNpcmNsZVJhZGlpID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBsb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IGdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICAgIHlpZWxkIGxvY2F0aW9uSWRzSW5WaWV3cG9ydD8uaGFzKGlkKSA/IGdldEluQ2lyY2xlU2l6ZShpZCkgOiAxLjA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCBvdXRDaXJjbGVSYWRpaSA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBnZXRMb2NhdGlvbklkKGxvY2F0aW9uKTtcbiAgICAgICAgICB5aWVsZCBsb2NhdGlvbklkc0luVmlld3BvcnQ/LmhhcyhpZCkgPyBnZXRPdXRDaXJjbGVTaXplKGlkKSA6IDEuMDtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc291cmNlUG9zaXRpb25zID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3QgbG9jID0gbG9jYXRpb25zQnlJZD8uZ2V0KGdldEZsb3dPcmlnaW5JZChmbG93KSk7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25Mb24obG9jKSA6IDA7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25MYXQobG9jKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRQb3NpdGlvbnMgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBjb25zdCBsb2MgPSBsb2NhdGlvbnNCeUlkPy5nZXQoZ2V0Rmxvd0Rlc3RJZChmbG93KSk7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25Mb24obG9jKSA6IDA7XG4gICAgICAgICAgeWllbGQgbG9jID8gZ2V0TG9jYXRpb25MYXQobG9jKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCB0aGlja25lc3NlcyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIHlpZWxkIGZsb3dUaGlja25lc3NTY2FsZVxuICAgICAgICAgICAgPyBmbG93VGhpY2tuZXNzU2NhbGUoZ2V0Rmxvd01hZ25pdHVkZShmbG93KSkgfHwgMFxuICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG4gICAgY29uc3QgZW5kcG9pbnRPZmZzZXRzID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSBnZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgICAgY29uc3QgZGVzdElkID0gZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICAgICAgICB5aWVsZCBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUob3JpZ2luSWQpLCBnZXRPdXRDaXJjbGVTaXplKG9yaWdpbklkKSk7XG4gICAgICAgICAgeWllbGQgTWF0aC5tYXgoZ2V0SW5DaXJjbGVTaXplKGRlc3RJZCksIGdldE91dENpcmNsZVNpemUoZGVzdElkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcbiAgICBjb25zdCBmbG93TGluZUNvbG9ycyA9IFVpbnQ4QXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICB5aWVsZCogZmxvd0NvbG9yU2NhbGUoZ2V0Rmxvd01hZ25pdHVkZShmbG93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YWdnZXJpbmdWYWx1ZXMgPSBhbmltYXRpb25FbmFibGVkXG4gICAgICA/IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgeWllbGQgbmV3IGFsZWEoYCR7Z2V0Rmxvd09yaWdpbklkKGYpfS0ke2dldEZsb3dEZXN0SWQoZil9YCkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpLFxuICAgICAgICApXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBjaXJjbGVBdHRyaWJ1dGVzOiB7XG4gICAgICAgIGxlbmd0aDogbG9jYXRpb25zLmxlbmd0aCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGdldFBvc2l0aW9uOiB7dmFsdWU6IGNpcmNsZVBvc2l0aW9ucywgc2l6ZTogMn0sXG4gICAgICAgICAgZ2V0Q29sb3I6IHt2YWx1ZTogY2lyY2xlQ29sb3JzLCBzaXplOiA0fSxcbiAgICAgICAgICBnZXRJblJhZGl1czoge3ZhbHVlOiBpbkNpcmNsZVJhZGlpLCBzaXplOiAxfSxcbiAgICAgICAgICBnZXRPdXRSYWRpdXM6IHt2YWx1ZTogb3V0Q2lyY2xlUmFkaWksIHNpemU6IDF9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGxpbmVBdHRyaWJ1dGVzOiB7XG4gICAgICAgIGxlbmd0aDogZmxvd3MubGVuZ3RoLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgZ2V0U291cmNlUG9zaXRpb246IHt2YWx1ZTogc291cmNlUG9zaXRpb25zLCBzaXplOiAyfSxcbiAgICAgICAgICBnZXRUYXJnZXRQb3NpdGlvbjoge3ZhbHVlOiB0YXJnZXRQb3NpdGlvbnMsIHNpemU6IDJ9LFxuICAgICAgICAgIGdldFRoaWNrbmVzczoge3ZhbHVlOiB0aGlja25lc3Nlcywgc2l6ZTogMX0sXG4gICAgICAgICAgZ2V0Q29sb3I6IHt2YWx1ZTogZmxvd0xpbmVDb2xvcnMsIHNpemU6IDR9LFxuICAgICAgICAgIGdldEVuZHBvaW50T2Zmc2V0czoge3ZhbHVlOiBlbmRwb2ludE9mZnNldHMsIHNpemU6IDJ9LFxuICAgICAgICAgIC4uLihzdGFnZ2VyaW5nVmFsdWVzXG4gICAgICAgICAgICA/IHtnZXRTdGFnZ2VyaW5nOiB7dmFsdWU6IHN0YWdnZXJpbmdWYWx1ZXMsIHNpemU6IDF9fVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uKGxvY2F0aW9uTGFiZWxzRW5hYmxlZFxuICAgICAgICA/IHtsb2NhdGlvbkxhYmVsczogbG9jYXRpb25zLm1hcChnZXRMb2NhdGlvbk5hbWUpfVxuICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgfTtcbiAgfVxuXG4gIGdldExvY2F0aW9uc0luQmJveChcbiAgICB0cmVlOiBLREJ1c2hUcmVlLFxuICAgIGJib3g6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICApOiBBcnJheTxMPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0cmVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLl9nZXRMb2NhdGlvbnNJbkJib3hJbmRpY2VzKHRyZWUsIGJib3gpLm1hcChcbiAgICAgIChpZHg6IG51bWJlcikgPT4gdHJlZS5wb2ludHNbaWR4XSxcbiAgICApIGFzIEFycmF5PEw+O1xuICB9XG5cbiAgX2dldExvY2F0aW9uc0luQmJveEluZGljZXMoXG4gICAgdHJlZTogS0RCdXNoVHJlZSxcbiAgICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgKSB7XG4gICAgaWYgKCF0cmVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtsb24xLCBsYXQxLCBsb24yLCBsYXQyXSA9IGJib3g7XG4gICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IFtsbmdYKGxvbjEpLCBsYXRZKGxhdDEpLCBsbmdYKGxvbjIpLCBsYXRZKGxhdDIpXTtcbiAgICByZXR1cm4gdHJlZS5yYW5nZShcbiAgICAgIE1hdGgubWluKHgxLCB4MiksXG4gICAgICBNYXRoLm1pbih5MSwgeTIpLFxuICAgICAgTWF0aC5tYXgoeDEsIHgyKSxcbiAgICAgIE1hdGgubWF4KHkxLCB5MiksXG4gICAgKTtcbiAgfVxuXG4gIGlzRmxvd0luU2VsZWN0aW9uKFxuICAgIGZsb3c6IEYgfCBBZ2dyZWdhdGVGbG93LFxuICAgIHNlbGVjdGVkTG9jYXRpb25zU2V0OiBTZXQ8c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbkZpbHRlck1vZGU/OiBMb2NhdGlvbkZpbHRlck1vZGUsXG4gICkge1xuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICBjb25zdCBkZXN0ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KTtcbiAgICBpZiAoc2VsZWN0ZWRMb2NhdGlvbnNTZXQpIHtcbiAgICAgIHN3aXRjaCAobG9jYXRpb25GaWx0ZXJNb2RlKSB7XG4gICAgICAgIGNhc2UgTG9jYXRpb25GaWx0ZXJNb2RlLkFMTDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKG9yaWdpbikgfHwgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKGRlc3QpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuQkVUV0VFTjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKG9yaWdpbikgJiYgc2VsZWN0ZWRMb2NhdGlvbnNTZXQuaGFzKGRlc3QpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuSU5DT01JTkc6XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhkZXN0KTtcbiAgICAgICAgY2FzZSBMb2NhdGlvbkZpbHRlck1vZGUuT1VUR09JTkc6XG4gICAgICAgICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhvcmlnaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGNhbGNMb2NhdGlvblRvdGFscyhcbiAgLy8gICBsb2NhdGlvbnM6IChMIHwgQ2x1c3Rlck5vZGUpW10sXG4gIC8vICAgZmxvd3M6IEZbXSxcbiAgLy8gKTogTG9jYXRpb25zVG90YWxzIHtcbiAgLy8gICByZXR1cm4gZmxvd3MucmVkdWNlKFxuICAvLyAgICAgKGFjYzogTG9jYXRpb25zVG90YWxzLCBjdXJyKSA9PiB7XG4gIC8vICAgICAgIGNvbnN0IG9yaWdpbklkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGN1cnIpO1xuICAvLyAgICAgICBjb25zdCBkZXN0SWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGN1cnIpO1xuICAvLyAgICAgICBjb25zdCBtYWduaXR1ZGUgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGN1cnIpO1xuICAvLyAgICAgICBpZiAob3JpZ2luSWQgPT09IGRlc3RJZCkge1xuICAvLyAgICAgICAgIGFjYy5pbnRlcm5hbFtvcmlnaW5JZF0gPSAoYWNjLmludGVybmFsW29yaWdpbklkXSB8fCAwKSArIG1hZ25pdHVkZTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBhY2Mub3V0Z29pbmdbb3JpZ2luSWRdID0gKGFjYy5vdXRnb2luZ1tvcmlnaW5JZF0gfHwgMCkgKyBtYWduaXR1ZGU7XG4gIC8vICAgICAgICAgYWNjLmluY29taW5nW2Rlc3RJZF0gPSAoYWNjLmluY29taW5nW2Rlc3RJZF0gfHwgMCkgKyBtYWduaXR1ZGU7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgcmV0dXJuIGFjYztcbiAgLy8gICAgIH0sXG4gIC8vICAgICB7aW5jb21pbmc6IHt9LCBvdXRnb2luZzoge30sIGludGVybmFsOiB7fX0sXG4gIC8vICAgKTtcbiAgLy8gfVxufVxuXG5mdW5jdGlvbiBjYWxjTG9jYXRpb25Ub3RhbHNFeHRlbnQoXG4gIGxvY2F0aW9uVG90YWxzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBMb2NhdGlvblRvdGFscz4gfCB1bmRlZmluZWQsXG4gIGxvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQsXG4pIHtcbiAgaWYgKCFsb2NhdGlvblRvdGFscykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IHJ2OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IFtcbiAgICBpZCxcbiAgICB7aW5jb21pbmdDb3VudCwgb3V0Z29pbmdDb3VudCwgaW50ZXJuYWxDb3VudH0sXG4gIF0gb2YgbG9jYXRpb25Ub3RhbHMuZW50cmllcygpKSB7XG4gICAgaWYgKGxvY2F0aW9uSWRzSW5WaWV3cG9ydCA9PSBudWxsIHx8IGxvY2F0aW9uSWRzSW5WaWV3cG9ydC5oYXMoaWQpKSB7XG4gICAgICBjb25zdCBsbyA9IE1hdGgubWluKFxuICAgICAgICBpbmNvbWluZ0NvdW50ICsgaW50ZXJuYWxDb3VudCxcbiAgICAgICAgb3V0Z29pbmdDb3VudCArIGludGVybmFsQ291bnQsXG4gICAgICAgIGludGVybmFsQ291bnQsXG4gICAgICApO1xuICAgICAgY29uc3QgaGkgPSBNYXRoLm1heChcbiAgICAgICAgaW5jb21pbmdDb3VudCArIGludGVybmFsQ291bnQsXG4gICAgICAgIG91dGdvaW5nQ291bnQgKyBpbnRlcm5hbENvdW50LFxuICAgICAgICBpbnRlcm5hbENvdW50LFxuICAgICAgKTtcbiAgICAgIGlmICghcnYpIHtcbiAgICAgICAgcnYgPSBbbG8sIGhpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsbyA8IHJ2WzBdKSBydlswXSA9IGxvO1xuICAgICAgICBpZiAoaGkgPiBydlsxXSkgcnZbMV0gPSBoaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJ2O1xufVxuXG4vLyBsb25naXR1ZGUvbGF0aXR1ZGUgdG8gc3BoZXJpY2FsIG1lcmNhdG9yIGluIFswLi4xXSByYW5nZVxuZnVuY3Rpb24gbG5nWChsbmc6IG51bWJlcikge1xuICByZXR1cm4gbG5nIC8gMzYwICsgMC41O1xufVxuXG5mdW5jdGlvbiBsYXRZKGxhdDogbnVtYmVyKSB7XG4gIGNvbnN0IHNpbiA9IE1hdGguc2luKChsYXQgKiBNYXRoLlBJKSAvIDE4MCk7XG4gIGNvbnN0IHkgPSAwLjUgLSAoMC4yNSAqIE1hdGgubG9nKCgxICsgc2luKSAvICgxIC0gc2luKSkpIC8gTWF0aC5QSTtcbiAgcmV0dXJuIHkgPCAwID8gMCA6IHkgPiAxID8gMSA6IHk7XG59XG5cbmZ1bmN0aW9uIGFnZ3JlZ2F0ZUZsb3dzPEY+KFxuICBmbG93czogRltdLFxuICBmbG93QWNjZXNzb3JzOiBGbG93QWNjZXNzb3JzPEY+LFxuKTogQWdncmVnYXRlRmxvd1tdIHtcbiAgLy8gU3VtIHVwIGZsb3dzIHdpdGggc2FtZSBvcmlnaW4sIGRlc3RcbiAgY29uc3QgYnlPcmlnaW5EZXN0ID0gcm9sbHVwKFxuICAgIGZsb3dzLFxuICAgIChmZjogRltdKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW4gPSBmbG93QWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmZlswXSk7XG4gICAgICBjb25zdCBkZXN0ID0gZmxvd0FjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZmWzBdKTtcbiAgICAgIC8vIGNvbnN0IGNvbG9yID0gZmZbMF0uY29sb3I7XG4gICAgICBjb25zdCBydjogQWdncmVnYXRlRmxvdyA9IHtcbiAgICAgICAgYWdncmVnYXRlOiB0cnVlLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGRlc3QsXG4gICAgICAgIGNvdW50OiBmZi5yZWR1Y2UoKG0sIGYpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmKTtcbiAgICAgICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgICAgIGlmICghaXNOYU4oY291bnQpICYmIGlzRmluaXRlKGNvdW50KSkgcmV0dXJuIG0gKyBjb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH0sIDApLFxuICAgICAgICAvLyB0aW1lOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgLy8gaWYgKGNvbG9yKSBydi5jb2xvciA9IGNvbG9yO1xuICAgICAgcmV0dXJuIHJ2O1xuICAgIH0sXG4gICAgZmxvd0FjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQsXG4gICAgZmxvd0FjY2Vzc29ycy5nZXRGbG93RGVzdElkLFxuICApO1xuXG4gIGNvbnN0IHJ2OiBBZ2dyZWdhdGVGbG93W10gPSBbXTtcbiAgZm9yIChjb25zdCB2YWx1ZXMgb2YgYnlPcmlnaW5EZXN0LnZhbHVlcygpKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMudmFsdWVzKCkpIHtcbiAgICAgIHJ2LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIHRvIGF1Z21lbnQgaG92ZXIgcGlja2luZyBpbmZvIHNvIHRoYXQgd2UgY2FuIGRpc3BsYWNlIGxvY2F0aW9uIHRvb2x0aXBcbiAqIEBwYXJhbSBjaXJjbGVBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gaW5kZXhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCB7Z2V0SW5SYWRpdXMsIGdldE91dFJhZGl1c30gPSBjaXJjbGVBdHRyaWJ1dGVzLmF0dHJpYnV0ZXM7XG4gIHJldHVybiBNYXRoLm1heChnZXRJblJhZGl1cy52YWx1ZVtpbmRleF0sIGdldE91dFJhZGl1cy52YWx1ZVtpbmRleF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYXRpb25Db29yZHNCeUluZGV4KFxuICBjaXJjbGVBdHRyaWJ1dGVzOiBGbG93Q2lyY2xlc0xheWVyQXR0cmlidXRlcyxcbiAgaW5kZXg6IG51bWJlcixcbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCB7Z2V0UG9zaXRpb259ID0gY2lyY2xlQXR0cmlidXRlcy5hdHRyaWJ1dGVzO1xuICByZXR1cm4gW2dldFBvc2l0aW9uLnZhbHVlW2luZGV4ICogMl0sIGdldFBvc2l0aW9uLnZhbHVlW2luZGV4ICogMiArIDFdXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZsb3dMaW5lQXR0cmlidXRlc0J5SW5kZXgoXG4gIGxpbmVBdHRyaWJ1dGVzOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMge1xuICBjb25zdCB7XG4gICAgZ2V0Q29sb3IsXG4gICAgZ2V0RW5kcG9pbnRPZmZzZXRzLFxuICAgIGdldFNvdXJjZVBvc2l0aW9uLFxuICAgIGdldFRhcmdldFBvc2l0aW9uLFxuICAgIGdldFRoaWNrbmVzcyxcbiAgICBnZXRTdGFnZ2VyaW5nLFxuICB9ID0gbGluZUF0dHJpYnV0ZXMuYXR0cmlidXRlcztcbiAgcmV0dXJuIHtcbiAgICBsZW5ndGg6IDEsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgZ2V0Q29sb3I6IHtcbiAgICAgICAgdmFsdWU6IGdldENvbG9yLnZhbHVlLnN1YmFycmF5KGluZGV4ICogNCwgKGluZGV4ICsgMSkgKiA0KSxcbiAgICAgICAgc2l6ZTogNCxcbiAgICAgIH0sXG4gICAgICBnZXRFbmRwb2ludE9mZnNldHM6IHtcbiAgICAgICAgdmFsdWU6IGdldEVuZHBvaW50T2Zmc2V0cy52YWx1ZS5zdWJhcnJheShpbmRleCAqIDIsIChpbmRleCArIDEpICogMiksXG4gICAgICAgIHNpemU6IDIsXG4gICAgICB9LFxuICAgICAgZ2V0U291cmNlUG9zaXRpb246IHtcbiAgICAgICAgdmFsdWU6IGdldFNvdXJjZVBvc2l0aW9uLnZhbHVlLnN1YmFycmF5KGluZGV4ICogMiwgKGluZGV4ICsgMSkgKiAyKSxcbiAgICAgICAgc2l6ZTogMixcbiAgICAgIH0sXG4gICAgICBnZXRUYXJnZXRQb3NpdGlvbjoge1xuICAgICAgICB2YWx1ZTogZ2V0VGFyZ2V0UG9zaXRpb24udmFsdWUuc3ViYXJyYXkoaW5kZXggKiAyLCAoaW5kZXggKyAxKSAqIDIpLFxuICAgICAgICBzaXplOiAyLFxuICAgICAgfSxcbiAgICAgIGdldFRoaWNrbmVzczoge1xuICAgICAgICB2YWx1ZTogZ2V0VGhpY2tuZXNzLnZhbHVlLnN1YmFycmF5KGluZGV4LCBpbmRleCArIDEpLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgfSxcbiAgICAgIC4uLihnZXRTdGFnZ2VyaW5nXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZ2V0U3RhZ2dlcmluZzoge1xuICAgICAgICAgICAgICB2YWx1ZTogZ2V0U3RhZ2dlcmluZy52YWx1ZS5zdWJhcnJheShpbmRleCwgaW5kZXggKyAxKSxcbiAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
864
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9GbG93bWFwU2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEUsT0FBTyxFQUFjLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNoRCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsY0FBYyxHQUVmLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNMLFVBQVUsRUFFVix3QkFBd0IsRUFFeEIsd0JBQXdCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxTQUFTLEVBQUUsRUFHaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLHlCQUF5QixNQUFNLDZCQUE2QixDQUFDO0FBRXBFLE9BQU8sRUFDTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIseUJBQXlCLEVBQ3pCLHlCQUF5QixHQUUxQixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBWUwscUJBQXFCLEVBRXJCLGtCQUFrQixHQUVuQixNQUFNLFNBQVMsQ0FBQztBQUVqQixNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQVNsQyxNQUFNLENBQUMs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RUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLEVBQUUsQ0FBQzthQUNSLEVBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLEVBQUUsQ0FBQzthQUNSLEVBQ0QsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxFQUFFLENBQUM7YUFDUixJQUNFLENBQUMsYUFBYTtZQUNmLENBQUMsQ0FBQztnQkFDRSxhQUFhLEVBQUU7b0JBQ2IsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNyRCxJQUFJLEVBQUUsQ0FBQztpQkFDUjthQUNGO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNmO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHthc2NlbmRpbmcsIGRlc2NlbmRpbmcsIGV4dGVudCwgbWluLCByb2xsdXB9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7U2NhbGVMaW5lYXIsIHNjYWxlU3FydH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IEtEQnVzaCBmcm9tICdrZGJ1c2gnO1xuaW1wb3J0IHtcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcixcbiAgZGVmYXVsdE1lbW9pemUsXG4gIFBhcmFtZXRyaWNTZWxlY3Rvcixcbn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHthbGVhfSBmcm9tICdzZWVkcmFuZG9tJztcbmltcG9ydCB7Y2x1c3RlckxvY2F0aW9uc30gZnJvbSAnLi9jbHVzdGVyL2NsdXN0ZXInO1xuaW1wb3J0IHtcbiAgYnVpbGRJbmRleCxcbiAgQ2x1c3RlckluZGV4LFxuICBmaW5kQXBwcm9wcmlhdGVab29tTGV2ZWwsXG4gIExvY2F0aW9uV2VpZ2h0R2V0dGVyLFxuICBtYWtlTG9jYXRpb25XZWlnaHRHZXR0ZXIsXG59IGZyb20gJy4vY2x1c3Rlci9DbHVzdGVySW5kZXgnO1xuaW1wb3J0IGdldENvbG9ycywge1xuICBDb2xvcnNSR0JBLFxuICBEaWZmQ29sb3JzUkdCQSxcbiAgZ2V0Q29sb3JzUkdCQSxcbiAgZ2V0RGlmZkNvbG9yc1JHQkEsXG4gIGdldEZsb3dDb2xvclNjYWxlLFxuICBpc0RpZmZDb2xvcnMsXG4gIGlzRGlmZkNvbG9yc1JHQkEsXG59IGZyb20gJy4vY29sb3JzJztcbmltcG9ydCBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzIGZyb20gJy4vRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyc7XG5pbXBvcnQge0Zsb3dtYXBTdGF0ZX0gZnJvbSAnLi9GbG93bWFwU3RhdGUnO1xuaW1wb3J0IHtcbiAgYWRkQ2x1c3Rlck5hbWVzLFxuICBnZXRGbG93VGhpY2tuZXNzU2NhbGUsXG4gIGdldFZpZXdwb3J0Qm91bmRpbmdCb3gsXG59IGZyb20gJy4vc2VsZWN0b3ItZnVuY3Rpb25zJztcbmltcG9ydCB7XG4gIGdldFRpbWVHcmFudWxhcml0eUJ5S2V5LFxuICBnZXRUaW1lR3JhbnVsYXJpdHlCeU9yZGVyLFxuICBnZXRUaW1lR3JhbnVsYXJpdHlGb3JEYXRlLFxuICBUaW1lR3JhbnVsYXJpdHlLZXksXG59IGZyb20gJy4vdGltZSc7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVGbG93LFxuICBDbHVzdGVyLFxuICBDbHVzdGVyTGV2ZWxzLFxuICBDbHVzdGVyTm9kZSxcbiAgQ291bnRCeVRpbWUsXG4gIEZsb3dBY2Nlc3NvcnMsXG4gIEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBGbG93TGluZXNMYXllckF0dHJpYnV0ZXMsXG4gIEZsb3dtYXBEYXRhLFxuICBGbG93bWFwRGF0YUFjY2Vzc29ycyxcbiAgaXNDbHVzdGVyLFxuICBpc0xvY2F0aW9uQ2x1c3Rlck5vZGUsXG4gIExheWVyc0RhdGEsXG4gIExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgTG9jYXRpb25Ub3RhbHMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBNQVhfQ0xVU1RFUl9aT09NX0xFVkVMID0gMjA7XG50eXBlIEtEQnVzaFRyZWUgPSBhbnk7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdG9yPEwsIEYsIFQ+ID0gUGFyYW1ldHJpY1NlbGVjdG9yPFxuICBGbG93bWFwU3RhdGUsXG4gIEZsb3dtYXBEYXRhPEwsIEY+LFxuICBUXG4+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG93bWFwU2VsZWN0b3JzPEwsIEY+IHtcbiAgYWNjZXNzb3JzOiBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+O1xuXG4gIGNvbnN0cnVjdG9yKGFjY2Vzc29yczogRmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4pIHtcbiAgICB0aGlzLmFjY2Vzc29ycyA9IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzKGFjY2Vzc29ycyk7XG4gICAgdGhpcy5zZXRBY2Nlc3NvcnMoYWNjZXNzb3JzKTtcbiAgfVxuXG4gIHNldEFjY2Vzc29ycyhhY2Nlc3NvcnM6IEZsb3dtYXBEYXRhQWNjZXNzb3JzPEwsIEY+KSB7XG4gICAgdGhpcy5hY2Nlc3NvcnMgPSBuZXcgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyhhY2Nlc3NvcnMpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlQWNjZXNzb3JzKCk6IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnM8TCwgRj4ge1xuICAgIHJldHVybiB0aGlzLmFjY2Vzc29ycztcbiAgfVxuXG4gIGdldEZsb3dzRnJvbVByb3BzID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBwcm9wcy5mbG93cztcbiAgZ2V0TG9jYXRpb25zRnJvbVByb3BzID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBwcm9wcy5sb2NhdGlvbnM7XG4gIGdldENsdXN0ZXJMZXZlbHNGcm9tUHJvcHMgPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4ge1xuICAgIHJldHVybiBwcm9wcy5jbHVzdGVyTGV2ZWxzO1xuICB9O1xuICBnZXRNYXhUb3BGbG93c0Rpc3BsYXlOdW0gPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLnNldHRpbmdzLm1heFRvcEZsb3dzRGlzcGxheU51bTtcbiAgZ2V0U2VsZWN0ZWRMb2NhdGlvbnMgPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PlxuICAgIHN0YXRlLmZpbHRlcj8uc2VsZWN0ZWRMb2NhdGlvbnM7XG4gIGdldExvY2F0aW9uRmlsdGVyTW9kZSA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUuZmlsdGVyPy5sb2NhdGlvbkZpbHRlck1vZGU7XG4gIGdldENsdXN0ZXJpbmdFbmFibGVkID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5zZXR0aW5ncy5jbHVzdGVyaW5nRW5hYmxlZDtcbiAgZ2V0TG9jYXRpb25Ub3RhbHNFbmFibGVkID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5zZXR0aW5ncy5sb2NhdGlvblRvdGFsc0VuYWJsZWQ7XG4gIGdldExvY2F0aW9uTGFiZWxzRW5hYmxlZCA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUuc2V0dGluZ3MubG9jYXRpb25MYWJlbHNFbmFibGVkO1xuICBnZXRab29tID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS52aWV3cG9ydC56b29tO1xuICBnZXRWaWV3cG9ydCA9IChzdGF0ZTogRmxvd21hcFN0YXRlLCBwcm9wczogRmxvd21hcERhdGE8TCwgRj4pID0+XG4gICAgc3RhdGUudmlld3BvcnQ7XG4gIGdldFNlbGVjdGVkVGltZVJhbmdlID0gKHN0YXRlOiBGbG93bWFwU3RhdGUsIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPikgPT5cbiAgICBzdGF0ZS5maWx0ZXI/LnNlbGVjdGVkVGltZVJhbmdlO1xuXG4gIGdldENvbG9yU2NoZW1lOiBTZWxlY3RvcjxMLCBGLCBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3MuY29sb3JTY2hlbWU7XG5cbiAgZ2V0RGFya01vZGU6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzLmRhcmtNb2RlO1xuXG4gIGdldEZhZGVFbmFibGVkOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IChcbiAgICBzdGF0ZTogRmxvd21hcFN0YXRlLFxuICAgIHByb3BzOiBGbG93bWFwRGF0YTxMLCBGPixcbiAgKSA9PiBzdGF0ZS5zZXR0aW5ncy5mYWRlRW5hYmxlZDtcblxuICBnZXRGYWRlT3BhY2l0eUVuYWJsZWQ6IFNlbGVjdG9yPEwsIEYsIGJvb2xlYW4+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzLmZhZGVPcGFjaXR5RW5hYmxlZDtcblxuICBnZXRGYWRlQW1vdW50OiBTZWxlY3RvcjxMLCBGLCBudW1iZXI+ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApID0+IHN0YXRlLnNldHRpbmdzLmZhZGVBbW91bnQ7XG5cbiAgZ2V0QW5pbWF0ZTogU2VsZWN0b3I8TCwgRiwgYm9vbGVhbj4gPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICkgPT4gc3RhdGUuc2V0dGluZ3MuYW5pbWF0aW9uRW5hYmxlZDtcblxuICBnZXRJbnZhbGlkTG9jYXRpb25JZHM6IFNlbGVjdG9yPEwsIEYsIChzdHJpbmcgfCBudW1iZXIpW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldExvY2F0aW9uc0Zyb21Qcm9wcywgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpbnZhbGlkID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBsb24gPSB0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxvbihsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IGxhdCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uTGF0KGxvY2F0aW9uKTtcbiAgICAgICAgaWYgKCEoLTkwIDw9IGxhdCAmJiBsYXQgPD0gOTApIHx8ICEoLTE4MCA8PSBsb24gJiYgbG9uIDw9IDE4MCkpIHtcbiAgICAgICAgICBpbnZhbGlkLnB1c2goaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW52YWxpZC5sZW5ndGggPiAwID8gaW52YWxpZCA6IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICBnZXRMb2NhdGlvbnM6IFNlbGVjdG9yPEwsIEYsIEl0ZXJhYmxlPEw+IHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zRnJvbVByb3BzLFxuICAgIHRoaXMuZ2V0SW52YWxpZExvY2F0aW9uSWRzLFxuICAgIChsb2NhdGlvbnMsIGludmFsaWRJZHMpID0+IHtcbiAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFpbnZhbGlkSWRzIHx8IGludmFsaWRJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgY29uc3QgaW52YWxpZCA9IG5ldyBTZXQoaW52YWxpZElkcyk7XG4gICAgICBjb25zdCBmaWx0ZXJlZDogTFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBpZiAoIWludmFsaWQuaGFzKGlkKSkge1xuICAgICAgICAgIGZpbHRlcmVkLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbklkczogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldExvY2F0aW9ucywgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBpZHMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgbG9jYXRpb25zKSB7XG4gICAgICAgIGlkcy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChpZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcblxuICBnZXRTZWxlY3RlZExvY2F0aW9uc1NldDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zLCAoaWRzKSA9PlxuICAgICAgaWRzICYmIGlkcy5sZW5ndGggPiAwID8gbmV3IFNldChpZHMpIDogdW5kZWZpbmVkLFxuICAgICk7XG5cbiAgZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9uczogU2VsZWN0b3I8TCwgRiwgRltdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldEZsb3dzRnJvbVByb3BzLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbklkcyxcbiAgICAgIChmbG93cywgaWRzKSA9PiB7XG4gICAgICAgIGlmICghaWRzIHx8ICFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3Qgc3JjSWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgICAgICAgY29uc3QgZHN0SWQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpO1xuICAgICAgICAgIGlmIChpZHMuaGFzKHNyY0lkKSAmJiBpZHMuaGFzKGRzdElkKSkge1xuICAgICAgICAgICAgZmlsdGVyZWQucHVzaChmbG93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkLnNvcnQoKGE6IEYsIGI6IEYpID0+XG4gICAgICAgICAgZGVzY2VuZGluZyhcbiAgICAgICAgICAgIE1hdGguYWJzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoYSkpLFxuICAgICAgICAgICAgTWF0aC5hYnModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShiKSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRBY3R1YWxUaW1lRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3Rvcih0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsIChmbG93cykgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGxldCBzdGFydCA9IG51bGw7XG4gICAgICBsZXQgZW5kID0gbnVsbDtcbiAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd1RpbWUoZmxvdyk7XG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwgfHwgc3RhcnQgPiB0aW1lKSBzdGFydCA9IHRpbWU7XG4gICAgICAgICAgaWYgKGVuZCA9PSBudWxsIHx8IGVuZCA8IHRpbWUpIGVuZCA9IHRpbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnQgfHwgIWVuZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBbc3RhcnQsIGVuZF07XG4gICAgfSk7XG5cbiAgZ2V0VGltZUdyYW51bGFyaXR5S2V5OiBTZWxlY3RvcjxMLCBGLCBUaW1lR3JhbnVsYXJpdHlLZXkgfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAgIHRoaXMuZ2V0QWN0dWFsVGltZUV4dGVudCxcbiAgICAgIChmbG93cywgdGltZUV4dGVudCkgPT4ge1xuICAgICAgICBpZiAoIWZsb3dzIHx8ICF0aW1lRXh0ZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IG1pbk9yZGVyID0gbWluKGZsb3dzLCAoZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93VGltZShkKTtcbiAgICAgICAgICByZXR1cm4gdCA/IGdldFRpbWVHcmFudWxhcml0eUZvckRhdGUodCkub3JkZXIgOiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1pbk9yZGVyID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHRpbWVHcmFudWxhcml0eSA9IGdldFRpbWVHcmFudWxhcml0eUJ5T3JkZXIobWluT3JkZXIpO1xuICAgICAgICByZXR1cm4gdGltZUdyYW51bGFyaXR5ID8gdGltZUdyYW51bGFyaXR5LmtleSA6IHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRUaW1lRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbRGF0ZSwgRGF0ZV0gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRBY3R1YWxUaW1lRXh0ZW50LFxuICAgIHRoaXMuZ2V0VGltZUdyYW51bGFyaXR5S2V5LFxuICAgICh0aW1lRXh0ZW50LCB0aW1lR3JhbnVsYXJpdHlLZXkpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVHcmFudWxhcml0eSA9IHRpbWVHcmFudWxhcml0eUtleVxuICAgICAgICA/IGdldFRpbWVHcmFudWxhcml0eUJ5S2V5KHRpbWVHcmFudWxhcml0eUtleSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXRpbWVFeHRlbnQgfHwgIXRpbWVHcmFudWxhcml0eT8uaW50ZXJ2YWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB7aW50ZXJ2YWx9ID0gdGltZUdyYW51bGFyaXR5O1xuICAgICAgcmV0dXJuIFt0aW1lRXh0ZW50WzBdLCBpbnRlcnZhbC5vZmZzZXQoaW50ZXJ2YWwuZmxvb3IodGltZUV4dGVudFsxXSksIDEpXTtcbiAgICB9LFxuICApO1xuXG4gIGdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnNGaWx0ZXJlZEJ5VGltZTogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIEZbXSB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgIHRoaXMuZ2V0VGltZUV4dGVudCxcbiAgICB0aGlzLmdldFNlbGVjdGVkVGltZVJhbmdlLFxuICAgIChmbG93cywgdGltZUV4dGVudCwgdGltZVJhbmdlKSA9PiB7XG4gICAgICBpZiAoIWZsb3dzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICAhdGltZUV4dGVudCB8fFxuICAgICAgICAhdGltZVJhbmdlIHx8XG4gICAgICAgICh0aW1lRXh0ZW50WzBdID09PSB0aW1lUmFuZ2VbMF0gJiYgdGltZUV4dGVudFsxXSA9PT0gdGltZVJhbmdlWzFdKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmbG93cztcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbG93cy5maWx0ZXIoKGZsb3cpID0+IHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dUaW1lKGZsb3cpO1xuICAgICAgICByZXR1cm4gdGltZSAmJiB0aW1lUmFuZ2VbMF0gPD0gdGltZSAmJiB0aW1lIDwgdGltZVJhbmdlWzFdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRMb2NhdGlvbnNIYXZpbmdGbG93czogU2VsZWN0b3I8TCwgRiwgSXRlcmFibGU8TD4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkRmxvd3NGb3JLbm93bkxvY2F0aW9ucyxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zLFxuICAgICAgKGZsb3dzLCBsb2NhdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhdGlvbnMgfHwgIWZsb3dzKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgICBjb25zdCB3aXRoRmxvd3MgPSBuZXcgU2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIHdpdGhGbG93cy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpKTtcbiAgICAgICAgICB3aXRoRmxvd3MuYWRkKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgaWYgKHdpdGhGbG93cy5oYXModGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbikpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uc0J5SWQ6IFNlbGVjdG9yPEwsIEYsIE1hcDxzdHJpbmcgfCBudW1iZXIsIEw+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cywgKGxvY2F0aW9ucykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBsb2NhdGlvbnNCeUlkID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIEw+KCk7XG4gICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICBsb2NhdGlvbnNCeUlkLnNldCh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbklkKGxvY2F0aW9uKSwgbG9jYXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvY2F0aW9uc0J5SWQ7XG4gICAgfSk7XG5cbiAgZ2V0TG9jYXRpb25XZWlnaHRHZXR0ZXI6IFNlbGVjdG9yPEwsIEYsIExvY2F0aW9uV2VpZ2h0R2V0dGVyIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLCAoZmxvd3MpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBnZXRMb2NhdGlvbldlaWdodCA9IG1ha2VMb2NhdGlvbldlaWdodEdldHRlcihcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dtYXBEYXRhQWNjZXNzb3JzKCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGdldExvY2F0aW9uV2VpZ2h0O1xuICAgIH0pO1xuXG4gIGdldENsdXN0ZXJMZXZlbHM6IFNlbGVjdG9yPEwsIEYsIENsdXN0ZXJMZXZlbHMgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRDbHVzdGVyTGV2ZWxzRnJvbVByb3BzLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3MsXG4gICAgdGhpcy5nZXRMb2NhdGlvbldlaWdodEdldHRlcixcbiAgICAoY2x1c3RlckxldmVsc0Zyb21Qcm9wcywgbG9jYXRpb25zLCBnZXRMb2NhdGlvbldlaWdodCkgPT4ge1xuICAgICAgaWYgKGNsdXN0ZXJMZXZlbHNGcm9tUHJvcHMpIHJldHVybiBjbHVzdGVyTGV2ZWxzRnJvbVByb3BzO1xuICAgICAgaWYgKCFsb2NhdGlvbnMgfHwgIWdldExvY2F0aW9uV2VpZ2h0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgY2x1c3RlckxldmVscyA9IGNsdXN0ZXJMb2NhdGlvbnMoXG4gICAgICAgIGxvY2F0aW9ucyxcbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgZ2V0TG9jYXRpb25XZWlnaHQsXG4gICAgICAgIHtcbiAgICAgICAgICBtYXhab29tOiBNQVhfQ0xVU1RFUl9aT09NX0xFVkVMLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjbHVzdGVyTGV2ZWxzO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Q2x1c3RlckluZGV4OiBTZWxlY3RvcjxMLCBGLCBDbHVzdGVySW5kZXg8Rj4gfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNCeUlkLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25XZWlnaHRHZXR0ZXIsXG4gICAgdGhpcy5nZXRDbHVzdGVyTGV2ZWxzLFxuICAgIChsb2NhdGlvbnNCeUlkLCBnZXRMb2NhdGlvbldlaWdodCwgY2x1c3RlckxldmVscykgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvbnNCeUlkIHx8ICFnZXRMb2NhdGlvbldlaWdodCB8fCAhY2x1c3RlckxldmVscylcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgY2x1c3RlckluZGV4ID0gYnVpbGRJbmRleDxGPihjbHVzdGVyTGV2ZWxzKTtcbiAgICAgIC8vIEFkZGluZyBtZWFuaW5nZnVsIG5hbWVzXG4gICAgICBhZGRDbHVzdGVyTmFtZXMoXG4gICAgICAgIGNsdXN0ZXJJbmRleCxcbiAgICAgICAgY2x1c3RlckxldmVscyxcbiAgICAgICAgbG9jYXRpb25zQnlJZCxcbiAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgZ2V0TG9jYXRpb25XZWlnaHQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNsdXN0ZXJJbmRleDtcbiAgICB9LFxuICApO1xuXG4gIGdldEF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9ucyxcbiAgICAoY2x1c3RlckluZGV4LCBzZWxlY3RlZExvY2F0aW9ucyk6IG51bWJlcltdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGlmICghY2x1c3RlckluZGV4KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBtYXhab29tID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgbGV0IG1pblpvb20gPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgICAgIGNvbnN0IGFkanVzdCA9ICh6b25lSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gY2x1c3RlckluZGV4LmdldENsdXN0ZXJCeUlkKHpvbmVJZCk7XG4gICAgICAgIGlmIChjbHVzdGVyKSB7XG4gICAgICAgICAgbWluWm9vbSA9IE1hdGgubWF4KG1pblpvb20sIGNsdXN0ZXIuem9vbSk7XG4gICAgICAgICAgbWF4Wm9vbSA9IE1hdGgubWluKG1heFpvb20sIGNsdXN0ZXIuem9vbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgem9vbSA9IGNsdXN0ZXJJbmRleC5nZXRNaW5ab29tRm9yTG9jYXRpb24oem9uZUlkKTtcbiAgICAgICAgICBtaW5ab29tID0gTWF0aC5tYXgobWluWm9vbSwgem9vbSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHNlbGVjdGVkTG9jYXRpb25zKSB7XG4gICAgICAgICAgYWRqdXN0KGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2x1c3RlckluZGV4LmF2YWlsYWJsZVpvb21MZXZlbHMuZmlsdGVyKFxuICAgICAgICAobGV2ZWwpID0+IG1pblpvb20gPD0gbGV2ZWwgJiYgbGV2ZWwgPD0gbWF4Wm9vbSxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBfZ2V0Q2x1c3Rlclpvb206IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICB0aGlzLmdldFpvb20sXG4gICAgdGhpcy5nZXRBdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscyxcbiAgICAoY2x1c3RlckluZGV4LCBtYXBab29tLCBhdmFpbGFibGVDbHVzdGVyWm9vbUxldmVscykgPT4ge1xuICAgICAgaWYgKCFjbHVzdGVySW5kZXgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWF2YWlsYWJsZUNsdXN0ZXJab29tTGV2ZWxzIHx8IG1hcFpvb20gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjbHVzdGVyWm9vbSA9IGZpbmRBcHByb3ByaWF0ZVpvb21MZXZlbChcbiAgICAgICAgYXZhaWxhYmxlQ2x1c3Rlclpvb21MZXZlbHMsXG4gICAgICAgIG1hcFpvb20sXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNsdXN0ZXJab29tO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0Q2x1c3Rlclpvb20gPSAoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KSA9PiB7XG4gICAgY29uc3Qge3NldHRpbmdzfSA9IHN0YXRlO1xuICAgIGlmICghc2V0dGluZ3MuY2x1c3RlcmluZ0VuYWJsZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHNldHRpbmdzLmNsdXN0ZXJpbmdBdXRvIHx8IHNldHRpbmdzLmNsdXN0ZXJpbmdMZXZlbCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q2x1c3Rlclpvb20oc3RhdGUsIHByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNldHRpbmdzLmNsdXN0ZXJpbmdMZXZlbDtcbiAgfTtcblxuICBnZXRMb2NhdGlvbnNGb3JTZWFyY2hCb3g6IFNlbGVjdG9yPEwsIEYsIChMIHwgQ2x1c3RlcilbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRDbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zSGF2aW5nRmxvd3MsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgICAgKFxuICAgICAgICBjbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgICAgbG9jYXRpb25zLFxuICAgICAgICBzZWxlY3RlZExvY2F0aW9ucyxcbiAgICAgICAgY2x1c3Rlclpvb20sXG4gICAgICAgIGNsdXN0ZXJJbmRleCxcbiAgICAgICkgPT4ge1xuICAgICAgICBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3VsdDogKEwgfCBDbHVzdGVyKVtdID0gQXJyYXkuZnJvbShsb2NhdGlvbnMpO1xuICAgICAgICAvLyBpZiAoY2x1c3RlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgLy8gICBpZiAoY2x1c3RlckluZGV4KSB7XG4gICAgICAgIC8vICAgICBjb25zdCB6b29tSXRlbXMgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3Rlck5vZGVzRm9yKGNsdXN0ZXJab29tKTtcbiAgICAgICAgLy8gICAgIGlmICh6b29tSXRlbXMpIHtcbiAgICAgICAgLy8gICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh6b29tSXRlbXMuZmlsdGVyKGlzQ2x1c3RlcikpO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChjbHVzdGVySW5kZXggJiYgc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCB0b0FwcGVuZCA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgaWQgb2Ygc2VsZWN0ZWRMb2NhdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXIgPSBjbHVzdGVySW5kZXguZ2V0Q2x1c3RlckJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjbHVzdGVyICYmXG4gICAgICAgICAgICAgICFyZXN1bHQuZmluZChcbiAgICAgICAgICAgICAgICAoZCkgPT5cbiAgICAgICAgICAgICAgICAgIChpc0xvY2F0aW9uQ2x1c3Rlck5vZGUoZClcbiAgICAgICAgICAgICAgICAgICAgPyBkLmlkXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChkKSkgPT09IGlkLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdG9BcHBlbmQucHVzaChjbHVzdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvQXBwZW5kLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQodG9BcHBlbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldERpZmZNb2RlOiBTZWxlY3RvcjxMLCBGLCBib29sZWFuPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Rmxvd3NGcm9tUHJvcHMsXG4gICAgKGZsb3dzKSA9PiB7XG4gICAgICBpZiAoZmxvd3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICApO1xuXG4gIF9nZXRGbG93bWFwQ29sb3JzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXREaWZmTW9kZSxcbiAgICB0aGlzLmdldENvbG9yU2NoZW1lLFxuICAgIHRoaXMuZ2V0RGFya01vZGUsXG4gICAgdGhpcy5nZXRGYWRlRW5hYmxlZCxcbiAgICB0aGlzLmdldEZhZGVPcGFjaXR5RW5hYmxlZCxcbiAgICB0aGlzLmdldEZhZGVBbW91bnQsXG4gICAgdGhpcy5nZXRBbmltYXRlLFxuICAgIGdldENvbG9ycyxcbiAgKTtcblxuICBnZXRGbG93bWFwQ29sb3JzUkdCQSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuX2dldEZsb3dtYXBDb2xvcnMsXG4gICAgKGZsb3dtYXBDb2xvcnMpID0+IHtcbiAgICAgIHJldHVybiBpc0RpZmZDb2xvcnMoZmxvd21hcENvbG9ycylcbiAgICAgICAgPyBnZXREaWZmQ29sb3JzUkdCQShmbG93bWFwQ29sb3JzKVxuICAgICAgICA6IGdldENvbG9yc1JHQkEoZmxvd21hcENvbG9ycyk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRVbmtub3duTG9jYXRpb25zOiBTZWxlY3RvcjxMLCBGLCBTZXQ8c3RyaW5nIHwgbnVtYmVyPiB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbklkcyxcbiAgICAgIHRoaXMuZ2V0Rmxvd3NGcm9tUHJvcHMsXG4gICAgICB0aGlzLmdldFNvcnRlZEZsb3dzRm9yS25vd25Mb2NhdGlvbnMsXG4gICAgICAoaWRzLCBmbG93cywgZmxvd3NGb3JLbm93bkxvY2F0aW9ucykgPT4ge1xuICAgICAgICBpZiAoIWlkcyB8fCAhZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmbG93c0Zvcktub3duTG9jYXRpb25zXG4gICAgICAgICAgLy8gJiYgZmxvd3MubGVuZ3RoID09PSBmbG93c0Zvcktub3duTG9jYXRpb25zLmxlbmd0aFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICBpZiAoIWlkcy5oYXModGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpKSlcbiAgICAgICAgICAgIG1pc3NpbmcuYWRkKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KSk7XG4gICAgICAgICAgaWYgKCFpZHMuaGFzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdykpKVxuICAgICAgICAgICAgbWlzc2luZy5hZGQodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pc3Npbmc7XG4gICAgICB9LFxuICAgICk7XG5cbiAgZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3M6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgIHRoaXMuZ2V0Q2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zRmlsdGVyZWRCeVRpbWUsXG4gICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICB0aGlzLmdldFRpbWVFeHRlbnQsXG4gICAgKGNsdXN0ZXJUcmVlLCBpc0NsdXN0ZXJpbmdFbmFibGVkLCBmbG93cywgY2x1c3Rlclpvb20sIHRpbWVFeHRlbnQpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBsZXQgYWdncmVnYXRlZDogKEYgfCBBZ2dyZWdhdGVGbG93KVtdO1xuICAgICAgaWYgKGlzQ2x1c3RlcmluZ0VuYWJsZWQgJiYgY2x1c3RlclRyZWUgJiYgY2x1c3Rlclpvb20gIT0gbnVsbCkge1xuICAgICAgICBhZ2dyZWdhdGVkID0gY2x1c3RlclRyZWUuYWdncmVnYXRlRmxvd3MoXG4gICAgICAgICAgLy8gVE9ETzogYWdncmVnYXRlIGFjcm9zcyB0aW1lXG4gICAgICAgICAgLy8gdGltZUV4dGVudCAhPSBudWxsXG4gICAgICAgICAgLy8gICA/IGFnZ3JlZ2F0ZUZsb3dzKGZsb3dzKSAvLyBjbHVzdGVyVHJlZS5hZ2dyZWdhdGVGbG93cyB3b24ndCBhZ2dyZWdhdGUgdW5jbHVzdGVyZWQgYWNyb3NzIHRpbWVcbiAgICAgICAgICAvLyAgIDogZmxvd3MsXG4gICAgICAgICAgZmxvd3MsXG4gICAgICAgICAgY2x1c3Rlclpvb20sXG4gICAgICAgICAgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd21hcERhdGFBY2Nlc3NvcnMoKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFnZ3JlZ2F0ZWQgPSBhZ2dyZWdhdGVGbG93cyhcbiAgICAgICAgICBmbG93cyxcbiAgICAgICAgICB0aGlzLmFjY2Vzc29ycy5nZXRGbG93bWFwRGF0YUFjY2Vzc29ycygpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYWdncmVnYXRlZC5zb3J0KChhLCBiKSA9PlxuICAgICAgICBkZXNjZW5kaW5nKFxuICAgICAgICAgIE1hdGguYWJzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoYSkpLFxuICAgICAgICAgIE1hdGguYWJzKHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoYikpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhZ2dyZWdhdGVkO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0RXhwYW5kZWRTZWxlY3RlZExvY2F0aW9uc1NldDogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIFNldDxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJpbmdFbmFibGVkLFxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgdGhpcy5nZXRDbHVzdGVySW5kZXgsXG4gICAgKGNsdXN0ZXJpbmdFbmFibGVkLCBzZWxlY3RlZExvY2F0aW9ucywgY2x1c3RlckluZGV4KSA9PiB7XG4gICAgICBpZiAoIXNlbGVjdGVkTG9jYXRpb25zIHx8ICFjbHVzdGVySW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb25zO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlcj4oKTtcbiAgICAgIGZvciAoY29uc3QgbG9jYXRpb25JZCBvZiBzZWxlY3RlZExvY2F0aW9ucykge1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gY2x1c3RlckluZGV4LmdldENsdXN0ZXJCeUlkKGxvY2F0aW9uSWQpO1xuICAgICAgICBpZiAoY2x1c3Rlcikge1xuICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gY2x1c3RlckluZGV4LmV4cGFuZENsdXN0ZXIoY2x1c3Rlcik7XG4gICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBleHBhbmRlZCkge1xuICAgICAgICAgICAgcmVzdWx0LmFkZChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5hZGQobG9jYXRpb25JZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgKTtcblxuICBnZXRUb3RhbENvdW50c0J5VGltZTogU2VsZWN0b3I8TCwgRiwgQ291bnRCeVRpbWVbXSB8IHVuZGVmaW5lZD4gPVxuICAgIGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgICAgdGhpcy5nZXRUaW1lR3JhbnVsYXJpdHlLZXksXG4gICAgICB0aGlzLmdldFRpbWVFeHRlbnQsXG4gICAgICB0aGlzLmdldEV4cGFuZGVkU2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgIChcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIHRpbWVHcmFudWxhcml0eUtleSxcbiAgICAgICAgdGltZUV4dGVudCxcbiAgICAgICAgc2VsZWN0ZWRMb2NhdGlvblNldCxcbiAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVHcmFudWxhcml0eSA9IHRpbWVHcmFudWxhcml0eUtleVxuICAgICAgICAgID8gZ2V0VGltZUdyYW51bGFyaXR5QnlLZXkodGltZUdyYW51bGFyaXR5S2V5KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoIWZsb3dzIHx8ICF0aW1lR3JhbnVsYXJpdHkgfHwgIXRpbWVFeHRlbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGJ5VGltZSA9IGZsb3dzLnJlZHVjZSgobSwgZmxvdykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oXG4gICAgICAgICAgICAgIGZsb3csXG4gICAgICAgICAgICAgIHNlbGVjdGVkTG9jYXRpb25TZXQsXG4gICAgICAgICAgICAgIGxvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRpbWVHcmFudWxhcml0eVxuICAgICAgICAgICAgICAuaW50ZXJ2YWwodGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd1RpbWUoZmxvdykpXG4gICAgICAgICAgICAgIC5nZXRUaW1lKCk7XG4gICAgICAgICAgICBtLnNldChcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAobS5nZXQoa2V5KSA/PyAwKSArIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZmxvdyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwgbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKSk7XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oYnlUaW1lLmVudHJpZXMoKSkubWFwKChbbWlsbGlzLCBjb3VudF0pID0+ICh7XG4gICAgICAgICAgdGltZTogbmV3IERhdGUobWlsbGlzKSxcbiAgICAgICAgICBjb3VudCxcbiAgICAgICAgfSkpO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldE1heExvY2F0aW9uQ2lyY2xlU2l6ZTogU2VsZWN0b3I8TCwgRiwgbnVtYmVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgIChsb2NhdGlvblRvdGFsc0VuYWJsZWQpID0+IChsb2NhdGlvblRvdGFsc0VuYWJsZWQgPyAxNyA6IDEpLFxuICApO1xuXG4gIGdldFZpZXdwb3J0Qm91bmRpbmdCb3g6IFNlbGVjdG9yPEwsIEYsIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFZpZXdwb3J0LFxuICAgICAgdGhpcy5nZXRNYXhMb2NhdGlvbkNpcmNsZVNpemUsXG4gICAgICBnZXRWaWV3cG9ydEJvdW5kaW5nQm94LFxuICAgICk7XG5cbiAgZ2V0TG9jYXRpb25zRm9yWm9vbTogU2VsZWN0b3I8TCwgRiwgSXRlcmFibGU8TD4gfCBDbHVzdGVyTm9kZVtdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldENsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbnNIYXZpbmdGbG93cyxcbiAgICAgIHRoaXMuZ2V0Q2x1c3RlckluZGV4LFxuICAgICAgdGhpcy5nZXRDbHVzdGVyWm9vbSxcbiAgICAgIChjbHVzdGVyaW5nRW5hYmxlZCwgbG9jYXRpb25zSGF2aW5nRmxvd3MsIGNsdXN0ZXJJbmRleCwgY2x1c3Rlclpvb20pID0+IHtcbiAgICAgICAgaWYgKGNsdXN0ZXJpbmdFbmFibGVkICYmIGNsdXN0ZXJJbmRleCkge1xuICAgICAgICAgIHJldHVybiBjbHVzdGVySW5kZXguZ2V0Q2x1c3Rlck5vZGVzRm9yKGNsdXN0ZXJab29tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb25zSGF2aW5nRmxvd3M7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRMb2NhdGlvblRvdGFsczogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIE1hcDxzdHJpbmcgfCBudW1iZXIsIExvY2F0aW9uVG90YWxzPiB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNGb3Jab29tLFxuICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uc1NldCxcbiAgICB0aGlzLmdldExvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAobG9jYXRpb25zLCBmbG93cywgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSkgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRvdGFscyA9IG5ldyBNYXA8c3RyaW5nIHwgbnVtYmVyLCBMb2NhdGlvblRvdGFscz4oKTtcbiAgICAgIGNvbnN0IGFkZCA9IChcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZDogUGFydGlhbDxMb2NhdGlvblRvdGFscz4sXG4gICAgICApOiBMb2NhdGlvblRvdGFscyA9PiB7XG4gICAgICAgIGNvbnN0IHJ2ID0gdG90YWxzLmdldChpZCkgPz8ge1xuICAgICAgICAgIGluY29taW5nQ291bnQ6IDAsXG4gICAgICAgICAgb3V0Z29pbmdDb3VudDogMCxcbiAgICAgICAgICBpbnRlcm5hbENvdW50OiAwLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoZC5pbmNvbWluZ0NvdW50ICE9IG51bGwpIHJ2LmluY29taW5nQ291bnQgKz0gZC5pbmNvbWluZ0NvdW50O1xuICAgICAgICBpZiAoZC5vdXRnb2luZ0NvdW50ICE9IG51bGwpIHJ2Lm91dGdvaW5nQ291bnQgKz0gZC5vdXRnb2luZ0NvdW50O1xuICAgICAgICBpZiAoZC5pbnRlcm5hbENvdW50ICE9IG51bGwpIHJ2LmludGVybmFsQ291bnQgKz0gZC5pbnRlcm5hbENvdW50O1xuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9O1xuICAgICAgZm9yIChjb25zdCBmIG9mIGZsb3dzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKGYsIHNlbGVjdGVkTG9jYXRpb25zU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbklkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGYpO1xuICAgICAgICAgIGNvbnN0IGRlc3RJZCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZik7XG4gICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93TWFnbml0dWRlKGYpO1xuICAgICAgICAgIGlmIChvcmlnaW5JZCA9PT0gZGVzdElkKSB7XG4gICAgICAgICAgICB0b3RhbHMuc2V0KG9yaWdpbklkLCBhZGQob3JpZ2luSWQsIHtpbnRlcm5hbENvdW50OiBjb3VudH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG90YWxzLnNldChvcmlnaW5JZCwgYWRkKG9yaWdpbklkLCB7b3V0Z29pbmdDb3VudDogY291bnR9KSk7XG4gICAgICAgICAgICB0b3RhbHMuc2V0KGRlc3RJZCwgYWRkKGRlc3RJZCwge2luY29taW5nQ291bnQ6IGNvdW50fSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRvdGFscztcbiAgICB9LFxuICApO1xuXG4gIGdldExvY2F0aW9uc1RyZWU6IFNlbGVjdG9yPEwsIEYsIEtEQnVzaFRyZWU+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNGb3Jab29tLFxuICAgIChsb2NhdGlvbnMpID0+IHtcbiAgICAgIGlmICghbG9jYXRpb25zKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEtEQnVzaChcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBsb2NhdGlvbnMsXG4gICAgICAgIChsb2NhdGlvbjogTCB8IENsdXN0ZXJOb2RlKSA9PlxuICAgICAgICAgIGxuZ1godGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25Mb24obG9jYXRpb24pKSxcbiAgICAgICAgKGxvY2F0aW9uOiBMIHwgQ2x1c3Rlck5vZGUpID0+XG4gICAgICAgICAgbGF0WSh0aGlzLmFjY2Vzc29ycy5nZXRMb2NhdGlvbkxhdChsb2NhdGlvbikpLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIF9nZXRMb2NhdGlvbklkc0luVmlld3BvcnQ6IFNlbGVjdG9yPEwsIEYsIFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldExvY2F0aW9uc1RyZWUsXG4gICAgICB0aGlzLmdldFZpZXdwb3J0Qm91bmRpbmdCb3gsXG4gICAgICAodHJlZTogS0RCdXNoVHJlZSwgYmJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5fZ2V0TG9jYXRpb25zSW5CYm94SW5kaWNlcyh0cmVlLCBiYm94KTtcbiAgICAgICAgaWYgKGlkcykge1xuICAgICAgICAgIHJldHVybiBuZXcgU2V0KFxuICAgICAgICAgICAgaWRzLm1hcCgoaWR4OiBudW1iZXIpID0+IHRyZWUucG9pbnRzW2lkeF0uaWQpIGFzIEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldExvY2F0aW9uSWRzSW5WaWV3cG9ydDogU2VsZWN0b3I8TCwgRiwgU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvckNyZWF0b3IoXG4gICAgICBkZWZhdWx0TWVtb2l6ZSxcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIChcbiAgICAgICAgczE6IFNldDxzdHJpbmc+IHwgdW5kZWZpbmVkLFxuICAgICAgICBzMjogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQsXG4gICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKHMxID09PSBzMikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChzMSA9PSBudWxsIHx8IHMyID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHMxLnNpemUgIT09IHMyLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHMxKSBpZiAoIXMyLmhhcyhpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgKShcbiAgICAgIHRoaXMuX2dldExvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgIChsb2NhdGlvbklkczogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKCFsb2NhdGlvbklkcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uSWRzO1xuICAgICAgfSxcbiAgICApO1xuXG4gIGdldFRvdGFsVW5maWx0ZXJlZENvdW50OiBTZWxlY3RvcjxMLCBGLCBudW1iZXIgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgdGhpcy5nZXRTb3J0ZWRGbG93c0Zvcktub3duTG9jYXRpb25zLFxuICAgIChmbG93cykgPT4ge1xuICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBmbG93cy5yZWR1Y2UoXG4gICAgICAgIChtLCBmbG93KSA9PiBtICsgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmbG93KSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRUb3RhbEZpbHRlcmVkQ291bnQ6IFNlbGVjdG9yPEwsIEYsIG51bWJlciB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZEFnZ3JlZ2F0ZWRGaWx0ZXJlZEZsb3dzLFxuICAgIHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgdGhpcy5nZXRMb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgKGZsb3dzLCBzZWxlY3RlZExvY2F0aW9uU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpID0+IHtcbiAgICAgIGlmICghZmxvd3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBjb3VudCA9IGZsb3dzLnJlZHVjZSgobSwgZmxvdykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pc0Zsb3dJblNlbGVjdGlvbihmbG93LCBzZWxlY3RlZExvY2F0aW9uU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBtICsgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmbG93KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH0sXG4gICk7XG5cbiAgX2dldExvY2F0aW9uVG90YWxzRXh0ZW50OiBTZWxlY3RvcjxMLCBGLCBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRMb2NhdGlvblRvdGFscywgKGxvY2F0aW9uVG90YWxzKSA9PlxuICAgICAgY2FsY0xvY2F0aW9uVG90YWxzRXh0ZW50KGxvY2F0aW9uVG90YWxzLCB1bmRlZmluZWQpLFxuICAgICk7XG5cbiAgX2dldExvY2F0aW9uVG90YWxzRm9yVmlld3BvcnRFeHRlbnQ6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgIChsb2NhdGlvblRvdGFscywgbG9jYXRpb25zSW5WaWV3cG9ydCkgPT5cbiAgICAgIGNhbGNMb2NhdGlvblRvdGFsc0V4dGVudChsb2NhdGlvblRvdGFscywgbG9jYXRpb25zSW5WaWV3cG9ydCksXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQgPSAoXG4gICAgc3RhdGU6IEZsb3dtYXBTdGF0ZSxcbiAgICBwcm9wczogRmxvd21hcERhdGE8TCwgRj4sXG4gICk6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChzdGF0ZS5zZXR0aW5ncy5hZGFwdGl2ZVNjYWxlc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRMb2NhdGlvblRvdGFsc0ZvclZpZXdwb3J0RXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRMb2NhdGlvblRvdGFsc0V4dGVudChzdGF0ZSwgcHJvcHMpO1xuICAgIH1cbiAgfTtcblxuICBnZXRGbG93c0ZvckZsb3dtYXBMYXllcjogU2VsZWN0b3I8TCwgRiwgKEYgfCBBZ2dyZWdhdGVGbG93KVtdIHwgdW5kZWZpbmVkPiA9XG4gICAgY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmdldFNvcnRlZEFnZ3JlZ2F0ZWRGaWx0ZXJlZEZsb3dzLFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICB0aGlzLmdldE1heFRvcEZsb3dzRGlzcGxheU51bSxcbiAgICAgIChcbiAgICAgICAgZmxvd3MsXG4gICAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICAgIGxvY2F0aW9uRmlsdGVyTW9kZSxcbiAgICAgICAgbWF4VG9wRmxvd3NEaXNwbGF5TnVtLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmICghZmxvd3MgfHwgIWxvY2F0aW9uSWRzSW5WaWV3cG9ydCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGlja2VkOiAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gPSBbXTtcbiAgICAgICAgbGV0IHBpY2tlZENvdW50ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpO1xuICAgICAgICAgIGNvbnN0IGRlc3QgPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93RGVzdElkKGZsb3cpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydC5oYXMob3JpZ2luKSB8fFxuICAgICAgICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LmhhcyhkZXN0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmlzRmxvd0luU2VsZWN0aW9uKFxuICAgICAgICAgICAgICAgIGZsb3csXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsXG4gICAgICAgICAgICAgICAgbG9jYXRpb25GaWx0ZXJNb2RlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWdpbiAhPT0gZGVzdCkge1xuICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgc2VsZi1sb29wc1xuICAgICAgICAgICAgICAgIHBpY2tlZC5wdXNoKGZsb3cpO1xuICAgICAgICAgICAgICAgIHBpY2tlZENvdW50Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT25seSBrZWVwIHRvcFxuICAgICAgICAgIGlmIChwaWNrZWRDb3VudCA+IG1heFRvcEZsb3dzRGlzcGxheU51bSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgc29ydGVkIGluIGRlc2NlbmRpbmcgb3JkZXIsXG4gICAgICAgIC8vIHdlIG5lZWQgYXNjZW5kaW5nIGZvciByZW5kZXJpbmdcbiAgICAgICAgcmV0dXJuIHBpY2tlZC5yZXZlcnNlKCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgX2dldEZsb3dNYWduaXR1ZGVFeHRlbnQ6IFNlbGVjdG9yPEwsIEYsIFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0U29ydGVkQWdncmVnYXRlZEZpbHRlcmVkRmxvd3MsXG4gICAgICB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb25zU2V0LFxuICAgICAgdGhpcy5nZXRMb2NhdGlvbkZpbHRlck1vZGUsXG4gICAgICAoZmxvd3MsIHNlbGVjdGVkTG9jYXRpb25zU2V0LCBsb2NhdGlvbkZpbHRlck1vZGUpID0+IHtcbiAgICAgICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJ2OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmxvd3MpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZikgIT09XG4gICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZikgJiZcbiAgICAgICAgICAgIHRoaXMuaXNGbG93SW5TZWxlY3Rpb24oZiwgc2VsZWN0ZWRMb2NhdGlvbnNTZXQsIGxvY2F0aW9uRmlsdGVyTW9kZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmKTtcbiAgICAgICAgICAgIGlmIChydiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJ2ID0gW2NvdW50LCBjb3VudF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAoY291bnQgPCBydlswXSkgcnZbMF0gPSBjb3VudDtcbiAgICAgICAgICAgICAgaWYgKGNvdW50ID4gcnZbMV0pIHJ2WzFdID0gY291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH0sXG4gICAgKTtcblxuICBfZ2V0QWRhcHRpdmVGbG93TWFnbml0dWRlRXh0ZW50OiBTZWxlY3RvcjxcbiAgICBMLFxuICAgIEYsXG4gICAgW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZFxuICA+ID0gY3JlYXRlU2VsZWN0b3IodGhpcy5nZXRGbG93c0ZvckZsb3dtYXBMYXllciwgKGZsb3dzKSA9PiB7XG4gICAgaWYgKCFmbG93cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBydiA9IGV4dGVudChmbG93cywgdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZSk7XG4gICAgcmV0dXJuIHJ2WzBdICE9PSB1bmRlZmluZWQgJiYgcnZbMV0gIT09IHVuZGVmaW5lZCA/IHJ2IDogdW5kZWZpbmVkO1xuICB9KTtcblxuICBnZXRGbG93TWFnbml0dWRlRXh0ZW50ID0gKFxuICAgIHN0YXRlOiBGbG93bWFwU3RhdGUsXG4gICAgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+LFxuICApOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc3RhdGUuc2V0dGluZ3MuYWRhcHRpdmVTY2FsZXNFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0QWRhcHRpdmVGbG93TWFnbml0dWRlRXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRGbG93TWFnbml0dWRlRXh0ZW50KHN0YXRlLCBwcm9wcyk7XG4gICAgfVxuICB9O1xuXG4gIGdldExvY2F0aW9uTWF4QWJzVG90YWxHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIChsb2NhdGlvblRvdGFscykgPT4ge1xuICAgICAgcmV0dXJuIChsb2NhdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBsb2NhdGlvblRvdGFscz8uZ2V0KGxvY2F0aW9uSWQpO1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgICAgTWF0aC5hYnModG90YWwuaW5jb21pbmdDb3VudCArIHRvdGFsLmludGVybmFsQ291bnQpLFxuICAgICAgICAgIE1hdGguYWJzKHRvdGFsLm91dGdvaW5nQ291bnQgKyB0b3RhbC5pbnRlcm5hbENvdW50KSxcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfSxcbiAgKTtcblxuICBnZXRGbG93VGhpY2tuZXNzU2NhbGUgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldEZsb3dNYWduaXR1ZGVFeHRlbnQsXG4gICAgZ2V0Rmxvd1RoaWNrbmVzc1NjYWxlLFxuICApO1xuXG4gIGdldENpcmNsZVNpemVTY2FsZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgIHRoaXMuZ2V0TWF4TG9jYXRpb25DaXJjbGVTaXplLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25Ub3RhbHNFeHRlbnQsXG4gICAgKG1heExvY2F0aW9uQ2lyY2xlU2l6ZSwgbG9jYXRpb25Ub3RhbHNFbmFibGVkLCBsb2NhdGlvblRvdGFsc0V4dGVudCkgPT4ge1xuICAgICAgaWYgKCFsb2NhdGlvblRvdGFsc0VuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IG1heExvY2F0aW9uQ2lyY2xlU2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmICghbG9jYXRpb25Ub3RhbHNFeHRlbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gc2NhbGVTcXJ0KClcbiAgICAgICAgLnJhbmdlKFswLCBtYXhMb2NhdGlvbkNpcmNsZVNpemVdKVxuICAgICAgICAuZG9tYWluKFtcbiAgICAgICAgICAwLFxuICAgICAgICAgIC8vIHNob3VsZCBzdXBwb3J0IGRpZmYgbW9kZSB0b29cbiAgICAgICAgICBNYXRoLm1heC5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBsb2NhdGlvblRvdGFsc0V4dGVudC5tYXAoKHg6IG51bWJlciB8IHVuZGVmaW5lZCkgPT5cbiAgICAgICAgICAgICAgTWF0aC5hYnMoeCB8fCAwKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgXSk7XG4gICAgfSxcbiAgKTtcblxuICBnZXRJbkNpcmNsZVNpemVHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENpcmNsZVNpemVTY2FsZSxcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIChjaXJjbGVTaXplU2NhbGUsIGxvY2F0aW9uVG90YWxzKSA9PiB7XG4gICAgICByZXR1cm4gKGxvY2F0aW9uSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGxvY2F0aW9uVG90YWxzPy5nZXQobG9jYXRpb25JZCk7XG4gICAgICAgIGlmICh0b3RhbCAmJiBjaXJjbGVTaXplU2NhbGUpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2lyY2xlU2l6ZVNjYWxlKFxuICAgICAgICAgICAgICBNYXRoLmFicyh0b3RhbC5pbmNvbWluZ0NvdW50ICsgdG90YWwuaW50ZXJuYWxDb3VudCksXG4gICAgICAgICAgICApIHx8IDBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfTtcbiAgICB9LFxuICApO1xuXG4gIGdldE91dENpcmNsZVNpemVHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENpcmNsZVNpemVTY2FsZSxcbiAgICB0aGlzLmdldExvY2F0aW9uVG90YWxzLFxuICAgIChjaXJjbGVTaXplU2NhbGUsIGxvY2F0aW9uVG90YWxzKSA9PiB7XG4gICAgICByZXR1cm4gKGxvY2F0aW9uSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IGxvY2F0aW9uVG90YWxzPy5nZXQobG9jYXRpb25JZCk7XG4gICAgICAgIGlmICh0b3RhbCAmJiBjaXJjbGVTaXplU2NhbGUpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2lyY2xlU2l6ZVNjYWxlKFxuICAgICAgICAgICAgICBNYXRoLmFicyh0b3RhbC5vdXRnb2luZ0NvdW50ICsgdG90YWwuaW50ZXJuYWxDb3VudCksXG4gICAgICAgICAgICApIHx8IDBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfTtcbiAgICB9LFxuICApO1xuXG4gIGdldFNvcnRlZExvY2F0aW9uc0Zvclpvb206IFNlbGVjdG9yPEwsIEYsIExbXSB8IENsdXN0ZXJOb2RlW10gfCB1bmRlZmluZWQ+ID1cbiAgICBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZ2V0TG9jYXRpb25zRm9yWm9vbSxcbiAgICAgIHRoaXMuZ2V0SW5DaXJjbGVTaXplR2V0dGVyLFxuICAgICAgdGhpcy5nZXRPdXRDaXJjbGVTaXplR2V0dGVyLFxuICAgICAgKGxvY2F0aW9ucywgZ2V0SW5DaXJjbGVTaXplLCBnZXRPdXRDaXJjbGVTaXplKSA9PiB7XG4gICAgICAgIGlmICghbG9jYXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBuZXh0TG9jYXRpb25zID0gWy4uLmxvY2F0aW9uc10gYXMgTFtdIHwgQ2x1c3Rlck5vZGVbXTtcbiAgICAgICAgcmV0dXJuIG5leHRMb2NhdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkQSA9IHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQoYSk7XG4gICAgICAgICAgY29uc3QgaWRCID0gdGhpcy5hY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChiKTtcbiAgICAgICAgICByZXR1cm4gYXNjZW5kaW5nKFxuICAgICAgICAgICAgTWF0aC5tYXgoZ2V0SW5DaXJjbGVTaXplKGlkQSksIGdldE91dENpcmNsZVNpemUoaWRBKSksXG4gICAgICAgICAgICBNYXRoLm1heChnZXRJbkNpcmNsZVNpemUoaWRCKSwgZ2V0T3V0Q2lyY2xlU2l6ZShpZEIpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcblxuICBnZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXI6IFNlbGVjdG9yPFxuICAgIEwsXG4gICAgRixcbiAgICBBcnJheTxMIHwgQ2x1c3Rlck5vZGU+IHwgdW5kZWZpbmVkXG4gID4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldFNvcnRlZExvY2F0aW9uc0Zvclpvb20sXG4gICAgLy8gdGhpcy5nZXRMb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgKFxuICAgICAgbG9jYXRpb25zLFxuICAgICAgLy8gbG9jYXRpb25JZHNJblZpZXdwb3J0XG4gICAgKSA9PiB7XG4gICAgICAvLyBpZiAoIWxvY2F0aW9ucykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIC8vIGlmICghbG9jYXRpb25JZHNJblZpZXdwb3J0KSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgLy8gaWYgKGxvY2F0aW9uSWRzSW5WaWV3cG9ydC5zaXplID09PSBsb2NhdGlvbnMubGVuZ3RoKSByZXR1cm4gbG9jYXRpb25zO1xuICAgICAgLy8gY29uc3QgZmlsdGVyZWQgPSBbXTtcbiAgICAgIC8vIGZvciAoY29uc3QgbG9jIG9mIGxvY2F0aW9ucykge1xuICAgICAgLy8gICBpZiAobG9jYXRpb25JZHNJblZpZXdwb3J0Lmhhcyhsb2MuaWQpKSB7XG4gICAgICAvLyAgICAgZmlsdGVyZWQucHVzaChsb2MpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvLyByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAvLyByZXR1cm4gbG9jYXRpb25zLmZpbHRlcihcbiAgICAgIC8vICAgKGxvYzogTCB8IENsdXN0ZXJOb2RlKSA9PiBsb2NhdGlvbklkc0luVmlld3BvcnQhLmhhcyhsb2MuaWQpXG4gICAgICAvLyApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIGxvY2F0aW9uIGluIHZpZXdwb3J0ICsgXCJjb25uZWN0ZWRcIiBvbmVzXG4gICAgICByZXR1cm4gbG9jYXRpb25zO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyQnlJZDogU2VsZWN0b3I8XG4gICAgTCxcbiAgICBGLFxuICAgIE1hcDxzdHJpbmcsIEwgfCBDbHVzdGVyTm9kZT4gfCB1bmRlZmluZWRcbiAgPiA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZ2V0TG9jYXRpb25zRm9yRmxvd21hcExheWVyLCAobG9jYXRpb25zKSA9PiB7XG4gICAgaWYgKCFsb2NhdGlvbnMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGxvY2F0aW9ucy5yZWR1Y2UoXG4gICAgICAobSwgZCkgPT4gKG0uc2V0KHRoaXMuYWNjZXNzb3JzLmdldExvY2F0aW9uSWQoZCksIGQpLCBtKSxcbiAgICAgIG5ldyBNYXAoKSxcbiAgICApO1xuICB9KTtcblxuICBnZXRMb2NhdGlvbk9yQ2x1c3RlckJ5SWRHZXR0ZXIgPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldENsdXN0ZXJJbmRleCxcbiAgICB0aGlzLmdldExvY2F0aW9uc0J5SWQsXG4gICAgKGNsdXN0ZXJJbmRleCwgbG9jYXRpb25zQnlJZCkgPT4ge1xuICAgICAgcmV0dXJuIChpZDogc3RyaW5nIHwgbnVtYmVyKSA9PlxuICAgICAgICBjbHVzdGVySW5kZXg/LmdldENsdXN0ZXJCeUlkKGlkKSA/PyBsb2NhdGlvbnNCeUlkPy5nZXQoaWQpO1xuICAgIH0sXG4gICk7XG5cbiAgZ2V0TGF5ZXJzRGF0YTogU2VsZWN0b3I8TCwgRiwgTGF5ZXJzRGF0YT4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllcixcbiAgICB0aGlzLmdldEZsb3dzRm9yRmxvd21hcExheWVyLFxuICAgIHRoaXMuZ2V0Rmxvd21hcENvbG9yc1JHQkEsXG4gICAgdGhpcy5nZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXJCeUlkLFxuICAgIHRoaXMuZ2V0TG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgIHRoaXMuZ2V0SW5DaXJjbGVTaXplR2V0dGVyLFxuICAgIHRoaXMuZ2V0T3V0Q2lyY2xlU2l6ZUdldHRlcixcbiAgICB0aGlzLmdldEZsb3dUaGlja25lc3NTY2FsZSxcbiAgICB0aGlzLmdldEFuaW1hdGUsXG4gICAgdGhpcy5nZXRMb2NhdGlvbkxhYmVsc0VuYWJsZWQsXG4gICAgKFxuICAgICAgbG9jYXRpb25zLFxuICAgICAgZmxvd3MsXG4gICAgICBmbG93bWFwQ29sb3JzLFxuICAgICAgbG9jYXRpb25zQnlJZCxcbiAgICAgIGxvY2F0aW9uSWRzSW5WaWV3cG9ydCxcbiAgICAgIGdldEluQ2lyY2xlU2l6ZSxcbiAgICAgIGdldE91dENpcmNsZVNpemUsXG4gICAgICBmbG93VGhpY2tuZXNzU2NhbGUsXG4gICAgICBhbmltYXRpb25FbmFibGVkLFxuICAgICAgbG9jYXRpb25MYWJlbHNFbmFibGVkLFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVMYXllcnNEYXRhKFxuICAgICAgICBsb2NhdGlvbnMsXG4gICAgICAgIGZsb3dzLFxuICAgICAgICBmbG93bWFwQ29sb3JzLFxuICAgICAgICBsb2NhdGlvbnNCeUlkLFxuICAgICAgICBsb2NhdGlvbklkc0luVmlld3BvcnQsXG4gICAgICAgIGdldEluQ2lyY2xlU2l6ZSxcbiAgICAgICAgZ2V0T3V0Q2lyY2xlU2l6ZSxcbiAgICAgICAgZmxvd1RoaWNrbmVzc1NjYWxlLFxuICAgICAgICBhbmltYXRpb25FbmFibGVkLFxuICAgICAgICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQsXG4gICAgICApO1xuICAgIH0sXG4gICk7XG5cbiAgcHJlcGFyZUxheWVyc0RhdGEoc3RhdGU6IEZsb3dtYXBTdGF0ZSwgcHJvcHM6IEZsb3dtYXBEYXRhPEwsIEY+KTogTGF5ZXJzRGF0YSB7XG4gICAgY29uc3QgbG9jYXRpb25zID0gdGhpcy5nZXRMb2NhdGlvbnNGb3JGbG93bWFwTGF5ZXIoc3RhdGUsIHByb3BzKSB8fCBbXTtcbiAgICBjb25zdCBmbG93cyA9IHRoaXMuZ2V0Rmxvd3NGb3JGbG93bWFwTGF5ZXIoc3RhdGUsIHByb3BzKSB8fCBbXTtcbiAgICBjb25zdCBmbG93bWFwQ29sb3JzID0gdGhpcy5nZXRGbG93bWFwQ29sb3JzUkdCQShzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGxvY2F0aW9uc0J5SWQgPSB0aGlzLmdldExvY2F0aW9uc0ZvckZsb3dtYXBMYXllckJ5SWQoc3RhdGUsIHByb3BzKTtcbiAgICBjb25zdCBsb2NhdGlvbklkc0luVmlld3BvcnQgPSB0aGlzLmdldExvY2F0aW9uSWRzSW5WaWV3cG9ydChzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGdldEluQ2lyY2xlU2l6ZSA9IHRoaXMuZ2V0SW5DaXJjbGVTaXplR2V0dGVyKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgZ2V0T3V0Q2lyY2xlU2l6ZSA9IHRoaXMuZ2V0T3V0Q2lyY2xlU2l6ZUdldHRlcihzdGF0ZSwgcHJvcHMpO1xuICAgIGNvbnN0IGZsb3dUaGlja25lc3NTY2FsZSA9IHRoaXMuZ2V0Rmxvd1RoaWNrbmVzc1NjYWxlKHN0YXRlLCBwcm9wcyk7XG4gICAgY29uc3QgbG9jYXRpb25MYWJlbHNFbmFibGVkID0gdGhpcy5nZXRMb2NhdGlvbkxhYmVsc0VuYWJsZWQoc3RhdGUsIHByb3BzKTtcbiAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUxheWVyc0RhdGEoXG4gICAgICBsb2NhdGlvbnMsXG4gICAgICBmbG93cyxcbiAgICAgIGZsb3dtYXBDb2xvcnMsXG4gICAgICBsb2NhdGlvbnNCeUlkLFxuICAgICAgbG9jYXRpb25JZHNJblZpZXdwb3J0LFxuICAgICAgZ2V0SW5DaXJjbGVTaXplLFxuICAgICAgZ2V0T3V0Q2lyY2xlU2l6ZSxcbiAgICAgIGZsb3dUaGlja25lc3NTY2FsZSxcbiAgICAgIHN0YXRlLnNldHRpbmdzLmFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQsXG4gICAgKTtcbiAgfVxuXG4gIF9wcmVwYXJlTGF5ZXJzRGF0YShcbiAgICBsb2NhdGlvbnM6IChMIHwgQ2x1c3Rlck5vZGUpW10gfCB1bmRlZmluZWQsXG4gICAgZmxvd3M6IChGIHwgQWdncmVnYXRlRmxvdylbXSB8IHVuZGVmaW5lZCxcbiAgICBmbG93bWFwQ29sb3JzOiBEaWZmQ29sb3JzUkdCQSB8IENvbG9yc1JHQkEsXG4gICAgbG9jYXRpb25zQnlJZDogTWFwPHN0cmluZyB8IG51bWJlciwgTCB8IENsdXN0ZXJOb2RlPiB8IHVuZGVmaW5lZCxcbiAgICBsb2NhdGlvbklkc0luVmlld3BvcnQ6IFNldDxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkLFxuICAgIGdldEluQ2lyY2xlU2l6ZTogKGxvY2F0aW9uSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gbnVtYmVyLFxuICAgIGdldE91dENpcmNsZVNpemU6IChsb2NhdGlvbklkOiBzdHJpbmcgfCBudW1iZXIpID0+IG51bWJlcixcbiAgICBmbG93VGhpY2tuZXNzU2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4gfCB1bmRlZmluZWQsXG4gICAgYW5pbWF0aW9uRW5hYmxlZDogYm9vbGVhbixcbiAgICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQ6IGJvb2xlYW4sXG4gICk6IExheWVyc0RhdGEge1xuICAgIGlmICghbG9jYXRpb25zKSBsb2NhdGlvbnMgPSBbXTtcbiAgICBpZiAoIWZsb3dzKSBmbG93cyA9IFtdO1xuICAgIGNvbnN0IHtcbiAgICAgIGdldEZsb3dPcmlnaW5JZCxcbiAgICAgIGdldEZsb3dEZXN0SWQsXG4gICAgICBnZXRGbG93TWFnbml0dWRlLFxuICAgICAgZ2V0TG9jYXRpb25JZCxcbiAgICAgIGdldExvY2F0aW9uTG9uLFxuICAgICAgZ2V0TG9jYXRpb25MYXQsXG4gICAgICBnZXRMb2NhdGlvbk5hbWUsXG4gICAgfSA9IHRoaXMuYWNjZXNzb3JzO1xuXG4gICAgY29uc3QgZmxvd01hZ25pdHVkZUV4dGVudCA9IGV4dGVudChmbG93cywgKGYpID0+IGdldEZsb3dNYWduaXR1ZGUoZikpIGFzIFtcbiAgICAgIG51bWJlcixcbiAgICAgIG51bWJlcixcbiAgICBdO1xuICAgIGNvbnN0IGZsb3dDb2xvclNjYWxlID0gZ2V0Rmxvd0NvbG9yU2NhbGUoXG4gICAgICBmbG93bWFwQ29sb3JzLFxuICAgICAgZmxvd01hZ25pdHVkZUV4dGVudCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG5cbiAgICAvLyBVc2luZyBhIGdlbmVyYXRvciBoZXJlIGhlbHBzIHRvIGF2b2lkIGNyZWF0aW5nIGludGVybWVkaWFyeSBhcnJheXNcbiAgICBjb25zdCBjaXJjbGVQb3NpdGlvbnMgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICAgIHlpZWxkIGdldExvY2F0aW9uTG9uKGxvY2F0aW9uKTtcbiAgICAgICAgICB5aWVsZCBnZXRMb2NhdGlvbkxhdChsb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcblxuICAgIC8vIFRPRE86IGRpZmYgbW9kZVxuICAgIGNvbnN0IGNpcmNsZUNvbG9yID0gaXNEaWZmQ29sb3JzUkdCQShmbG93bWFwQ29sb3JzKVxuICAgICAgPyBmbG93bWFwQ29sb3JzLnBvc2l0aXZlLmxvY2F0aW9uQ2lyY2xlcy5pbm5lclxuICAgICAgOiBmbG93bWFwQ29sb3JzLmxvY2F0aW9uQ2lyY2xlcy5pbm5lcjtcblxuICAgIGNvbnN0IGNpcmNsZUNvbG9ycyA9IFVpbnQ4QXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICAgIHlpZWxkKiBjaXJjbGVDb2xvcjtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuXG4gICAgY29uc3QgaW5DaXJjbGVSYWRpaSA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICAgICAgY29uc3QgaWQgPSBnZXRMb2NhdGlvbklkKGxvY2F0aW9uKTtcbiAgICAgICAgICB5aWVsZCBsb2NhdGlvbklkc0luVmlld3BvcnQ/LmhhcyhpZCkgPyBnZXRJbkNpcmNsZVNpemUoaWQpIDogMS4wO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG4gICAgY29uc3Qgb3V0Q2lyY2xlUmFkaWkgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGlkID0gZ2V0TG9jYXRpb25JZChsb2NhdGlvbik7XG4gICAgICAgICAgeWllbGQgbG9jYXRpb25JZHNJblZpZXdwb3J0Py5oYXMoaWQpID8gZ2V0T3V0Q2lyY2xlU2l6ZShpZCkgOiAxLjA7XG4gICAgICAgIH1cbiAgICAgIH0pKCksXG4gICAgKTtcblxuICAgIGNvbnN0IHNvdXJjZVBvc2l0aW9ucyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIGNvbnN0IGxvYyA9IGxvY2F0aW9uc0J5SWQ/LmdldChnZXRGbG93T3JpZ2luSWQoZmxvdykpO1xuICAgICAgICAgIHlpZWxkIGxvYyA/IGdldExvY2F0aW9uTG9uKGxvYykgOiAwO1xuICAgICAgICAgIHlpZWxkIGxvYyA/IGdldExvY2F0aW9uTGF0KGxvYykgOiAwO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0UG9zaXRpb25zID0gRmxvYXQzMkFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgY29uc3QgbG9jID0gbG9jYXRpb25zQnlJZD8uZ2V0KGdldEZsb3dEZXN0SWQoZmxvdykpO1xuICAgICAgICAgIHlpZWxkIGxvYyA/IGdldExvY2F0aW9uTG9uKGxvYykgOiAwO1xuICAgICAgICAgIHlpZWxkIGxvYyA/IGdldExvY2F0aW9uTGF0KGxvYykgOiAwO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG4gICAgY29uc3QgdGhpY2tuZXNzZXMgPSBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgIChmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZsb3cgb2YgZmxvd3MpIHtcbiAgICAgICAgICB5aWVsZCBmbG93VGhpY2tuZXNzU2NhbGVcbiAgICAgICAgICAgID8gZmxvd1RoaWNrbmVzc1NjYWxlKGdldEZsb3dNYWduaXR1ZGUoZmxvdykpIHx8IDBcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICApO1xuICAgIGNvbnN0IGVuZHBvaW50T2Zmc2V0cyA9IEZsb2F0MzJBcnJheS5mcm9tKFxuICAgICAgKGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmxvdyBvZiBmbG93cykge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbklkID0gZ2V0Rmxvd09yaWdpbklkKGZsb3cpO1xuICAgICAgICAgIGNvbnN0IGRlc3RJZCA9IGdldEZsb3dEZXN0SWQoZmxvdyk7XG4gICAgICAgICAgeWllbGQgTWF0aC5tYXgoZ2V0SW5DaXJjbGVTaXplKG9yaWdpbklkKSwgZ2V0T3V0Q2lyY2xlU2l6ZShvcmlnaW5JZCkpO1xuICAgICAgICAgIHlpZWxkIE1hdGgubWF4KGdldEluQ2lyY2xlU2l6ZShkZXN0SWQpLCBnZXRPdXRDaXJjbGVTaXplKGRlc3RJZCkpO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG4gICAgY29uc3QgZmxvd0xpbmVDb2xvcnMgPSBVaW50OEFycmF5LmZyb20oXG4gICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgICAgeWllbGQqIGZsb3dDb2xvclNjYWxlKGdldEZsb3dNYWduaXR1ZGUoZmxvdykpO1xuICAgICAgICB9XG4gICAgICB9KSgpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGFnZ2VyaW5nVmFsdWVzID0gYW5pbWF0aW9uRW5hYmxlZFxuICAgICAgPyBGbG9hdDMyQXJyYXkuZnJvbShcbiAgICAgICAgICAoZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmbG93cykge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHlpZWxkIG5ldyBhbGVhKGAke2dldEZsb3dPcmlnaW5JZChmKX0tJHtnZXRGbG93RGVzdElkKGYpfWApKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKSxcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2lyY2xlQXR0cmlidXRlczoge1xuICAgICAgICBsZW5ndGg6IGxvY2F0aW9ucy5sZW5ndGgsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBnZXRQb3NpdGlvbjoge3ZhbHVlOiBjaXJjbGVQb3NpdGlvbnMsIHNpemU6IDJ9LFxuICAgICAgICAgIGdldENvbG9yOiB7dmFsdWU6IGNpcmNsZUNvbG9ycywgc2l6ZTogNH0sXG4gICAgICAgICAgZ2V0SW5SYWRpdXM6IHt2YWx1ZTogaW5DaXJjbGVSYWRpaSwgc2l6ZTogMX0sXG4gICAgICAgICAgZ2V0T3V0UmFkaXVzOiB7dmFsdWU6IG91dENpcmNsZVJhZGlpLCBzaXplOiAxfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsaW5lQXR0cmlidXRlczoge1xuICAgICAgICBsZW5ndGg6IGZsb3dzLmxlbmd0aCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIGdldFNvdXJjZVBvc2l0aW9uOiB7dmFsdWU6IHNvdXJjZVBvc2l0aW9ucywgc2l6ZTogMn0sXG4gICAgICAgICAgZ2V0VGFyZ2V0UG9zaXRpb246IHt2YWx1ZTogdGFyZ2V0UG9zaXRpb25zLCBzaXplOiAyfSxcbiAgICAgICAgICBnZXRUaGlja25lc3M6IHt2YWx1ZTogdGhpY2tuZXNzZXMsIHNpemU6IDF9LFxuICAgICAgICAgIGdldENvbG9yOiB7dmFsdWU6IGZsb3dMaW5lQ29sb3JzLCBzaXplOiA0fSxcbiAgICAgICAgICBnZXRFbmRwb2ludE9mZnNldHM6IHt2YWx1ZTogZW5kcG9pbnRPZmZzZXRzLCBzaXplOiAyfSxcbiAgICAgICAgICAuLi4oc3RhZ2dlcmluZ1ZhbHVlc1xuICAgICAgICAgICAgPyB7Z2V0U3RhZ2dlcmluZzoge3ZhbHVlOiBzdGFnZ2VyaW5nVmFsdWVzLCBzaXplOiAxfX1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLihsb2NhdGlvbkxhYmVsc0VuYWJsZWRcbiAgICAgICAgPyB7bG9jYXRpb25MYWJlbHM6IGxvY2F0aW9ucy5tYXAoZ2V0TG9jYXRpb25OYW1lKX1cbiAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgIH07XG4gIH1cblxuICBnZXRMb2NhdGlvbnNJbkJib3goXG4gICAgdHJlZTogS0RCdXNoVHJlZSxcbiAgICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgKTogQXJyYXk8TD4gfCB1bmRlZmluZWQge1xuICAgIGlmICghdHJlZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5fZ2V0TG9jYXRpb25zSW5CYm94SW5kaWNlcyh0cmVlLCBiYm94KS5tYXAoXG4gICAgICAoaWR4OiBudW1iZXIpID0+IHRyZWUucG9pbnRzW2lkeF0sXG4gICAgKSBhcyBBcnJheTxMPjtcbiAgfVxuXG4gIF9nZXRMb2NhdGlvbnNJbkJib3hJbmRpY2VzKFxuICAgIHRyZWU6IEtEQnVzaFRyZWUsXG4gICAgYmJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICkge1xuICAgIGlmICghdHJlZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBbbG9uMSwgbGF0MSwgbG9uMiwgbGF0Ml0gPSBiYm94O1xuICAgIGNvbnN0IFt4MSwgeTEsIHgyLCB5Ml0gPSBbbG5nWChsb24xKSwgbGF0WShsYXQxKSwgbG5nWChsb24yKSwgbGF0WShsYXQyKV07XG4gICAgcmV0dXJuIHRyZWUucmFuZ2UoXG4gICAgICBNYXRoLm1pbih4MSwgeDIpLFxuICAgICAgTWF0aC5taW4oeTEsIHkyKSxcbiAgICAgIE1hdGgubWF4KHgxLCB4MiksXG4gICAgICBNYXRoLm1heCh5MSwgeTIpLFxuICAgICk7XG4gIH1cblxuICBpc0Zsb3dJblNlbGVjdGlvbihcbiAgICBmbG93OiBGIHwgQWdncmVnYXRlRmxvdyxcbiAgICBzZWxlY3RlZExvY2F0aW9uc1NldDogU2V0PHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQsXG4gICAgbG9jYXRpb25GaWx0ZXJNb2RlPzogTG9jYXRpb25GaWx0ZXJNb2RlLFxuICApIHtcbiAgICBjb25zdCBvcmlnaW4gPSB0aGlzLmFjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmxvdyk7XG4gICAgY29uc3QgZGVzdCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdyk7XG4gICAgaWYgKHNlbGVjdGVkTG9jYXRpb25zU2V0KSB7XG4gICAgICBzd2l0Y2ggKGxvY2F0aW9uRmlsdGVyTW9kZSkge1xuICAgICAgICBjYXNlIExvY2F0aW9uRmlsdGVyTW9kZS5BTEw6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhvcmlnaW4pIHx8IHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhkZXN0KVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgTG9jYXRpb25GaWx0ZXJNb2RlLkJFVFdFRU46XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhvcmlnaW4pICYmIHNlbGVjdGVkTG9jYXRpb25zU2V0LmhhcyhkZXN0KVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgTG9jYXRpb25GaWx0ZXJNb2RlLklOQ09NSU5HOlxuICAgICAgICAgIHJldHVybiBzZWxlY3RlZExvY2F0aW9uc1NldC5oYXMoZGVzdCk7XG4gICAgICAgIGNhc2UgTG9jYXRpb25GaWx0ZXJNb2RlLk9VVEdPSU5HOlxuICAgICAgICAgIHJldHVybiBzZWxlY3RlZExvY2F0aW9uc1NldC5oYXMob3JpZ2luKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBjYWxjTG9jYXRpb25Ub3RhbHMoXG4gIC8vICAgbG9jYXRpb25zOiAoTCB8IENsdXN0ZXJOb2RlKVtdLFxuICAvLyAgIGZsb3dzOiBGW10sXG4gIC8vICk6IExvY2F0aW9uc1RvdGFscyB7XG4gIC8vICAgcmV0dXJuIGZsb3dzLnJlZHVjZShcbiAgLy8gICAgIChhY2M6IExvY2F0aW9uc1RvdGFscywgY3VycikgPT4ge1xuICAvLyAgICAgICBjb25zdCBvcmlnaW5JZCA9IHRoaXMuYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChjdXJyKTtcbiAgLy8gICAgICAgY29uc3QgZGVzdElkID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChjdXJyKTtcbiAgLy8gICAgICAgY29uc3QgbWFnbml0dWRlID0gdGhpcy5hY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShjdXJyKTtcbiAgLy8gICAgICAgaWYgKG9yaWdpbklkID09PSBkZXN0SWQpIHtcbiAgLy8gICAgICAgICBhY2MuaW50ZXJuYWxbb3JpZ2luSWRdID0gKGFjYy5pbnRlcm5hbFtvcmlnaW5JZF0gfHwgMCkgKyBtYWduaXR1ZGU7XG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgYWNjLm91dGdvaW5nW29yaWdpbklkXSA9IChhY2Mub3V0Z29pbmdbb3JpZ2luSWRdIHx8IDApICsgbWFnbml0dWRlO1xuICAvLyAgICAgICAgIGFjYy5pbmNvbWluZ1tkZXN0SWRdID0gKGFjYy5pbmNvbWluZ1tkZXN0SWRdIHx8IDApICsgbWFnbml0dWRlO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIHJldHVybiBhY2M7XG4gIC8vICAgICB9LFxuICAvLyAgICAge2luY29taW5nOiB7fSwgb3V0Z29pbmc6IHt9LCBpbnRlcm5hbDoge319LFxuICAvLyAgICk7XG4gIC8vIH1cbn1cblxuZnVuY3Rpb24gY2FsY0xvY2F0aW9uVG90YWxzRXh0ZW50KFxuICBsb2NhdGlvblRvdGFsczogTWFwPHN0cmluZyB8IG51bWJlciwgTG9jYXRpb25Ub3RhbHM+IHwgdW5kZWZpbmVkLFxuICBsb2NhdGlvbklkc0luVmlld3BvcnQ6IFNldDxzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkLFxuKSB7XG4gIGlmICghbG9jYXRpb25Ub3RhbHMpIHJldHVybiB1bmRlZmluZWQ7XG4gIGxldCBydjogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBbXG4gICAgaWQsXG4gICAge2luY29taW5nQ291bnQsIG91dGdvaW5nQ291bnQsIGludGVybmFsQ291bnR9LFxuICBdIG9mIGxvY2F0aW9uVG90YWxzLmVudHJpZXMoKSkge1xuICAgIGlmIChsb2NhdGlvbklkc0luVmlld3BvcnQgPT0gbnVsbCB8fCBsb2NhdGlvbklkc0luVmlld3BvcnQuaGFzKGlkKSkge1xuICAgICAgY29uc3QgbG8gPSBNYXRoLm1pbihcbiAgICAgICAgaW5jb21pbmdDb3VudCArIGludGVybmFsQ291bnQsXG4gICAgICAgIG91dGdvaW5nQ291bnQgKyBpbnRlcm5hbENvdW50LFxuICAgICAgICBpbnRlcm5hbENvdW50LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGhpID0gTWF0aC5tYXgoXG4gICAgICAgIGluY29taW5nQ291bnQgKyBpbnRlcm5hbENvdW50LFxuICAgICAgICBvdXRnb2luZ0NvdW50ICsgaW50ZXJuYWxDb3VudCxcbiAgICAgICAgaW50ZXJuYWxDb3VudCxcbiAgICAgICk7XG4gICAgICBpZiAoIXJ2KSB7XG4gICAgICAgIHJ2ID0gW2xvLCBoaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobG8gPCBydlswXSkgcnZbMF0gPSBsbztcbiAgICAgICAgaWYgKGhpID4gcnZbMV0pIHJ2WzFdID0gaGk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBydjtcbn1cblxuLy8gbG9uZ2l0dWRlL2xhdGl0dWRlIHRvIHNwaGVyaWNhbCBtZXJjYXRvciBpbiBbMC4uMV0gcmFuZ2VcbmZ1bmN0aW9uIGxuZ1gobG5nOiBudW1iZXIpIHtcbiAgcmV0dXJuIGxuZyAvIDM2MCArIDAuNTtcbn1cblxuZnVuY3Rpb24gbGF0WShsYXQ6IG51bWJlcikge1xuICBjb25zdCBzaW4gPSBNYXRoLnNpbigobGF0ICogTWF0aC5QSSkgLyAxODApO1xuICBjb25zdCB5ID0gMC41IC0gKDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpKSAvIE1hdGguUEk7XG4gIHJldHVybiB5IDwgMCA/IDAgOiB5ID4gMSA/IDEgOiB5O1xufVxuXG5mdW5jdGlvbiBhZ2dyZWdhdGVGbG93czxGPihcbiAgZmxvd3M6IEZbXSxcbiAgZmxvd0FjY2Vzc29yczogRmxvd0FjY2Vzc29yczxGPixcbik6IEFnZ3JlZ2F0ZUZsb3dbXSB7XG4gIC8vIFN1bSB1cCBmbG93cyB3aXRoIHNhbWUgb3JpZ2luLCBkZXN0XG4gIGNvbnN0IGJ5T3JpZ2luRGVzdCA9IHJvbGx1cChcbiAgICBmbG93cyxcbiAgICAoZmY6IEZbXSkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luID0gZmxvd0FjY2Vzc29ycy5nZXRGbG93T3JpZ2luSWQoZmZbMF0pO1xuICAgICAgY29uc3QgZGVzdCA9IGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmZlswXSk7XG4gICAgICAvLyBjb25zdCBjb2xvciA9IGZmWzBdLmNvbG9yO1xuICAgICAgY29uc3QgcnY6IEFnZ3JlZ2F0ZUZsb3cgPSB7XG4gICAgICAgIGFnZ3JlZ2F0ZTogdHJ1ZSxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBkZXN0LFxuICAgICAgICBjb3VudDogZmYucmVkdWNlKChtLCBmKSA9PiB7XG4gICAgICAgICAgY29uc3QgY291bnQgPSBmbG93QWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZik7XG4gICAgICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKGNvdW50KSAmJiBpc0Zpbml0ZShjb3VudCkpIHJldHVybiBtICsgY291bnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICB9LCAwKSxcbiAgICAgICAgLy8gdGltZTogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIC8vIGlmIChjb2xvcikgcnYuY29sb3IgPSBjb2xvcjtcbiAgICAgIHJldHVybiBydjtcbiAgICB9LFxuICAgIGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkLFxuICAgIGZsb3dBY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZCxcbiAgKTtcblxuICBjb25zdCBydjogQWdncmVnYXRlRmxvd1tdID0gW107XG4gIGZvciAoY29uc3QgdmFsdWVzIG9mIGJ5T3JpZ2luRGVzdC52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzLnZhbHVlcygpKSB7XG4gICAgICBydi5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFRoaXMgaXMgdXNlZCB0byBhdWdtZW50IGhvdmVyIHBpY2tpbmcgaW5mbyBzbyB0aGF0IHdlIGNhbiBkaXNwbGFjZSBsb2NhdGlvbiB0b29sdGlwXG4gKiBAcGFyYW0gY2lyY2xlQXR0cmlidXRlc1xuICogQHBhcmFtIGluZGV4XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRlckNpcmNsZVJhZGl1c0J5SW5kZXgoXG4gIGNpcmNsZUF0dHJpYnV0ZXM6IEZsb3dDaXJjbGVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBpbmRleDogbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgY29uc3Qge2dldEluUmFkaXVzLCBnZXRPdXRSYWRpdXN9ID0gY2lyY2xlQXR0cmlidXRlcy5hdHRyaWJ1dGVzO1xuICByZXR1cm4gTWF0aC5tYXgoZ2V0SW5SYWRpdXMudmFsdWVbaW5kZXhdLCBnZXRPdXRSYWRpdXMudmFsdWVbaW5kZXhdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2F0aW9uQ29vcmRzQnlJbmRleChcbiAgY2lyY2xlQXR0cmlidXRlczogRmxvd0NpcmNsZXNMYXllckF0dHJpYnV0ZXMsXG4gIGluZGV4OiBudW1iZXIsXG4pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3Qge2dldFBvc2l0aW9ufSA9IGNpcmNsZUF0dHJpYnV0ZXMuYXR0cmlidXRlcztcbiAgcmV0dXJuIFtnZXRQb3NpdGlvbi52YWx1ZVtpbmRleCAqIDJdLCBnZXRQb3NpdGlvbi52YWx1ZVtpbmRleCAqIDIgKyAxXV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG93TGluZUF0dHJpYnV0ZXNCeUluZGV4KFxuICBsaW5lQXR0cmlidXRlczogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBpbmRleDogbnVtYmVyLFxuKTogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzIHtcbiAgY29uc3Qge1xuICAgIGdldENvbG9yLFxuICAgIGdldEVuZHBvaW50T2Zmc2V0cyxcbiAgICBnZXRTb3VyY2VQb3NpdGlvbixcbiAgICBnZXRUYXJnZXRQb3NpdGlvbixcbiAgICBnZXRUaGlja25lc3MsXG4gICAgZ2V0U3RhZ2dlcmluZyxcbiAgfSA9IGxpbmVBdHRyaWJ1dGVzLmF0dHJpYnV0ZXM7XG4gIHJldHVybiB7XG4gICAgbGVuZ3RoOiAxLFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIGdldENvbG9yOiB7XG4gICAgICAgIHZhbHVlOiBnZXRDb2xvci52YWx1ZS5zdWJhcnJheShpbmRleCAqIDQsIChpbmRleCArIDEpICogNCksXG4gICAgICAgIHNpemU6IDQsXG4gICAgICB9LFxuICAgICAgZ2V0RW5kcG9pbnRPZmZzZXRzOiB7XG4gICAgICAgIHZhbHVlOiBnZXRFbmRwb2ludE9mZnNldHMudmFsdWUuc3ViYXJyYXkoaW5kZXggKiAyLCAoaW5kZXggKyAxKSAqIDIpLFxuICAgICAgICBzaXplOiAyLFxuICAgICAgfSxcbiAgICAgIGdldFNvdXJjZVBvc2l0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBnZXRTb3VyY2VQb3NpdGlvbi52YWx1ZS5zdWJhcnJheShpbmRleCAqIDIsIChpbmRleCArIDEpICogMiksXG4gICAgICAgIHNpemU6IDIsXG4gICAgICB9LFxuICAgICAgZ2V0VGFyZ2V0UG9zaXRpb246IHtcbiAgICAgICAgdmFsdWU6IGdldFRhcmdldFBvc2l0aW9uLnZhbHVlLnN1YmFycmF5KGluZGV4ICogMiwgKGluZGV4ICsgMSkgKiAyKSxcbiAgICAgICAgc2l6ZTogMixcbiAgICAgIH0sXG4gICAgICBnZXRUaGlja25lc3M6IHtcbiAgICAgICAgdmFsdWU6IGdldFRoaWNrbmVzcy52YWx1ZS5zdWJhcnJheShpbmRleCwgaW5kZXggKyAxKSxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgIH0sXG4gICAgICAuLi4oZ2V0U3RhZ2dlcmluZ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIGdldFN0YWdnZXJpbmc6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFN0YWdnZXJpbmcudmFsdWUuc3ViYXJyYXkoaW5kZXgsIGluZGV4ICsgMSksXG4gICAgICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
|
package/dist/FlowmapState.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowmapState.d.ts","sourceRoot":"","sources":["../src/FlowmapState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FlowmapState.d.ts","sourceRoot":"","sources":["../src/FlowmapState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,aAAa,EAAC,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,iBAAiB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,aAAa,CAAC;CACzB"}
|
package/dist/FlowmapState.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBTdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbkZpbHRlck1vZGUsIFZpZXdwb3J0UHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclN0YXRlIHtcbiAgc2VsZWN0ZWRMb2NhdGlvbnM/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcFN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBTdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbkZpbHRlck1vZGUsIFZpZXdwb3J0UHJvcHN9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclN0YXRlIHtcbiAgc2VsZWN0ZWRMb2NhdGlvbnM/OiAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuICBsb2NhdGlvbkZpbHRlck1vZGU/OiBMb2NhdGlvbkZpbHRlck1vZGU7XG4gIHNlbGVjdGVkVGltZVJhbmdlPzogW0RhdGUsIERhdGVdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzU3RhdGUge1xuICBhbmltYXRpb25FbmFibGVkOiBib29sZWFuO1xuICBmYWRlRW5hYmxlZDogYm9vbGVhbjtcbiAgZmFkZU9wYWNpdHlFbmFibGVkOiBib29sZWFuO1xuICBsb2NhdGlvblRvdGFsc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGxvY2F0aW9uTGFiZWxzRW5hYmxlZDogYm9vbGVhbjtcbiAgYWRhcHRpdmVTY2FsZXNFbmFibGVkOiBib29sZWFuO1xuICBjbHVzdGVyaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0F1dG86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdMZXZlbD86IG51bWJlcjtcbiAgZGFya01vZGU6IGJvb2xlYW47XG4gIGZhZGVBbW91bnQ6IG51bWJlcjtcbiAgY29sb3JTY2hlbWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBoaWdobGlnaHRDb2xvcjogc3RyaW5nO1xuICBtYXhUb3BGbG93c0Rpc3BsYXlOdW06IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbG93bWFwU3RhdGUge1xuICBmaWx0ZXI/OiBGaWx0ZXJTdGF0ZTtcbiAgc2V0dGluZ3M6IFNldHRpbmdzU3RhdGU7XG4gIHZpZXdwb3J0OiBWaWV3cG9ydFByb3BzO1xufVxuIl19
|
|
@@ -13,7 +13,7 @@ export interface ClusterIndex<F> {
|
|
|
13
13
|
/**
|
|
14
14
|
* Get the min zoom level on which the location is not clustered.
|
|
15
15
|
*/
|
|
16
|
-
getMinZoomForLocation: (locationId: string) => number;
|
|
16
|
+
getMinZoomForLocation: (locationId: string | number) => number;
|
|
17
17
|
/**
|
|
18
18
|
* List the IDs of all locations in the cluster (leaves of the subtree starting in the cluster).
|
|
19
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusterIndex.d.ts","sourceRoot":"","sources":["../../src/cluster/ClusterIndex.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,aAAa,EACb,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAGpB,oBAAY,oBAAoB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACpE;;OAEG;IACH,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,WAAW,EAAE,GAAG,SAAS,CAAC;IAC5E;;OAEG;IACH,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ClusterIndex.d.ts","sourceRoot":"","sources":["../../src/cluster/ClusterIndex.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,aAAa,EACb,OAAO,EACP,aAAa,EACb,WAAW,EACX,aAAa,EACb,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAGpB,oBAAY,oBAAoB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IACpE;;OAEG;IACH,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,WAAW,EAAE,GAAG,SAAS,CAAC;IAC5E;;OAEG;IACH,qBAAqB,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC;IAC/D;;OAEG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACnE;;OAEG;IACH,cAAc,EAAE,CACd,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,IAAI,EAAE,MAAM,KACT,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACjC;;OAEG;IACH,cAAc,EAAE,CACd,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,MAAM,EACZ,EAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EACpE,OAAO,CAAC,EAAE;QACR,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;KAC9C,KACE,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAyJ3E;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,KAAK,EAAE,CAAC,EAAE,EACV,EAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GACnE,oBAAoB,CAuBtB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,mBAAmB,EAAE,MAAM,EAAE,EAC7B,UAAU,EAAE,MAAM,UAWnB"}
|
|
@@ -175,4 +175,4 @@ export function findAppropriateZoomLevel(availableZoomLevels, targetZoom) {
|
|
|
175
175
|
}
|
|
176
176
|
return availableZoomLevels[Math.min(bisectLeft(availableZoomLevels, Math.floor(targetZoom)), availableZoomLevels.length - 1)];
|
|
177
177
|
}
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2x1c3RlckluZGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsdXN0ZXIvQ2x1c3RlckluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUEwQ3ZEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBSSxhQUE0QjtJQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUN6RCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0lBQy9ELEtBQUssTUFBTSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsSUFBSSxhQUFhLEVBQUU7UUFDekMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxNQUFNLEVBQUMsRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFO29CQUMzQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuQzthQUNGO1NBQ0Y7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LENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQy9DLENBQUM7QUFDTixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxtQkFBNkIsRUFDN0IsVUFBa0I7SUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLG1CQUFtQixDQUN4QixJQUFJLENBQUMsR0FBRyxDQUNOLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQ3ZELG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQy9CLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtcbiAgQWdncmVnYXRlRmxvdyxcbiAgQ2x1c3RlcixcbiAgQ2x1c3RlckxldmVscyxcbiAgQ2x1c3Rlck5vZGUsXG4gIEZsb3dBY2Nlc3NvcnMsXG4gIEZsb3dDb3VudHNNYXBSZWR1Y2UsXG4gIGlzQ2x1c3Rlcixcbn0gZnJvbSAnLi8uLi90eXBlcyc7XG5pbXBvcnQge2FzY2VuZGluZywgYmlzZWN0TGVmdCwgZXh0ZW50fSBmcm9tICdkMy1hcnJheSc7XG5cbmV4cG9ydCB0eXBlIExvY2F0aW9uV2VpZ2h0R2V0dGVyID0gKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+IG51bWJlcjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY2x1c3RlciBsZXZlbHMgZm9yIGVmZmljaWVudCBmbG93IGFnZ3JlZ2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJJbmRleDxGPiB7XG4gIGF2YWlsYWJsZVpvb21MZXZlbHM6IG51bWJlcltdO1xuICBnZXRDbHVzdGVyQnlJZDogKGNsdXN0ZXJJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDbHVzdGVyIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogTGlzdCB0aGUgbm9kZXMgb24gdGhlIGdpdmVuIHpvb20gbGV2ZWwuXG4gICAqL1xuICBnZXRDbHVzdGVyTm9kZXNGb3I6ICh6b29tOiBudW1iZXIgfCB1bmRlZmluZWQpID0+IENsdXN0ZXJOb2RlW10gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbiB6b29tIGxldmVsIG9uIHdoaWNoIHRoZSBsb2NhdGlvbiBpcyBub3QgY2x1c3RlcmVkLlxuICAgKi9cbiAgZ2V0TWluWm9vbUZvckxvY2F0aW9uOiAobG9jYXRpb25JZDogc3RyaW5nKSA9PiBudW1iZXI7XG4gIC8qKlxuICAgKiBMaXN0IHRoZSBJRHMgb2YgYWxsIGxvY2F0aW9ucyBpbiB0aGUgY2x1c3RlciAobGVhdmVzIG9mIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nIGluIHRoZSBjbHVzdGVyKS5cbiAgICovXG4gIGV4cGFuZENsdXN0ZXI6IChjbHVzdGVyOiBDbHVzdGVyLCB0YXJnZXRab29tPzogbnVtYmVyKSA9PiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEZpbmQgdGhlIGNsdXN0ZXIgdGhlIGdpdmVuIGxvY2F0aW9uIGlzIHJlc2lkaW5nIGluIG9uIHRoZSBzcGVjaWZpZWQgem9vbSBsZXZlbC5cbiAgICovXG4gIGZpbmRDbHVzdGVyRm9yOiAoXG4gICAgbG9jYXRpb25JZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIHpvb206IG51bWJlcixcbiAgKSA9PiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgZmxvd3MgZm9yIHRoZSBzcGVjaWZpZWQgem9vbSBsZXZlbC5cbiAgICovXG4gIGFnZ3JlZ2F0ZUZsb3dzOiAoXG4gICAgZmxvd3M6IEZbXSxcbiAgICB6b29tOiBudW1iZXIsXG4gICAge2dldEZsb3dPcmlnaW5JZCwgZ2V0Rmxvd0Rlc3RJZCwgZ2V0Rmxvd01hZ25pdHVkZX06IEZsb3dBY2Nlc3NvcnM8Rj4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGZsb3dDb3VudHNNYXBSZWR1Y2U/OiBGbG93Q291bnRzTWFwUmVkdWNlPEY+O1xuICAgIH0sXG4gICkgPT4gKEYgfCBBZ2dyZWdhdGVGbG93KVtdO1xufVxuXG4vKipcbiAqIEJ1aWxkIENsdXN0ZXJJbmRleCBmcm9tIHRoZSBnaXZlbiBjbHVzdGVyIGhpZXJhcmNoeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbmRleDxGPihjbHVzdGVyTGV2ZWxzOiBDbHVzdGVyTGV2ZWxzKTogQ2x1c3RlckluZGV4PEY+IHtcbiAgY29uc3Qgbm9kZXNCeVpvb20gPSBuZXcgTWFwPG51bWJlciwgQ2x1c3Rlck5vZGVbXT4oKTtcbiAgY29uc3QgY2x1c3RlcnNCeUlkID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIENsdXN0ZXI+KCk7XG4gIGNvbnN0IG1pblpvb21CeUxvY2F0aW9uSWQgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IHt6b29tLCBub2Rlc30gb2YgY2x1c3RlckxldmVscykge1xuICAgIG5vZGVzQnlab29tLnNldCh6b29tLCBub2Rlcyk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAoaXNDbHVzdGVyKG5vZGUpKSB7XG4gICAgICAgIGNsdXN0ZXJzQnlJZC5zZXQobm9kZS5pZCwgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7aWR9ID0gbm9kZTtcbiAgICAgICAgY29uc3QgbXogPSBtaW5ab29tQnlMb2NhdGlvbklkLmdldChpZCk7XG4gICAgICAgIGlmIChteiA9PSBudWxsIHx8IG16ID4gem9vbSkge1xuICAgICAgICAgIG1pblpvb21CeUxvY2F0aW9uSWQuc2V0KGlkLCB6b29tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFttaW5ab29tLCBtYXhab29tXSA9IGV4dGVudChjbHVzdGVyTGV2ZWxzLCAoY2wpID0+IGNsLnpvb20pO1xuICBpZiAobWluWm9vbSA9PSBudWxsIHx8IG1heFpvb20gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSBtaW5ab29tIG9yIG1heFpvb20nKTtcbiAgfVxuXG4gIGNvbnN0IGxlYXZlc1RvQ2x1c3RlcnNCeVpvb20gPSBuZXcgTWFwPFxuICAgIG51bWJlcixcbiAgICBNYXA8c3RyaW5nIHwgbnVtYmVyLCBDbHVzdGVyPlxuICA+KCk7XG5cbiAgZm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzQnlJZC52YWx1ZXMoKSkge1xuICAgIGNvbnN0IHt6b29tfSA9IGNsdXN0ZXI7XG4gICAgbGV0IGxlYXZlc1RvQ2x1c3RlcnMgPSBsZWF2ZXNUb0NsdXN0ZXJzQnlab29tLmdldCh6b29tKTtcbiAgICBpZiAoIWxlYXZlc1RvQ2x1c3RlcnMpIHtcbiAgICAgIGxlYXZlc1RvQ2x1c3RlcnMgPSBuZXcgTWFwPHN0cmluZywgQ2x1c3Rlcj4oKTtcbiAgICAgIGxlYXZlc1RvQ2x1c3RlcnNCeVpvb20uc2V0KHpvb20sIGxlYXZlc1RvQ2x1c3RlcnMpO1xuICAgIH1cbiAgICB2aXNpdENsdXN0ZXJMZWF2ZXMoY2x1c3RlciwgKGxlYWZJZCkgPT4ge1xuICAgICAgbGVhdmVzVG9DbHVzdGVycz8uc2V0KGxlYWZJZCwgY2x1c3Rlcik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdENsdXN0ZXJMZWF2ZXMoY2x1c3RlcjogQ2x1c3RlciwgdmlzaXQ6IChpZDogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGNsdXN0ZXIuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2x1c3RlcnNCeUlkLmdldChjaGlsZElkKTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICB2aXNpdENsdXN0ZXJMZWF2ZXMoY2hpbGQsIHZpc2l0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpc2l0KGNoaWxkSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4cGFuZENsdXN0ZXIgPSAoY2x1c3RlcjogQ2x1c3RlciwgdGFyZ2V0Wm9vbTogbnVtYmVyID0gbWF4Wm9vbSkgPT4ge1xuICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2aXNpdCA9IChjOiBDbHVzdGVyLCBleHBhbmRlZElkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4ge1xuICAgICAgaWYgKHRhcmdldFpvb20gPiBjLnpvb20pIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGMuY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IGNsdXN0ZXJzQnlJZC5nZXQoY2hpbGRJZCk7XG4gICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICB2aXNpdChjaGlsZCwgZXhwYW5kZWRJZHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBhbmRlZElkcy5wdXNoKGNoaWxkSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwYW5kZWRJZHMucHVzaChjLmlkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZpc2l0KGNsdXN0ZXIsIGlkcyk7XG4gICAgcmV0dXJuIGlkcztcbiAgfTtcblxuICBmdW5jdGlvbiBmaW5kQ2x1c3RlckZvcihsb2NhdGlvbklkOiBzdHJpbmcgfCBudW1iZXIsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGxlYXZlc1RvQ2x1c3RlcnMgPSBsZWF2ZXNUb0NsdXN0ZXJzQnlab29tLmdldCh6b29tKTtcbiAgICBpZiAoIWxlYXZlc1RvQ2x1c3RlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNsdXN0ZXIgPSBsZWF2ZXNUb0NsdXN0ZXJzLmdldChsb2NhdGlvbklkKTtcbiAgICByZXR1cm4gY2x1c3RlciA/IGNsdXN0ZXIuaWQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBhdmFpbGFibGVab29tTGV2ZWxzID0gY2x1c3RlckxldmVsc1xuICAgIC5tYXAoKGNsKSA9PiArY2wuem9vbSlcbiAgICAuc29ydCgoYSwgYikgPT4gYXNjZW5kaW5nKGEsIGIpKTtcblxuICByZXR1cm4ge1xuICAgIGF2YWlsYWJsZVpvb21MZXZlbHMsXG5cbiAgICBnZXRDbHVzdGVyTm9kZXNGb3I6ICh6b29tKSA9PiB7XG4gICAgICBpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZXNCeVpvb20uZ2V0KHpvb20pO1xuICAgIH0sXG5cbiAgICBnZXRDbHVzdGVyQnlJZDogKGNsdXN0ZXJJZCkgPT4gY2x1c3RlcnNCeUlkLmdldChjbHVzdGVySWQpLFxuXG4gICAgZ2V0TWluWm9vbUZvckxvY2F0aW9uOiAobG9jYXRpb25JZCkgPT5cbiAgICAgIG1pblpvb21CeUxvY2F0aW9uSWQuZ2V0KGxvY2F0aW9uSWQpIHx8IG1pblpvb20sXG5cbiAgICBleHBhbmRDbHVzdGVyLFxuXG4gICAgZmluZENsdXN0ZXJGb3IsXG5cbiAgICBhZ2dyZWdhdGVGbG93czogKFxuICAgICAgZmxvd3MsXG4gICAgICB6b29tLFxuICAgICAge2dldEZsb3dPcmlnaW5JZCwgZ2V0Rmxvd0Rlc3RJZCwgZ2V0Rmxvd01hZ25pdHVkZX0sXG4gICAgICBvcHRpb25zID0ge30sXG4gICAgKSA9PiB7XG4gICAgICBpZiAoem9vbSA+IG1heFpvb20pIHtcbiAgICAgICAgcmV0dXJuIGZsb3dzO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0OiAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gPSBbXTtcbiAgICAgIGNvbnN0IGFnZ0Zsb3dzQnlLZXkgPSBuZXcgTWFwPHN0cmluZywgQWdncmVnYXRlRmxvdz4oKTtcbiAgICAgIGNvbnN0IG1ha2VLZXkgPSAob3JpZ2luOiBzdHJpbmcgfCBudW1iZXIsIGRlc3Q6IHN0cmluZyB8IG51bWJlcikgPT5cbiAgICAgICAgYCR7b3JpZ2lufToke2Rlc3R9YDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmxvd0NvdW50c01hcFJlZHVjZSA9IHtcbiAgICAgICAgICBtYXA6IGdldEZsb3dNYWduaXR1ZGUsXG4gICAgICAgICAgcmVkdWNlOiAoYWNjOiBhbnksIGNvdW50OiBudW1iZXIpID0+IChhY2MgfHwgMCkgKyBjb3VudCxcbiAgICAgICAgfSxcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICAgICAgY29uc3QgZGVzdCA9IGdldEZsb3dEZXN0SWQoZmxvdyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbkNsdXN0ZXIgPSBmaW5kQ2x1c3RlckZvcihvcmlnaW4sIHpvb20pIHx8IG9yaWdpbjtcbiAgICAgICAgY29uc3QgZGVzdENsdXN0ZXIgPSBmaW5kQ2x1c3RlckZvcihkZXN0LCB6b29tKSB8fCBkZXN0O1xuICAgICAgICBjb25zdCBrZXkgPSBtYWtlS2V5KG9yaWdpbkNsdXN0ZXIsIGRlc3RDbHVzdGVyKTtcbiAgICAgICAgaWYgKG9yaWdpbkNsdXN0ZXIgPT09IG9yaWdpbiAmJiBkZXN0Q2x1c3RlciA9PT0gZGVzdCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGZsb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBhZ2dyZWdhdGVGbG93ID0gYWdnRmxvd3NCeUtleS5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZUZsb3cpIHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZsb3cgPSB7XG4gICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luQ2x1c3RlcixcbiAgICAgICAgICAgICAgZGVzdDogZGVzdENsdXN0ZXIsXG4gICAgICAgICAgICAgIGNvdW50OiBmbG93Q291bnRzTWFwUmVkdWNlLm1hcChmbG93KSxcbiAgICAgICAgICAgICAgYWdncmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFnZ3JlZ2F0ZUZsb3cpO1xuICAgICAgICAgICAgYWdnRmxvd3NCeUtleS5zZXQoa2V5LCBhZ2dyZWdhdGVGbG93KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWdncmVnYXRlRmxvdy5jb3VudCA9IGZsb3dDb3VudHNNYXBSZWR1Y2UucmVkdWNlKFxuICAgICAgICAgICAgICBhZ2dyZWdhdGVGbG93LmNvdW50LFxuICAgICAgICAgICAgICBmbG93Q291bnRzTWFwUmVkdWNlLm1hcChmbG93KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9jYXRpb25XZWlnaHRHZXR0ZXI8Rj4oXG4gIGZsb3dzOiBGW10sXG4gIHtnZXRGbG93T3JpZ2luSWQsIGdldEZsb3dEZXN0SWQsIGdldEZsb3dNYWduaXR1ZGV9OiBGbG93QWNjZXNzb3JzPEY+LFxuKTogTG9jYXRpb25XZWlnaHRHZXR0ZXIge1xuICBjb25zdCBsb2NhdGlvblRvdGFscyA9IHtcbiAgICBpbmNvbWluZzogbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4oKSxcbiAgICBvdXRnb2luZzogbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4oKSxcbiAgfTtcbiAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gZ2V0Rmxvd09yaWdpbklkKGZsb3cpO1xuICAgIGNvbnN0IGRlc3QgPSBnZXRGbG93RGVzdElkKGZsb3cpO1xuICAgIGNvbnN0IGNvdW50ID0gZ2V0Rmxvd01hZ25pdHVkZShmbG93KTtcbiAgICBsb2NhdGlvblRvdGFscy5pbmNvbWluZy5zZXQoXG4gICAgICBkZXN0LFxuICAgICAgKGxvY2F0aW9uVG90YWxzLmluY29taW5nLmdldChkZXN0KSB8fCAwKSArIGNvdW50LFxuICAgICk7XG4gICAgbG9jYXRpb25Ub3RhbHMub3V0Z29pbmcuc2V0KFxuICAgICAgb3JpZ2luLFxuICAgICAgKGxvY2F0aW9uVG90YWxzLm91dGdvaW5nLmdldChvcmlnaW4pIHx8IDApICsgY291bnQsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICBNYXRoLmFicyhsb2NhdGlvblRvdGFscy5pbmNvbWluZy5nZXQoaWQpIHx8IDApLFxuICAgICAgTWF0aC5hYnMobG9jYXRpb25Ub3RhbHMub3V0Z29pbmcuZ2V0KGlkKSB8fCAwKSxcbiAgICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhdmFpbGFibGVab29tTGV2ZWxzIE11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHBhcmFtIHRhcmdldFpvb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBcHByb3ByaWF0ZVpvb21MZXZlbChcbiAgYXZhaWxhYmxlWm9vbUxldmVsczogbnVtYmVyW10sXG4gIHRhcmdldFpvb206IG51bWJlcixcbikge1xuICBpZiAoIWF2YWlsYWJsZVpvb21MZXZlbHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdmFpbGFibGUgem9vbSBsZXZlbHMnKTtcbiAgfVxuICByZXR1cm4gYXZhaWxhYmxlWm9vbUxldmVsc1tcbiAgICBNYXRoLm1pbihcbiAgICAgIGJpc2VjdExlZnQoYXZhaWxhYmxlWm9vbUxldmVscywgTWF0aC5mbG9vcih0YXJnZXRab29tKSksXG4gICAgICBhdmFpbGFibGVab29tTGV2ZWxzLmxlbmd0aCAtIDEsXG4gICAgKVxuICBdO1xufVxuIl19
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2x1c3RlckluZGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsdXN0ZXIvQ2x1c3RlckluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQU9MLFNBQVMsR0FDVixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUEwQ3ZEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBSSxhQUE0QjtJQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUN6RCxNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0lBQy9ELEtBQUssTUFBTSxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsSUFBSSxhQUFhLEVBQUU7UUFDekMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxNQUFNLEVBQUMsRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFO29CQUMzQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuQzthQUNGO1NBQ0Y7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LENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQy9DLENBQUM7QUFDTixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxtQkFBNkIsRUFDN0IsVUFBa0I7SUFFbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLG1CQUFtQixDQUN4QixJQUFJLENBQUMsR0FBRyxDQUNOLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQ3ZELG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQy9CLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqIENvcHlyaWdodCAyMDE4LTIwMjAgVGVyYWx5dGljcywgbW9kaWZpZWQgYnkgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cblxuaW1wb3J0IHtcbiAgQWdncmVnYXRlRmxvdyxcbiAgQ2x1c3RlcixcbiAgQ2x1c3RlckxldmVscyxcbiAgQ2x1c3Rlck5vZGUsXG4gIEZsb3dBY2Nlc3NvcnMsXG4gIEZsb3dDb3VudHNNYXBSZWR1Y2UsXG4gIGlzQ2x1c3Rlcixcbn0gZnJvbSAnLi8uLi90eXBlcyc7XG5pbXBvcnQge2FzY2VuZGluZywgYmlzZWN0TGVmdCwgZXh0ZW50fSBmcm9tICdkMy1hcnJheSc7XG5cbmV4cG9ydCB0eXBlIExvY2F0aW9uV2VpZ2h0R2V0dGVyID0gKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+IG51bWJlcjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgY2x1c3RlciBsZXZlbHMgZm9yIGVmZmljaWVudCBmbG93IGFnZ3JlZ2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJJbmRleDxGPiB7XG4gIGF2YWlsYWJsZVpvb21MZXZlbHM6IG51bWJlcltdO1xuICBnZXRDbHVzdGVyQnlJZDogKGNsdXN0ZXJJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBDbHVzdGVyIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogTGlzdCB0aGUgbm9kZXMgb24gdGhlIGdpdmVuIHpvb20gbGV2ZWwuXG4gICAqL1xuICBnZXRDbHVzdGVyTm9kZXNGb3I6ICh6b29tOiBudW1iZXIgfCB1bmRlZmluZWQpID0+IENsdXN0ZXJOb2RlW10gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbiB6b29tIGxldmVsIG9uIHdoaWNoIHRoZSBsb2NhdGlvbiBpcyBub3QgY2x1c3RlcmVkLlxuICAgKi9cbiAgZ2V0TWluWm9vbUZvckxvY2F0aW9uOiAobG9jYXRpb25JZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8qKlxuICAgKiBMaXN0IHRoZSBJRHMgb2YgYWxsIGxvY2F0aW9ucyBpbiB0aGUgY2x1c3RlciAobGVhdmVzIG9mIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nIGluIHRoZSBjbHVzdGVyKS5cbiAgICovXG4gIGV4cGFuZENsdXN0ZXI6IChjbHVzdGVyOiBDbHVzdGVyLCB0YXJnZXRab29tPzogbnVtYmVyKSA9PiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEZpbmQgdGhlIGNsdXN0ZXIgdGhlIGdpdmVuIGxvY2F0aW9uIGlzIHJlc2lkaW5nIGluIG9uIHRoZSBzcGVjaWZpZWQgem9vbSBsZXZlbC5cbiAgICovXG4gIGZpbmRDbHVzdGVyRm9yOiAoXG4gICAgbG9jYXRpb25JZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIHpvb206IG51bWJlcixcbiAgKSA9PiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgZmxvd3MgZm9yIHRoZSBzcGVjaWZpZWQgem9vbSBsZXZlbC5cbiAgICovXG4gIGFnZ3JlZ2F0ZUZsb3dzOiAoXG4gICAgZmxvd3M6IEZbXSxcbiAgICB6b29tOiBudW1iZXIsXG4gICAge2dldEZsb3dPcmlnaW5JZCwgZ2V0Rmxvd0Rlc3RJZCwgZ2V0Rmxvd01hZ25pdHVkZX06IEZsb3dBY2Nlc3NvcnM8Rj4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGZsb3dDb3VudHNNYXBSZWR1Y2U/OiBGbG93Q291bnRzTWFwUmVkdWNlPEY+O1xuICAgIH0sXG4gICkgPT4gKEYgfCBBZ2dyZWdhdGVGbG93KVtdO1xufVxuXG4vKipcbiAqIEJ1aWxkIENsdXN0ZXJJbmRleCBmcm9tIHRoZSBnaXZlbiBjbHVzdGVyIGhpZXJhcmNoeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbmRleDxGPihjbHVzdGVyTGV2ZWxzOiBDbHVzdGVyTGV2ZWxzKTogQ2x1c3RlckluZGV4PEY+IHtcbiAgY29uc3Qgbm9kZXNCeVpvb20gPSBuZXcgTWFwPG51bWJlciwgQ2x1c3Rlck5vZGVbXT4oKTtcbiAgY29uc3QgY2x1c3RlcnNCeUlkID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIENsdXN0ZXI+KCk7XG4gIGNvbnN0IG1pblpvb21CeUxvY2F0aW9uSWQgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPigpO1xuICBmb3IgKGNvbnN0IHt6b29tLCBub2Rlc30gb2YgY2x1c3RlckxldmVscykge1xuICAgIG5vZGVzQnlab29tLnNldCh6b29tLCBub2Rlcyk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAoaXNDbHVzdGVyKG5vZGUpKSB7XG4gICAgICAgIGNsdXN0ZXJzQnlJZC5zZXQobm9kZS5pZCwgbm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7aWR9ID0gbm9kZTtcbiAgICAgICAgY29uc3QgbXogPSBtaW5ab29tQnlMb2NhdGlvbklkLmdldChpZCk7XG4gICAgICAgIGlmIChteiA9PSBudWxsIHx8IG16ID4gem9vbSkge1xuICAgICAgICAgIG1pblpvb21CeUxvY2F0aW9uSWQuc2V0KGlkLCB6b29tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFttaW5ab29tLCBtYXhab29tXSA9IGV4dGVudChjbHVzdGVyTGV2ZWxzLCAoY2wpID0+IGNsLnpvb20pO1xuICBpZiAobWluWm9vbSA9PSBudWxsIHx8IG1heFpvb20gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSBtaW5ab29tIG9yIG1heFpvb20nKTtcbiAgfVxuXG4gIGNvbnN0IGxlYXZlc1RvQ2x1c3RlcnNCeVpvb20gPSBuZXcgTWFwPFxuICAgIG51bWJlcixcbiAgICBNYXA8c3RyaW5nIHwgbnVtYmVyLCBDbHVzdGVyPlxuICA+KCk7XG5cbiAgZm9yIChjb25zdCBjbHVzdGVyIG9mIGNsdXN0ZXJzQnlJZC52YWx1ZXMoKSkge1xuICAgIGNvbnN0IHt6b29tfSA9IGNsdXN0ZXI7XG4gICAgbGV0IGxlYXZlc1RvQ2x1c3RlcnMgPSBsZWF2ZXNUb0NsdXN0ZXJzQnlab29tLmdldCh6b29tKTtcbiAgICBpZiAoIWxlYXZlc1RvQ2x1c3RlcnMpIHtcbiAgICAgIGxlYXZlc1RvQ2x1c3RlcnMgPSBuZXcgTWFwPHN0cmluZywgQ2x1c3Rlcj4oKTtcbiAgICAgIGxlYXZlc1RvQ2x1c3RlcnNCeVpvb20uc2V0KHpvb20sIGxlYXZlc1RvQ2x1c3RlcnMpO1xuICAgIH1cbiAgICB2aXNpdENsdXN0ZXJMZWF2ZXMoY2x1c3RlciwgKGxlYWZJZCkgPT4ge1xuICAgICAgbGVhdmVzVG9DbHVzdGVycz8uc2V0KGxlYWZJZCwgY2x1c3Rlcik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdENsdXN0ZXJMZWF2ZXMoY2x1c3RlcjogQ2x1c3RlciwgdmlzaXQ6IChpZDogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGNsdXN0ZXIuY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2x1c3RlcnNCeUlkLmdldChjaGlsZElkKTtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICB2aXNpdENsdXN0ZXJMZWF2ZXMoY2hpbGQsIHZpc2l0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpc2l0KGNoaWxkSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4cGFuZENsdXN0ZXIgPSAoY2x1c3RlcjogQ2x1c3RlciwgdGFyZ2V0Wm9vbTogbnVtYmVyID0gbWF4Wm9vbSkgPT4ge1xuICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCB2aXNpdCA9IChjOiBDbHVzdGVyLCBleHBhbmRlZElkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4ge1xuICAgICAgaWYgKHRhcmdldFpvb20gPiBjLnpvb20pIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZElkIG9mIGMuY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IGNsdXN0ZXJzQnlJZC5nZXQoY2hpbGRJZCk7XG4gICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICB2aXNpdChjaGlsZCwgZXhwYW5kZWRJZHMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBhbmRlZElkcy5wdXNoKGNoaWxkSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwYW5kZWRJZHMucHVzaChjLmlkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZpc2l0KGNsdXN0ZXIsIGlkcyk7XG4gICAgcmV0dXJuIGlkcztcbiAgfTtcblxuICBmdW5jdGlvbiBmaW5kQ2x1c3RlckZvcihsb2NhdGlvbklkOiBzdHJpbmcgfCBudW1iZXIsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGxlYXZlc1RvQ2x1c3RlcnMgPSBsZWF2ZXNUb0NsdXN0ZXJzQnlab29tLmdldCh6b29tKTtcbiAgICBpZiAoIWxlYXZlc1RvQ2x1c3RlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNsdXN0ZXIgPSBsZWF2ZXNUb0NsdXN0ZXJzLmdldChsb2NhdGlvbklkKTtcbiAgICByZXR1cm4gY2x1c3RlciA/IGNsdXN0ZXIuaWQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBhdmFpbGFibGVab29tTGV2ZWxzID0gY2x1c3RlckxldmVsc1xuICAgIC5tYXAoKGNsKSA9PiArY2wuem9vbSlcbiAgICAuc29ydCgoYSwgYikgPT4gYXNjZW5kaW5nKGEsIGIpKTtcblxuICByZXR1cm4ge1xuICAgIGF2YWlsYWJsZVpvb21MZXZlbHMsXG5cbiAgICBnZXRDbHVzdGVyTm9kZXNGb3I6ICh6b29tKSA9PiB7XG4gICAgICBpZiAoem9vbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZXNCeVpvb20uZ2V0KHpvb20pO1xuICAgIH0sXG5cbiAgICBnZXRDbHVzdGVyQnlJZDogKGNsdXN0ZXJJZCkgPT4gY2x1c3RlcnNCeUlkLmdldChjbHVzdGVySWQpLFxuXG4gICAgZ2V0TWluWm9vbUZvckxvY2F0aW9uOiAobG9jYXRpb25JZCkgPT5cbiAgICAgIG1pblpvb21CeUxvY2F0aW9uSWQuZ2V0KGxvY2F0aW9uSWQpIHx8IG1pblpvb20sXG5cbiAgICBleHBhbmRDbHVzdGVyLFxuXG4gICAgZmluZENsdXN0ZXJGb3IsXG5cbiAgICBhZ2dyZWdhdGVGbG93czogKFxuICAgICAgZmxvd3MsXG4gICAgICB6b29tLFxuICAgICAge2dldEZsb3dPcmlnaW5JZCwgZ2V0Rmxvd0Rlc3RJZCwgZ2V0Rmxvd01hZ25pdHVkZX0sXG4gICAgICBvcHRpb25zID0ge30sXG4gICAgKSA9PiB7XG4gICAgICBpZiAoem9vbSA+IG1heFpvb20pIHtcbiAgICAgICAgcmV0dXJuIGZsb3dzO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0OiAoRiB8IEFnZ3JlZ2F0ZUZsb3cpW10gPSBbXTtcbiAgICAgIGNvbnN0IGFnZ0Zsb3dzQnlLZXkgPSBuZXcgTWFwPHN0cmluZywgQWdncmVnYXRlRmxvdz4oKTtcbiAgICAgIGNvbnN0IG1ha2VLZXkgPSAob3JpZ2luOiBzdHJpbmcgfCBudW1iZXIsIGRlc3Q6IHN0cmluZyB8IG51bWJlcikgPT5cbiAgICAgICAgYCR7b3JpZ2lufToke2Rlc3R9YDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZmxvd0NvdW50c01hcFJlZHVjZSA9IHtcbiAgICAgICAgICBtYXA6IGdldEZsb3dNYWduaXR1ZGUsXG4gICAgICAgICAgcmVkdWNlOiAoYWNjOiBhbnksIGNvdW50OiBudW1iZXIpID0+IChhY2MgfHwgMCkgKyBjb3VudCxcbiAgICAgICAgfSxcbiAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldEZsb3dPcmlnaW5JZChmbG93KTtcbiAgICAgICAgY29uc3QgZGVzdCA9IGdldEZsb3dEZXN0SWQoZmxvdyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbkNsdXN0ZXIgPSBmaW5kQ2x1c3RlckZvcihvcmlnaW4sIHpvb20pIHx8IG9yaWdpbjtcbiAgICAgICAgY29uc3QgZGVzdENsdXN0ZXIgPSBmaW5kQ2x1c3RlckZvcihkZXN0LCB6b29tKSB8fCBkZXN0O1xuICAgICAgICBjb25zdCBrZXkgPSBtYWtlS2V5KG9yaWdpbkNsdXN0ZXIsIGRlc3RDbHVzdGVyKTtcbiAgICAgICAgaWYgKG9yaWdpbkNsdXN0ZXIgPT09IG9yaWdpbiAmJiBkZXN0Q2x1c3RlciA9PT0gZGVzdCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGZsb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBhZ2dyZWdhdGVGbG93ID0gYWdnRmxvd3NCeUtleS5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoIWFnZ3JlZ2F0ZUZsb3cpIHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZsb3cgPSB7XG4gICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luQ2x1c3RlcixcbiAgICAgICAgICAgICAgZGVzdDogZGVzdENsdXN0ZXIsXG4gICAgICAgICAgICAgIGNvdW50OiBmbG93Q291bnRzTWFwUmVkdWNlLm1hcChmbG93KSxcbiAgICAgICAgICAgICAgYWdncmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFnZ3JlZ2F0ZUZsb3cpO1xuICAgICAgICAgICAgYWdnRmxvd3NCeUtleS5zZXQoa2V5LCBhZ2dyZWdhdGVGbG93KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWdncmVnYXRlRmxvdy5jb3VudCA9IGZsb3dDb3VudHNNYXBSZWR1Y2UucmVkdWNlKFxuICAgICAgICAgICAgICBhZ2dyZWdhdGVGbG93LmNvdW50LFxuICAgICAgICAgICAgICBmbG93Q291bnRzTWFwUmVkdWNlLm1hcChmbG93KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9jYXRpb25XZWlnaHRHZXR0ZXI8Rj4oXG4gIGZsb3dzOiBGW10sXG4gIHtnZXRGbG93T3JpZ2luSWQsIGdldEZsb3dEZXN0SWQsIGdldEZsb3dNYWduaXR1ZGV9OiBGbG93QWNjZXNzb3JzPEY+LFxuKTogTG9jYXRpb25XZWlnaHRHZXR0ZXIge1xuICBjb25zdCBsb2NhdGlvblRvdGFscyA9IHtcbiAgICBpbmNvbWluZzogbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4oKSxcbiAgICBvdXRnb2luZzogbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4oKSxcbiAgfTtcbiAgZm9yIChjb25zdCBmbG93IG9mIGZsb3dzKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gZ2V0Rmxvd09yaWdpbklkKGZsb3cpO1xuICAgIGNvbnN0IGRlc3QgPSBnZXRGbG93RGVzdElkKGZsb3cpO1xuICAgIGNvbnN0IGNvdW50ID0gZ2V0Rmxvd01hZ25pdHVkZShmbG93KTtcbiAgICBsb2NhdGlvblRvdGFscy5pbmNvbWluZy5zZXQoXG4gICAgICBkZXN0LFxuICAgICAgKGxvY2F0aW9uVG90YWxzLmluY29taW5nLmdldChkZXN0KSB8fCAwKSArIGNvdW50LFxuICAgICk7XG4gICAgbG9jYXRpb25Ub3RhbHMub3V0Z29pbmcuc2V0KFxuICAgICAgb3JpZ2luLFxuICAgICAgKGxvY2F0aW9uVG90YWxzLm91dGdvaW5nLmdldChvcmlnaW4pIHx8IDApICsgY291bnQsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gKGlkOiBzdHJpbmcgfCBudW1iZXIpID0+XG4gICAgTWF0aC5tYXgoXG4gICAgICBNYXRoLmFicyhsb2NhdGlvblRvdGFscy5pbmNvbWluZy5nZXQoaWQpIHx8IDApLFxuICAgICAgTWF0aC5hYnMobG9jYXRpb25Ub3RhbHMub3V0Z29pbmcuZ2V0KGlkKSB8fCAwKSxcbiAgICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhdmFpbGFibGVab29tTGV2ZWxzIE11c3QgYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlclxuICogQHBhcmFtIHRhcmdldFpvb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBcHByb3ByaWF0ZVpvb21MZXZlbChcbiAgYXZhaWxhYmxlWm9vbUxldmVsczogbnVtYmVyW10sXG4gIHRhcmdldFpvb206IG51bWJlcixcbikge1xuICBpZiAoIWF2YWlsYWJsZVpvb21MZXZlbHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdmFpbGFibGUgem9vbSBsZXZlbHMnKTtcbiAgfVxuICByZXR1cm4gYXZhaWxhYmxlWm9vbUxldmVsc1tcbiAgICBNYXRoLm1pbihcbiAgICAgIGJpc2VjdExlZnQoYXZhaWxhYmxlWm9vbUxldmVscywgTWF0aC5mbG9vcih0YXJnZXRab29tKSksXG4gICAgICBhdmFpbGFibGVab29tTGV2ZWxzLmxlbmd0aCAtIDEsXG4gICAgKVxuICBdO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowmap.gl/data",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.24",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@types/mapbox__geo-viewport": "^0.4.1",
|
|
41
41
|
"@types/seedrandom": "^3.0.1"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "0a87fc82e22fb9181ccab4dacf8aa1a1a9f74bce",
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
}
|
package/src/FlowmapSelectors.ts
CHANGED
|
@@ -201,7 +201,7 @@ export default class FlowmapSelectors<L, F> {
|
|
|
201
201
|
return ids;
|
|
202
202
|
});
|
|
203
203
|
|
|
204
|
-
getSelectedLocationsSet: Selector<L, F, Set<string> | undefined> =
|
|
204
|
+
getSelectedLocationsSet: Selector<L, F, Set<string | number> | undefined> =
|
|
205
205
|
createSelector(this.getSelectedLocations, (ids) =>
|
|
206
206
|
ids && ids.length > 0 ? new Set(ids) : undefined,
|
|
207
207
|
);
|
|
@@ -391,7 +391,7 @@ export default class FlowmapSelectors<L, F> {
|
|
|
391
391
|
let maxZoom = Number.POSITIVE_INFINITY;
|
|
392
392
|
let minZoom = Number.NEGATIVE_INFINITY;
|
|
393
393
|
|
|
394
|
-
const adjust = (zoneId: string) => {
|
|
394
|
+
const adjust = (zoneId: string | number) => {
|
|
395
395
|
const cluster = clusterIndex.getClusterById(zoneId);
|
|
396
396
|
if (cluster) {
|
|
397
397
|
minZoom = Math.max(minZoom, cluster.zoom);
|
|
@@ -586,31 +586,34 @@ export default class FlowmapSelectors<L, F> {
|
|
|
586
586
|
},
|
|
587
587
|
);
|
|
588
588
|
|
|
589
|
-
getExpandedSelectedLocationsSet: Selector<
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
589
|
+
getExpandedSelectedLocationsSet: Selector<
|
|
590
|
+
L,
|
|
591
|
+
F,
|
|
592
|
+
Set<string | number> | undefined
|
|
593
|
+
> = createSelector(
|
|
594
|
+
this.getClusteringEnabled,
|
|
595
|
+
this.getSelectedLocationsSet,
|
|
596
|
+
this.getClusterIndex,
|
|
597
|
+
(clusteringEnabled, selectedLocations, clusterIndex) => {
|
|
598
|
+
if (!selectedLocations || !clusterIndex) {
|
|
599
|
+
return selectedLocations;
|
|
600
|
+
}
|
|
598
601
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
}
|
|
607
|
-
} else {
|
|
608
|
-
result.add(locationId);
|
|
602
|
+
const result = new Set<string | number>();
|
|
603
|
+
for (const locationId of selectedLocations) {
|
|
604
|
+
const cluster = clusterIndex.getClusterById(locationId);
|
|
605
|
+
if (cluster) {
|
|
606
|
+
const expanded = clusterIndex.expandCluster(cluster);
|
|
607
|
+
for (const id of expanded) {
|
|
608
|
+
result.add(id);
|
|
609
609
|
}
|
|
610
|
+
} else {
|
|
611
|
+
result.add(locationId);
|
|
610
612
|
}
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
613
|
+
}
|
|
614
|
+
return result;
|
|
615
|
+
},
|
|
616
|
+
);
|
|
614
617
|
|
|
615
618
|
getTotalCountsByTime: Selector<L, F, CountByTime[] | undefined> =
|
|
616
619
|
createSelector(
|
package/src/FlowmapState.ts
CHANGED
|
@@ -42,7 +42,7 @@ export interface ClusterIndex<F> {
|
|
|
42
42
|
/**
|
|
43
43
|
* Get the min zoom level on which the location is not clustered.
|
|
44
44
|
*/
|
|
45
|
-
getMinZoomForLocation: (locationId: string) => number;
|
|
45
|
+
getMinZoomForLocation: (locationId: string | number) => number;
|
|
46
46
|
/**
|
|
47
47
|
* List the IDs of all locations in the cluster (leaves of the subtree starting in the cluster).
|
|
48
48
|
*/
|