@amazon-devices/shopify__react-native-performance-navigation-bottom-tabs 3.0.1758683737
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/LICENSE +7 -0
- package/README.kepler.md +223 -0
- package/README.md +7 -0
- package/THIRD_PARTY_NOTICES.txt +24 -0
- package/dist/FixedSizeStack.d.ts +8 -0
- package/dist/FixedSizeStack.d.ts.map +1 -0
- package/dist/FixedSizeStack.js +24 -0
- package/dist/FixedSizeStack.js.map +1 -0
- package/dist/createProfiledBottomTabNavigator.d.ts +55 -0
- package/dist/createProfiledBottomTabNavigator.d.ts.map +1 -0
- package/dist/createProfiledBottomTabNavigator.js +92 -0
- package/dist/createProfiledBottomTabNavigator.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/kepler-compatibility.json +8 -0
- package/package.json +1 -0
- package/src/FixedSizeStack.ts +23 -0
- package/src/__tests__/createProfiledBottomTabNavigator.test.tsx +135 -0
- package/src/__tests__/setupJest.js +21 -0
- package/src/createProfiledBottomTabNavigator.tsx +154 -0
- package/src/index.ts +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright 2025 Amazon.com, Inc. or its affiliates. All rights reserved.
|
|
2
|
+
|
|
3
|
+
These materials are licensed as "Program Materials" under the Program Materials License Agreement (the "Agreement"). The Agreement is available at https://developer.amazon.com/support/legal/pml. See the Agreement for the specific terms and conditions of the Agreement. Capitalized terms not defined in this file have the meanings given to them in the Agreement.
|
|
4
|
+
|
|
5
|
+
If you do not agree to the above terms and conditions, you may not use any file in this package.
|
|
6
|
+
|
|
7
|
+
YOUR USE OF THE PROGRAM MATERIALS IN OR ASSOCIATED WITH THIS PACKAGE IS AT YOUR SOLE RISK. IN NO EVENT WILL AMAZON BE LIABLE FOR ANY DAMAGES, INCLUDING WITHOUT LIMITATION ANY DIRECT, INDIRECT, CONSEQUENTIAL, SPECIAL, INCIDENTAL, OR PUNITIVE DAMAGES (INCLUDING FOR ANY LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOST PROFITS OR DATA, OR COMPUTER FAILURE OR MALFUNCTION) ARISING FROM OR RELATING TO SUCH PROGRAM MATERIALS, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, EVEN IF AMAZON HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS AND DISCLAIMERS APPLY EXCEPT TO THE EXTENT PROHIBITED BY APPLICABLE LAW.
|
package/README.kepler.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# @amazon-devices/shopify__react-native-performance-navigation-bottom-tabs
|
|
2
|
+
|
|
3
|
+
## Getting Started
|
|
4
|
+
|
|
5
|
+
Extension library atop @shopify/react-native-performance-navigation with additional helper methods for `@react-navigation/bottom-tabs` library.
|
|
6
|
+
|
|
7
|
+
### Installation
|
|
8
|
+
|
|
9
|
+
1. Add the JavaScript library dependency in the `package.json` file:
|
|
10
|
+
```json
|
|
11
|
+
"dependencies": {
|
|
12
|
+
...
|
|
13
|
+
"@shopify/react-native-performance": "npm:@amazon-devices/shopify__react-native-performance@^2.0.0",
|
|
14
|
+
"@shopify/react-native-performance-navigation": "npm:@amazon-devices/shopify__react-native-performance-navigation@^3.0.0",
|
|
15
|
+
"@shopify/react-native-performance-navigation-bottom-tabs": "npm:@amazon-devices/shopify__react-native-performance-navigation-bottom-tabs@^3.0.0"
|
|
16
|
+
},
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
2. Add the babel module resolver plugin to devDependencies in the `package.json` file:
|
|
20
|
+
```json
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
...
|
|
23
|
+
"babel-plugin-module-resolver": "^5.0.2",
|
|
24
|
+
},
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
3. Configure `@amazon-devices/shopify__react-native-performance*` replacement in babel plugin in the `babel.config.js` file in order to have proper alias resolution:
|
|
28
|
+
```json
|
|
29
|
+
plugins: [
|
|
30
|
+
["module-resolver", {
|
|
31
|
+
"alias": {
|
|
32
|
+
"^@amazon-devices/shopify__react-native-performance(.*)": "@shopify/react-native-performance/\\1"
|
|
33
|
+
}
|
|
34
|
+
}]
|
|
35
|
+
]
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
4. If you're using `@amazon-devices/react-navigation__<X>@2.0.0` libraries, you need to place them in both `dependencies` and `overrides` sections in `package.json`. Here, `<X>` represents a specific library provided by `@amazon-devices/react-navigation`, such as `stack` or `native`. We also recommend migrating to `@amazon-devices/react-navigation__<X>@7.0.0` libraries which are adding `@amazon-devices/react-native-reanimated` support.
|
|
39
|
+
```json
|
|
40
|
+
"dependencies": {
|
|
41
|
+
...
|
|
42
|
+
"@amazon-devices/react-navigation__<X>": "^2.0.0",
|
|
43
|
+
...
|
|
44
|
+
},
|
|
45
|
+
...
|
|
46
|
+
"overrides": {
|
|
47
|
+
...
|
|
48
|
+
"@amazon-devices/react-navigation__<X>": "^2.0.0",
|
|
49
|
+
...
|
|
50
|
+
},
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
5. Reinstall dependencies using `npm install` command.
|
|
54
|
+
|
|
55
|
+
## Usage Examples
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
import React, { useCallback, useContext, useState } from 'react';
|
|
59
|
+
import { createProfiledBottomTabNavigator } from '@shopify/react-native-performance-navigation-bottom-tabs';
|
|
60
|
+
import {
|
|
61
|
+
LogLevel,
|
|
62
|
+
PerformanceProfiler,
|
|
63
|
+
RenderPassReport,
|
|
64
|
+
} from '@shopify/react-native-performance';
|
|
65
|
+
import { NavigationContainer } from '@amazon-devices/react-navigation__native';
|
|
66
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
67
|
+
import { ReactNavigationPerformanceView } from '@shopify/react-native-performance-navigation';
|
|
68
|
+
|
|
69
|
+
type ReportContextState = {
|
|
70
|
+
saveReport: (report: RenderPassReport) => void;
|
|
71
|
+
findReport: (destinationScreen: string, sourceScreen?: string) => void;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const INITIAL_STATE = {
|
|
75
|
+
saveReport: () => {},
|
|
76
|
+
findReport: () => {},
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const ReportContext = React.createContext<ReportContextState>(INITIAL_STATE);
|
|
80
|
+
|
|
81
|
+
const useReportContext = () => {
|
|
82
|
+
return useContext(ReportContext);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const BottomTabScreenA = () => {
|
|
86
|
+
const { findReport } = useReportContext();
|
|
87
|
+
const report = findReport('bottomTabScreenA', 'BottomTabBar');
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<ReactNavigationPerformanceView
|
|
91
|
+
screenName="bottomTabScreenA"
|
|
92
|
+
interactive={true}
|
|
93
|
+
>
|
|
94
|
+
<View style={styles.container}>
|
|
95
|
+
<Text style={styles.label}>Measuring navigation render time</Text>
|
|
96
|
+
<Text style={styles.label}>
|
|
97
|
+
New report is generated after each navigation from "Bottom Tab Bar" to
|
|
98
|
+
"Bottom Tab Screen A"
|
|
99
|
+
</Text>
|
|
100
|
+
<Text style={styles.text}>{JSON.stringify(report)}</Text>
|
|
101
|
+
</View>
|
|
102
|
+
</ReactNavigationPerformanceView>
|
|
103
|
+
);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const BottomTabScreenB = () => {
|
|
107
|
+
const { findReport } = useReportContext();
|
|
108
|
+
const report = findReport('bottomTabScreenB', 'BottomTabBar');
|
|
109
|
+
|
|
110
|
+
return (
|
|
111
|
+
<ReactNavigationPerformanceView
|
|
112
|
+
screenName="bottomTabScreenB"
|
|
113
|
+
interactive={true}
|
|
114
|
+
>
|
|
115
|
+
<View style={[styles.container]}>
|
|
116
|
+
<Text style={styles.label}>Measuring navigation render time</Text>
|
|
117
|
+
<Text style={styles.label}>
|
|
118
|
+
New report is generated after each navigation from "Bottom Tab Bar" to
|
|
119
|
+
"Bottom Tab Screen B"
|
|
120
|
+
</Text>
|
|
121
|
+
<Text style={styles.text}>{JSON.stringify(report)}</Text>
|
|
122
|
+
</View>
|
|
123
|
+
</ReactNavigationPerformanceView>
|
|
124
|
+
);
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const { Tab, buildProfiledBottomTabBarButton } =
|
|
128
|
+
createProfiledBottomTabNavigator();
|
|
129
|
+
|
|
130
|
+
export const App = () => {
|
|
131
|
+
const onReportPrepared = (report: RenderPassReport) => {
|
|
132
|
+
saveReport(report);
|
|
133
|
+
};
|
|
134
|
+
const [reports, setReports] = useState<RenderPassReport[]>([]);
|
|
135
|
+
|
|
136
|
+
const saveReport = useCallback((report: RenderPassReport) => {
|
|
137
|
+
setReports((prev) => {
|
|
138
|
+
const filtered = prev.filter(
|
|
139
|
+
(r) =>
|
|
140
|
+
r.sourceScreen !== report.sourceScreen ||
|
|
141
|
+
r.destinationScreen !== report.destinationScreen,
|
|
142
|
+
);
|
|
143
|
+
return [...filtered, report];
|
|
144
|
+
});
|
|
145
|
+
}, []);
|
|
146
|
+
|
|
147
|
+
const findReport = useCallback(
|
|
148
|
+
(destinationScreen: string, sourceScreen?: string) => {
|
|
149
|
+
return reports.find(
|
|
150
|
+
(r) =>
|
|
151
|
+
r.sourceScreen === sourceScreen &&
|
|
152
|
+
r.destinationScreen === destinationScreen,
|
|
153
|
+
);
|
|
154
|
+
},
|
|
155
|
+
[reports],
|
|
156
|
+
);
|
|
157
|
+
return (
|
|
158
|
+
<ReportContext.Provider value={{ saveReport, findReport }}>
|
|
159
|
+
<PerformanceProfiler
|
|
160
|
+
onReportPrepared={onReportPrepared}
|
|
161
|
+
logLevel={LogLevel.Debug}
|
|
162
|
+
>
|
|
163
|
+
<NavigationContainer>
|
|
164
|
+
<Tab.Navigator initialRouteName="Bottom Tab Screen A">
|
|
165
|
+
<Tab.Screen
|
|
166
|
+
name="Bottom Tab Screen A"
|
|
167
|
+
component={BottomTabScreenA}
|
|
168
|
+
options={{
|
|
169
|
+
// @ts-ignore
|
|
170
|
+
tabBarButton: buildProfiledBottomTabBarButton(),
|
|
171
|
+
}}
|
|
172
|
+
/>
|
|
173
|
+
<Tab.Screen
|
|
174
|
+
name="Bottom Tab Screen B"
|
|
175
|
+
component={BottomTabScreenB}
|
|
176
|
+
options={{
|
|
177
|
+
// @ts-ignore
|
|
178
|
+
tabBarButton: buildProfiledBottomTabBarButton(),
|
|
179
|
+
}}
|
|
180
|
+
/>
|
|
181
|
+
</Tab.Navigator>
|
|
182
|
+
</NavigationContainer>
|
|
183
|
+
</PerformanceProfiler>
|
|
184
|
+
</ReportContext.Provider>
|
|
185
|
+
);
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
const styles = StyleSheet.create({
|
|
189
|
+
container: {
|
|
190
|
+
flex: 1,
|
|
191
|
+
backgroundColor: '#fff',
|
|
192
|
+
alignItems: 'center',
|
|
193
|
+
justifyContent: 'center',
|
|
194
|
+
},
|
|
195
|
+
label: {
|
|
196
|
+
fontSize: 28,
|
|
197
|
+
},
|
|
198
|
+
text: {
|
|
199
|
+
fontSize: 20,
|
|
200
|
+
marginTop: 20,
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## API Reference
|
|
206
|
+
|
|
207
|
+
Check out the dedicated documentation for info about this library, API reference and more: [Official react-native-performance-navigation-bottom-tabs documentation](https://shopify.github.io/react-native-performance/docs/guides/react-native-performance-navigation/react-native-performance-navigation-bottom-tabs)
|
|
208
|
+
|
|
209
|
+
### Functions
|
|
210
|
+
|
|
211
|
+
| Function | Description | Platform support |
|
|
212
|
+
| ---- | ----------- | ---------------- |
|
|
213
|
+
| createProfiledBottomTabNavigator | This utility wraps over the stock createBottomTabNavigator, and allows you to profile how long it takes to render the screens hosted inside the different tabs. | All |
|
|
214
|
+
|
|
215
|
+
## Known Issues
|
|
216
|
+
|
|
217
|
+
* [Render pass reports](https://shopify.github.io/react-native-performance/docs/fundamentals/render-pass-report/) for navigating between the bottom tabs aren't currently correctly generated on Kepler
|
|
218
|
+
|
|
219
|
+
## Supported Versions
|
|
220
|
+
|
|
221
|
+
| Package version | Based on | @amazon-devices/react-native-kepler version |
|
|
222
|
+
| ---------------- | -------- | --------------------------------- |
|
|
223
|
+
| 3.0.0 | @shopify/react-native-performance-navigation-bottom-tabs v3.0.0 | 2.0.x |
|
package/README.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# react-native-performance-navigation-bottom-tabs
|
|
2
|
+
|
|
3
|
+
Extension library atop [@shopify/react-native-performance-navigation](../react-native-performance-navigation/getting-started) with additional helper methods for `@react-navigation/bottom-tabs` library.
|
|
4
|
+
|
|
5
|
+
## Usage & installation
|
|
6
|
+
|
|
7
|
+
Please refer to [documentation](https://shopify.github.io/react-native-performance/docs/guides/react-native-performance-navigation/react-native-performance-navigation-bottom-tabs) to see more information and usage examples.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
License from package.json:
|
|
2
|
+
==============================
|
|
3
|
+
|
|
4
|
+
MIT License
|
|
5
|
+
|
|
6
|
+
Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixedSizeStack.d.ts","sourceRoot":"","sources":["../src/FixedSizeStack.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;gBAE5B,OAAO,EAAE,MAAM;IAO3B,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQnB,GAAG,IAAI,CAAC,GAAG,SAAS;CAGrB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var FixedSizeStack = /** @class */ (function () {
|
|
4
|
+
function FixedSizeStack(maxSize) {
|
|
5
|
+
this.stack = new Array();
|
|
6
|
+
this.maxSize = maxSize;
|
|
7
|
+
if (maxSize <= 0) {
|
|
8
|
+
throw new Error("maxSize must be > 0: ".concat(maxSize, "."));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
FixedSizeStack.prototype.push = function (item) {
|
|
12
|
+
var deleteCount = this.stack.length - this.maxSize + 1;
|
|
13
|
+
if (deleteCount > 0) {
|
|
14
|
+
this.stack.splice(0, deleteCount);
|
|
15
|
+
}
|
|
16
|
+
this.stack.push(item);
|
|
17
|
+
};
|
|
18
|
+
FixedSizeStack.prototype.pop = function () {
|
|
19
|
+
return this.stack.pop();
|
|
20
|
+
};
|
|
21
|
+
return FixedSizeStack;
|
|
22
|
+
}());
|
|
23
|
+
exports.default = FixedSizeStack;
|
|
24
|
+
//# sourceMappingURL=FixedSizeStack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FixedSizeStack.js","sourceRoot":"","sources":["../src/FixedSizeStack.ts"],"names":[],"mappings":";;AAAA;IAIE,wBAAY,OAAe;QAFV,UAAK,GAAG,IAAI,KAAK,EAAK,CAAC;QAGtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,OAAO,IAAI,CAAC,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,+BAAwB,OAAO,MAAG,CAAC,CAAC;SACrD;IACH,CAAC;IAED,6BAAI,GAAJ,UAAK,IAAO;QACV,IAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACzD,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;SACnC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,4BAAG,GAAH;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC1B,CAAC;IACH,qBAAC;AAAD,CAAC,AAtBD,IAsBC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { GestureResponderEvent, PerformanceProfilerError } from '@amazon-devices/shopify__react-native-performance';
|
|
3
|
+
import { TouchableWithoutFeedbackProps } from 'react-native';
|
|
4
|
+
export declare const DEFAULT_SOURCE_NAME = "BottomTabBar";
|
|
5
|
+
type UIEvent = React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent;
|
|
6
|
+
type TouchableProps = Omit<TouchableWithoutFeedbackProps, 'onPress'> & {
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
onPress?: (event: UIEvent) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare class MissingTabBarTimestampError extends PerformanceProfilerError {
|
|
11
|
+
readonly name = "MissingTabBarTimestampError";
|
|
12
|
+
readonly destinationScreen: string;
|
|
13
|
+
constructor(destinationScreen: string);
|
|
14
|
+
}
|
|
15
|
+
export default function createProfiledBottomTabNavigator<TParamList extends {
|
|
16
|
+
[key: string]: {
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
} | undefined;
|
|
19
|
+
}>({ source }?: {
|
|
20
|
+
source?: string;
|
|
21
|
+
}): {
|
|
22
|
+
Tab: import("@amazon-devices/react-navigation__core").TypedNavigator<TParamList, import("@amazon-devices/react-navigation__routers").TabNavigationState<import("@amazon-devices/react-navigation__routers").ParamListBase>, import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationOptions, import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, ({ id, initialRouteName, backBehavior, children, screenListeners, screenOptions, sceneContainerStyle, ...restWithDeprecated }: import("@amazon-devices/react-navigation__routers").DefaultRouterOptions<string> & {
|
|
23
|
+
id?: string | undefined;
|
|
24
|
+
children: React.ReactNode;
|
|
25
|
+
screenListeners?: Partial<{
|
|
26
|
+
tabPress: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "tabPress">;
|
|
27
|
+
tabLongPress: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "tabLongPress">;
|
|
28
|
+
focus: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "focus">;
|
|
29
|
+
blur: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "blur">;
|
|
30
|
+
state: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "state">;
|
|
31
|
+
beforeRemove: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "beforeRemove">;
|
|
32
|
+
}> | ((props: {
|
|
33
|
+
route: import("@amazon-devices/react-navigation__core").RouteProp<import("@amazon-devices/react-navigation__routers").ParamListBase, string>;
|
|
34
|
+
navigation: any;
|
|
35
|
+
}) => Partial<{
|
|
36
|
+
tabPress: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "tabPress">;
|
|
37
|
+
tabLongPress: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "tabLongPress">;
|
|
38
|
+
focus: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "focus">;
|
|
39
|
+
blur: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "blur">;
|
|
40
|
+
state: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "state">;
|
|
41
|
+
beforeRemove: import("@amazon-devices/react-navigation__core").EventListenerCallback<import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationEventMap, "beforeRemove">;
|
|
42
|
+
}>) | undefined;
|
|
43
|
+
screenOptions?: import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationOptions | ((props: {
|
|
44
|
+
route: import("@amazon-devices/react-navigation__core").RouteProp<import("@amazon-devices/react-navigation__routers").ParamListBase, string>;
|
|
45
|
+
navigation: any;
|
|
46
|
+
}) => import("@amazon-devices/react-navigation__bottom-tabs").BottomTabNavigationOptions) | undefined;
|
|
47
|
+
} & {
|
|
48
|
+
backBehavior?: import("@amazon-devices/react-navigation__routers/lib/typescript/src/TabRouter").BackBehavior | undefined;
|
|
49
|
+
} & import("@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/types").BottomTabNavigationConfig) => JSX.Element>;
|
|
50
|
+
buildProfiledBottomTabBarButton: <T extends TouchableProps = TouchableProps>({ Touchable, }?: {
|
|
51
|
+
Touchable?: React.ComponentType<T> | undefined;
|
|
52
|
+
}) => ({ onPress, style, children, ...rest }: T) => JSX.Element;
|
|
53
|
+
};
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=createProfiledBottomTabNavigator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProfiledBottomTabNavigator.d.ts","sourceRoot":"","sources":["../src/createProfiledBottomTabNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,EACL,qBAAqB,EAIrB,wBAAwB,EACzB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAO,6BAA6B,EAA2B,MAAM,cAAc,CAAC;AAI3F,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD,KAAK,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,GAAG,qBAAqB,CAAC;AAIvF,KAAK,cAAc,GAAG,IAAI,CAAC,6BAA6B,EAAE,SAAS,CAAC,GAAG;IACrE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,qBAAa,2BAA4B,SAAQ,wBAAwB;IACvE,QAAQ,CAAC,IAAI,iCAAiC;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBACvB,iBAAiB,EAAE,MAAM;CAWtC;AAkDD,MAAM,CAAC,OAAO,UAAU,gCAAgC,CACtD,UAAU,SAAS;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,GAAG,SAAS,CAAA;CAAC,EACxE,EAAC,MAA4B,EAAC,GAAE;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+DvD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MissingTabBarTimestampError = exports.DEFAULT_SOURCE_NAME = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
var react_navigation__bottom_tabs_1 = require("@amazon-devices/react-navigation__bottom-tabs");
|
|
7
|
+
var shopify__react_native_performance_1 = require("@amazon-devices/shopify__react-native-performance");
|
|
8
|
+
var react_native_1 = require("react-native");
|
|
9
|
+
var FixedSizeStack_1 = tslib_1.__importDefault(require("./FixedSizeStack"));
|
|
10
|
+
exports.DEFAULT_SOURCE_NAME = 'BottomTabBar';
|
|
11
|
+
var MissingTabBarTimestampError = /** @class */ (function (_super) {
|
|
12
|
+
tslib_1.__extends(MissingTabBarTimestampError, _super);
|
|
13
|
+
function MissingTabBarTimestampError(destinationScreen) {
|
|
14
|
+
var _this = _super.call(this, 'Could not capture the native touch timestamp of the tab bar button. ' +
|
|
15
|
+
'As a result, the TTI timer will not start when the navigation button was pressed. ' +
|
|
16
|
+
'Instead, it will start when the JS Touchable.onPress code was executed. This may lead to imprecise TTI ' +
|
|
17
|
+
'values (shorter than what the user actually perceived).', 'bug') || this;
|
|
18
|
+
_this.name = 'MissingTabBarTimestampError';
|
|
19
|
+
_this.destinationScreen = destinationScreen;
|
|
20
|
+
Object.setPrototypeOf(_this, MissingTabBarTimestampError.prototype);
|
|
21
|
+
return _this;
|
|
22
|
+
}
|
|
23
|
+
return MissingTabBarTimestampError;
|
|
24
|
+
}(shopify__react_native_performance_1.PerformanceProfilerError));
|
|
25
|
+
exports.MissingTabBarTimestampError = MissingTabBarTimestampError;
|
|
26
|
+
function ProfiledTabBarComponent(_a) {
|
|
27
|
+
var navigation = _a.navigation, tabPressEventRecorder = _a.tabPressEventRecorder, InnerTabBar = _a.InnerTabBar, source = _a.source, rest = tslib_1.__rest(_a, ["navigation", "tabPressEventRecorder", "InnerTabBar", "source"]);
|
|
28
|
+
var startTimer = (0, shopify__react_native_performance_1.useStartProfiler)();
|
|
29
|
+
var errorHandler = (0, shopify__react_native_performance_1.useErrorHandler)();
|
|
30
|
+
var wrappedNavigation = (0, react_1.useMemo)(function () {
|
|
31
|
+
var wrappedNavigation = Object.create(navigation);
|
|
32
|
+
var emit = function (event) {
|
|
33
|
+
if (event.type === 'tabPress') {
|
|
34
|
+
var lastRecordedEvent = tabPressEventRecorder.pop();
|
|
35
|
+
if (!lastRecordedEvent || !('timestamp' in lastRecordedEvent.nativeEvent)) {
|
|
36
|
+
errorHandler(new MissingTabBarTimestampError(shopify__react_native_performance_1.DESTINATION_SCREEN_NAME_PLACEHOLDER));
|
|
37
|
+
}
|
|
38
|
+
var uiEvent = lastRecordedEvent && 'timestamp' in lastRecordedEvent.nativeEvent
|
|
39
|
+
? {
|
|
40
|
+
nativeEvent: {
|
|
41
|
+
timestamp: lastRecordedEvent.nativeEvent.timestamp,
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
: undefined;
|
|
45
|
+
startTimer({
|
|
46
|
+
source: source,
|
|
47
|
+
uiEvent: uiEvent,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return navigation.emit(event);
|
|
51
|
+
};
|
|
52
|
+
wrappedNavigation.emit = emit;
|
|
53
|
+
return wrappedNavigation;
|
|
54
|
+
}, [errorHandler, navigation, source, startTimer, tabPressEventRecorder]);
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
56
|
+
// @ts-ignore
|
|
57
|
+
return react_1.default.createElement(InnerTabBar, tslib_1.__assign({}, rest, { navigation: wrappedNavigation }));
|
|
58
|
+
}
|
|
59
|
+
function createProfiledBottomTabNavigator(_a) {
|
|
60
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.source, source = _c === void 0 ? exports.DEFAULT_SOURCE_NAME : _c;
|
|
61
|
+
var tabPressEventRecorder = new FixedSizeStack_1.default(1);
|
|
62
|
+
var Tab = (0, react_navigation__bottom_tabs_1.createBottomTabNavigator)();
|
|
63
|
+
function buildProfiledTabBar(_a) {
|
|
64
|
+
var navigation = _a.navigation, _b = _a.InnerTabBar, InnerTabBar = _b === void 0 ? react_navigation__bottom_tabs_1.BottomTabBar : _b, rest = tslib_1.__rest(_a, ["navigation", "InnerTabBar"]);
|
|
65
|
+
return (react_1.default.createElement(ProfiledTabBarComponent, tslib_1.__assign({ navigation: navigation, tabPressEventRecorder: tabPressEventRecorder, InnerTabBar: InnerTabBar, source: source }, rest)));
|
|
66
|
+
}
|
|
67
|
+
var ProfiledNavigator = function (props) {
|
|
68
|
+
return (react_1.default.createElement(Tab.Navigator, tslib_1.__assign({}, props, { tabBar: function (tabBarProps) { return buildProfiledTabBar(tslib_1.__assign(tslib_1.__assign({}, tabBarProps), { InnerTabBar: props.tabBar })); } })));
|
|
69
|
+
};
|
|
70
|
+
function buildProfiledBottomTabBarButton(_a) {
|
|
71
|
+
var _b = _a === void 0 ? {} : _a, Touchable = _b.Touchable;
|
|
72
|
+
var ProfiledTouchable = function (_a) {
|
|
73
|
+
var onPress = _a.onPress, style = _a.style, children = _a.children, rest = tslib_1.__rest(_a, ["onPress", "style", "children"]);
|
|
74
|
+
var profilerStartingOnPress = (0, react_1.useCallback)(function (event) {
|
|
75
|
+
tabPressEventRecorder.push(event);
|
|
76
|
+
onPress === null || onPress === void 0 ? void 0 : onPress(event);
|
|
77
|
+
}, [onPress]);
|
|
78
|
+
var TouchableComponent = Touchable !== null && Touchable !== void 0 ? Touchable : react_native_1.TouchableWithoutFeedback;
|
|
79
|
+
return (
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
81
|
+
// @ts-ignore
|
|
82
|
+
react_1.default.createElement(TouchableComponent, tslib_1.__assign({ onPress: profilerStartingOnPress }, rest),
|
|
83
|
+
react_1.default.createElement(react_native_1.View, { style: style }, children)));
|
|
84
|
+
};
|
|
85
|
+
return ProfiledTouchable;
|
|
86
|
+
}
|
|
87
|
+
var ProfiledTab = Object.create(Tab);
|
|
88
|
+
ProfiledTab.Navigator = ProfiledNavigator;
|
|
89
|
+
return { Tab: ProfiledTab, buildProfiledBottomTabBarButton: buildProfiledBottomTabBarButton };
|
|
90
|
+
}
|
|
91
|
+
exports.default = createProfiledBottomTabNavigator;
|
|
92
|
+
//# sourceMappingURL=createProfiledBottomTabNavigator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createProfiledBottomTabNavigator.js","sourceRoot":"","sources":["../src/createProfiledBottomTabNavigator.tsx"],"names":[],"mappings":";;;;AAAA,qDAAkD;AAClD,qFAA8G;AAC9G,6FAMiD;AACjD,6CAA2F;AAE3F,4EAA8C;AAEjC,QAAA,mBAAmB,GAAG,cAAc,CAAC;AAWlD;IAAiD,uDAAwB;IAGvE,qCAAY,iBAAyB;QAArC,YACE,kBACE,sEAAsE;YACpE,oFAAoF;YACpF,yGAAyG;YACzG,yDAAyD,EAC3D,KAAK,CACN,SAGF;QAZQ,UAAI,GAAG,6BAA6B,CAAC;QAU5C,KAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,KAAI,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;;IACrE,CAAC;IACH,kCAAC;AAAD,CAAC,AAdD,CAAiD,4DAAwB,GAcxE;AAdY,kEAA2B;AAgBxC,SAAS,uBAAuB,CAAC,EAUhC;IATC,IAAA,UAAU,gBAAA,EACV,qBAAqB,2BAAA,EACrB,WAAW,iBAAA,EACX,MAAM,YAAA,EACH,IAAI,sBALwB,gEAMhC,CADQ;IAMP,IAAM,UAAU,GAAG,IAAA,oDAAgB,GAAE,CAAC;IACtC,IAAM,YAAY,GAAG,IAAA,mDAAe,GAAE,CAAC;IAEvC,IAAM,iBAAiB,GAAG,IAAA,eAAO,EAAC;QAChC,IAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAM,IAAI,GAA2B,UAAA,KAAK;YACxC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;gBAC7B,IAAM,iBAAiB,GAAG,qBAAqB,CAAC,GAAG,EAAE,CAAC;gBACtD,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,WAAW,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE;oBACzE,YAAY,CAAC,IAAI,2BAA2B,CAAC,uEAAmC,CAAC,CAAC,CAAC;iBACpF;gBACD,IAAM,OAAO,GACX,iBAAiB,IAAI,WAAW,IAAI,iBAAiB,CAAC,WAAW;oBAC/D,CAAC,CAAC;wBACE,WAAW,EAAE;4BACX,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,SAAS;yBACnD;qBACF;oBACH,CAAC,CAAC,SAAS,CAAC;gBAEhB,UAAU,CAAC;oBACT,MAAM,QAAA;oBACN,OAAO,SAAA;iBACR,CAAC,CAAC;aACJ;YACD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC;QAC9B,OAAO,iBAAiB,CAAC;IAC3B,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAE1E,6DAA6D;IAC7D,aAAa;IACb,OAAO,8BAAC,WAAW,uBAAK,IAAI,IAAE,UAAU,EAAE,iBAAiB,IAAI,CAAC;AAClE,CAAC;AAED,SAAwB,gCAAgC,CAEtD,EAAsD;QAAtD,qBAAoD,EAAE,KAAA,EAArD,cAA4B,EAA5B,MAAM,mBAAG,2BAAmB,KAAA;IAC7B,IAAM,qBAAqB,GAAG,IAAI,wBAAc,CAAU,CAAC,CAAC,CAAC;IAC7D,IAAM,GAAG,GAAG,IAAA,wDAAwB,GAAc,CAAC;IAEnD,SAAS,mBAAmB,CAAC,EAM5B;QALC,IAAA,UAAU,gBAAA,EACV,mBAA0B,EAA1B,WAAW,mBAAG,4CAAY,KAAA,EACvB,IAAI,sBAHoB,6BAI5B,CADQ;QAIP,OAAO,CACL,8BAAC,uBAAuB,qBACtB,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,IACV,IAAI,EACR,CACH,CAAC;IACJ,CAAC;IAED,IAAM,iBAAiB,GAA8B,UAAA,KAAK;QACxD,OAAO,CACL,8BAAC,GAAG,CAAC,SAAS,uBACR,KAAK,IACT,MAAM,EAAE,UAAA,WAAW,IAAI,OAAA,mBAAmB,uCAAK,WAAW,KAAE,WAAW,EAAE,KAAK,CAAC,MAAM,IAAE,EAAhE,CAAgE,IACvF,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,SAAS,+BAA+B,CAA4C,EAI9E;YAJ8E,qBAIhF,EAAE,KAAA,EAHJ,SAAS,eAAA;QAIT,IAAM,iBAAiB,GAAG,UAAC,EAAsC;YAArC,IAAA,OAAO,aAAA,EAAE,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAK,IAAI,sBAAlC,gCAAmC,CAAD;YAC3D,IAAM,uBAAuB,GAAG,IAAA,mBAAW,EACzC,UAAC,KAA8E;gBAC7E,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,KAAK,CAAC,CAAC;YACnB,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;YAEF,IAAM,kBAAkB,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,uCAAwB,CAAC;YAEjE,OAAO;YACL,6DAA6D;YAC7D,aAAa;YACb,8BAAC,kBAAkB,qBAAC,OAAO,EAAE,uBAAuB,IAAM,IAAI;gBAC5D,8BAAC,mBAAI,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAAQ,CAClB,CACtB,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,IAAM,WAAW,GAAe,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnD,WAAW,CAAC,SAAS,GAAG,iBAAiB,CAAC;IAE1C,OAAO,EAAC,GAAG,EAAE,WAAW,EAAE,+BAA+B,iCAAA,EAAC,CAAC;AAC7D,CAAC;AAjED,mDAiEC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,gCAAgC,EAAC,MAAM,oCAAoC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createProfiledBottomTabNavigator = void 0;
|
|
7
|
+
var createProfiledBottomTabNavigator_1 = require("./createProfiledBottomTabNavigator");
|
|
8
|
+
Object.defineProperty(exports, "createProfiledBottomTabNavigator", { enumerable: true, get: function () { return __importDefault(createProfiledBottomTabNavigator_1).default; } });
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,uFAA+F;AAAvF,qKAAA,OAAO,OAAoC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/tslib/tslib.d.ts","../src/FixedSizeStack.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@types/prop-types/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/types.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/CommonActions.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/BaseRouter.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/TabRouter.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/DrawerRouter.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/StackRouter.d.ts","../../../node_modules/@amazon-devices/react-navigation__routers/lib/typescript/src/index.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/types.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/BaseNavigationContainer.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/createNavigationContainerRef.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/createNavigatorFactory.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/CurrentRenderContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/findFocusedRoute.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/getActionFromState.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/getFocusedRouteNameFromRoute.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/getPathFromState.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/getStateFromPath.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/NavigationContainerRefContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/NavigationContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/NavigationHelpersContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/NavigationRouteContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/PreventRemoveContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/PreventRemoveProvider.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useFocusEffect.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useIsFocused.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useNavigation.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useNavigationBuilder.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useNavigationContainerRef.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useNavigationState.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/usePreventRemove.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/usePreventRemoveContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/useRoute.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/validatePathConfig.d.ts","../../../node_modules/@amazon-devices/react-navigation__core/lib/typescript/src/index.d.ts","../../../node_modules/@types/react-native/globals.d.ts","../../../node_modules/@types/react-native/legacy-properties.d.ts","../../../node_modules/@types/react-native/BatchedBridge.d.ts","../../../node_modules/@types/react-native/Devtools.d.ts","../../../node_modules/@types/react-native/LaunchScreen.d.ts","../../../node_modules/@types/react-native/index.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/useLinkTo.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/Link.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/types.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/LinkingContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/NavigationContainer.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/ServerContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/ServerContainer.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/theming/DarkTheme.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/theming/DefaultTheme.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/theming/ThemeProvider.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/theming/useTheme.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/useLinkBuilder.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/useLinkProps.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/useScrollToTop.d.ts","../../../node_modules/@amazon-devices/react-navigation__native/lib/typescript/src/index.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Background.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/types.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/getDefaultHeaderHeight.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/getHeaderTitle.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/Header.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/HeaderBackButton.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/HeaderBackContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/HeaderBackground.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/HeaderHeightContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/HeaderShownContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/HeaderTitle.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Header/useHeaderHeight.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/MissingIcon.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/PlatformPressable.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/ResourceSavingView.d.ts","../../../node_modules/@amazon-devices/react-native-safe-area-context/lib/typescript/src/SafeArea.types.d.ts","../../../node_modules/@amazon-devices/react-native-safe-area-context/lib/typescript/src/SafeAreaContext.d.ts","../../../node_modules/@amazon-devices/react-native-safe-area-context/lib/typescript/src/SafeAreaView.d.ts","../../../node_modules/@amazon-devices/react-native-safe-area-context/lib/typescript/src/InitialWindow.d.ts","../../../node_modules/@amazon-devices/react-native-safe-area-context/lib/typescript/src/index.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/SafeAreaProviderCompat.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/Screen.d.ts","../../../node_modules/@amazon-devices/react-navigation__elements/lib/typescript/src/index.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/types.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/navigators/createBottomTabNavigator.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/views/BottomTabBar.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/views/BottomTabView.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/utils/BottomTabBarHeightCallbackContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/utils/BottomTabBarHeightContext.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/utils/useBottomTabBarHeight.d.ts","../../../node_modules/@amazon-devices/react-navigation__bottom-tabs/lib/typescript/src/index.d.ts","../../react-native-performance/dist/BridgedEventTimestamp.d.ts","../../react-native-performance/dist/state-machine/states/State.d.ts","../../react-native-performance/dist/state-machine/states/Rendered.d.ts","../../react-native-performance/dist/state-machine/states/RenderAborted.d.ts","../../react-native-performance/dist/state-machine/states/Started.d.ts","../../react-native-performance/dist/state-machine/states/Mounted.d.ts","../../react-native-performance/dist/state-machine/states/Unmounted.d.ts","../../react-native-performance/dist/exceptions/PerformanceProfilerError.d.ts","../../react-native-performance/dist/exceptions/RenderTimeoutError.d.ts","../../react-native-performance/dist/exceptions/PerformanceProfilerUninitializedError.d.ts","../../react-native-performance/dist/exceptions/ScreenProfilerNotStartedError.d.ts","../../react-native-performance/dist/exceptions/NativeModuleNotFoundError.d.ts","../../react-native-performance/dist/exceptions/index.d.ts","../../react-native-performance/dist/state-machine/states/state-utils.d.ts","../../react-native-performance/dist/state-machine/states/index.d.ts","../../react-native-performance/dist/utils/matches-pattern.d.ts","../../react-native-performance/dist/utils/error-handler.d.ts","../../react-native-performance/dist/utils/PromiseController.d.ts","../../react-native-performance/dist/utils/native-performance-module.d.ts","../../react-native-performance/dist/utils/inMemoryCounter.d.ts","../../react-native-performance/dist/utils/Logger.d.ts","../../react-native-performance/dist/utils/index.d.ts","../../react-native-performance/dist/RenderPassReport.d.ts","../../react-native-performance/dist/context/ReportObserver.d.ts","../../react-native-performance/dist/context/PerformanceProfiler.d.ts","../../react-native-performance/dist/context/index.d.ts","../../react-native-performance/dist/PerformanceMeasureView.d.ts","../../react-native-performance/dist/GestureResponderEvent.d.ts","../../react-native-performance/dist/hooks/FlowCommonArgs.d.ts","../../react-native-performance/dist/hooks/useStartProfiler.d.ts","../../react-native-performance/dist/hooks/useResetFlow.d.ts","../../react-native-performance/dist/hooks/useProfilerState.d.ts","../../react-native-performance/dist/hooks/useRenderPassReport.d.ts","../../react-native-performance/dist/hooks/useProfilerStateChangeListener.d.ts","../../react-native-performance/dist/hooks/index.d.ts","../../react-native-performance/dist/state-machine/controller/StateController.d.ts","../../react-native-performance/dist/state-machine/controller/DisabledStateController.d.ts","../../react-native-performance/dist/state-machine/controller/EnabledStateController.d.ts","../../react-native-performance/dist/state-machine/controller/state-controller-context.d.ts","../../react-native-performance/dist/state-machine/controller/useStateControllerInitializer.d.ts","../../react-native-performance/dist/state-machine/controller/ErrorHandlerStateController.d.ts","../../react-native-performance/dist/state-machine/controller/index.d.ts","../../react-native-performance/dist/state-machine/index.d.ts","../../react-native-performance/dist/index.d.ts","../src/createProfiledBottomTabNavigator.tsx","../src/index.ts","../../../node_modules/@types/aria-query/index.d.ts","../../../node_modules/@babel/types/lib/index.d.ts","../../../node_modules/@types/babel__generator/index.d.ts","../../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../../node_modules/@types/babel__template/index.d.ts","../../../node_modules/@types/babel__traverse/index.d.ts","../../../node_modules/@types/babel__core/index.d.ts","../../../node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/file.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/filereader.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/ts5.6/index.d.ts","../../../node_modules/@types/cli-progress/index.d.ts","../../../node_modules/@types/d3-array/index.d.ts","../../../node_modules/@types/d3-color/index.d.ts","../../../node_modules/@types/d3-ease/index.d.ts","../../../node_modules/@types/d3-interpolate/index.d.ts","../../../node_modules/@types/d3-path/index.d.ts","../../../node_modules/@types/d3-time/index.d.ts","../../../node_modules/@types/d3-scale/index.d.ts","../../../node_modules/@types/d3-shape/index.d.ts","../../../node_modules/@types/d3-timer/index.d.ts","../../../node_modules/@types/ms/index.d.ts","../../../node_modules/@types/debug/index.d.ts","../../../node_modules/@types/fined/index.d.ts","../../../node_modules/@types/fs-extra/index.d.ts","../../../node_modules/@types/graceful-fs/index.d.ts","../../../node_modules/@types/hammerjs/index.d.ts","../../../node_modules/rxjs/dist/types/internal/Subscription.d.ts","../../../node_modules/rxjs/dist/types/internal/Subscriber.d.ts","../../../node_modules/rxjs/dist/types/internal/Operator.d.ts","../../../node_modules/rxjs/dist/types/internal/Observable.d.ts","../../../node_modules/rxjs/dist/types/internal/types.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/auditTime.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/bufferCount.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/bufferTime.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/bufferToggle.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/bufferWhen.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/catchError.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/combineLatestAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/combineAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/combineLatest.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/combineLatestWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/concatAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/concatMap.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/concatMapTo.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/concatWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/debounceTime.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/defaultIfEmpty.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/delayWhen.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/distinctUntilChanged.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/distinctUntilKeyChanged.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/elementAt.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/endWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/exhaustAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/exhaustMap.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/findIndex.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../../../node_modules/rxjs/dist/types/internal/Subject.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/groupBy.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/ignoreElements.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/isEmpty.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/mapTo.d.ts","../../../node_modules/rxjs/dist/types/internal/Notification.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/mergeAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/mergeMap.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/flatMap.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/mergeMapTo.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/mergeScan.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/mergeWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/ConnectableObservable.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/observeOn.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/onErrorResumeNextWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/publishBehavior.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/publishLast.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/publishReplay.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/raceWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/repeatWhen.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/retryWhen.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/refCount.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/sampleTime.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/sequenceEqual.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/shareReplay.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/skipLast.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/skipUntil.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/skipWhile.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/startWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/subscribeOn.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/switchAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/switchMap.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/switchMapTo.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/switchScan.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/takeLast.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/takeUntil.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/takeWhile.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/throttleTime.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/throwIfEmpty.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/timeInterval.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/timeoutWith.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/toArray.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/windowCount.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/windowTime.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/windowToggle.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/windowWhen.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/withLatestFrom.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/zipAll.d.ts","../../../node_modules/rxjs/dist/types/internal/operators/zipWith.d.ts","../../../node_modules/rxjs/dist/types/operators/index.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/Action.d.ts","../../../node_modules/rxjs/dist/types/internal/Scheduler.d.ts","../../../node_modules/rxjs/dist/types/internal/testing/TestMessage.d.ts","../../../node_modules/rxjs/dist/types/internal/testing/SubscriptionLog.d.ts","../../../node_modules/rxjs/dist/types/internal/testing/SubscriptionLoggable.d.ts","../../../node_modules/rxjs/dist/types/internal/testing/ColdObservable.d.ts","../../../node_modules/rxjs/dist/types/internal/testing/HotObservable.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/AsyncScheduler.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/timerHandle.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/AsyncAction.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/VirtualTimeScheduler.d.ts","../../../node_modules/rxjs/dist/types/internal/testing/TestScheduler.d.ts","../../../node_modules/rxjs/dist/types/testing/index.d.ts","../../../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/dom/animationFrames.d.ts","../../../node_modules/rxjs/dist/types/internal/BehaviorSubject.d.ts","../../../node_modules/rxjs/dist/types/internal/ReplaySubject.d.ts","../../../node_modules/rxjs/dist/types/internal/AsyncSubject.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/AsapScheduler.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/QueueScheduler.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/AnimationFrameScheduler.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduler/animationFrame.d.ts","../../../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../../../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../../../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../../../node_modules/rxjs/dist/types/internal/util/isObservable.d.ts","../../../node_modules/rxjs/dist/types/internal/lastValueFrom.d.ts","../../../node_modules/rxjs/dist/types/internal/firstValueFrom.d.ts","../../../node_modules/rxjs/dist/types/internal/util/ArgumentOutOfRangeError.d.ts","../../../node_modules/rxjs/dist/types/internal/util/EmptyError.d.ts","../../../node_modules/rxjs/dist/types/internal/util/NotFoundError.d.ts","../../../node_modules/rxjs/dist/types/internal/util/ObjectUnsubscribedError.d.ts","../../../node_modules/rxjs/dist/types/internal/util/SequenceError.d.ts","../../../node_modules/rxjs/dist/types/internal/util/UnsubscriptionError.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/bindCallback.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/bindNodeCallback.d.ts","../../../node_modules/rxjs/dist/types/internal/AnyCatcher.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/combineLatest.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/forkJoin.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/fromEvent.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/fromEventPattern.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/onErrorResumeNext.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/throwError.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../../../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../../../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../../../node_modules/rxjs/dist/types/internal/config.d.ts","../../../node_modules/rxjs/dist/types/index.d.ts","../../../node_modules/@types/through/index.d.ts","../../../node_modules/@types/inquirer/lib/objects/choice.d.ts","../../../node_modules/@types/inquirer/lib/objects/separator.d.ts","../../../node_modules/@types/inquirer/lib/objects/choices.d.ts","../../../node_modules/@types/inquirer/lib/utils/screen-manager.d.ts","../../../node_modules/@types/inquirer/lib/prompts/base.d.ts","../../../node_modules/@types/inquirer/lib/utils/paginator.d.ts","../../../node_modules/@types/inquirer/lib/prompts/checkbox.d.ts","../../../node_modules/@types/inquirer/lib/prompts/confirm.d.ts","../../../node_modules/@types/inquirer/lib/prompts/editor.d.ts","../../../node_modules/@types/inquirer/lib/prompts/expand.d.ts","../../../node_modules/@types/inquirer/lib/prompts/input.d.ts","../../../node_modules/@types/inquirer/lib/prompts/list.d.ts","../../../node_modules/@types/inquirer/lib/prompts/number.d.ts","../../../node_modules/@types/inquirer/lib/prompts/password.d.ts","../../../node_modules/@types/inquirer/lib/prompts/rawlist.d.ts","../../../node_modules/@types/inquirer/lib/ui/baseUI.d.ts","../../../node_modules/@types/inquirer/lib/ui/bottom-bar.d.ts","../../../node_modules/@types/inquirer/lib/ui/prompt.d.ts","../../../node_modules/@types/inquirer/lib/utils/events.d.ts","../../../node_modules/@types/inquirer/lib/utils/readline.d.ts","../../../node_modules/@types/inquirer/index.d.ts","../../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../../node_modules/@types/istanbul-lib-report/index.d.ts","../../../node_modules/@types/istanbul-reports/index.d.ts","../../../node_modules/jest-matcher-utils/node_modules/chalk/index.d.ts","../../../node_modules/jest-diff/build/cleanupSemantic.d.ts","../../../node_modules/pretty-format/build/types.d.ts","../../../node_modules/pretty-format/build/index.d.ts","../../../node_modules/jest-diff/build/types.d.ts","../../../node_modules/jest-diff/build/diffLines.d.ts","../../../node_modules/jest-diff/build/printDiffs.d.ts","../../../node_modules/jest-diff/build/index.d.ts","../../../node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@types/json5/index.d.ts","../../../node_modules/@types/liftoff/index.d.ts","../../../node_modules/@types/lockfile/index.d.ts","../../../node_modules/@types/lodash/common/common.d.ts","../../../node_modules/@types/lodash/common/array.d.ts","../../../node_modules/@types/lodash/common/collection.d.ts","../../../node_modules/@types/lodash/common/date.d.ts","../../../node_modules/@types/lodash/common/function.d.ts","../../../node_modules/@types/lodash/common/lang.d.ts","../../../node_modules/@types/lodash/common/math.d.ts","../../../node_modules/@types/lodash/common/number.d.ts","../../../node_modules/@types/lodash/common/object.d.ts","../../../node_modules/@types/lodash/common/seq.d.ts","../../../node_modules/@types/lodash/common/string.d.ts","../../../node_modules/@types/lodash/common/util.d.ts","../../../node_modules/@types/lodash/index.d.ts","../../../node_modules/@types/lodash.isequal/index.d.ts","../../../node_modules/@types/minimatch/index.d.ts","../../../node_modules/@types/minimist/index.d.ts","../../../node_modules/minipass/index.d.ts","../../../node_modules/form-data/index.d.ts","../../../node_modules/@types/node-fetch/externals.d.ts","../../../node_modules/@types/node-fetch/index.d.ts","../../../node_modules/@types/normalize-package-data/index.d.ts","../../../node_modules/@types/parse-json/index.d.ts","../../../node_modules/@types/prettier/index.d.ts","../../../node_modules/@types/reactcss/index.d.ts","../../../node_modules/@types/react-color/lib/components/alpha/Alpha.d.ts","../../../node_modules/@types/react-color/lib/components/block/Block.d.ts","../../../node_modules/@types/react-color/lib/components/chrome/Chrome.d.ts","../../../node_modules/@types/react-color/lib/components/circle/Circle.d.ts","../../../node_modules/@types/react-color/lib/components/common/Checkboard.d.ts","../../../node_modules/@types/react-color/lib/components/common/ColorWrap.d.ts","../../../node_modules/@types/react-color/lib/components/compact/Compact.d.ts","../../../node_modules/@types/react-color/lib/components/github/Github.d.ts","../../../node_modules/@types/react-color/lib/components/hue/Hue.d.ts","../../../node_modules/@types/react-color/lib/components/material/Material.d.ts","../../../node_modules/@types/react-color/lib/components/photoshop/Photoshop.d.ts","../../../node_modules/@types/react-color/lib/components/sketch/Sketch.d.ts","../../../node_modules/@types/react-color/lib/components/slider/Slider.d.ts","../../../node_modules/@types/react-color/lib/components/swatches/Swatches.d.ts","../../../node_modules/@types/react-color/lib/components/twitter/Twitter.d.ts","../../../node_modules/@types/react-color/index.d.ts","../../../node_modules/@types/react-dom/index.d.ts","../../../node_modules/@types/react-test-renderer/index.d.ts","../../../node_modules/@types/scheduler/index.d.ts","../../../node_modules/@types/semver/classes/semver.d.ts","../../../node_modules/@types/semver/functions/parse.d.ts","../../../node_modules/@types/semver/functions/valid.d.ts","../../../node_modules/@types/semver/functions/clean.d.ts","../../../node_modules/@types/semver/functions/inc.d.ts","../../../node_modules/@types/semver/functions/diff.d.ts","../../../node_modules/@types/semver/functions/major.d.ts","../../../node_modules/@types/semver/functions/minor.d.ts","../../../node_modules/@types/semver/functions/patch.d.ts","../../../node_modules/@types/semver/functions/prerelease.d.ts","../../../node_modules/@types/semver/functions/compare.d.ts","../../../node_modules/@types/semver/functions/rcompare.d.ts","../../../node_modules/@types/semver/functions/compare-loose.d.ts","../../../node_modules/@types/semver/functions/compare-build.d.ts","../../../node_modules/@types/semver/functions/sort.d.ts","../../../node_modules/@types/semver/functions/rsort.d.ts","../../../node_modules/@types/semver/functions/gt.d.ts","../../../node_modules/@types/semver/functions/lt.d.ts","../../../node_modules/@types/semver/functions/eq.d.ts","../../../node_modules/@types/semver/functions/neq.d.ts","../../../node_modules/@types/semver/functions/gte.d.ts","../../../node_modules/@types/semver/functions/lte.d.ts","../../../node_modules/@types/semver/functions/cmp.d.ts","../../../node_modules/@types/semver/functions/coerce.d.ts","../../../node_modules/@types/semver/classes/comparator.d.ts","../../../node_modules/@types/semver/classes/range.d.ts","../../../node_modules/@types/semver/functions/satisfies.d.ts","../../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../../node_modules/@types/semver/ranges/min-version.d.ts","../../../node_modules/@types/semver/ranges/valid.d.ts","../../../node_modules/@types/semver/ranges/outside.d.ts","../../../node_modules/@types/semver/ranges/gtr.d.ts","../../../node_modules/@types/semver/ranges/ltr.d.ts","../../../node_modules/@types/semver/ranges/intersects.d.ts","../../../node_modules/@types/semver/ranges/simplify.d.ts","../../../node_modules/@types/semver/ranges/subset.d.ts","../../../node_modules/@types/semver/internals/identifiers.d.ts","../../../node_modules/@types/semver/index.d.ts","../../../node_modules/@types/stack-utils/index.d.ts","../../../node_modules/@types/tar/index.d.ts","../../../node_modules/@types/url-join/index.d.ts","../../../node_modules/@types/websocket/index.d.ts","../../../node_modules/@types/yargs-parser/index.d.ts","../../../node_modules/@types/yargs/index.d.ts"],"fileInfos":[{"version":"8730f4bf322026ff5229336391a18bcaa1f94d4f82416c8b2f3954e2ccaae2ba","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","4b421cbfb3a38a27c279dec1e9112c3d1da296f77a1a85ddadf7e7a425d45d18","1fc5ab7a764205c68fa10d381b08417795fc73111d6dd16b5b1ed36badb743d9",{"version":"3aafcb693fe5b5c3bd277bd4c3a617b53db474fe498fc5df067c5603b1eebde7","affectsGlobalScope":true},{"version":"f3d4da15233e593eacb3965cde7960f3fddf5878528d882bcedd5cbaba0193c7","affectsGlobalScope":true},{"version":"adb996790133eb33b33aadb9c09f15c2c575e71fb57a62de8bf74dbf59ec7dfb","affectsGlobalScope":true},{"version":"8cc8c5a3bac513368b0157f3d8b31cfdcfe78b56d3724f30f80ed9715e404af8","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"c5c05907c02476e4bde6b7e76a79ffcd948aedd14b6a8f56e4674221b0417398","affectsGlobalScope":true},{"version":"5f406584aef28a331c36523df688ca3650288d14f39c5d2e555c95f0d2ff8f6f","affectsGlobalScope":true},{"version":"22f230e544b35349cfb3bd9110b6ef37b41c6d6c43c3314a31bd0d9652fcec72","affectsGlobalScope":true},{"version":"7ea0b55f6b315cf9ac2ad622b0a7813315bb6e97bf4bb3fbf8f8affbca7dc695","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"eb26de841c52236d8222f87e9e6a235332e0788af8c87a71e9e210314300410a","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"81cac4cbc92c0c839c70f8ffb94eb61e2d32dc1c3cf6d95844ca099463cf37ea","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"5e5e095c4470c8bab227dbbc61374878ecead104c74ab9960d3adcccfee23205","affectsGlobalScope":true},{"version":"09aa50414b80c023553090e2f53827f007a301bc34b0495bfb2c3c08ab9ad1eb","affectsGlobalScope":true},{"version":"d7f680a43f8cd12a6b6122c07c54ba40952b0c8aa140dcfcf32eb9e6cb028596","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"2768ef564cfc0689a1b76106c421a2909bdff0acbe87da010785adab80efdd5c","affectsGlobalScope":true},{"version":"b248e32ca52e8f5571390a4142558ae4f203ae2f94d5bac38a3084d529ef4e58","affectsGlobalScope":true},"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec",{"version":"7ccc5a3b754677abe9cc4a53c14bce28291861f440416f9fed6332340728aa47","signature":"91605e25d5a2b498616fb555dbd386b06352821997667a02fb6f70d544e05085"},{"version":"bbdf156fea2fabed31a569445835aeedcc33643d404fcbaa54541f06c109df3f","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","ed6b820c54de95b2510bb673490d61c7f2187f532a339d8d04981645a918961f",{"version":"0bcebfaf66be25c793d0281a8dce761bc078d203f02c573e6ee3b844a5ad7fbc","affectsGlobalScope":true},"0f073dded141641838f7c2d59996273a45177ea450539acebb1dbb796ed86379","9b45efc6da715a50c7217d4283b92fb2d8a54f75dc45d0b7ee4177a7e36b08ea","25e47169670650e6e79c236a9b3b0ab0b31cb211578133ca7235e50ce34c19b0","cc14e3be664df09160cf17bc9252dc3de752b36fde57212d8a43e7fe8b0e877e","c2ab55f58292e7ffa4d40da636ff9e6ee4b654fd63f59cb4243891a9aefa8f10","f4daa61f00f7d6d48c51a10da4032b8fd56f3cc939eb6d412d3491ebb14fa17f","56796dec4e491834346e321f1411972a5d9980b58be49563b4b1aec1d479638e",{"version":"6d5a541897c1933bb37b3b1385ab9c403bc931edef98c3b4337e437f40d9ccab","affectsGlobalScope":true},"3d4db91be1f4d528b128750f00d494228599cbf5ca6717ef57be93016fad0211","1c590ab8a90c3ca246289efb6f95d819511c3112a19d0defc9dee013c0fc2ee3","8357bbc4d902d8333d119b635546797d37715a59c1f83c0227f5b104d0bfc3aa","2d7ec180216064d4a09c5fdd6053a78a1a2bd69bdc46691ac78fec41fcf1839f","16412029067137ba3ed5365f51af6eb8359de856b26017964df70514e1f2b22d","d872b7c02699ecd319ccb1c699870783da757cb32a6bd56d8eea56738375bf6d","34ec0dd06c7f51e7cfcacec09eabd480147fbd102f6cf5c30fe4cc65c11a22a8","6df910b99ae3af9d5b83901913b295ec7aacc235b34c4a2ab97e9f05cf7d2e1c","07db0e432d80eb9ad7e0fe2c41627562b343833193af9217d6322bc344ba6214","a7037b8b501047f632dd26d5d6982923cce8ae41e8f58f261f6a7d080d799a29","543d0186cfd41fb58f663ae255232dd7a7b1bdd04e2f9c3c8879262a4cda1f22","de2f299c21eaa2620a04657104b2100204299c7a90bab1762f0a32ee9c16bcdc","79a64f52397c5f491a764d8b57c412ff49ade42d698ad86ba6db478716e8dc11","a658c70bbf894e41885000abbdce08164ee58533ad2a586fc2a1c0c743a7308e","49f6008db0638743439eb93b55c1c4f8abb0a4c915b072044a00fe65f8f40575","b8c78261a899c189e4631230239d4d752e0b5e7d418b213659d04ced5522af5b","7c9ceafeb6d1467f8be08296b472f72a15b68eb5fcba499e1a9d297eb32ec07d","8485d7fb83c2fab9fbcac086abd7aeec9216c11c4e0871b74527604b56483896","e8590999d1a2e5451a8dc1163dd54a8c52fd191d2d9770f03c09f3b12205fddc","528c3253478104cc644ed765cc8afd744a0e62119f6d9d2b679e9162f007661d","a74e73c5e262c79283d04a033017dcfa262d3da120f89ab7cf9aa0db70942c3f","24dd8bdbc4c44b39efafcc01ec20a37e5508e4bd474edcd90971af0af45592c5","ec325337482ff293ddf9f9f78314c3db3fe37f16ffbe91365e223123166f6a6e","3a531f6f31d65944f7805de92e62a4770490011238bc3b05ada8d20720323397","de261977510cd95bade27ad26a3f489b17acafe0d5185da4441640813aed42c2","7e5a158184fc5d7067448705f785ba483fa42522c770f0e876a665026bb64036",{"version":"4452f559618410bd9950973795fa657dbf3411cdc55c4c3460c5bab189903863","affectsGlobalScope":true},"9e9df0ee50fc117b15fd7815162a41c46e95996b513e4107b433d3e37dbe2ce8",{"version":"efd32b1ab5e3897f64ed3d0f236657c3c9c7bcc669449e608ebee1ad9dbe396a","affectsGlobalScope":true},"7fb3279c4bf36d993b1e8b339cded5908f7b2ec1b6e0ac2feaa842b5b6b143f1","234b97ac9af46707f2315ff395a9b340d37b7dbc8290d91f5d6bd97189d220f3",{"version":"6cb5e3d3f0babcdca611a20b4bd29f0e604a0ae6bb618da4452d299876cb493d","affectsGlobalScope":true},"34e261fcab9ab54e3afdb50fa6850443851aa3439c9c08ff014df0ca9a37c9c5","b5ec0cee17f07cfe99404915674b364247456ae58385695569d7093a99c51dd5","f810f4467a52ce27957edfb67950de94661cc41b3e824e78864238b59bf624da","9f8f00a22ad2a6f156a3e336a8e2dc1e13e7e6fa893ccf60f057008c9f8f7831",{"version":"8ffe20365062542ae55854adcdc107f6aabbe08fa2f09588bf0923c484b63d04","affectsGlobalScope":true},"62904b1f8b92fd6d36df0ead69db56072cdcc7e341e9f7311b7fa6a81d7cb316","e2f972c6acbf218bf9ece29a12d2a354b175c982179df80a72d6d4dd6810082e","568bcdd606a29ed590fbb02f42ea4164270ce179d08cbb98fc06138221b4096d","898bb13da0e06cd66d2c75f1a833094657877bf0f3834f6365cddf0244373111","e8ffc8e2af5f5baef7f425d7307f55bda6ebd3b9c32a3db8ff00fbfd121661a2","b8972c1e0365fbf257adf17dc063ff1affb0d1566b002c289202b3dd355c4eed","33cdd016bd9332015634085e080445fbf4754c0f73b135df86cffffefc5519fc","3527273e361e1b56c832f8e9ddb9ac51ffa26a47d8aa5e1cd132092057e69e6b","bfdb1982b2bfa780c6a0214250d585156f8da0a8d92c28049bfbfaa90acb3930","11add0a30b9bce40b9ac9e346d5a8410bc7f6b9423731e8a41bf541e89a06391","e2265ceb93a4f266495aa8f008e4973417ee1a8b8d07132383db68ba0de41506","ee38e8a053f515d796faf6a5d1feb68fa95f13b18be0b818f2899521650da3ba","923c1601592de5733f0b58461cb557cc20369dffb651a42dd1efbefc04320a53","9a96ed061dd1d9876a64dfd622ecee52a1fb7c1582ad554909f877b9452ae184","895af27993d0b53240318fa643704afbfe1555efa664ca86134f754a231b035f","ffe4b28699a43f41ce13021b0ee965bd0e7a6fe434c659bc22410064292121e1","f19beada8e74ec0f62dfc62fbde4d44d9bf8e5dc1dc2fcae3781510dfc71ecc1","d0c24689b16a3c37b6d9e74fcb3e0451c5fa261e6bc724408ef80bbdc27dbc9b","dceabcedd2983dab16ca8919988b216180598ae6503fbab3c40f4ba9ea427bb3","3b23b63a0bc8a10a50bcb29527742f607e5343e76e8e691da8baf26bf5b115c6","8663b9289299c7ba30b0a6c079db2aef3e2ce95aa7ee0aa7eb02456cbef2e76b","e03e44b9931e4168e13a3b044e7211641ee5d33ab7774272fee98c5888a83214","a824f7ca37cf3778c46fad6907cdfc9c884f2693be005cb7c4507a602c330165","2952020bfa5efc91a14fde76764ee6090156333bc8f2111a4ba8ccb482714f72","1a469e6589821266d5377d33ddef833b62a40ec4a5f2ef11f888324f98129411","b15c86248a968210bb5826fbfbb261ed715710c4fb68da563288a900a2f7c004","643b8da31a29837d93fea2b55b02dfc74b34596dd885809546d2b17e31d53ecc","d742e17c370eef973c75c9f30062a29d0c100914b63e0472daa1ab9ed917ac23","0d164426a8239359a59dff3799628c2671d744009384c13d6f93d2a144cf2c91","9f638d020ab5712be98b527859598539c36737e98a1a4954785d2eb7d9f8e6f8","22788c47ad7d267adf7aed932fc83e248629ee6771b0a61239ecaa60aae2bf7d","eddd771112ef7a290410901ce0d3a40f741b84b04c0f2376fe622dcbaa2931a6","f635bef4565d9d805769acb2d065d1b345fe8bf2a290d6e14e81859b2b8453c4","a4cf72c3a1dec5a3e515fccbac61034d8675bbaf466a9e4b4de577acd310cf37","4dd39123c0b284c22f4c3fffe1001d8862d38ecc2aa0a684103366549ad4c633","fcdd170e2d56203d2cdad2b69d0b07097cb3413a1c85dd1961f76a81ef03e214","ec20d524cb5b4cd11c090f3d9a41ea6138322ab2b388e404fc1d60bb8fe0318a","c1301f3a4c3d71352f0ad6a9add8eb6c580f7eed2a186b1076422eb0d5d64fd6","5eefa383cc47e0db701a3c4c2ff0c0f5879050f728343118a6a4f96553585d8e","59636f702f3727c223d7181f1fd7e7136ead54ea2eeadb1b1f1a01b4ff3e1f59","ec57710058956b3b5b2bca271a612831481b2c6e9b4858ccf7ff1de49e21bf97","ee536bd51fc7506d657410fbde758ab4d40b97e951d0cfb1b6b9a8519b96470f","98984be4cf06e2b98c4d1e716c8947dde9a361e78248991a0e700a27ad60cae3","4fe80c4ae5fdb35a460ea2dd6c2bc77f749e715ed077c17c93484733d599ba8b","225d0b51e116ff456eac4f60c07eac69bdc34f7d871857119f86bf18902eb637","11b33b05386a59e94a6488f4332fd93e1939dab628eb4feb0615cffea63b5784","55a3c61dc5e3a49dc2b2b778570eca69e58adbc8d47d1625ff258d08b5fbbec4","7b1abacf3026d07661aefaff0c4173eea2bbde44c78f7c235bb32f8e89b52a4e","d7650cb55234d0d03f68f8bc8e87e3024aa6e605c191ab780b770e59934893e3","61f51337e218369f43418a6b5f0322b2f7ef4058efcdd806e117327fb7c317d9","754f5742cebb9e2c4b80c7fdb48b0a451742f457e0b11d1bdaf9bebfd15b1bd3","4ad416d6e516596b0d832a63464eeba454dd42058967454f0e620c6654cb4718","5d24e76974ddd464dbc64200707583a86156a5de1826e6a8d9b859f5aa7fd6aa","a77f57d3d4168408e86106568b16401324d3ee24f76e82e9411e6293a7327a43","9b83911a2205057bd5441d65fffd8aa1c67be599bcadd79257dc5dd3f03cc066","7e8ece79a406114ef22c9e1d2b096444b53d0462fdcfe13293fc49658a1e2495","630481dcad21c800a47d0781c676939cdd790adbf44580b972acfc628acff2b3","2da2692a32f781861b5ec308cb250a3fa5253f05782fe164b32c583608fbf920","6f6038075edc2c610a28329974d4a31c2d63e5a38f88ad77016bcaeedb20901e","a41edc66a5901fe040f9539c9307ba56d27e4fb51726cd24dbc2384b38cfed2b","9921e2f27911f95d5093e24c771be30b2e2dc88dc5e6fc04c5da9521fd389171","0b059f5acc0276ac2ce366c724fc9df977ce83e90a7e4623b816605df1d103b7","c83b4293304cb0087415274289f2b763589e788666f435c434b5b101bcf6e0ac","fa402d0532a50e60d9e8560bea5cb259a75e7444310e4764fb9bd05f092469f9","95b64741c32fd3fabfea3bc313c363126be07b4bc016d82a20c50bb37b61bb15","62a78f6255a478a07cd2c343c0202202c8ebafec18babe5e4744504707d4f45a","2ef4b128b41b5d67acf22b25ccb20a3e67c3911d1bca015eed2dc8f4ce9b04ae","dd2792500934a58d2a182db1ed32b84730f67acfb1f8b1455fd6a03b39edc049","ac11e3bfa7dd8bba4d83cb9036014b86a4a289eae9d30ffa17173832c32c543e","e52519a1296f2426a28e3ebd963fb8c550602dfa2332fbca09069ea424d37d0e","2f5ff4904731ff15bcba43a18c10027f574cbf775d0fa46e2d912813a6b6fabf","cca6ad520eefaeac3d1dd53f2d462b6a9b989163e8f55226cb5daed6995ad833","48a038f6cd7b90b3aff80c6616b15a32d8db097ef40de7a2e0af928e73debe33","1481efaf734ebc17dff8a9d029a1e40f5461e1eba8e528a589c7c4e7b06c7378","a78a32bdebd36e8df8b958fafe51f4dbe8526f3726c19d0ca7a469eba0460195","b2a09b208de226397e3c34a2b1aa1f1d803a383a73ba576398c43bb46b1907ac","81787b9f7c331020863642db13e82b5291e7d89753d4c26e26c2fa8ec887277f","5787cd691600e36ae3b1d0f934f1bdcb0d60c32eb10eba1d12cfc8a550217c54","ce6a24574c85e7bdb4864ebfdd76f2eb83495e1c0e4d68248916aca0b3c605cc","e7232bda9c724a1250a50be467bc60c34841f5aa865e1092c8f1e908d54bbed5","4f86429ea485232fe968b67830ff91c6f4428cde20ba7bd345dccfb2e6adb181","7e12247bc4005a3c10637eb497c7da92d4ec9f18f1248872c093cb096c29a195","c9ed5b5ded8a29caa1423e73c5a2160b04d867fec1f4895de9cca98bfbdc39ad","12b2e6bbf993963db507bd2f020214e200144790c274d047e599cf79a7f95644","aff60b0046a4345264cc8913f24387d961cb373000bfda9e7fa0c22378f5b900",{"version":"5b92f0da28211b9f686d4cb2cedeec0ab799dd2f2b2276d76e1f3cb16f2a672c","signature":"7be4bed98f13d418a96c831a19e1bcebb4f752e8592d796e7997d157715b15e2"},{"version":"093697301b49d3cf74b15d0745bcbe20ee604df0a66ba36ec6e534b6109229de","signature":"7b2103ebb2ffc9db59010f9ec209a32e4d4114ee0dec6bd09f48f9c0694a0e2d"},"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","03f1d83d61696326ea29c8a1c15cbaccf61e92598d53f2ccae06078531f42448","2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","3a9313fe5ace558b8b18e85f931da10b259e738775f411c061e5f15787b138eb","670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9",{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true},"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a",{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true},"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107",{"version":"81184fe8e67d78ac4e5374650f0892d547d665d77da2b2f544b5d84729c4a15d","affectsGlobalScope":true},"f52e8dacc97d71dcc96af29e49584353f9c54cb916d132e3e768d8b8129c928d","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","76103716ba397bbb61f9fa9c9090dca59f39f9047cb1352b2179c5d8e7f4e8d0",{"version":"53eac70430b30089a3a1959d8306b0f9cfaf0de75224b68ef25243e0b5ad1ca3","affectsGlobalScope":true},"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","115971d64632ea4742b5b115fb64ed04bcaae2c3c342f13d9ba7e3f9ee39c4e7",{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"a76037255d4e7af8b20d191a4d3ad13236fba352239d3d9d54868a98dbb222f5","affectsGlobalScope":true},"24642567d3729bcc545bacb65ee7c0db423400c7f1ef757cab25d05650064f98","e6f5a38687bebe43a4cef426b69d34373ef68be9a6b1538ec0a371e69f309354","a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393",{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true},{"version":"875928df2f3e9a3aed4019539a15d04ff6140a06df6cd1b2feb836d22a81eaca","affectsGlobalScope":true},"20b97c3368b1a63d2156deea35d03b125bb07908906eb35e0438042a3bbb3e71","f65eecc63138013d13fefea9092e83c3043cb52a5e351d22ea194e81021c1cd5","4617299caf33afef24b5e074e6d20ce8f510dd212cebd75884ef27c64457a77b","fa56be9b96f747e93b895d8dc2aa4fb9f0816743e6e2abb9d60705e88d4743a2","8257c55ff6bff6169142a35fce6811b511d857b4ae4f522cdb6ce20fd2116b2c","6d386bc0d7f3afa1d401afc3e00ed6b09205a354a9795196caed937494a713e6",{"version":"5990bd8b9bc91f6e90269685ff5a154eeda52c18238f89f0101fb4d08cd80476","affectsGlobalScope":true},"94c4187083503a74f4544503b5a30e2bd7af0032dc739b0c9a7ce87f8bddc7b9","b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0",{"version":"3eb62baae4df08c9173e6903d3ca45942ccec8c3659b0565684a75f3292cffbb","affectsGlobalScope":true},{"version":"6f6abdaf8764ef01a552a958f45e795b5e79153b87ddad3af5264b86d2681b72","affectsGlobalScope":true},"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","c6b4e0a02545304935ecbf7de7a8e056a31bb50939b5b321c9d50a405b5a0bba","fab29e6d649aa074a6b91e3bdf2bff484934a46067f6ee97a30fcd9762ae2213","8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","15c5e91b5f08be34a78e3d976179bf5b7a9cc28dc0ef1ffebffeb3c7812a2dca","a8f06c2382a30b7cb89ad2dfc48fc3b2b490f3dafcd839dadc008e4e5d57031d","553870e516f8c772b89f3820576152ebc70181d7994d96917bb943e37da7f8a7","37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633",{"version":"745c4240220559bd340c8aeb6e3c5270a709d3565e934dc22a69c304703956bc","affectsGlobalScope":true},"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada",{"version":"918d3b03a75858dcd5dbb275f19448b6b9a222aa8fc8471aca38c28a32ecb40f","affectsGlobalScope":true},{"version":"bef91efa0baea5d0e0f0f27b574a8bc100ce62a6d7e70220a0d58af6acab5e89","affectsGlobalScope":true},"282fd2a1268a25345b830497b4b7bf5037a5e04f6a9c44c840cb605e19fea841","5360a27d3ebca11b224d7d3e38e3e2c63f8290cb1fcf6c3610401898f8e68bc3","66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4",{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true},{"version":"6bd91a2a356600dee28eb0438082d0799a18a974a6537c4410a796bab749813c","affectsGlobalScope":true},"a5c09990a37469b0311a92ce8feeb8682e83918723aedbd445bd7a0f510eaaa3","ae25afbbf1ed5df63a177d67b9048bf7481067f1b8dc9c39212e59db94fc9fc6","ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a",{"version":"89332fc3cc945c8df2bc0aead55230430a0dabd3277c39a43315e00330de97a6","affectsGlobalScope":true},"78dc0513cc4f1642906b74dda42146bcbd9df7401717d6e89ea6d72d12ecb539","171fd8807643c46a9d17e843959abdf10480d57d60d38d061fb44a4c8d4a8cc4","c0e5b4df115963b8a8dcd5b56ff9dc046ddec110de138dba29b00e2b02fa03a9","e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","f94362be0203351e67499c41bd1f3c91f4dabf6872e5c880f269d5ad7ffda603","432a61971738da04b67e04e08390ac124cc543479083709896b2071d0a790066","1ba55e9efbea1dcf7a6563969ff406de1a9a865cbbdaea2714f090fff163e2b5",{"version":"75bc851da666e3e8ddfe0056f56ae55e4bd52e42590e35cbe55d89752a991006","affectsGlobalScope":true},"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","68cc8d6fcc2f270d7108f02f3ebc59480a54615be3e09a47e14527f349e9d53e","3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","037817934c90357f71eea18fb643b1fd7e6763fec011f5da1f0fb17acad09d62","ed19da84b7dbf00952ad0b98ce5c194f1903bcf7c94d8103e8e0d63b271543ae","afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5",{"version":"43f1a6853b39d8b63cab39d4c27577176d4ea3b440a774a0b99f09fd31ed8e70","affectsGlobalScope":true},"fa3d0cd03fa17459d9ddd98b120b4bb084da39f0391cbdce480a6ef74be0cc7a","e3fd84e6470b7e0679c4073ee5ce971d324182486dde5a49b67cae29168b51d2","dd8331d0a5190a4735ce6c152e420230188c4966067a756673c36dd7ba72b10e","d6db3bf60a324f74ed9c1281acc1543734be70ac0ab9a8dc953a1d55f6906720",{"version":"34707bf55a38f69fdaaaaed74907c81a6b186fcb206cc50e6f8862b36c08730e","affectsGlobalScope":true},"0f882d4ae58f431454030289154feb0132e1b00ca5c3197c6b749bd098aed73a","7ff7f4632a6e7b6872fb1843f3c0df495b49840eae2a23c6fbc943f863da8c29","1e352dc6863536f881c894f17c46b5040db7c9423a18957a8fbc001dfe579b78","a78590b0efcef281236e3234520c348d63be1d4561b63b20e6c3b6fc18b37dfb","4d59c6a10b6c79a0927c79efa89b3c9f71d174ec14ec2792076cfd2330d0cf8e","a496f51933422872de22729b7a0233589325a1a1707cccd05cd914098944a202","75b6663bc569724017997481b6b3774065c204b316cb4f5ad7df3b5162d2dce1","06a38095ad4368314366bc08f7cbc0fe274ef7321ec611005d0bdd9c6565e4d5","4599793db9aed9b84677f0ca1cf7ef3c69bb91cda4fe4329cbab778ca4d80a58","ad0028f96921778931fb8419d8de33b10908314fa99699de1702020f69235da1","ccd2a35321c0786bd3808042dc43b960cac13f2cc660ac37a0087e12bc97d2fc","df524ed01de4f19efb44bded628dbba9f840148be4b6cfe096e29d4b01589de3","2e3981b9cee48174ff85ae15019fd72933f7023a4ed05094740f7e6f7775623c","836ebdc3b9e4c006acc4f405b7e558e56d47830e05c40d991b1e27fe8bc91157","2cc6b617c6120ba64b5778ccd4b74c951adc3a3941bb6b39f47d48701c44af39","eca02b99615a8f1652e21399d832618e38bf166c0747c9247349bc901a2f7741","7f7d6d42e5780e86f5b860a6f95179fae06a368b3af28c1c4230397c47021a59","4740a7d11ab3b381be0f269f1903fb3ff226a2fba55a01756b2997e67cd853f2","863dbc4e77f0353e6f9d6bc0e2b4622d5c07ff6f099ff66cafd7924b2ff4dd3f","bf034a18ed7e2a058f9e48c4c2480a124138fbd3586a80c77736a9ec079d12a8","f88758992a0bf13d095520aacd4381fb456ff121fb9aa184e6eb0eecb26cfadc","c249e9ae33bfcad97deec3c73c9ed2656e112fbdf22deace0b39724be6a5dcf0","d8b45924965c0c4fc0b946c0b6d597aa8d5de9cdf5c727e3d39422d17efec438","c6f72b9a53b7819f056268c221d7eeb14c26e2582aa1547b0f6922d65bcfde72","feddabf6ab0eb191e721f0126f3db8688db97c77a1234968bde7a2d70c4ae513","a968efe0db090c2ed75ee8c77162534f7ffde3dfa9d9ee9f79c47784c43df96e","cde0568b836865a24f4ee5859462004a326dfb76d514e6f56c8e78feedebed58","7f5cb3a03588ed46d52a6c2138315d930cd6ffb5c2134247cd07bc23cbea0b5a","7797f4c91491dcb0f21fa318fd8a1014990d5a72f8a32de2af06eb4d4476a3b5","f39fb20b83c3f9853c13d4ac95533760979d3023c0a5affe2c0a62d91ab3afd8","e4fca08aed8afb32bb8643d7469810bc8681115fe398e56a028df9e73b2d867f","8a59503e8c995d688174ab27cd32c3ab6afed7c41cb5282aee1e964f7d7b863d","078966067552650f44ca96c68eddbb8539f30ee48a9ab3f24abdcf0a4037b535","2cd6250c43dba360377481c98d48db6ab1532a7527339edb0deffddc28ba66b1","7a9d600990fbe263a23daebed9ba1bbc5761e45679a7e2b2774a42756ef077a2","66bc155515fbea8c31a4efccbbac44de7c037b01f3aa00b76312cf7252725d30","5703288ddbfc4f7845cdbf80c6af17c8cde2a228757479796c2378b1662fcd48","0dfd353f0c16dd5107a7e0713dc52d0a2538293b0a0eac6000a017f9c0a60b56","9cd683a4663ef4d9c6486f1b8a34c73bdbc344d69490931bfe2fbcada12ab35b","42f6a409bad5259ece69df25d2b8ace2ff2ade45fe6386ee45203bdd9329f971","d3b1a8b87a5e77d70056325e137a0e04d984b991546fdd3c1034ff4102d603c4","2eb162efd6dba5972b9f8f85141d900d09da4fba23864f287f98f9890a05e95f","3f878fb5be9ebe8bd0ac5c22515d42b8b72d3745ef7617e73e9b2548ccbdf54b","e9ed562b7599c8c8c01595891480a30f9945a93a46456d22ee67ebf346b7538a","e7bf975a98cecefe2e8902fb7da9314675ecdce553aea722aaec97327668e18b","3d36f93648518338c875d9f77a8eab52905365483dbb3afe43ed68f1b712b67c","4fa54df9184d291bd78b36f5063372042cd995460e906cb14014e40d1442a326","b4e32bd5e3b493e4ea6b5ec69a4c02aa1fdaa78e1df9a863bb07604de8f9d123","f6bd1aa152ca2b5064e06282ee3137842ae6825b6b09aa89a2ff063b976a56f3","bce2390bb3a76f8bf2ba4397c66db5277bf3e698ee614347e5eb79d7fc0942c6","fbdc8d7cc7daf4101bf567512c67fb990d8fe300e0ba7f213171192177f44aa0","298e0da6d858e39fc0c1eebfa4f5c8af487868c6f2e98c3ef800537d402fb5c3","3b6457fb3866562d279377f923cf3758c80ed7bfcc19414b72a24d0a98188e0c","4fb5d7efb3520b92c1b767ce18968057c5e70886d7fb3416c487231df9275af9","df2303a61eb57b2717d17123e82bc0f3fd60f6e4673cb5506192dfe23c9480bf","b104960f4c5f807535ab43282356b2fe29c5d14a02035c623ac2012be3d5f76c","a35ca245eb852b70b20300546443abb1fcbac6e5066e4baaa092af4ea614d9b5","55da140feab55f10a538a9879a97c4be3df4934cbd679665c91a7263a86095e1","1a39e51e3362aec7d4edec9b317ff83916fe0471f86ddf2d3ef3af5952e87d9e","4b3f36b96f129a8e125c91d41a05f711e73b3285f80bceb3a1aecb13c97c4502","852779920fc4220bc42ec6d3c9b6164e23ea9371a788531b48b4005fe0cb4392","6863aa26d38fb3c96d7b04547d677967d83ebe421a093e4dede6fd48ad23890d","515b97cede17d91c9669cc1c7fb7a8a5f0a5f2d8999f925a5f70b4ebea93723e","08e8e57241f874bdbf69ab2b65cb0ee18b4183d5c9452937da49b934fc679c4b","944af466f063d4bd090ab9d988c620b90a014e919d5f78963f6074a136ea225e","644addd4811636da491c9546654bc005ba8599f23df6d731d91eba86f3137fc2","a9249493114b181814728cbfeb7234738193a4169b654ec4705d48d7a4d25222","aad6f20d6eb01192ae02294361faa6e1f320d72447b56f433db853bbe80b15ca","876fbedec2f494eb6f834ce8636b07d581c657d205d81a3ba894eff0facc6b84","58527aa45f11c9b259a6a9d78b397f35020bfbb104f4d3bb177039b5c18146bd","91b8b61d45b5d22f3458a4ac82e03b464a0926bab795a920fe0eca805ec476eb","2744532f8fb960eb78497ac660db719f503a10c801f87131d26fd9cbef75dcef","6884287c54891ac19cfbe056f3ed29cab1732a00dec69bd3b140ce62c11783c6","223fdd3984d951378c7febea213b287ee04ee013f065a27905c3d75df85144c4","cb46657d3237f80742d5701ebcced8f6e5cf8938442354387d6c77d7048dfae6","3965c8ef8150ca688978430a13db460d29a50afc50c97315c723722b6f763369","661f322e45545a554e4ffc38db6c4068a66e1323baf66acb0d8a9fa28195a669","9d787416f04d0867e8a46c317056f6ad365e328074c73fa3a1612285fa24465d","ce978e20a6f26f606b535f0d6deb384ae6a73f8d0bd0dfca0925f5317cad1f25","f2d3567210ca4d559d8297d6c4402599c93e3bc7485054192d38db5e132fbc0a","50d22a2dfdbf2dda7b333edf980566feb3f61813695c8f3b52fc866c8d969404","bdb95f4b6e845ec1c0ae95eb448c55a68a2752473e1d2107348abe40421cc202","ea546a7ed9eaa71ba78d4d392509dadea4bafed283269dd6c4b09e7d8824e986","4ec0f2a141a9ae7d3557b8efe630ac2021bc3a9ac61238b59293f4cf2f196e82","b2db743c71652e03c52d51445af58d0af3316231faa92b66018b29c7ba975f6c","0863a5876c85fbaffbb8ec8aeda8b5042deb6932616139706d2b82cde9d3f7c7","12f8b72e3c3a333814f4fa87d5b9a7ef1ece703f3b7ec7919ad2ffb58c48c1db","ba9c46725e2a0bd9df59d3a1e801cc60f90db3ef7817131c53945dce2b8c0c56","281d373eeabf80c4851f8de991e6abe4d385c30379d80897bbc3df3dcac99cee","624c5dce95672d9dcca40d9d9d82ef855f5f902292f43aa265cc8fd963c6ce84","8a48d9c6184992d1c3ed5daa55f83d708c37582916926a5555a900608f804b60","605dd288c636cf9b5317fe76dec75d3c7fb855fdcd3ee8cb4fea7d7091ca6fb4","95addea67857d4e568a02e429b15458cec203876b2ea5f5ea18ccfeeb91b8ce0","b5a615b0ad865ffa562980a10bda162ac1744fd363b4edc2cfc664222071cbcf","bbccd721363897950a55ce09529503f25a69522e5c91a22679b66e941e5f8654","d3a1e70795c38d7851b6e4f3b441c5ffdae171d6e2576a2204b7d79059aeea66","d7b8d41887c5fccfe19802c4336d34348b752abf0d98839575699d71deff60be","063fe3004728b8516a4d799ee16f9a71801ba24e0443dd98638cef1bd4353a7c","0267341e780d4967cbd069ea57db7aa4e1fdfe74702ab0366a7a4c1da0ca332b","ec5a0291f1bcbd2662640e7a6ae0a632ce8f0fd55c02236bb43203f38436ca36","7ffd42ac60bedb9b97e7c35b48af9f71b0a2289f3324f414826eeaea937d144b","b20bc124abd8ee572d0d756713ff987b116cdae908a6fcbc40e80d4b999f56b4","a599f3f450ad62c3fdc0c3fd25cddcc9332ffb44327087947d48914a8da81364","645dff895168aa82350c9aa60aa0b3621b84289fef043be842f45a9c6c0ac6e2","f068ff5b7fb3bdc5380e0c677e21de829bd25cdac63a9b083fdc220fcb225280","09d2fdca6ea6c135897a26976ad3c0db724adaf23ef4e38ad852b1d8efef1ae6","15de5b7739bf7e40213a200853bf78455ee5958af08eda786605a54a7f25ade6","aa31b69fc0094a66e771e189d387ffed138b53b211903f96ca3737792f69abdf","37862e711637ebd927907a82cbf0143ea30e95eb165df554926c43936b1d77a9","89e253db2c2cc9a510c521f14dd2b1aae4de2556ee5159ad8d118d3587e3a880","3d0a172cee184a0f4111a7bd7fbb8729af3f54b30c06a2677d85c20ea9c811ab","d6a07e5e8dee6dc63c7ecd9c21756babf097e1537fbc91ddfec17328a063f65d","6fdc88b1287c276b55b7f7c4c7b49587813c763eea9751ce0baf0a7e61cd5d89","6a02443704052768bd021f24783aa104b02ae4444e9b735317bf13c6b857a11e","37987b0fe9800cf25473c882ce07bccdab2763c5681c1a2d16816aead46aa8d1","c84c03c721154068e1a60d83e9e85819bd3ef70b824ac2edc498aa31c06e5781","f4e5b4def2ccccfe43c0905074695c349230505faf6ae74a28b0c1090acfda7d","c96fb6a0c1e879f95634ab0ff439cbb6fff6227b26bbf0153bef9ed0aabba60d","db936079fe6396aad9bf7ad0479ffc9220cec808a26a745baebb5f9e2ef9dbc7","06bc0b9cc7bf0b92534f1517fe5adde1f23f60cc6cc5c59f8e1c65db48a40067","919a753b0cbb12ccc606c62e2d34884d75a48ba19b1dda497c72621b11dac088","2c27e33ee0bf722988da00abd582cc9b806ce3fd9153a864800a339ad13f3fcf","92d7b3a5aa5dc872e54cbad2a7094b3ea4f72c7901de1d07b4c334ff658297f0","7a52922b38e9686d5bdc6e75774929eec6688d26c1dfe4a03ddec77ede468e87","aa5efca2833d89b55248f1889a6433dab1b1f41768e9a75f8ce35f9bf56c5ec4","f3cb934699bea498259de69c44a4f93b461f079d72cddb041587afd9312efb6e","006855ddea8674d084173a768f88519dc154be94eba5e2120262a33709832b9b","17dd843a266f99ca4b3a1257538bd1cc69dc5c7f2f23c3891f0430615b8c9c1c","5430364886c721a30475253356162b6c27871718094cb3e69e2bcea71a17e533","1218398da7c8dc4add10bdb3aa2856aad54b123d847eaf574d1d694ac269bfb5","07886b8104556bcc9314b90cd2043f2286e54c1f6ba2ebbc953e1e43232e12be","b637cd92688a6cdf4f8f184ff529dc2bc7f15692828e2c0c66a60e6972f400c7","7061e83d6792897077bcac039fccf7325234004769f591c63a8cf8478bf551bb","51a74c09c3d3fc62fcfefed0a193c3d6388e3e0f8a574bb9d5c5b7cdaa32453a","277a358d61376fce7ac3392402909c96cf6a0a613146549fc0165ccff953e012","50614c808e099a1d4413786f3783d9eeaaa74b267f2c87fcf8a893287e91c301","f4cb6530f248e87cefa74ef623206fec805f6252f885f8e14ef3d1a5872cef2d","38c332caadd8391566552395d592076470a5e7423f70964620eabf05c02907cd","eb17b5bf1fc763a644c21d76572c0e41e351c3f6dfcde649428d5d829f7294d2","cb124162c87b29ff5121e3ee5bb29c782f101e0135d6c2644ab1b31d530a435e","406d6f5d3707c488362fb40d1c1f8a7b0a42b70554b427160185d93e430228f5","2e9776410c5bc290d9432a9215c67398a273e514a79b9e15f32ecddfde8a03be","313ff8df074b81d3e4f088ff3a3a06df3d9b0d0c7f55469ccc2ac887ecb6b867","c718475bca06806cc243e77777641cb67ba68f2c57321a4773ebb47760a3bcf2","96e6bf811343caab5112b68880905c5d20d9257054afac6c18e718a4c549ed27","a2793bc73ba63ca7d259cb0f0b61d0023820170d08a1f9715006c8042d060165","d5011b38165771fdf75a9a06d6d379a1fc7edd7eb695ebdc52319fb6e3c6d81f","88417fb19d339304e9616a38ea513251047c9e300c81f9467fc317df8a582e71","3e8e2d132f726dddbda57819f5391504e585cb3beab6b32203064e7e40618583","6e23627cd3f10418b5b2db102fdcf557b75f2837f266d88afac6b18f333bb1bc","866046dcea88f23d766a65487ee7870c4cf8285a4c75407c80a5c26ed250ef8d","019f4f1cbc781cc15c6173f8be5ef907405722194ab297127b3c3426e5368339","41f4413eac08210dfc1b1cdb5891ad08b05c79f5038bdf8c06e4aedaa85b943d","c79f1c8b51d8475dde8d2973f740f43ca34b1f0a95d93649cd76c1ee20abba19","35f0d2bd2c5c05c0cb19095bf5b7c44365b1c88efe6285370855b90417277a64","8264b129f4c4eb4799703f8e5ee2223a184d1cdbfc782158b1f40a88a4435a1f","527ddda6f8be1279f3294714534c49d6e90f238cea325519882ebf88d7ec5bd2","b23877792e8bd00271d0ec5d401b68e4228540a4316de3d9dfb697b955c161a4","35b2eb1de01633db90d41abe93730b29984856fcc840b4c2801bfd3761a2097b","95f0c9127b879c2fc7e31f8e09ff45bb4aae302e60f4b9ceaf4d9ee6bc51ec66","2a6b4655a6edce9e07c7d826848f72533c9991d40bc36e3f85558ad20e87ce2d","6e3d29fdc96ebbb2ac672d2dae710c689c1ea0d0e9469e0847616f3c38fd085f","d505055b8fadd42da235c85947911d8d198ad70c5f5775991e7821d4f89c90f5","8b5a5852099dca7d7e7a7cef6d681dc1586aafacdb963ca180fe5cabbfa3a24b","0d1aa3341d1ad2064adada71c5d01a2f572e4aac09410e5616d90894105a0eb9","52494ca5a884da3bf11b8165ab31429715f0970d9c6383240c5666f4bd713e01","162fafa2291749df2ab4516854aa781fcee1d9fca2ecd85fb48ae794c0700ce2","b4b9b51ee6f6309cda2e539245235a8caeca2b1d6bf12b5e5c162d17333c450f","d2ffe8356f060b88c1c5cf1fa874a4b779fb87fd1977084876e8be9eab6bf485","c76053984b39150d00ade365b096a8bc21a4a7f2ee9e0a926711b00f8e7bf701","956b510767e3d6f362ea5800510635197723737af5d19ae07ee987ea4a90bfa5","cd1a8ff61f5063d7e6e2094e25d35c90b499961b63911f2f4ae0ff5555c2b4d7","1cf09b5945779e9bc75c4dcd805fb149c28fc90da3335186ef620647a3c540e1","9cdc0b9a313090ec45b34ea1eb02fbace433f509e753634b043e9b83038261e6","c93474cff0088351a65d3cad24037874a26a5371a48528563e56efe31cb3d8bb","b4580df8ea7f62d7b06588001952bf69426e6b03cf3d2569f5f608e45f29ba08","de27f7bb9be9d8a2b4557ec6503b8a315f74d598ce9a0ab81b5ed5610e1a8e81","fe3c378dcefa7ed8b21bd6822f5d7838b1119836da75ae1e1fb485d27b8ffb62","7365bf3333d4277b6fe374ed055624e5ec080dbb919e2d78f1cb75a3f1a4b4f6","a5fbf3bc5c16ab5c84465ba7a043a4bee4c2b20bd3633d50d80118a3844edbaf","0923e4ac8c894ad507bd2daee0df66b699de88467201381ece011ba5a080e1ff","e4f6626f827ea509255647e1b6db82145a2eb1a6b46202655e7d9bb19145c33b","26e23972c40f378f0301d8d7025ea895557c2865a1a31c8ea9c3fff0dbc27075","818469e2f1c49f6cf6f220a81df013daf6e4dc4af7f9c0890ca63ce06d7d7299","08323a8971cb5b2632b532cba1636ad4ca0d76f9f7d0b8d1a0c706fdf5c77b45","84ed978ec09bcd9acaa479aa6fa307cc7eafcd9759ff0fa5f03da9499fc1a1a7","e243f7d314cb8d05f393a5dc9904b3bcbd769ac082596402ab197df75bf582bf","fc55f9f6c902e967e7d79f2b264d3bec205a1465b1274fbd38e733f4f6cc8718","6a29284c78941d22c7e2590a29716dd98036acd4916a81ca4520987032cd06fb","21271850a109497fab5a7fe9fb2c49b4d21043e0d89563834ff79cc43a29e2fe","d4f2836bfaeb0709f90205f9dbfa8e8b56b3c5757793cb1cc6d2ae68e709f301","4ceec69d8052310237a3da9c7d5b1b13a9f6346c1b6dac2f7ac3c58e2f1b43ca","9a11bfcdfefddd302ba9afcdb7beb3cbc190a4d89ad1b35fca3fea7aa733b21b","e997d5735fff184787017ad34b865215f9d83e8ae82f5464eaa6a976c72ed35b","f71d335412ab3d5d8b5728127ef1a0c656d6bf9fdd589f0397cd66eb5e3478d2","6f4c9b810a4563c63abe7903507bb10231f2b5e9954ae91777245bfd249dd06f","ae0e9a346e3799e48ca1ca02ca9cc9dcd22754ac16aa290c62ffb3a2d0683072","8300c7133c1ee8576d1a0b6551a932fb22b0ea4a24954e812eee3a7cca473348","49b34dd82b1a9c7fc1f6b7d54f124fa058fb2dab6aacd1cb22df2d4f76ab4de5","2c1da7f76b303c578f082f8e3234d0c204775db35f6659a0c89106913373e7d3","d69e23b46f816ae17855a9b7568a52652393c037311c0949de7353f62320aff5","d72ae10d4b0c5d835bc0d013a9fc21f09da408ec1c5356772a347c7fae7b45c3","9ea1cfc084a02bcf213c927cb86859cd79ae0b67f9d0914bd7bf2c0325a60d4f","a4b779037869ebd415f31730ee6ae0ee3d7c75dbc63aec37c8ff03ca7e666b24","475e411f48f74c14b1f6e50cc244387a5cc8ce52340dddfae897c96e03f86527","3683e4be4a3487e8484523b8b30236dd895cf27aa7c928d09041deb3d3cb10b8","035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","462bccdf75fcafc1ae8c30400c9425e1a4681db5d605d1a0edb4f990a54d8094","5923d8facbac6ecf7c84739a5c701a57af94a6f6648d6229a6c768cf28f0f8cb","7adecb2c3238794c378d336a8182d4c3dd2c4fa6fa1785e2797a3db550edea62","dc12dc0e5aa06f4e1a7692149b78f89116af823b9e1f1e4eae140cd3e0e674e6","1bfc6565b90c8771615cd8cfcf9b36efc0275e5e83ac7d9181307e96eb495161","8a8a96898906f065f296665e411f51010b51372fa260d5373bf9f64356703190","7f82ef88bdb67d9a850dd1c7cd2d690f33e0f0acd208e3c9eba086f3670d4f73",{"version":"ccfd8774cd9b929f63ff7dcf657977eb0652e3547f1fcac1b3a1dc5db22d4d58","affectsGlobalScope":true},"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","492e71f8f8f44a968be333ea1bd4e761b020216a380b5b3b213b06a9aecdfbf4","3509d69b077b770d863e44782a1b7ee50bb337751e2f94a80a730f1b7b32c13d","ceeb65c57fe2a1300994f095b5e5c7c5eae440e9ce116d32a3b46184ab1630ec","f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","bdf0ed7d9ebae6175a5d1b4ec4065d07f8099379370a804b1faff05004dc387d","7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","288d992cd0d35fd4bb5a0f23df62114b8bfbc53e55b96a4ad00dde7e6fb72e31","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","5c50a61c09fa0ddd49c51d7d5dbb8b538f6afec86572ec8cb31c3d176f073f13","8841e2aa774b89bd23302dede20663306dc1b9902431ac64b24be8b8d0e3f649","fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","14bedd2e5282438e6062b4eaa08d00f20aabe5f0377edd2e54b4b83cc41dee63","736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","4340936f4e937c452ae783514e7c7bbb7fc06d0c97993ff4865370d0962bb9cf","b70c7ea83a7d0de17a791d9b5283f664033a96362c42cc4d2b2e0bdaa65ef7d1","22293bd6fa12747929f8dfca3ec1684a3fe08638aa18023dd286ab337e88a592","916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","d88a5e779faf033be3d52142a04fbe1cb96009868e3bbdd296b2bc6c59e06c0e","5364f71a9a18772fc6a979266b0808ee5c260eb62cf8685d7d3a1050775c2fcf","c53872cee8e98fdfb9d90cda94b645547b240919275202f923361a8c42b68399","3682fb506930df17762a3ef921edad815b76f15d2dea60033ddb956dc58eeee2","0ca02ad291d1808cab31487307a4f4e009f154e9be3518799a2d4f79cda79403","7077e7dfe79ab14ea26cb65ef0338f12f6b1c309b5c6504b621ff49b89aa3479","bddbe5edde4d4d8c2f7fa17206bc21f191061d9deb5c64b6200b8dbff721eeb4","07b593128612d75ffd578b20827e92056f87fff0b6211cbfbe3e53ab2b694df3","6b4b19887c4212fbede5f096c3a33e95860d4aa68c4085185b9223e4e543611e","a7156cf6a3da6ec3b92521a95135384c20f0e21ea47384109cbe60634ab413ac","41c14015f6bb72c74725cbf027e56970b68b2f8833ed111181b8e406071d2ac6","911e603cf92c05b2dea62bf3034f16b58a7403f510a76325b28843bb4c65b59d","6d5b0206c3f2df0c8001ed3decc7e08112d291beba83f40caf6ede14b3e8aef7","936ec4e7d01e958814ab7119453cb49d383756a034a2353231594c33f68f8f8a","8e0b1459af2cfd51bd79130afe98704d05b102b275bf9a88e1f01d5bcd1ac326","620c8bad50b592f54c448721f056151663deffeddbd8332eb9a5cfb8a4f1663c","5c461ece3975d62488bd16e04618f05101d2707fe885c557068dc960697c67a5","6505af92e59ab78d2d6c4f55706f5aa3f4a49fcf8c03864a18e4ba61af291230","17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","4129eec126cb6f054dac00e2527e0c5eb23784a51b9700082b1a6e88cca8b593","4ef960df4f672e93b479f88211ed8b5cfa8a598b97aafa3396cacdc3341e3504","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","239f0c1d83d1ca9677327198196ee2ce6827dc7b469771ab5abf7bea7fbdb674","d9c5f8d21771758700d7b6eeef796700b99c643a5818195cf0d01bed98407df1","4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7"],"options":{"composite":true,"declaration":true,"declarationMap":true,"downlevelIteration":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"jsx":2,"noEmitOnError":false,"noImplicitAny":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strictNullChecks":true,"target":1,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"fileIdsList":[[119,193,236],[48,84,88,193,236],[48,84,88,119,193,236],[119,120,121,122,193,236],[127,128,129,130,131,132,133,193,236],[48,103,127,193,236],[48,84,88,103,123,126,193,236],[48,193,236],[193,236],[48,84,88,103,123,127,193,236],[48,55,56,193,236],[48,55,193,236],[56,193,236],[55,193,236],[55,56,193,236],[55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,193,236],[70,193,236],[48,105,193,236],[105,193,236],[48,84,88,123,193,236],[48,84,88,103,193,236],[104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,124,125,193,236],[48,82,84,88,89,193,236],[48,82,91,193,236],[48,91,94,193,236],[82,89,90,91,92,93,95,96,97,98,99,100,101,102,193,236],[91,193,236],[48,91,193,236],[103,193,236],[82,193,236],[49,193,236],[49,52,193,236],[49,50,193,236],[49,50,51,52,53,54,193,236],[50,193,236],[182,193,236],[182,183,184,185,186,193,236],[182,184,193,236],[193,236,248,286],[193,236,289],[193,236,293],[193,236,292],[193,236,297],[193,236,249,286],[193,236,263,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512],[193,236,513],[193,236,493,494,513],[193,236,263,491,496,513],[193,236,263,497,498,513],[193,236,263,497,513],[193,236,263,491,497,513],[193,236,263,503,513],[193,236,263,513],[193,236,263,491],[193,236,496],[193,236,263],[193,236,514],[193,236,515],[193,236,520,525],[193,236,248,286,299],[193,236,543],[193,236,531,533,534,535,536,537,538,539,540,541,542,543],[193,236,531,532,534,535,536,537,538,539,540,541,542,543],[193,236,532,533,534,535,536,537,538,539,540,541,542,543],[193,236,531,532,533,535,536,537,538,539,540,541,542,543],[193,236,531,532,533,534,536,537,538,539,540,541,542,543],[193,236,531,532,533,534,535,537,538,539,540,541,542,543],[193,236,531,532,533,534,535,536,538,539,540,541,542,543],[193,236,531,532,533,534,535,536,537,539,540,541,542,543],[193,236,531,532,533,534,535,536,537,538,540,541,542,543],[193,236,531,532,533,534,535,536,537,538,539,541,542,543],[193,236,531,532,533,534,535,536,537,538,539,540,542,543],[193,236,531,532,533,534,535,536,537,538,539,540,541,543],[193,236,531,532,533,534,535,536,537,538,539,540,541,542],[193,236,251,279,286,548,549],[193,233,236],[193,235,236],[193,236,241,271],[193,236,237,242,248,249,256,268,279],[193,236,237,238,248,256],[188,189,190,193,236],[193,236,239,280],[193,236,240,241,249,257],[193,236,241,268,276],[193,236,242,244,248,256],[193,235,236,243],[193,236,244,245],[193,236,248],[193,236,246,248],[193,235,236,248],[193,236,248,249,250,268,279],[193,236,248,249,250,263,268,271],[193,231,236,284],[193,231,236,244,248,251,256,268,279],[193,236,248,249,251,252,256,268,276,279],[193,236,251,253,268,276,279],[193,236,248,254],[193,236,255,279,284],[193,236,244,248,256,268],[193,236,257],[193,236,258],[193,235,236,259],[193,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285],[193,236,261],[193,236,262],[193,236,248,263,264],[193,236,263,265,280,282],[193,236,248,268,269,270,271],[193,236,268,270],[193,236,268,269],[193,236,271],[193,236,272],[193,233,236,268],[193,236,248,274,275],[193,236,274,275],[193,236,241,256,268,276],[193,236,277],[236],[191,192,193,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285],[193,236,256,278],[193,236,251,262,279],[193,236,241,280],[193,236,268,281],[193,236,255,282],[193,236,283],[193,236,241,248,250,259,268,279,282,284],[193,236,268,285],[48,193,236,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569],[48,193,236,554,570],[48,193,236,570],[86,193,236],[48,83,84,85,86,87,193,236],[84,88,193,236],[45,46,47,193,236],[193,236,574,613],[193,236,574,598,613],[193,236,613],[193,236,574],[193,236,574,599,613],[193,236,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612],[193,236,599,613],[193,236,248,268,285,286,547],[193,236,268,286],[193,236,248,251,253,256,279,286],[193,236,618],[193,236,251,268,286],[193,236,518,521],[193,236,518,521,522,523],[193,236,520],[193,236,517,524],[193,236,248,268,286],[193,236,519],[193,236,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,319,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,359,360,361,362,363,364,365,366,367,368,369,370,372,373,374,375,376,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,422,423,424,426,435,437,438,439,440,441,442,444,445,447,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490],[193,236,348],[193,236,306,307],[193,236,303,304,305,307],[193,236,304,307],[193,236,307,348],[193,236,303,307,425],[193,236,305,306,307],[193,236,303,307],[193,236,307],[193,236,306],[193,236,303,306,348],[193,236,304,306,307,464],[193,236,306,307,464],[193,236,306,472],[193,236,304,306,307],[193,236,316],[193,236,339],[193,236,360],[193,236,306,307,348],[193,236,307,355],[193,236,306,307,348,366],[193,236,306,307,366],[193,236,307,407],[193,236,303,307,426],[193,236,432,434],[193,236,303,307,425,432,433],[193,236,425,426,434],[193,236,432],[193,236,303,307,432,433,434],[193,236,448],[193,236,443],[193,236,446],[193,236,304,306,426,427,428,429],[193,236,348,426,427,428,429],[193,236,426,428],[193,236,306,427,428,430,431,435],[193,236,303,306],[193,236,307,450],[193,236,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,349,350,351,352,353,354,356,357,358,359,360,361,362,363,364,365,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423],[193,236,436],[193,203,207,236,279],[193,203,236,268,279],[193,198,236],[193,200,203,236,276,279],[193,236,256,276],[193,236,286],[193,198,236,286],[193,200,203,236,256,279],[193,195,196,199,202,236,248,268,279],[193,203,210,236],[193,195,201,236],[193,203,224,225,236],[193,199,203,236,271,279,286],[193,224,236,286],[193,197,198,236,286],[193,203,236],[193,197,198,199,200,201,202,203,204,205,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,225,226,227,228,229,230,236],[193,203,218,236],[193,203,210,211,236],[193,201,203,211,212,236],[193,202,236],[193,195,198,203,236],[193,203,207,211,212,236],[193,207,236],[193,201,203,206,236,279],[193,195,200,203,210,236],[193,236,268],[193,198,203,224,236,284,286],[43,193,236],[43,44,48,84,88,134,178,193,236],[43,179,193,236],[48,156,158,193,236],[157,193,236],[159,193,236],[142,193,236],[136,142,193,236],[142,143,144,145,146,193,236],[162,193,236],[163,164,165,166,167,168,193,236],[149,193,236],[163,193,236],[147,149,156,157,160,161,162,169,177,193,236],[170,193,236],[147,149,162,170,193,236],[136,156,162,170,193,236],[147,149,162,193,236],[170,171,172,173,174,175,193,236],[48,170,193,236],[156,170,193,236],[149,176,193,236],[136,193,236],[135,193,236],[136,137,138,139,140,141,148,193,236],[136,139,147,193,236],[150,151,152,153,154,155,193,236],[48,52,55,82,84,88,127,134,178],[179]],"referencedMap":[[122,1],[119,2],[120,3],[121,1],[123,4],[134,5],[128,6],[127,7],[131,8],[132,8],[133,9],[129,10],[130,6],[57,11],[60,8],[66,11],[67,11],[68,11],[69,12],[70,8],[71,8],[58,13],[59,11],[61,14],[62,15],[63,14],[64,15],[65,15],[82,16],[56,12],[72,9],[73,9],[74,13],[75,11],[76,13],[77,14],[78,14],[79,17],[80,15],[81,9],[104,2],[108,18],[109,18],[110,8],[111,2],[112,8],[113,8],[114,2],[106,19],[107,19],[115,9],[116,2],[117,2],[118,2],[124,20],[125,21],[126,22],[105,2],[90,23],[92,24],[93,24],[95,25],[94,8],[103,26],[96,27],[97,27],[98,28],[99,29],[91,30],[100,9],[101,23],[89,9],[102,2],[51,31],[50,31],[53,32],[54,33],[52,33],[55,34],[49,35],[184,36],[182,9],[181,9],[187,37],[183,36],[185,38],[186,36],[287,39],[288,9],[289,9],[290,9],[291,40],[292,9],[294,41],[295,42],[293,9],[296,9],[298,43],[299,9],[300,44],[301,44],[302,9],[513,45],[493,46],[495,47],[494,46],[497,48],[499,49],[500,50],[501,51],[502,49],[503,50],[504,49],[505,52],[506,50],[507,49],[508,53],[509,46],[510,46],[511,54],[498,55],[512,56],[496,56],[514,9],[515,57],[516,58],[526,59],[527,9],[528,9],[529,60],[530,9],[544,61],[532,62],[533,63],[531,64],[534,65],[535,66],[536,67],[537,68],[538,69],[539,70],[540,71],[541,72],[542,73],[543,74],[545,9],[546,9],[297,9],[549,9],[550,75],[233,76],[234,76],[235,77],[236,78],[237,79],[238,80],[188,9],[191,81],[189,9],[190,9],[239,82],[240,83],[241,84],[242,85],[243,86],[244,87],[245,87],[247,88],[246,89],[248,90],[249,91],[250,92],[232,93],[251,94],[252,95],[253,96],[254,97],[255,98],[256,99],[257,100],[258,101],[259,102],[260,103],[261,104],[262,105],[263,106],[264,106],[265,107],[266,9],[267,9],[268,108],[270,109],[269,110],[271,111],[272,112],[273,113],[274,114],[275,115],[276,116],[277,117],[193,118],[192,9],[286,119],[278,120],[279,121],[280,122],[281,123],[282,124],[283,125],[284,126],[285,127],[551,9],[552,9],[553,9],[47,9],[570,128],[555,129],[556,129],[557,129],[558,129],[559,8],[560,130],[561,129],[562,129],[563,129],[564,129],[565,129],[566,129],[567,129],[568,129],[569,129],[571,8],[85,9],[86,131],[87,9],[83,9],[88,132],[84,133],[572,8],[45,9],[48,134],[554,8],[573,9],[598,135],[599,136],[574,137],[577,137],[596,135],[597,135],[587,135],[586,138],[584,135],[579,135],[592,135],[590,135],[594,135],[578,135],[591,135],[595,135],[580,135],[581,135],[593,135],[575,135],[582,135],[583,135],[585,135],[589,135],[600,139],[588,135],[576,135],[613,140],[612,9],[607,139],[609,141],[608,139],[601,139],[602,139],[604,139],[606,139],[610,141],[611,141],[603,141],[605,141],[614,9],[615,142],[492,143],[616,9],[617,144],[618,9],[619,145],[194,9],[46,9],[548,146],[518,9],[522,147],[524,148],[523,147],[521,149],[525,150],[517,9],[547,151],[520,152],[519,9],[491,153],[464,9],[442,154],[440,154],[355,155],[306,156],[305,157],[441,158],[426,159],[348,160],[304,161],[303,162],[490,157],[455,163],[454,163],[366,164],[462,155],[463,155],[465,165],[466,155],[467,162],[468,155],[439,155],[469,155],[470,166],[471,155],[472,163],[473,167],[474,155],[475,155],[476,155],[477,155],[478,163],[479,155],[480,155],[481,155],[482,155],[483,168],[484,155],[485,155],[486,155],[487,155],[488,155],[308,162],[309,162],[310,162],[311,162],[312,162],[313,162],[314,162],[315,155],[317,169],[318,162],[316,162],[319,162],[320,162],[321,162],[322,162],[323,162],[324,162],[325,155],[326,162],[327,162],[328,162],[329,162],[330,162],[331,155],[332,162],[333,162],[334,162],[335,162],[336,162],[337,162],[338,155],[340,170],[339,162],[341,162],[342,162],[343,162],[344,162],[345,168],[346,155],[347,155],[361,171],[349,172],[350,162],[351,162],[352,155],[353,162],[354,162],[356,173],[357,162],[358,162],[359,162],[360,162],[362,162],[363,162],[364,162],[365,162],[367,174],[368,162],[369,162],[370,162],[371,155],[372,162],[373,175],[374,175],[375,175],[376,155],[377,162],[378,162],[379,162],[384,162],[380,162],[381,155],[382,162],[383,155],[385,162],[386,162],[387,162],[388,162],[389,162],[390,162],[391,155],[392,162],[393,162],[394,162],[395,162],[396,162],[397,162],[398,162],[399,162],[400,162],[401,162],[402,162],[403,162],[404,162],[405,162],[406,162],[407,162],[408,176],[409,162],[410,162],[411,162],[412,162],[413,162],[414,162],[415,155],[416,155],[417,155],[418,155],[419,155],[420,162],[421,162],[422,162],[423,162],[489,155],[425,177],[448,178],[443,178],[434,179],[432,180],[446,181],[435,182],[449,183],[444,184],[445,181],[447,185],[433,9],[438,9],[430,186],[431,187],[428,9],[429,188],[427,162],[436,189],[307,190],[456,9],[457,9],[458,9],[459,9],[460,9],[461,9],[450,9],[453,163],[452,9],[451,191],[424,192],[437,193],[43,9],[8,9],[9,9],[11,9],[10,9],[2,9],[12,9],[13,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[3,9],[4,9],[23,9],[20,9],[21,9],[22,9],[24,9],[25,9],[26,9],[5,9],[27,9],[28,9],[29,9],[30,9],[6,9],[34,9],[31,9],[32,9],[33,9],[35,9],[7,9],[36,9],[41,9],[42,9],[37,9],[38,9],[39,9],[40,9],[1,9],[210,194],[220,195],[209,194],[230,196],[201,197],[200,198],[229,199],[223,200],[228,201],[203,202],[217,203],[202,204],[226,205],[198,206],[197,199],[227,207],[199,208],[204,209],[205,9],[208,209],[195,9],[231,210],[221,211],[212,212],[213,213],[215,214],[211,215],[214,216],[224,199],[206,217],[207,218],[216,219],[196,220],[219,211],[218,209],[222,9],[225,221],[44,222],[179,223],[180,224],[135,9],[162,9],[161,8],[157,9],[159,225],[158,226],[160,227],[146,228],[142,9],[144,228],[143,229],[145,228],[147,230],[163,231],[169,232],[166,233],[168,233],[167,226],[165,234],[164,234],[178,235],[171,236],[172,237],[175,238],[170,239],[176,240],[173,241],[174,242],[177,243],[140,244],[138,244],[137,244],[139,244],[136,245],[141,244],[149,246],[148,247],[155,9],[152,9],[151,8],[154,9],[156,248],[150,9],[153,9]],"exportedModulesMap":[[122,1],[119,2],[120,3],[121,1],[123,4],[134,5],[128,6],[127,7],[131,8],[132,8],[133,9],[129,10],[130,6],[57,11],[60,8],[66,11],[67,11],[68,11],[69,12],[70,8],[71,8],[58,13],[59,11],[61,14],[62,15],[63,14],[64,15],[65,15],[82,16],[56,12],[72,9],[73,9],[74,13],[75,11],[76,13],[77,14],[78,14],[79,17],[80,15],[81,9],[104,2],[108,18],[109,18],[110,8],[111,2],[112,8],[113,8],[114,2],[106,19],[107,19],[115,9],[116,2],[117,2],[118,2],[124,20],[125,21],[126,22],[105,2],[90,23],[92,24],[93,24],[95,25],[94,8],[103,26],[96,27],[97,27],[98,28],[99,29],[91,30],[100,9],[101,23],[89,9],[102,2],[51,31],[50,31],[53,32],[54,33],[52,33],[55,34],[49,35],[184,36],[182,9],[181,9],[187,37],[183,36],[185,38],[186,36],[287,39],[288,9],[289,9],[290,9],[291,40],[292,9],[294,41],[295,42],[293,9],[296,9],[298,43],[299,9],[300,44],[301,44],[302,9],[513,45],[493,46],[495,47],[494,46],[497,48],[499,49],[500,50],[501,51],[502,49],[503,50],[504,49],[505,52],[506,50],[507,49],[508,53],[509,46],[510,46],[511,54],[498,55],[512,56],[496,56],[514,9],[515,57],[516,58],[526,59],[527,9],[528,9],[529,60],[530,9],[544,61],[532,62],[533,63],[531,64],[534,65],[535,66],[536,67],[537,68],[538,69],[539,70],[540,71],[541,72],[542,73],[543,74],[545,9],[546,9],[297,9],[549,9],[550,75],[233,76],[234,76],[235,77],[236,78],[237,79],[238,80],[188,9],[191,81],[189,9],[190,9],[239,82],[240,83],[241,84],[242,85],[243,86],[244,87],[245,87],[247,88],[246,89],[248,90],[249,91],[250,92],[232,93],[251,94],[252,95],[253,96],[254,97],[255,98],[256,99],[257,100],[258,101],[259,102],[260,103],[261,104],[262,105],[263,106],[264,106],[265,107],[266,9],[267,9],[268,108],[270,109],[269,110],[271,111],[272,112],[273,113],[274,114],[275,115],[276,116],[277,117],[193,118],[192,9],[286,119],[278,120],[279,121],[280,122],[281,123],[282,124],[283,125],[284,126],[285,127],[551,9],[552,9],[553,9],[47,9],[570,128],[555,129],[556,129],[557,129],[558,129],[559,8],[560,130],[561,129],[562,129],[563,129],[564,129],[565,129],[566,129],[567,129],[568,129],[569,129],[571,8],[85,9],[86,131],[87,9],[83,9],[88,132],[84,133],[572,8],[45,9],[48,134],[554,8],[573,9],[598,135],[599,136],[574,137],[577,137],[596,135],[597,135],[587,135],[586,138],[584,135],[579,135],[592,135],[590,135],[594,135],[578,135],[591,135],[595,135],[580,135],[581,135],[593,135],[575,135],[582,135],[583,135],[585,135],[589,135],[600,139],[588,135],[576,135],[613,140],[612,9],[607,139],[609,141],[608,139],[601,139],[602,139],[604,139],[606,139],[610,141],[611,141],[603,141],[605,141],[614,9],[615,142],[492,143],[616,9],[617,144],[618,9],[619,145],[194,9],[46,9],[548,146],[518,9],[522,147],[524,148],[523,147],[521,149],[525,150],[517,9],[547,151],[520,152],[519,9],[491,153],[464,9],[442,154],[440,154],[355,155],[306,156],[305,157],[441,158],[426,159],[348,160],[304,161],[303,162],[490,157],[455,163],[454,163],[366,164],[462,155],[463,155],[465,165],[466,155],[467,162],[468,155],[439,155],[469,155],[470,166],[471,155],[472,163],[473,167],[474,155],[475,155],[476,155],[477,155],[478,163],[479,155],[480,155],[481,155],[482,155],[483,168],[484,155],[485,155],[486,155],[487,155],[488,155],[308,162],[309,162],[310,162],[311,162],[312,162],[313,162],[314,162],[315,155],[317,169],[318,162],[316,162],[319,162],[320,162],[321,162],[322,162],[323,162],[324,162],[325,155],[326,162],[327,162],[328,162],[329,162],[330,162],[331,155],[332,162],[333,162],[334,162],[335,162],[336,162],[337,162],[338,155],[340,170],[339,162],[341,162],[342,162],[343,162],[344,162],[345,168],[346,155],[347,155],[361,171],[349,172],[350,162],[351,162],[352,155],[353,162],[354,162],[356,173],[357,162],[358,162],[359,162],[360,162],[362,162],[363,162],[364,162],[365,162],[367,174],[368,162],[369,162],[370,162],[371,155],[372,162],[373,175],[374,175],[375,175],[376,155],[377,162],[378,162],[379,162],[384,162],[380,162],[381,155],[382,162],[383,155],[385,162],[386,162],[387,162],[388,162],[389,162],[390,162],[391,155],[392,162],[393,162],[394,162],[395,162],[396,162],[397,162],[398,162],[399,162],[400,162],[401,162],[402,162],[403,162],[404,162],[405,162],[406,162],[407,162],[408,176],[409,162],[410,162],[411,162],[412,162],[413,162],[414,162],[415,155],[416,155],[417,155],[418,155],[419,155],[420,162],[421,162],[422,162],[423,162],[489,155],[425,177],[448,178],[443,178],[434,179],[432,180],[446,181],[435,182],[449,183],[444,184],[445,181],[447,185],[433,9],[438,9],[430,186],[431,187],[428,9],[429,188],[427,162],[436,189],[307,190],[456,9],[457,9],[458,9],[459,9],[460,9],[461,9],[450,9],[453,163],[452,9],[451,191],[424,192],[437,193],[43,9],[8,9],[9,9],[11,9],[10,9],[2,9],[12,9],[13,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[3,9],[4,9],[23,9],[20,9],[21,9],[22,9],[24,9],[25,9],[26,9],[5,9],[27,9],[28,9],[29,9],[30,9],[6,9],[34,9],[31,9],[32,9],[33,9],[35,9],[7,9],[36,9],[41,9],[42,9],[37,9],[38,9],[39,9],[40,9],[1,9],[210,194],[220,195],[209,194],[230,196],[201,197],[200,198],[229,199],[223,200],[228,201],[203,202],[217,203],[202,204],[226,205],[198,206],[197,199],[227,207],[199,208],[204,209],[205,9],[208,209],[195,9],[231,210],[221,211],[212,212],[213,213],[215,214],[211,215],[214,216],[224,199],[206,217],[207,218],[216,219],[196,220],[219,211],[218,209],[222,9],[225,221],[179,249],[180,250],[135,9],[162,9],[161,8],[157,9],[159,225],[158,226],[160,227],[146,228],[142,9],[144,228],[143,229],[145,228],[147,230],[163,231],[169,232],[166,233],[168,233],[167,226],[165,234],[164,234],[178,235],[171,236],[172,237],[175,238],[170,239],[176,240],[173,241],[174,242],[177,243],[140,244],[138,244],[137,244],[139,244],[136,245],[141,244],[149,246],[148,247],[155,9],[152,9],[151,8],[154,9],[156,248],[150,9],[153,9]],"semanticDiagnosticsPerFile":[122,119,120,121,123,134,128,127,131,132,133,129,130,57,60,66,67,68,69,70,71,58,59,61,62,63,64,65,82,56,72,73,74,75,76,77,78,79,80,81,104,108,109,110,111,112,113,114,106,107,115,116,117,118,124,125,126,105,90,92,93,95,94,103,96,97,98,99,91,100,101,89,102,51,50,53,54,52,55,49,184,182,181,187,183,185,186,287,288,289,290,291,292,294,295,293,296,298,299,300,301,302,513,493,495,494,497,499,500,501,502,503,504,505,506,507,508,509,510,511,498,512,496,514,515,516,526,527,528,529,530,544,532,533,531,534,535,536,537,538,539,540,541,542,543,545,546,297,549,550,233,234,235,236,237,238,188,191,189,190,239,240,241,242,243,244,245,247,246,248,249,250,232,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,270,269,271,272,273,274,275,276,277,193,192,286,278,279,280,281,282,283,284,285,551,552,553,47,570,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,571,85,86,87,83,88,84,572,45,48,554,573,598,599,574,577,596,597,587,586,584,579,592,590,594,578,591,595,580,581,593,575,582,583,585,589,600,588,576,613,612,607,609,608,601,602,604,606,610,611,603,605,614,615,492,616,617,618,619,194,46,548,518,522,524,523,521,525,517,547,520,519,491,464,442,440,355,306,305,441,426,348,304,303,490,455,454,366,462,463,465,466,467,468,439,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,308,309,310,311,312,313,314,315,317,318,316,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,340,339,341,342,343,344,345,346,347,361,349,350,351,352,353,354,356,357,358,359,360,362,363,364,365,367,368,369,370,371,372,373,374,375,376,377,378,379,384,380,381,382,383,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,489,425,448,443,434,432,446,435,449,444,445,447,433,438,430,431,428,429,427,436,307,456,457,458,459,460,461,450,453,452,451,424,437,43,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,23,20,21,22,24,25,26,5,27,28,29,30,6,34,31,32,33,35,7,36,41,42,37,38,39,40,1,210,220,209,230,201,200,229,223,228,203,217,202,226,198,197,227,199,204,205,208,195,231,221,212,213,215,211,214,224,206,207,216,196,219,218,222,225,44,179,180,135,162,161,157,159,158,160,146,142,144,143,145,147,163,169,166,168,167,165,164,178,171,172,175,170,176,173,174,177,140,138,137,139,136,141,149,148,155,152,151,154,156,150,153],"latestChangedDtsFile":"./index.d.ts"},"version":"4.9.5"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"versions": {
|
|
3
|
+
"3.0.0": "/com.amazon.kepler.shopify__performance_navigation_bottom_tabs_3@IShopify__PerformanceNavigationBottomTabs_0",
|
|
4
|
+
"3.0.1756406897": "/com.amazon.kepler.shopify__performance_navigation_bottom_tabs_3@IShopify__PerformanceNavigationBottomTabs_0",
|
|
5
|
+
"3.0.1758654000": "/com.amazon.kepler.shopify__performance_navigation_bottom_tabs_3@IShopify__PerformanceNavigationBottomTabs_0",
|
|
6
|
+
"3.0.1758683737": "/com.amazon.kepler.shopify__performance_navigation_bottom_tabs_3@IShopify__PerformanceNavigationBottomTabs_0"
|
|
7
|
+
}
|
|
8
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name": "@amazon-devices/shopify__react-native-performance-navigation-bottom-tabs", "version": "3.0.1758683737+3.0.0", "description": "Extension library atop @amazon-devices/shopify__react-native-performance. Contains some utilities for easier profiling of apps using @react-navigation/bottom-tabs.", "publishConfig": {"access": "public", "@shopify:registry": "https://registry.npmjs.org/"}, "main": "dist/index.js", "types": "dist/index.d.ts", "keywords": ["react-native"], "author": "shopify", "license": "See license in LICENSE", "scripts": {"build": "tsc -b", "lint": "yarn eslint . --ext .ts,.tsx", "lint:fix": "yarn eslint . --ext .ts,.tsx --fix", "test": "tsc -b && yarn jest"}, "bugs": {"url": "https://github.com/shopify/react-native-performance/issues"}, "homepage": "https://github.com/shopify/react-native-performance#readme", "repository": {"type": "git", "url": "git+https://github.com/shopify/react-native-performance.git"}, "peerDependencies": {"@babel/runtime": "*", "@amazon-devices/react-navigation__bottom-tabs": "^7.0.0", "@amazon-devices/shopify__react-native-performance": "^2.0.0", "@amazon-devices/shopify__react-native-performance-navigation": "^3.0.0", "react": "*", "react-native": "*"}, "devDependencies": {"@amazon-devices/react-navigation__bottom-tabs": "^7.0.0", "@amazon-devices/react-native-safe-area-context": "^2.0.0"}, "files": ["dist", "kepler-compatibility.json", "src", "THIRD_PARTY_NOTICES.txt"], "kepler": {"temporary-alias-for-package": {"name": "@shopify/react-native-performance-navigation-bottom-tabs", "version": "3.0.0"}}, "keplerImport": true}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export default class FixedSizeStack<T> {
|
|
2
|
+
private readonly maxSize: number;
|
|
3
|
+
private readonly stack = new Array<T>();
|
|
4
|
+
|
|
5
|
+
constructor(maxSize: number) {
|
|
6
|
+
this.maxSize = maxSize;
|
|
7
|
+
if (maxSize <= 0) {
|
|
8
|
+
throw new Error(`maxSize must be > 0: ${maxSize}.`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
push(item: T): void {
|
|
13
|
+
const deleteCount = this.stack.length - this.maxSize + 1;
|
|
14
|
+
if (deleteCount > 0) {
|
|
15
|
+
this.stack.splice(0, deleteCount);
|
|
16
|
+
}
|
|
17
|
+
this.stack.push(item);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
pop(): T | undefined {
|
|
21
|
+
return this.stack.pop();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, fireEvent } from '@testing-library/react-native';
|
|
3
|
+
import { Text } from 'react-native';
|
|
4
|
+
import { NavigationContainer } from '@amazon-devices/react-navigation__native';
|
|
5
|
+
import createProfiledBottomTabNavigator, { DEFAULT_SOURCE_NAME, MissingTabBarTimestampError } from '../createProfiledBottomTabNavigator';
|
|
6
|
+
import 'jest-extended';
|
|
7
|
+
|
|
8
|
+
jest.mock('@amazon-devices/shopify__react-native-performance', () => {
|
|
9
|
+
const originalModule = jest.requireActual('@amazon-devices/shopify__react-native-performance');
|
|
10
|
+
return {
|
|
11
|
+
...originalModule,
|
|
12
|
+
useStartProfiler: jest.fn(() => {
|
|
13
|
+
const startTimer = jest.fn();
|
|
14
|
+
return startTimer;
|
|
15
|
+
}),
|
|
16
|
+
useErrorHandler: jest.fn(() => jest.fn()),
|
|
17
|
+
PerformanceProfilerError: class PerformanceProfilerError extends Error {
|
|
18
|
+
constructor(message: string) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "PerformanceProfilerError";
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
DESTINATION_SCREEN_NAME_PLACEHOLDER: 'Placeholder',
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('ProfiledBottomTabNavigator', () => {
|
|
28
|
+
const HomeScreen = () => <Text testID='home'>Home</Text>;
|
|
29
|
+
const SettingsScreen = () => <Text testID='settings'>Settings</Text>;
|
|
30
|
+
const { Tab, buildProfiledBottomTabBarButton } = createProfiledBottomTabNavigator();
|
|
31
|
+
|
|
32
|
+
it('renders the tab navigator', () => {
|
|
33
|
+
const Component = () => (
|
|
34
|
+
<NavigationContainer>
|
|
35
|
+
<Tab.Navigator>
|
|
36
|
+
<Tab.Screen name="Home">
|
|
37
|
+
{HomeScreen}
|
|
38
|
+
</Tab.Screen>
|
|
39
|
+
<Tab.Screen name="Settings">
|
|
40
|
+
{SettingsScreen}
|
|
41
|
+
</Tab.Screen>
|
|
42
|
+
</Tab.Navigator>
|
|
43
|
+
</NavigationContainer>
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const { getByTestId } = render(<Component />);
|
|
47
|
+
|
|
48
|
+
expect(getByTestId('home')).toBeTruthy();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('handles tab press events', () => {
|
|
52
|
+
const { useStartProfiler } = require('@amazon-devices/shopify__react-native-performance');
|
|
53
|
+
const startProfilerFn = jest.fn();
|
|
54
|
+
useStartProfiler.mockReturnValue(startProfilerFn);
|
|
55
|
+
|
|
56
|
+
const ProfiledButton = buildProfiledBottomTabBarButton();
|
|
57
|
+
|
|
58
|
+
const { getByTestId } = render(
|
|
59
|
+
<NavigationContainer>
|
|
60
|
+
<Tab.Navigator>
|
|
61
|
+
<Tab.Screen
|
|
62
|
+
name="Home"
|
|
63
|
+
component={HomeScreen}
|
|
64
|
+
options={{
|
|
65
|
+
tabBarButton: (props) => <ProfiledButton {...props} testID="tabBarButton_home" />,
|
|
66
|
+
}}
|
|
67
|
+
/>
|
|
68
|
+
<Tab.Screen
|
|
69
|
+
name="Settings"
|
|
70
|
+
component={SettingsScreen}
|
|
71
|
+
options={{
|
|
72
|
+
tabBarButton: (props) => <ProfiledButton {...props} testID="tabBarButton_settings" />,
|
|
73
|
+
}}
|
|
74
|
+
/>
|
|
75
|
+
</Tab.Navigator>
|
|
76
|
+
</NavigationContainer>
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const settingsButton = getByTestId('tabBarButton_settings');
|
|
80
|
+
|
|
81
|
+
const mockEvent = {
|
|
82
|
+
nativeEvent: {
|
|
83
|
+
timestamp: Date.now(),
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
fireEvent.press(settingsButton, mockEvent);
|
|
88
|
+
|
|
89
|
+
expect(startProfilerFn).toHaveBeenCalled();
|
|
90
|
+
|
|
91
|
+
expect(startProfilerFn).toHaveBeenCalledWith({
|
|
92
|
+
source: DEFAULT_SOURCE_NAME,
|
|
93
|
+
uiEvent: mockEvent,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
it('handles missing tab bar timestamp error', () => {
|
|
97
|
+
const { useErrorHandler} = require('@amazon-devices/shopify__react-native-performance');
|
|
98
|
+
const errorHandlerFn = jest.fn();
|
|
99
|
+
useErrorHandler.mockReturnValue(errorHandlerFn);
|
|
100
|
+
|
|
101
|
+
const ProfiledButton = buildProfiledBottomTabBarButton();
|
|
102
|
+
|
|
103
|
+
const { getByTestId } = render(
|
|
104
|
+
<NavigationContainer>
|
|
105
|
+
<Tab.Navigator>
|
|
106
|
+
<Tab.Screen
|
|
107
|
+
name="Home"
|
|
108
|
+
component={HomeScreen}
|
|
109
|
+
options={{
|
|
110
|
+
tabBarButton: (props) => <ProfiledButton {...props} testID="tabBarButton_home" />,
|
|
111
|
+
}}
|
|
112
|
+
/>
|
|
113
|
+
<Tab.Screen
|
|
114
|
+
name="Settings"
|
|
115
|
+
component={SettingsScreen}
|
|
116
|
+
options={{
|
|
117
|
+
tabBarButton: (props) => <ProfiledButton {...props} testID="tabBarButton_settings" />,
|
|
118
|
+
}}
|
|
119
|
+
/>
|
|
120
|
+
</Tab.Navigator>
|
|
121
|
+
</NavigationContainer>
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
const settingsButton = getByTestId('tabBarButton_settings');
|
|
125
|
+
|
|
126
|
+
const mockEvent = {
|
|
127
|
+
nativeEvent: {
|
|
128
|
+
},
|
|
129
|
+
type: 'tabPress'
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
fireEvent.press(settingsButton, mockEvent);
|
|
133
|
+
expect(errorHandlerFn).toHaveBeenCalledWith(expect.any(MissingTabBarTimestampError));
|
|
134
|
+
});
|
|
135
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import '@amazon-devices/shopify__react-native-performance/jest-mock';
|
|
2
|
+
import '@amazon-devices/react-native-gesture-handler/jestSetup';
|
|
3
|
+
|
|
4
|
+
jest.mock('@amazon-devices/react-native-reanimated', () => {
|
|
5
|
+
const Reanimated = require('@amazon-devices/react-native-reanimated/mock');
|
|
6
|
+
|
|
7
|
+
// The mock for `call` immediately calls the callback which is incorrect
|
|
8
|
+
// So we override it with a no-op
|
|
9
|
+
// eslint-disable-next-line no-empty-function
|
|
10
|
+
Reanimated.default.call = () => {};
|
|
11
|
+
|
|
12
|
+
return Reanimated;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
global.AbortController = require('abort-controller');
|
|
16
|
+
|
|
17
|
+
jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
|
|
18
|
+
|
|
19
|
+
global.setImmediate = (callback) => {
|
|
20
|
+
setTimeout(callback, 0);
|
|
21
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import React, {useMemo, useCallback} from 'react';
|
|
2
|
+
import {createBottomTabNavigator, BottomTabBar, BottomTabBarProps} from '@amazon-devices/react-navigation__bottom-tabs';
|
|
3
|
+
import {
|
|
4
|
+
GestureResponderEvent,
|
|
5
|
+
useStartProfiler,
|
|
6
|
+
useErrorHandler,
|
|
7
|
+
DESTINATION_SCREEN_NAME_PLACEHOLDER,
|
|
8
|
+
PerformanceProfilerError,
|
|
9
|
+
} from '@amazon-devices/shopify__react-native-performance';
|
|
10
|
+
import {View, TouchableWithoutFeedbackProps, TouchableWithoutFeedback} from 'react-native';
|
|
11
|
+
|
|
12
|
+
import FixedSizeStack from './FixedSizeStack';
|
|
13
|
+
|
|
14
|
+
export const DEFAULT_SOURCE_NAME = 'BottomTabBar';
|
|
15
|
+
|
|
16
|
+
type UIEvent = React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent;
|
|
17
|
+
|
|
18
|
+
type InnerTabBarType = (props: BottomTabBarProps) => React.ReactNode;
|
|
19
|
+
|
|
20
|
+
type TouchableProps = Omit<TouchableWithoutFeedbackProps, 'onPress'> & {
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
onPress?: (event: UIEvent) => void;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export class MissingTabBarTimestampError extends PerformanceProfilerError {
|
|
26
|
+
readonly name = 'MissingTabBarTimestampError';
|
|
27
|
+
readonly destinationScreen: string;
|
|
28
|
+
constructor(destinationScreen: string) {
|
|
29
|
+
super(
|
|
30
|
+
'Could not capture the native touch timestamp of the tab bar button. ' +
|
|
31
|
+
'As a result, the TTI timer will not start when the navigation button was pressed. ' +
|
|
32
|
+
'Instead, it will start when the JS Touchable.onPress code was executed. This may lead to imprecise TTI ' +
|
|
33
|
+
'values (shorter than what the user actually perceived).',
|
|
34
|
+
'bug',
|
|
35
|
+
);
|
|
36
|
+
this.destinationScreen = destinationScreen;
|
|
37
|
+
Object.setPrototypeOf(this, MissingTabBarTimestampError.prototype);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function ProfiledTabBarComponent({
|
|
42
|
+
navigation,
|
|
43
|
+
tabPressEventRecorder,
|
|
44
|
+
InnerTabBar,
|
|
45
|
+
source,
|
|
46
|
+
...rest
|
|
47
|
+
}: BottomTabBarProps & {
|
|
48
|
+
tabPressEventRecorder: FixedSizeStack<UIEvent>;
|
|
49
|
+
InnerTabBar: InnerTabBarType;
|
|
50
|
+
source: string;
|
|
51
|
+
}) {
|
|
52
|
+
const startTimer = useStartProfiler();
|
|
53
|
+
const errorHandler = useErrorHandler();
|
|
54
|
+
|
|
55
|
+
const wrappedNavigation = useMemo(() => {
|
|
56
|
+
const wrappedNavigation = Object.create(navigation);
|
|
57
|
+
|
|
58
|
+
const emit: typeof navigation.emit = event => {
|
|
59
|
+
if (event.type === 'tabPress') {
|
|
60
|
+
const lastRecordedEvent = tabPressEventRecorder.pop();
|
|
61
|
+
if (!lastRecordedEvent || !('timestamp' in lastRecordedEvent.nativeEvent)) {
|
|
62
|
+
errorHandler(new MissingTabBarTimestampError(DESTINATION_SCREEN_NAME_PLACEHOLDER));
|
|
63
|
+
}
|
|
64
|
+
const uiEvent =
|
|
65
|
+
lastRecordedEvent && 'timestamp' in lastRecordedEvent.nativeEvent
|
|
66
|
+
? {
|
|
67
|
+
nativeEvent: {
|
|
68
|
+
timestamp: lastRecordedEvent.nativeEvent.timestamp,
|
|
69
|
+
},
|
|
70
|
+
}
|
|
71
|
+
: undefined;
|
|
72
|
+
|
|
73
|
+
startTimer({
|
|
74
|
+
source,
|
|
75
|
+
uiEvent,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return navigation.emit(event);
|
|
79
|
+
};
|
|
80
|
+
wrappedNavigation.emit = emit;
|
|
81
|
+
return wrappedNavigation;
|
|
82
|
+
}, [errorHandler, navigation, source, startTimer, tabPressEventRecorder]);
|
|
83
|
+
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
85
|
+
// @ts-ignore
|
|
86
|
+
return <InnerTabBar {...rest} navigation={wrappedNavigation} />;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export default function createProfiledBottomTabNavigator<
|
|
90
|
+
TParamList extends {[key: string]: {[key: string]: unknown} | undefined},
|
|
91
|
+
>({source = DEFAULT_SOURCE_NAME}: {source?: string} = {}) {
|
|
92
|
+
const tabPressEventRecorder = new FixedSizeStack<UIEvent>(1);
|
|
93
|
+
const Tab = createBottomTabNavigator<TParamList>();
|
|
94
|
+
|
|
95
|
+
function buildProfiledTabBar({
|
|
96
|
+
navigation,
|
|
97
|
+
InnerTabBar = BottomTabBar,
|
|
98
|
+
...rest
|
|
99
|
+
}: BottomTabBarProps & {
|
|
100
|
+
InnerTabBar?: InnerTabBarType;
|
|
101
|
+
}): React.ReactNode {
|
|
102
|
+
return (
|
|
103
|
+
<ProfiledTabBarComponent
|
|
104
|
+
navigation={navigation}
|
|
105
|
+
tabPressEventRecorder={tabPressEventRecorder}
|
|
106
|
+
InnerTabBar={InnerTabBar}
|
|
107
|
+
source={source}
|
|
108
|
+
{...rest}
|
|
109
|
+
/>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const ProfiledNavigator: (typeof Tab)['Navigator'] = props => {
|
|
114
|
+
return (
|
|
115
|
+
<Tab.Navigator
|
|
116
|
+
{...props}
|
|
117
|
+
tabBar={tabBarProps => buildProfiledTabBar({...tabBarProps, InnerTabBar: props.tabBar})}
|
|
118
|
+
/>
|
|
119
|
+
);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
function buildProfiledBottomTabBarButton<T extends TouchableProps = TouchableProps>({
|
|
123
|
+
Touchable,
|
|
124
|
+
}: {
|
|
125
|
+
Touchable?: React.ComponentType<T>;
|
|
126
|
+
} = {}) {
|
|
127
|
+
const ProfiledTouchable = ({onPress, style, children, ...rest}: T) => {
|
|
128
|
+
const profilerStartingOnPress = useCallback(
|
|
129
|
+
(event: React.MouseEvent<HTMLAnchorElement, MouseEvent> | GestureResponderEvent) => {
|
|
130
|
+
tabPressEventRecorder.push(event);
|
|
131
|
+
onPress?.(event);
|
|
132
|
+
},
|
|
133
|
+
[onPress],
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
const TouchableComponent = Touchable ?? TouchableWithoutFeedback;
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
<TouchableComponent onPress={profilerStartingOnPress} {...rest}>
|
|
142
|
+
<View style={style}>{children}</View>
|
|
143
|
+
</TouchableComponent>
|
|
144
|
+
);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
return ProfiledTouchable;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const ProfiledTab: typeof Tab = Object.create(Tab);
|
|
151
|
+
ProfiledTab.Navigator = ProfiledNavigator;
|
|
152
|
+
|
|
153
|
+
return {Tab: ProfiledTab, buildProfiledBottomTabBarButton};
|
|
154
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {default as createProfiledBottomTabNavigator} from './createProfiledBottomTabNavigator';
|