appium-android-driver 4.41.2 → 4.43.2
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/README.md +19 -123
- package/build/index.js +8 -7
- package/build/lib/bootstrap.js +1 -1
- package/build/lib/commands/context.js +2 -2
- package/build/lib/commands/file-actions.js +3 -3
- package/build/lib/commands/touch.js +56 -1
- package/build/lib/driver.js +8 -5
- package/build/lib/uiautomator.js +1 -1
- package/build/lib/webview-helpers.js +16 -5
- package/index.js +6 -3
- package/lib/.DS_Store +0 -0
- package/lib/commands/context.js +1 -1
- package/lib/commands/file-actions.js +8 -2
- package/lib/commands/touch.js +51 -1
- package/lib/driver.js +12 -5
- package/lib/webview-helpers.js +21 -3
- package/package.json +8 -9
package/README.md
CHANGED
|
@@ -11,16 +11,20 @@ Appium Android Driver is a test automation tool for Android devices. Appium Andr
|
|
|
11
11
|
|
|
12
12
|
*Note*: Issue tracking for this repo has been disabled. Please use the [main Appium issue tracker](https://github.com/appium/appium/issues) instead.
|
|
13
13
|
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
## Deprecation Notice
|
|
15
|
+
|
|
16
|
+
This driver is obsolete and should _not_ be used to automate devices running Android version
|
|
17
|
+
6.0 (codename Marshmallow, API level 23) or greater.
|
|
18
|
+
Consider using [UIAutomator2](https://github.com/appium/appium-uiautomator2-driver) or
|
|
19
|
+
[Espresso](https://github.com/appium/appium-espresso-driver) drivers for such purpose instead.
|
|
20
|
+
Along with the fact that Android Driver is obsolete, parts of its codebase are inherited
|
|
21
|
+
by the aforementioned drivers, so the project itself is still being partially maintained.
|
|
18
22
|
|
|
19
23
|
## Usage
|
|
20
24
|
|
|
21
25
|
Import Android Driver, set [desired capabilities](http://appium.io/docs/en/writing-running-appium/caps/index.html#android-only) and create a session:
|
|
22
26
|
|
|
23
|
-
```
|
|
27
|
+
```js
|
|
24
28
|
import { AndroidDriver } from `appium-android-driver`
|
|
25
29
|
|
|
26
30
|
let defaultCaps = {
|
|
@@ -33,7 +37,7 @@ let driver = new AndroidDriver();
|
|
|
33
37
|
await driver.createSession(defaultCaps);
|
|
34
38
|
```
|
|
35
39
|
Run commands:
|
|
36
|
-
```
|
|
40
|
+
```js
|
|
37
41
|
await driver.setOrientation('LANDSCAPE');
|
|
38
42
|
console.log(await driver.getOrientation()); // -> 'LANDSCAPE'
|
|
39
43
|
```
|
|
@@ -60,7 +64,7 @@ and return the SubProcess. `startDetector` and `extraParams` are optional argume
|
|
|
60
64
|
`shutdown` will kill UiAutomator process on the device and also kill the subProcess.
|
|
61
65
|
|
|
62
66
|
|
|
63
|
-
```
|
|
67
|
+
```js
|
|
64
68
|
import UiAutomator from 'lib/uiautomator';
|
|
65
69
|
import ADB from 'appium-adb';
|
|
66
70
|
|
|
@@ -71,10 +75,10 @@ let startDetector = (s) => { return /Appium Socket Server Ready/.test(s); };
|
|
|
71
75
|
await uiAutomator.start('foo/bar.jar', 'io.appium.android.bootstrap.Bootstrap',
|
|
72
76
|
startDetector, '-e', 'disableAndroidWatchers', true);
|
|
73
77
|
await uiAutomator.shutdown();
|
|
74
|
-
|
|
75
78
|
```
|
|
76
79
|
|
|
77
80
|
### Specifying and selecting devices/emulators
|
|
81
|
+
|
|
78
82
|
The driver will attempt to connect to a device/emulator based on these properties in the `desiredCapabilities` object:
|
|
79
83
|
|
|
80
84
|
1. `avd`: Launch or connect to the emulator with the given name.
|
|
@@ -85,120 +89,6 @@ If none of these capabilities are given, the driver will connect to the first de
|
|
|
85
89
|
|
|
86
90
|
If more than one of these capabilities are given, the driver will only use first the capability in the order above. That is, `avd` takes priority over `udid`, which takes priority over `platformVersion`.
|
|
87
91
|
|
|
88
|
-
## Commands
|
|
89
|
-
| Command |
|
|
90
|
-
|----------------------------|
|
|
91
|
-
| `activateIMEEngine` |
|
|
92
|
-
| `availableIMEEngines` |
|
|
93
|
-
| `back` |
|
|
94
|
-
| `background` |
|
|
95
|
-
| `clear` |
|
|
96
|
-
| `click` |
|
|
97
|
-
| `complexTap` |
|
|
98
|
-
| `deactivateIMEEngine` |
|
|
99
|
-
| `defaultContextName` |
|
|
100
|
-
| `defaultWebviewName` |
|
|
101
|
-
| `doKey` |
|
|
102
|
-
| `doTouchAction` |
|
|
103
|
-
| `doTouchDrag` |
|
|
104
|
-
| `drag` |
|
|
105
|
-
| `elementDisplayed` |
|
|
106
|
-
| `elementEnabled` |
|
|
107
|
-
| `elementSelected` |
|
|
108
|
-
| `fakeFlick` |
|
|
109
|
-
| `fakeFlickElement` |
|
|
110
|
-
| `findElOrEls` |
|
|
111
|
-
| `fixRelease` |
|
|
112
|
-
| `flick` |
|
|
113
|
-
| `getActiveIMEEngine` |
|
|
114
|
-
| `getAlertText` |
|
|
115
|
-
| `getAttribute` |
|
|
116
|
-
| `getContexts` |
|
|
117
|
-
| `getCurrentActivity` |
|
|
118
|
-
| `getCurrentContext` |
|
|
119
|
-
| `getDeviceTime` |
|
|
120
|
-
| `getDisplayDensity` |
|
|
121
|
-
| `getLocationInView` |
|
|
122
|
-
| `getLog` |
|
|
123
|
-
| `getLogTypes` |
|
|
124
|
-
| `getName` |
|
|
125
|
-
| `getNetworkConnection` |
|
|
126
|
-
| `getOrientation` |
|
|
127
|
-
| `getPageSource` |
|
|
128
|
-
| `getScreenshot` |
|
|
129
|
-
| `getSize` |
|
|
130
|
-
| `getElementRect` |
|
|
131
|
-
| `getStrings` |
|
|
132
|
-
| `getSystemBars` |
|
|
133
|
-
| `getText` |
|
|
134
|
-
| `getWindowSize` |
|
|
135
|
-
| `getWindowRect` |
|
|
136
|
-
| `hideKeyboard` |
|
|
137
|
-
| `installApp` |
|
|
138
|
-
| `isAppInstalled` |
|
|
139
|
-
| `isIMEActivated` |
|
|
140
|
-
| `isKeyboardShown` |
|
|
141
|
-
| `isLocked` |
|
|
142
|
-
| `isWebContext` |
|
|
143
|
-
| `keyevent` |
|
|
144
|
-
| `keys` |
|
|
145
|
-
| `lock` |
|
|
146
|
-
| `longPressKeyCode` |
|
|
147
|
-
| `onChromedriverStop` |
|
|
148
|
-
| `openNotifications` |
|
|
149
|
-
| `openSettingsActivity` |
|
|
150
|
-
| `parseTouch` |
|
|
151
|
-
| `performGesture` |
|
|
152
|
-
| `performMultiAction` |
|
|
153
|
-
| `performTouch` |
|
|
154
|
-
| `pinchClose` |
|
|
155
|
-
| `pinchOpen` |
|
|
156
|
-
| `postAcceptAlert` |
|
|
157
|
-
| `postDismissAlert` |
|
|
158
|
-
| `pressKeyCode` |
|
|
159
|
-
| `pullFile` |
|
|
160
|
-
| `pullFolder` |
|
|
161
|
-
| `pushFile` |
|
|
162
|
-
| `removeApp` |
|
|
163
|
-
| `replaceValue` |
|
|
164
|
-
| `reset` |
|
|
165
|
-
| `setAlertText` |
|
|
166
|
-
| `setContext` |
|
|
167
|
-
| `setGeoLocation` |
|
|
168
|
-
| `setLocation` |
|
|
169
|
-
| `setNetworkConnection` |
|
|
170
|
-
| `setOrientation` |
|
|
171
|
-
| `setValue` |
|
|
172
|
-
| `setUrl` |
|
|
173
|
-
| `startActivity` |
|
|
174
|
-
| `startChromedriverProxy` |
|
|
175
|
-
| `stopChromedriverProxies` |
|
|
176
|
-
| `suspendChromedriverProxy` |
|
|
177
|
-
| `swipe` |
|
|
178
|
-
| `tap` |
|
|
179
|
-
| `toggleData` |
|
|
180
|
-
| `toggleFlightMode` |
|
|
181
|
-
| `toggleLocationServices` |
|
|
182
|
-
| `toggleSetting` |
|
|
183
|
-
| `toggleWiFi` |
|
|
184
|
-
| `touchDown` |
|
|
185
|
-
| `touchLongClick` |
|
|
186
|
-
| `touchMove` |
|
|
187
|
-
| `touchUp` |
|
|
188
|
-
| `unlock` |
|
|
189
|
-
| `unlockWithHelperApp` |
|
|
190
|
-
| `unlockWithUIAutomation` |
|
|
191
|
-
| `wrapBootstrapDisconnect` |
|
|
192
|
-
| `fingerprint` |
|
|
193
|
-
| `sendSMS` |
|
|
194
|
-
| `sensorSet` |
|
|
195
|
-
| `gsmCall` |
|
|
196
|
-
| `gsmSignal` |
|
|
197
|
-
| `gsmVoice` |
|
|
198
|
-
| `powerAC` |
|
|
199
|
-
| `powerCapacity` |
|
|
200
|
-
| `networkSpeed` |
|
|
201
|
-
|
|
202
92
|
## API Notes
|
|
203
93
|
|
|
204
94
|
`lock` behaves differently in Android than it does in iOS. In Android it does not take any arguments, and locks the screen and returns immediately.
|
|
@@ -240,6 +130,12 @@ npm run build:bootstrap
|
|
|
240
130
|
The AppiumBootstrap.jar file is committed to source, and isn't built during the publish step. Any updates to it
|
|
241
131
|
need to be committed. To build the jar, run `gulp ant`.
|
|
242
132
|
|
|
133
|
+
### Install Dependencies
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
npm run clean
|
|
137
|
+
```
|
|
138
|
+
|
|
243
139
|
### Transpile ES2015 code
|
|
244
140
|
|
|
245
141
|
```
|
|
@@ -252,7 +148,7 @@ npm run build
|
|
|
252
148
|
npm run watch
|
|
253
149
|
```
|
|
254
150
|
|
|
255
|
-
### Test
|
|
151
|
+
### Unit Test
|
|
256
152
|
|
|
257
153
|
```
|
|
258
154
|
npm test
|
package/build/index.js
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
5
5
|
|
|
6
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
7
|
-
|
|
8
6
|
Object.defineProperty(exports, "__esModule", {
|
|
9
7
|
value: true
|
|
10
8
|
});
|
|
@@ -12,8 +10,6 @@ exports.SETTINGS_HELPER_PKG_ID = exports.CHROMIUM_WIN = exports.WEBVIEW_BASE = e
|
|
|
12
10
|
|
|
13
11
|
require("source-map-support/register");
|
|
14
12
|
|
|
15
|
-
var _yargs = _interopRequireDefault(require("yargs"));
|
|
16
|
-
|
|
17
13
|
var _asyncbox = require("asyncbox");
|
|
18
14
|
|
|
19
15
|
var server = _interopRequireWildcard(require("./lib/server"));
|
|
@@ -36,8 +32,13 @@ const DEFAULT_HOST = 'localhost';
|
|
|
36
32
|
const DEFAULT_PORT = 4723;
|
|
37
33
|
|
|
38
34
|
async function main() {
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
const getArgValue = argName => {
|
|
36
|
+
const argIndex = process.argv.indexOf(argName);
|
|
37
|
+
return argIndex > 0 ? process.argv[argIndex + 1] : null;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
|
|
41
|
+
const host = getArgValue('--host') || DEFAULT_HOST;
|
|
41
42
|
return await startServer(port, host);
|
|
42
43
|
}
|
|
43
44
|
|
|
@@ -79,4 +80,4 @@ var _default = AndroidDriver;
|
|
|
79
80
|
exports.default = _default;require('source-map-support').install();
|
|
80
81
|
|
|
81
82
|
|
|
82
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbInN0YXJ0U2VydmVyIiwic2VydmVyIiwiREVGQVVMVF9IT1NUIiwiREVGQVVMVF9QT1JUIiwibWFpbiIsImdldEFyZ1ZhbHVlIiwiYXJnTmFtZSIsImFyZ0luZGV4IiwicHJvY2VzcyIsImFyZ3YiLCJpbmRleE9mIiwicG9ydCIsInBhcnNlSW50IiwiaG9zdCIsInJlcXVpcmUiLCJtb2R1bGUiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQXhCQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBa0JDLE1BQXhCOztBQUVBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjs7QUFFQSxlQUFlQyxJQUFmLEdBQXVCO0FBQ3JCLFFBQU1DLFdBQVcsR0FBSUMsT0FBRCxJQUFhO0FBQy9CLFVBQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLE9BQWIsQ0FBcUJKLE9BQXJCLENBQWpCO0FBQ0EsV0FBT0MsUUFBUSxHQUFHLENBQVgsR0FBZUMsT0FBTyxDQUFDQyxJQUFSLENBQWFGLFFBQVEsR0FBRyxDQUF4QixDQUFmLEdBQTRDLElBQW5EO0FBQ0QsR0FIRDs7QUFJQSxRQUFNSSxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDLFFBQUQsQ0FBWixFQUF3QixFQUF4QixDQUFSLElBQXVDRixZQUFwRDtBQUNBLFFBQU1VLElBQUksR0FBR1IsV0FBVyxDQUFDLFFBQUQsQ0FBWCxJQUF5QkgsWUFBdEM7QUFDQSxTQUFPLE1BQU1GLFdBQVcsQ0FBQ1csSUFBRCxFQUFPRSxJQUFQLENBQXhCO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtBQUMzQiwwQkFBU1gsSUFBVDtBQUNEOztBQVVELE1BQU07QUFBRVksRUFBQUE7QUFBRixJQUFvQkMsTUFBMUI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxPQUFPLEVBQUVDLGNBQVg7QUFBMkJDLEVBQUFBLFVBQTNCO0FBQXVDQyxFQUFBQSxXQUF2QztBQUFvREMsRUFBQUEsWUFBcEQ7QUFDRUMsRUFBQUE7QUFERixJQUNtQkMsT0FEekI7Ozs7OztBQUVBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUEyQkMsSUFBakM7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxRQUFRLEVBQUVDO0FBQVosSUFBZ0NDLFlBQXRDOztBQUNBLE1BQU07QUFBRVgsRUFBQUEsT0FBTyxFQUFFWSxjQUFYO0FBQTJCQyxFQUFBQTtBQUEzQixJQUFzREMsa0JBQTVEOzs7ZUFHZWhCLGEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgeyBhc3luY2lmeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL2xpYi9zZXJ2ZXInO1xuXG5cbmNvbnN0IHsgc3RhcnRTZXJ2ZXIgfSA9IHNlcnZlcjtcblxuY29uc3QgREVGQVVMVF9IT1NUID0gJ2xvY2FsaG9zdCc7XG5jb25zdCBERUZBVUxUX1BPUlQgPSA0NzIzO1xuXG5hc3luYyBmdW5jdGlvbiBtYWluICgpIHtcbiAgY29uc3QgZ2V0QXJnVmFsdWUgPSAoYXJnTmFtZSkgPT4ge1xuICAgIGNvbnN0IGFyZ0luZGV4ID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoYXJnTmFtZSk7XG4gICAgcmV0dXJuIGFyZ0luZGV4ID4gMCA/IHByb2Nlc3MuYXJndlthcmdJbmRleCArIDFdIDogbnVsbDtcbiAgfTtcbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGdldEFyZ1ZhbHVlKCctLXBvcnQnKSwgMTApIHx8IERFRkFVTFRfUE9SVDtcbiAgY29uc3QgaG9zdCA9IGdldEFyZ1ZhbHVlKCctLWhvc3QnKSB8fCBERUZBVUxUX0hPU1Q7XG4gIHJldHVybiBhd2FpdCBzdGFydFNlcnZlcihwb3J0LCBob3N0KTtcbn1cblxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGFzeW5jaWZ5KG1haW4pO1xufVxuXG5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5cbmNvbnN0IHsgQW5kcm9pZERyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBoZWxwZXJzOiB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sIFdFQlZJRVdfQkFTRSxcbiAgICAgICAgQ0hST01JVU1fV0lOIH0gPSB3ZWJ2aWV3O1xuY29uc3QgeyBjb21tb25DYXBDb25zdHJhaW50cyB9ID0gY2FwcztcbmNvbnN0IHsgY29tbWFuZHM6IGFuZHJvaWRDb21tYW5kcyB9ID0gY29tbWFuZEluZGV4O1xuY29uc3QgeyBoZWxwZXJzOiBhbmRyb2lkSGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9ID0gYW5kcm9pZEhlbHBlckluZGV4O1xuXG5cbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG5leHBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBBbmRyb2lkRHJpdmVyLCBzdGFydFNlcnZlcixcbiAgY29tbW9uQ2FwQ29uc3RyYWludHMsIHdlYnZpZXdIZWxwZXJzLCBOQVRJVkVfV0lOLCBXRUJWSUVXX1dJTixcbiAgV0VCVklFV19CQVNFLCBDSFJPTUlVTV9XSU4sIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsXG59O1xuIl0sImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZVJvb3QiOiIuLiJ9
|
package/build/lib/bootstrap.js
CHANGED
|
@@ -228,4 +228,4 @@ var _default = AndroidBootstrap;
|
|
|
228
228
|
exports.default = _default;require('source-map-support').install();
|
|
229
229
|
|
|
230
230
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ib290c3RyYXAuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiQ09NTUFORF9UWVBFUyIsIkFDVElPTiIsIlNIVVRET1dOIiwiU0VORF9DT01NQU5EX1RJTUVPVVQiLCJBbmRyb2lkQm9vdHN0cmFwIiwiY29uc3RydWN0b3IiLCJhZGIiLCJzeXN0ZW1Qb3J0Iiwid2ViU29ja2V0IiwidW5kZWZpbmVkIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJfb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlIiwicmVqZWN0IiwiQiIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImNhbmNlbCIsInN0YXJ0IiwiYXBwUGFja2FnZSIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJhY2NlcHRTc2xDZXJ0cyIsInJvb3REaXIiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInN0YXJ0RGV0ZWN0b3IiLCJzIiwidGVzdCIsImJvb3RzdHJhcEphciIsImluaXQiLCJmb3J3YXJkUG9ydCIsInByb2Nlc3MiLCJ1aUF1dG9tYXRvciIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwiYWxlcnRSZSIsImRlYnVnIiwic29ja2V0cyIsImVtaXQiLCJtZXNzYWdlIiwic3Rkb3V0TGluZXMiLCJzcGxpdCIsInVpYXV0b0xvZyIsImxpbmUiLCJ0cmltIiwiaW5uZXJMaW5lIiwiZXhlYyIsImxvZ01ldGhvZCIsImluZm8iLCJiaW5kIiwic3RkZXJyTGluZXMiLCJzb2NrZXRDbGllbnQiLCJuZXQiLCJjb25uZWN0IiwiZXJyIiwiRXJyb3IiLCJvbmNlIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRDb21tYW5kIiwidHlwZSIsImV4dHJhIiwiY21kIiwiT2JqZWN0IiwiYXNzaWduIiwiY21kSnNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJ3cml0ZSIsInNldEVuY29kaW5nIiwic3RyZWFtRGF0YSIsInNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIiLCJkYXRhIiwiY2xlYXJUaW1lb3V0IiwicGFyc2UiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGF0dXMiLCJ2YWx1ZSIsImlzU3RyaW5nIiwiZXJyb3IiLCJzdGFjayIsInNldFRpbWVvdXQiLCJlcnJNc2ciLCJzZW5kQWN0aW9uIiwiYWN0aW9uIiwicGFyYW1zIiwic2h1dGRvd24iLCJ3YXJuIiwiVWlBdXRvbWF0b3IiLCJFVkVOVF9DSEFOR0VEIiwibXNnIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiaWdub3JlIiwiX2lnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLGtCQUFqQixDQUFaOztBQUNBLE1BQU1DLGFBQWEsR0FBRztBQUNwQkMsRUFBQUEsTUFBTSxFQUFFLFFBRFk7QUFFcEJDLEVBQUFBLFFBQVEsRUFBRTtBQUZVLENBQXRCOztBQUlBLE1BQU1DLG9CQUFvQixHQUFHLElBQUksRUFBSixHQUFTLElBQXRDOztBQUVBLE1BQU1DLGdCQUFOLENBQXVCO0FBQ3JCQyxFQUFBQSxXQUFXLENBQUVDLEdBQUYsRUFBT0MsVUFBVSxHQUFHLElBQXBCLEVBQTBCQyxTQUFTLEdBQUdDLFNBQXRDLEVBQWlEO0FBQzFELFNBQUtILEdBQUwsR0FBV0EsR0FBWDtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxTQUFLRSx3QkFBTCxHQUFnQyxLQUFoQztBQUNEOztBQUVELE1BQUlDLG9CQUFKLEdBQTRCO0FBQzFCLFFBQUksQ0FBQyxLQUFLQyw0QkFBVixFQUF3QztBQUN0QyxVQUFJQyxNQUFKO0FBQ0EsV0FBS0QsNEJBQUwsR0FBb0MsSUFBSUUsaUJBQUosQ0FBTSxTQUFTRiw0QkFB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bXBvcnQgVWlBdXRvbWF0b3IgZnJvbSAnLi91aWF1dG9tYXRvcic7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckZyb21Db2RlIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdBbmRyb2lkQm9vdHN0cmFwJyk7XG5jb25zdCBDT01NQU5EX1RZUEVTID0ge1xuICBBQ1RJT046ICdhY3Rpb24nLFxuICBTSFVURE9XTjogJ3NodXRkb3duJ1xufTtcbmNvbnN0IFNFTkRfQ09NTUFORF9USU1FT1VUID0gMSAqIDYwICogMTAwMDtcblxuY2xhc3MgQW5kcm9pZEJvb3RzdHJhcCB7XG4gIGNvbnN0cnVjdG9yIChhZGIsIHN5c3RlbVBvcnQgPSA0NzI0LCB3ZWJTb2NrZXQgPSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLnN5c3RlbVBvcnQgPSBzeXN0ZW1Qb3J0O1xuICAgIHRoaXMud2ViU29ja2V0ID0gd2ViU29ja2V0O1xuICAgIHRoaXMuaWdub3JlVW5leHBlY3RlZFNodXRkb3duID0gZmFsc2U7XG4gIH1cblxuICBnZXQgb25VbmV4cGVjdGVkU2h1dGRvd24gKCkge1xuICAgIGlmICghdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlKSB7XG4gICAgICBsZXQgcmVqZWN0O1xuICAgICAgdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlID0gbmV3IEIoZnVuY3Rpb24gX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZSAoX3Jlc29sdmUsIF9yZWplY3QpIHtcbiAgICAgICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlLmNhbmNlbCA9IHJlamVjdDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChhcHBQYWNrYWdlLCBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzID0gZmFsc2UsIGFjY2VwdFNzbENlcnRzID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm9vdERpciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuICAgICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzKSA9PiAvQXBwaXVtIFNvY2tldCBTZXJ2ZXIgUmVhZHkvLnRlc3Qocyk7XG4gICAgICBjb25zdCBib290c3RyYXBKYXIgPSBwYXRoLnJlc29sdmUocm9vdERpciwgJ2Jvb3RzdHJhcCcsICdiaW4nLCAnQXBwaXVtQm9vdHN0cmFwLmphcicpO1xuXG4gICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMuc3lzdGVtUG9ydCwgNDcyNCk7XG4gICAgICB0aGlzLnByb2Nlc3MgPSBhd2FpdCB0aGlzLnVpQXV0b21hdG9yLnN0YXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICBib290c3RyYXBKYXIsICdpby5hcHBpdW0uYW5kcm9pZC5ib290c3RyYXAuQm9vdHN0cmFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREZXRlY3RvciwgJy1lJywgJ3BrZycsIGFwcFBhY2thZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICctZScsICdkaXNhYmxlQW5kcm9pZFdhdGNoZXJzJywgZGlzYWJsZUFuZHJvaWRXYXRjaGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgJy1lJywgJ2FjY2VwdFNzbENlcnRzJywgYWNjZXB0U3NsQ2VydHMpO1xuXG4gICAgICAvLyBwcm9jZXNzIHRoZSBvdXRwdXRcbiAgICAgIHRoaXMucHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsZXJ0UmUgPSAvRW1pdHRpbmcgc3lzdGVtIGFsZXJ0IG1lc3NhZ2UvO1xuICAgICAgICBpZiAoYWxlcnRSZS50ZXN0KHN0ZG91dCkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ0VtaXR0aW5nIGFsZXJ0IG1lc3NhZ2UuLi4nKTtcbiAgICAgICAgICBpZiAodGhpcy53ZWJTb2NrZXQpIHtcbiAgICAgICAgICAgIHRoaXMud2ViU29ja2V0LnNvY2tldHMuZW1pdCgnYWxlcnQnLCB7bWVzc2FnZTogc3Rkb3V0fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGJvb3RzdHJhcCBsb2dnZXIgd3JhcHMgaXRzIG93biBsb2cgbGluZXMgd2l0aFxuICAgICAgICAvLyBbQVBQSVVNLVVJQVVUT10gLi4uIFtBUFBJVU0tVUlBVVRPXVxuICAgICAgICAvLyBhbmQgbGVhdmVzIGFjdHVhbCBVaUF1dG9tYXRvciBsb2dzIGFzIHRoZXkgYXJlXG4gICAgICAgIGxldCBzdGRvdXRMaW5lcyA9IChzdGRvdXQgfHwgJycpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QgdWlhdXRvTG9nID0gL1xcW0FQUElVTS1VSUFVVE9cXF0oLispXFxbXFwvQVBQSVVNLVVJQVVUT1xcXS87XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0TGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS50cmltKCkpIHtcbiAgICAgICAgICAgIGlmICh1aWF1dG9Mb2cudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICBsZXQgaW5uZXJMaW5lID0gdWlhdXRvTG9nLmV4ZWMobGluZSlbMV0udHJpbSgpO1xuICAgICAgICAgICAgICBsZXQgbG9nTWV0aG9kID0gbG9nLmluZm8uYmluZChsb2cpO1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgYm9vdHN0cmFwIGxvZyBjb25zaWRlcnMgc29tZXRoaW5nIGRlYnVnLCBsb2cgdGhhdCBhc1xuICAgICAgICAgICAgICAvLyBkZWJ1ZyBhbmQgbm90IGluZm9cbiAgICAgICAgICAgICAgaWYgKC9cXFtkZWJ1Z1xcXS8udGVzdChpbm5lckxpbmUpKSB7XG4gICAgICAgICAgICAgICAgbG9nTWV0aG9kID0gbG9nLmRlYnVnLmJpbmQobG9nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2dNZXRob2QoYFtCT09UU1RSQVAgTE9HXSAke2lubmVyTGluZX1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgW1VJQVVUTyBTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RkZXJyTGluZXMgPSAoc3RkZXJyIHx8ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3RkZXJyTGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS50cmltKCkpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgW1VJQVVUTyBTVERFUlJdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbmx5IHJldHVybiB3aGVuIHRoZSBzb2NrZXQgY2xpZW50IGhhcyBjb25uZWN0ZWRcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQgPSBuZXQuY29ubmVjdCh0aGlzLnN5c3RlbVBvcnQpO1xuICAgICAgICAgIC8vIFdpbmRvd3M6IHRoZSBzb2NrZXQgZXJyb3JzIG91dCB3aGVuIEFEQiByZXN0YXJ0cy4gTGV0J3MgY2F0Y2ggaXQgdG8gYXZvaWQgY3Jhc2hpbmcuXG4gICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93bikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFuZHJvaWQgYm9vdHN0cmFwIHNvY2tldCBjcmFzaGVkOiAke2Vycn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNvY2tldENsaWVudC5vbmNlKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgbG9nLmluZm8oJ0FuZHJvaWQgYm9vdHN0cmFwIHNvY2tldCBpcyBub3cgY29ubmVjdGVkJyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBFcnJvciBvY2N1cmVkIHdoaWxlIHN0YXJ0aW5nIEFuZHJvaWRCb290c3RyYXAuIE9yaWdpbmFsIGVycm9yOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kQ29tbWFuZCAodHlwZSwgZXh0cmEgPSB7fSkge1xuICAgIGlmICghdGhpcy5zb2NrZXRDbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseScpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgY21kID0gT2JqZWN0LmFzc2lnbih7Y21kOiB0eXBlfSwgZXh0cmEpO1xuICAgICAgbGV0IGNtZEpzb24gPSBgJHtKU09OLnN0cmluZ2lmeShjbWQpfSBcXG5gO1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIGNvbW1hbmQgdG8gYW5kcm9pZDogJHtfLnRydW5jYXRlKGNtZEpzb24sIHtsZW5ndGg6IDEwMDB9KS50cmltKCl9YCk7XG4gICAgICB0aGlzLnNvY2tldENsaWVudC53cml0ZShjbWRKc29uKTtcbiAgICAgIHRoaXMuc29ja2V0Q2xpZW50LnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICBsZXQgc3RyZWFtRGF0YSA9ICcnO1xuICAgICAgbGV0IHNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIgPSBudWxsO1xuICAgICAgdGhpcy5zb2NrZXRDbGllbnQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc2VuZENvbW1hbmRUaW1lb3V0SGFuZGxlcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dChzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIGNvbW1hbmQgcmVzdWx0IGZyb20gYm9vdHN0cmFwJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RyZWFtRGF0YSA9IEpTT04ucGFyc2Uoc3RyZWFtRGF0YSArIGRhdGEpO1xuICAgICAgICAgIC8vIHdlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgSlNPTiBzbyB3ZSd2ZSBnb3QgYWxsIHRoZSBkYXRhLFxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc29ja2V0IGxpc3RlbmVyIGFuZCBldmFsdWF0ZVxuICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICAgIGlmIChzdHJlYW1EYXRhLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoc3RyZWFtRGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlamVjdChlcnJvckZyb21Db2RlKHN0cmVhbURhdGEuc3RhdHVzLCBzdHJlYW1EYXRhLnZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhzdHJlYW1EYXRhKSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdHb3QgYW4gdW5leHBlY3RlZCBlcnJvciBpbnNpZGUgc29ja2V0IGxpc3RlbmVyJyk7XG4gICAgICAgICAgICBsb2cuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JGcm9tQ29kZSgxMywgZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBTdHJlYW0gc3RpbGwgbm90IGNvbXBsZXRlLCB3YWl0aW5nIHVwIHRvICR7U0VORF9DT01NQU5EX1RJTUVPVVR9bXMgZm9yIHRoZSBkYXRhIHRvIGFycml2ZWApO1xuICAgICAgICAgIHN0cmVhbURhdGEgKz0gZGF0YTtcbiAgICAgICAgICBzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJNc2cgPSBgU2VydmVyIHNvY2tldCBzdG9wcGVkIHJlc3BvbmRpbmcuIFRoZSByZWNlbnQgcmVzcG9uc2Ugd2FzICcke3N0cmVhbURhdGF9J2A7XG4gICAgICAgICAgICBsb2cuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yRnJvbUNvZGUoMTMsIGVyck1zZykpO1xuICAgICAgICAgIH0sIFNFTkRfQ09NTUFORF9USU1FT1VUKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZW5kQWN0aW9uIChhY3Rpb24sIHBhcmFtcyA9IHt9KSB7XG4gICAgbGV0IGV4dHJhID0ge2FjdGlvbiwgcGFyYW1zfTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChDT01NQU5EX1RZUEVTLkFDVElPTiwgZXh0cmEpO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24gKCkge1xuICAgIGlmICghdGhpcy51aUF1dG9tYXRvcikge1xuICAgICAgbG9nLndhcm4oJ0Nhbm5vdCBzaHV0IGRvd24gQW5kcm9pZCBib290c3RyYXA7IGl0IGhhcyBhbHJlYWR5IHNodXQgZG93bicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBsaXN0bmVycyBzbyB3ZSBkb24ndCB0cmlnZ2VyIHVuZXhwZWN0ZWQgc2h1dGRvd25cbiAgICB0aGlzLnVpQXV0b21hdG9yLnJlbW92ZUFsbExpc3RlbmVycyhVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VEKTtcbiAgICBpZiAodGhpcy5zb2NrZXRDbGllbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoQ09NTUFORF9UWVBFUy5TSFVURE9XTik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudWlBdXRvbWF0b3Iuc2h1dGRvd24oKTtcbiAgICB0aGlzLnVpQXV0b21hdG9yID0gbnVsbDtcbiAgfVxuXG4gIC8vIHRoaXMgaGVscGVyIGZ1bmN0aW9uIG1ha2VzIHVuaXQgdGVzdGluZyBlYXNpZXIuXG4gIGFzeW5jIGluaXQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLnVpQXV0b21hdG9yID0gbmV3IFVpQXV0b21hdG9yKHRoaXMuYWRiKTtcblxuICAgIC8vIEhhbmRsZSB1bmV4cGVjdGVkIFVpQXV0b21hdG9yIHNodXRkb3duXG4gICAgdGhpcy51aUF1dG9tYXRvci5vbihVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMudWlBdXRvbWF0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLm9uVW5leHBlY3RlZFNodXRkb3duLmNhbmNlbChuZXcgRXJyb3IoJ1VpQVV0b21hdG9yIHNodXQgZG93biB1bmV4cGVjdGVkbHknKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXQgaWdub3JlVW5leHBlY3RlZFNodXRkb3duIChpZ25vcmUpIHtcbiAgICBsb2cuZGVidWcoYCR7aWdub3JlID8gJ0lnbm9yaW5nJyA6ICdXYXRjaGluZyBmb3InfSBib290c3RyYXAgZGlzY29ubmVjdGApO1xuICAgIHRoaXMuX2lnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biA9IGlnbm9yZTtcbiAgfVxuXG4gIGdldCBpZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gKCkge1xuICAgIHJldHVybiB0aGlzLl9pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd247XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZEJvb3RzdHJhcCwgQ09NTUFORF9UWVBFUyB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZEJvb3RzdHJhcDtcbiJdLCJmaWxlIjoibGliL2Jvb3RzdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9ib290c3RyYXAuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiQ09NTUFORF9UWVBFUyIsIkFDVElPTiIsIlNIVVRET1dOIiwiU0VORF9DT01NQU5EX1RJTUVPVVQiLCJBbmRyb2lkQm9vdHN0cmFwIiwiY29uc3RydWN0b3IiLCJhZGIiLCJzeXN0ZW1Qb3J0Iiwid2ViU29ja2V0IiwidW5kZWZpbmVkIiwiaWdub3JlVW5leHBlY3RlZFNodXRkb3duIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJfb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlIiwicmVqZWN0IiwiQiIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImNhbmNlbCIsInN0YXJ0IiwiYXBwUGFja2FnZSIsImRpc2FibGVBbmRyb2lkV2F0Y2hlcnMiLCJhY2NlcHRTc2xDZXJ0cyIsInJvb3REaXIiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsInN0YXJ0RGV0ZWN0b3IiLCJzIiwidGVzdCIsImJvb3RzdHJhcEphciIsImluaXQiLCJmb3J3YXJkUG9ydCIsInByb2Nlc3MiLCJ1aUF1dG9tYXRvciIsIm9uIiwic3Rkb3V0Iiwic3RkZXJyIiwiYWxlcnRSZSIsImRlYnVnIiwic29ja2V0cyIsImVtaXQiLCJtZXNzYWdlIiwic3Rkb3V0TGluZXMiLCJzcGxpdCIsInVpYXV0b0xvZyIsImxpbmUiLCJ0cmltIiwiaW5uZXJMaW5lIiwiZXhlYyIsImxvZ01ldGhvZCIsImluZm8iLCJiaW5kIiwic3RkZXJyTGluZXMiLCJzb2NrZXRDbGllbnQiLCJuZXQiLCJjb25uZWN0IiwiZXJyIiwiRXJyb3IiLCJvbmNlIiwiZXJyb3JBbmRUaHJvdyIsInNlbmRDb21tYW5kIiwidHlwZSIsImV4dHJhIiwiY21kIiwiT2JqZWN0IiwiYXNzaWduIiwiY21kSnNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJfIiwidHJ1bmNhdGUiLCJsZW5ndGgiLCJ3cml0ZSIsInNldEVuY29kaW5nIiwic3RyZWFtRGF0YSIsInNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIiLCJkYXRhIiwiY2xlYXJUaW1lb3V0IiwicGFyc2UiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdGF0dXMiLCJ2YWx1ZSIsImlzU3RyaW5nIiwiZXJyb3IiLCJzdGFjayIsInNldFRpbWVvdXQiLCJlcnJNc2ciLCJzZW5kQWN0aW9uIiwiYWN0aW9uIiwicGFyYW1zIiwic2h1dGRvd24iLCJ3YXJuIiwiVWlBdXRvbWF0b3IiLCJFVkVOVF9DSEFOR0VEIiwibXNnIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwiaWdub3JlIiwiX2lnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLGtCQUFqQixDQUFaOztBQUNBLE1BQU1DLGFBQWEsR0FBRztBQUNwQkMsRUFBQUEsTUFBTSxFQUFFLFFBRFk7QUFFcEJDLEVBQUFBLFFBQVEsRUFBRTtBQUZVLENBQXRCOztBQUlBLE1BQU1DLG9CQUFvQixHQUFHLElBQUksRUFBSixHQUFTLElBQXRDOztBQUVBLE1BQU1DLGdCQUFOLENBQXVCO0FBQ3JCQyxFQUFBQSxXQUFXLENBQUVDLEdBQUYsRUFBT0MsVUFBVSxHQUFHLElBQXBCLEVBQTBCQyxTQUFTLEdBQUdDLFNBQXRDLEVBQWlEO0FBQzFELFNBQUtILEdBQUwsR0FBV0EsR0FBWDtBQUNBLFNBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkEsU0FBakI7QUFDQSxTQUFLRSx3QkFBTCxHQUFnQyxLQUFoQztBQUNEOztBQUV1QixNQUFwQkMsb0JBQW9CLEdBQUk7QUFDMUIsUUFBSSxDQUFDLEtBQUtDLDRCQUFWLEVBQXdDO0FBQ3RDLFVBQUlDLE1BQUo7QUFDQSxXQUFLRCw0QkFBTCxHQUFvQyxJQUFJRSxpQkFBSixDQUFNLFNBQVNGLDRC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cnQgVWlBdXRvbWF0b3IgZnJvbSAnLi91aWF1dG9tYXRvcic7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckZyb21Db2RlIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcblxuXG5jb25zdCBsb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKCdBbmRyb2lkQm9vdHN0cmFwJyk7XG5jb25zdCBDT01NQU5EX1RZUEVTID0ge1xuICBBQ1RJT046ICdhY3Rpb24nLFxuICBTSFVURE9XTjogJ3NodXRkb3duJ1xufTtcbmNvbnN0IFNFTkRfQ09NTUFORF9USU1FT1VUID0gMSAqIDYwICogMTAwMDtcblxuY2xhc3MgQW5kcm9pZEJvb3RzdHJhcCB7XG4gIGNvbnN0cnVjdG9yIChhZGIsIHN5c3RlbVBvcnQgPSA0NzI0LCB3ZWJTb2NrZXQgPSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgICB0aGlzLnN5c3RlbVBvcnQgPSBzeXN0ZW1Qb3J0O1xuICAgIHRoaXMud2ViU29ja2V0ID0gd2ViU29ja2V0O1xuICAgIHRoaXMuaWdub3JlVW5leHBlY3RlZFNodXRkb3duID0gZmFsc2U7XG4gIH1cblxuICBnZXQgb25VbmV4cGVjdGVkU2h1dGRvd24gKCkge1xuICAgIGlmICghdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlKSB7XG4gICAgICBsZXQgcmVqZWN0O1xuICAgICAgdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlID0gbmV3IEIoZnVuY3Rpb24gX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZSAoX3Jlc29sdmUsIF9yZWplY3QpIHtcbiAgICAgICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlLmNhbmNlbCA9IHJlamVjdDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChhcHBQYWNrYWdlLCBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzID0gZmFsc2UsIGFjY2VwdFNzbENlcnRzID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm9vdERpciA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsICcuLicpO1xuICAgICAgY29uc3Qgc3RhcnREZXRlY3RvciA9IChzKSA9PiAvQXBwaXVtIFNvY2tldCBTZXJ2ZXIgUmVhZHkvLnRlc3Qocyk7XG4gICAgICBjb25zdCBib290c3RyYXBKYXIgPSBwYXRoLnJlc29sdmUocm9vdERpciwgJ2Jvb3RzdHJhcCcsICdiaW4nLCAnQXBwaXVtQm9vdHN0cmFwLmphcicpO1xuXG4gICAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLmZvcndhcmRQb3J0KHRoaXMuc3lzdGVtUG9ydCwgNDcyNCk7XG4gICAgICB0aGlzLnByb2Nlc3MgPSBhd2FpdCB0aGlzLnVpQXV0b21hdG9yLnN0YXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICBib290c3RyYXBKYXIsICdpby5hcHBpdW0uYW5kcm9pZC5ib290c3RyYXAuQm9vdHN0cmFwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREZXRlY3RvciwgJy1lJywgJ3BrZycsIGFwcFBhY2thZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICctZScsICdkaXNhYmxlQW5kcm9pZFdhdGNoZXJzJywgZGlzYWJsZUFuZHJvaWRXYXRjaGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgJy1lJywgJ2FjY2VwdFNzbENlcnRzJywgYWNjZXB0U3NsQ2VydHMpO1xuXG4gICAgICAvLyBwcm9jZXNzIHRoZSBvdXRwdXRcbiAgICAgIHRoaXMucHJvY2Vzcy5vbignb3V0cHV0JywgKHN0ZG91dCwgc3RkZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsZXJ0UmUgPSAvRW1pdHRpbmcgc3lzdGVtIGFsZXJ0IG1lc3NhZ2UvO1xuICAgICAgICBpZiAoYWxlcnRSZS50ZXN0KHN0ZG91dCkpIHtcbiAgICAgICAgICBsb2cuZGVidWcoJ0VtaXR0aW5nIGFsZXJ0IG1lc3NhZ2UuLi4nKTtcbiAgICAgICAgICBpZiAodGhpcy53ZWJTb2NrZXQpIHtcbiAgICAgICAgICAgIHRoaXMud2ViU29ja2V0LnNvY2tldHMuZW1pdCgnYWxlcnQnLCB7bWVzc2FnZTogc3Rkb3V0fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhlIGJvb3RzdHJhcCBsb2dnZXIgd3JhcHMgaXRzIG93biBsb2cgbGluZXMgd2l0aFxuICAgICAgICAvLyBbQVBQSVVNLVVJQVVUT10gLi4uIFtBUFBJVU0tVUlBVVRPXVxuICAgICAgICAvLyBhbmQgbGVhdmVzIGFjdHVhbCBVaUF1dG9tYXRvciBsb2dzIGFzIHRoZXkgYXJlXG4gICAgICAgIGxldCBzdGRvdXRMaW5lcyA9IChzdGRvdXQgfHwgJycpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QgdWlhdXRvTG9nID0gL1xcW0FQUElVTS1VSUFVVE9cXF0oLispXFxbXFwvQVBQSVVNLVVJQVVUT1xcXS87XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3Rkb3V0TGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS50cmltKCkpIHtcbiAgICAgICAgICAgIGlmICh1aWF1dG9Mb2cudGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICBsZXQgaW5uZXJMaW5lID0gdWlhdXRvTG9nLmV4ZWMobGluZSlbMV0udHJpbSgpO1xuICAgICAgICAgICAgICBsZXQgbG9nTWV0aG9kID0gbG9nLmluZm8uYmluZChsb2cpO1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgYm9vdHN0cmFwIGxvZyBjb25zaWRlcnMgc29tZXRoaW5nIGRlYnVnLCBsb2cgdGhhdCBhc1xuICAgICAgICAgICAgICAvLyBkZWJ1ZyBhbmQgbm90IGluZm9cbiAgICAgICAgICAgICAgaWYgKC9cXFtkZWJ1Z1xcXS8udGVzdChpbm5lckxpbmUpKSB7XG4gICAgICAgICAgICAgICAgbG9nTWV0aG9kID0gbG9nLmRlYnVnLmJpbmQobG9nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsb2dNZXRob2QoYFtCT09UU1RSQVAgTE9HXSAke2lubmVyTGluZX1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgW1VJQVVUTyBTVERPVVRdICR7bGluZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RkZXJyTGluZXMgPSAoc3RkZXJyIHx8ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3RkZXJyTGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS50cmltKCkpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgW1VJQVVUTyBTVERFUlJdICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbmx5IHJldHVybiB3aGVuIHRoZSBzb2NrZXQgY2xpZW50IGhhcyBjb25uZWN0ZWRcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQgPSBuZXQuY29ubmVjdCh0aGlzLnN5c3RlbVBvcnQpO1xuICAgICAgICAgIC8vIFdpbmRvd3M6IHRoZSBzb2NrZXQgZXJyb3JzIG91dCB3aGVuIEFEQiByZXN0YXJ0cy4gTGV0J3MgY2F0Y2ggaXQgdG8gYXZvaWQgY3Jhc2hpbmcuXG4gICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93bikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFuZHJvaWQgYm9vdHN0cmFwIHNvY2tldCBjcmFzaGVkOiAke2Vycn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnNvY2tldENsaWVudC5vbmNlKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgbG9nLmluZm8oJ0FuZHJvaWQgYm9vdHN0cmFwIHNvY2tldCBpcyBub3cgY29ubmVjdGVkJyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy5lcnJvckFuZFRocm93KGBFcnJvciBvY2N1cmVkIHdoaWxlIHN0YXJ0aW5nIEFuZHJvaWRCb290c3RyYXAuIE9yaWdpbmFsIGVycm9yOiAke2Vycn1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kQ29tbWFuZCAodHlwZSwgZXh0cmEgPSB7fSkge1xuICAgIGlmICghdGhpcy5zb2NrZXRDbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseScpO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgY21kID0gT2JqZWN0LmFzc2lnbih7Y21kOiB0eXBlfSwgZXh0cmEpO1xuICAgICAgbGV0IGNtZEpzb24gPSBgJHtKU09OLnN0cmluZ2lmeShjbWQpfSBcXG5gO1xuICAgICAgbG9nLmRlYnVnKGBTZW5kaW5nIGNvbW1hbmQgdG8gYW5kcm9pZDogJHtfLnRydW5jYXRlKGNtZEpzb24sIHtsZW5ndGg6IDEwMDB9KS50cmltKCl9YCk7XG4gICAgICB0aGlzLnNvY2tldENsaWVudC53cml0ZShjbWRKc29uKTtcbiAgICAgIHRoaXMuc29ja2V0Q2xpZW50LnNldEVuY29kaW5nKCd1dGY4Jyk7XG4gICAgICBsZXQgc3RyZWFtRGF0YSA9ICcnO1xuICAgICAgbGV0IHNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIgPSBudWxsO1xuICAgICAgdGhpcy5zb2NrZXRDbGllbnQub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc2VuZENvbW1hbmRUaW1lb3V0SGFuZGxlcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dChzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuZGVidWcoJ1JlY2VpdmVkIGNvbW1hbmQgcmVzdWx0IGZyb20gYm9vdHN0cmFwJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RyZWFtRGF0YSA9IEpTT04ucGFyc2Uoc3RyZWFtRGF0YSArIGRhdGEpO1xuICAgICAgICAgIC8vIHdlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgSlNPTiBzbyB3ZSd2ZSBnb3QgYWxsIHRoZSBkYXRhLFxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgc29ja2V0IGxpc3RlbmVyIGFuZCBldmFsdWF0ZVxuICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICAgIGlmIChzdHJlYW1EYXRhLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoc3RyZWFtRGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlamVjdChlcnJvckZyb21Db2RlKHN0cmVhbURhdGEuc3RhdHVzLCBzdHJlYW1EYXRhLnZhbHVlKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmICghXy5pc1N0cmluZyhzdHJlYW1EYXRhKSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdHb3QgYW4gdW5leHBlY3RlZCBlcnJvciBpbnNpZGUgc29ja2V0IGxpc3RlbmVyJyk7XG4gICAgICAgICAgICBsb2cuZXJyb3IoZXJyLnN0YWNrKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3JGcm9tQ29kZSgxMywgZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nLmRlYnVnKGBTdHJlYW0gc3RpbGwgbm90IGNvbXBsZXRlLCB3YWl0aW5nIHVwIHRvICR7U0VORF9DT01NQU5EX1RJTUVPVVR9bXMgZm9yIHRoZSBkYXRhIHRvIGFycml2ZWApO1xuICAgICAgICAgIHN0cmVhbURhdGEgKz0gZGF0YTtcbiAgICAgICAgICBzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJNc2cgPSBgU2VydmVyIHNvY2tldCBzdG9wcGVkIHJlc3BvbmRpbmcuIFRoZSByZWNlbnQgcmVzcG9uc2Ugd2FzICcke3N0cmVhbURhdGF9J2A7XG4gICAgICAgICAgICBsb2cuZXJyb3IoZXJyTXNnKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yRnJvbUNvZGUoMTMsIGVyck1zZykpO1xuICAgICAgICAgIH0sIFNFTkRfQ09NTUFORF9USU1FT1VUKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZW5kQWN0aW9uIChhY3Rpb24sIHBhcmFtcyA9IHt9KSB7XG4gICAgbGV0IGV4dHJhID0ge2FjdGlvbiwgcGFyYW1zfTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChDT01NQU5EX1RZUEVTLkFDVElPTiwgZXh0cmEpO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24gKCkge1xuICAgIGlmICghdGhpcy51aUF1dG9tYXRvcikge1xuICAgICAgbG9nLndhcm4oJ0Nhbm5vdCBzaHV0IGRvd24gQW5kcm9pZCBib290c3RyYXA7IGl0IGhhcyBhbHJlYWR5IHNodXQgZG93bicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHJlbW92ZSBsaXN0bmVycyBzbyB3ZSBkb24ndCB0cmlnZ2VyIHVuZXhwZWN0ZWQgc2h1dGRvd25cbiAgICB0aGlzLnVpQXV0b21hdG9yLnJlbW92ZUFsbExpc3RlbmVycyhVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VEKTtcbiAgICBpZiAodGhpcy5zb2NrZXRDbGllbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoQ09NTUFORF9UWVBFUy5TSFVURE9XTik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudWlBdXRvbWF0b3Iuc2h1dGRvd24oKTtcbiAgICB0aGlzLnVpQXV0b21hdG9yID0gbnVsbDtcbiAgfVxuXG4gIC8vIHRoaXMgaGVscGVyIGZ1bmN0aW9uIG1ha2VzIHVuaXQgdGVzdGluZyBlYXNpZXIuXG4gIGFzeW5jIGluaXQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgICB0aGlzLnVpQXV0b21hdG9yID0gbmV3IFVpQXV0b21hdG9yKHRoaXMuYWRiKTtcblxuICAgIC8vIEhhbmRsZSB1bmV4cGVjdGVkIFVpQXV0b21hdG9yIHNodXRkb3duXG4gICAgdGhpcy51aUF1dG9tYXRvci5vbihVaUF1dG9tYXRvci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBVaUF1dG9tYXRvci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMudWlBdXRvbWF0b3IgPSBudWxsO1xuICAgICAgICB0aGlzLm9uVW5leHBlY3RlZFNodXRkb3duLmNhbmNlbChuZXcgRXJyb3IoJ1VpQVV0b21hdG9yIHNodXQgZG93biB1bmV4cGVjdGVkbHknKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXQgaWdub3JlVW5leHBlY3RlZFNodXRkb3duIChpZ25vcmUpIHtcbiAgICBsb2cuZGVidWcoYCR7aWdub3JlID8gJ0lnbm9yaW5nJyA6ICdXYXRjaGluZyBmb3InfSBib290c3RyYXAgZGlzY29ubmVjdGApO1xuICAgIHRoaXMuX2lnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biA9IGlnbm9yZTtcbiAgfVxuXG4gIGdldCBpZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gKCkge1xuICAgIHJldHVybiB0aGlzLl9pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd247XG4gIH1cbn1cblxuZXhwb3J0IHsgQW5kcm9pZEJvb3RzdHJhcCwgQ09NTUFORF9UWVBFUyB9O1xuZXhwb3J0IGRlZmF1bHQgQW5kcm9pZEJvb3RzdHJhcDtcbiJdLCJmaWxlIjoibGliL2Jvb3RzdHJhcC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
@@ -360,7 +360,7 @@ helpers.setupNewChromedriver = async function setupNewChromedriver(opts, curDevi
|
|
|
360
360
|
}
|
|
361
361
|
}
|
|
362
362
|
|
|
363
|
-
const caps = _webviewHelpers.default.createChromedriverCaps(opts, curDeviceId);
|
|
363
|
+
const caps = _webviewHelpers.default.createChromedriverCaps(opts, curDeviceId, details);
|
|
364
364
|
|
|
365
365
|
_logger.default.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);
|
|
366
366
|
|
|
@@ -375,4 +375,4 @@ var _default = extensions;
|
|
|
375
375
|
exports.default = _default;require('source-map-support').install();
|
|
376
376
|
|
|
377
377
|
|
|
378
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIndlYnZpZXdzIiwiaXNDaHJvbWVTZXNzaW9uIiwiQ0hST01JVU1fV0lOIiwid2Vidmlld0hlbHBlcnMiLCJnZXRXZWJ2aWV3cyIsImFkYiIsIm9wdHMiLCJjb250ZXh0cyIsIl8iLCJ1bmlvbiIsIk5BVElWRV9XSU4iLCJsb2ciLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXRDb250ZXh0IiwibmFtZSIsInV0aWwiLCJoYXNWYWx1ZSIsIldFQlZJRVdfV0lOIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwiaW5jbHVkZXMiLCJlcnJvcnMiLCJOb1N1Y2hDb250ZXh0RXJyb3IiLCJzd2l0Y2hDb250ZXh0IiwibW9iaWxlR2V0Q29udGV4dHMiLCJhbmRyb2lkRGV2aWNlU29ja2V0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIiwiZ2V0V2ViVmlld3NNYXBwaW5nIiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJzZXR1cE5ld0Nocm9tZWRyaXZlciIsImN1ckRldmljZUlkIiwib24iLCJDaHJvbWVkcml2ZXIiLCJFVkVOVF9DSEFOR0VEIiwibXNnIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwib25DaHJvbWVkcml2ZXJTdG9wIiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJwcm94eVJlcSIsImJpbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImluZm8iLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0IiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsaUNBQWlDLEdBQUcsMkJBQTFDO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQU1BRixRQUFRLENBQUNHLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0FBRy9ELFNBQU8sS0FBS0MsVUFBTCxJQUFtQixLQUFLQyxrQkFBTCxFQUExQjtBQUNELENBSkQ7O0FBTUFMLFFBQVEsQ0FBQ00sV0FBVCxHQUF1QixlQUFlQSxXQUFmLEdBQThCO0FBQ25ELE1BQUlDLFFBQUo7O0FBQ0EsTUFBSSxLQUFLQyxlQUFULEVBQTBCO0FBR3hCRCxJQUFBQSxRQUFRLEdBQUcs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LHNCQUFJc0QsSUFBSixDQUFVLFlBQVdnRSxHQUFJLDREQUF6Qjs7QUFDQXpILHNCQUFFMkgsS0FBRixDQUFRN0gsSUFBSSxDQUFDb0UsYUFBYixFQUE0QnBFLElBQUksQ0FBQzJILEdBQUQsQ0FBaEM7QUFDRDtBQUNGOztBQUVELFFBQU1HLElBQUksR0FBR2pJLHdCQUFla0ksc0JBQWYsQ0FBc0MvSCxJQUF0QyxFQUE0QzhDLFdBQTVDLENBQWI7O0FBQ0F6QyxrQkFBSUMsS0FBSixDQUFXLG9EQUFtRHdILElBQUksQ0FBQzFELGFBQUwsQ0FBbUIzQixjQUFlLEdBQWhHOztBQUNBLFFBQU1hLFlBQVksQ0FBQzBFLEtBQWIsQ0FBbUJGLElBQW5CLENBQU47QUFDQSxTQUFPeEUsWUFBUDtBQUNELENBbEREOztBQW1EQSxNQUFNVCxvQkFBb0IsR0FBR3pELE9BQU8sQ0FBQ3lELG9CQUFyQzs7QUFHQW9GLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjN0ksVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IENocm9tZWRyaXZlciBmcm9tICdhcHBpdW0tY2hyb21lZHJpdmVyJztcbmltcG9ydCBQb3J0RmluZGVyIGZyb20gJ3BvcnRmaW5kZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHdlYnZpZXdIZWxwZXJzLFxuICBOQVRJVkVfV0lOLCBXRUJWSUVXX0JBU0UsIFdFQlZJRVdfV0lOLCBDSFJPTUlVTV9XSU5cbn0gZnJvbSAnLi4vd2Vidmlldy1oZWxwZXJzJztcblxuY29uc3QgQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFID0gJ2Nocm9tZWRyaXZlcl9hdXRvZG93bmxvYWQnO1xuXG5sZXQgY29tbWFuZHMgPSB7fSwgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQWN0dWFsIE1KU09OV1AgY29tbWFuZCBoYW5kbGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuY29tbWFuZHMuZ2V0Q3VycmVudENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50Q29udGV4dCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAvLyBpZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGBudWxsYCwgaW5kaWNhdGluZyBubyBjb250ZXh0XG4gIC8vIGV4cGxpY2l0bHkgc2V0LCBpdCBpcyB0aGUgZGVmYXVsdCBjb250ZXh0XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgfHwgdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbn07XG5cbmNvbW1hbmRzLmdldENvbnRleHRzID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dHMgKCkge1xuICBsZXQgd2Vidmlld3M7XG4gIGlmICh0aGlzLmlzQ2hyb21lU2Vzc2lvbikge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBDaHJvbWUgYnJvd3NlciBzZXNzaW9uLCB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIENocm9tZVxuICAgIC8vIGNvbnRleHQgYW5kIHRoZSBuYXRpdmUgY29udGV4dFxuICAgIHdlYnZpZXdzID0gW0NIUk9NSVVNX1dJTl07XG4gIH0gZWxzZSB7XG4gICAgLy8gb3RoZXJ3aXNlIHdlIHVzZSBBREIgdG8gZmlndXJlIG91dCB3aGljaCB3ZWJ2aWV3cyBhcmUgYXZhaWxhYmxlXG4gICAgd2Vidmlld3MgPSBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3cyh0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgfVxuICB0aGlzLmNvbnRleHRzID0gXy51bmlvbihbTkFUSVZFX1dJTl0sIHdlYnZpZXdzKTtcbiAgbG9nLmRlYnVnKGBBdmFpbGFibGUgY29udGV4dHM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb250ZXh0cyl9YCk7XG4gIHJldHVybiB0aGlzLmNvbnRleHRzO1xufTtcblxuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG5hbWUpKSB7XG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gV0VCVklFV19XSU4pIHtcbiAgICAvLyBoYW5kbGUgc2V0Q29udGV4dCBcIldFQlZJRVdcIlxuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICB9XG4gIC8vIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgd2Ugd2FudCwgZG8gbm90aGluZ1xuICBpZiAobmFtZSA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRDb250ZXh0cygpO1xuICAvLyBpZiB0aGUgY29udGV4dCB3ZSB3YW50IGRvZXNuJ3QgZXhpc3QsIGZhaWxcbiAgaWYgKCFfLmluY2x1ZGVzKGNvbnRleHRzLCBuYW1lKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoQ29udGV4dEVycm9yKCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnN3aXRjaENvbnRleHQobmFtZSk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG5hbWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdzTWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dC5cbiAqIFRoaXMgdmFsdWUgYmVjb21lcyBudWxsIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgUElEIGZvciBhIHdlYnZpZXcuXG4gKlxuICogVGhlIGZvbGxvd2luZyBqc29uIGRlbW9uc3RyYXRlcyB0aGUgZXhhbXBsZSBvZiBXZWJ2aWV3c01hcHBpbmcgb2JqZWN0LlxuICogTm90ZSB0aGF0IGBkZXNjcmlwdGlvbmAgaW4gYHBhZ2VgIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgbW9zdCBsaWtlbHkgd2hlbiBpdCBjb21lcyB0byBNb2JpbGUgQ2hyb21lKVxuICoge1xuICogICBcInByb2NcIjogXCJAd2Vidmlld19kZXZ0b29sc19yZW1vdGVfMjIxMzhcIixcbiAqICAgXCJ3ZWJ2aWV3XCI6IFwiV0VCVklFV18yMjEzOFwiLFxuICogICBcImluZm9cIjoge1xuICogICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzc0LjAuMzcyOS4xODVcIixcbiAqICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYgQnVpbGQvUVNSMS4xOTA5MjAuMDAxOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc0LjAuMzcyOS4xODUgTW9iaWxlIFNhZmFyaS81MzcuMzZcIixcbiAqICAgICBcIlY4LVZlcnNpb25cIjogXCI3LjQuMjg4LjI4XCIsXG4gKiAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQpXCIsXG4gKiAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL2Jyb3dzZXJcIlxuICogICB9LFxuICogICBcInBhZ2VzXCI6IFtcbiAqICAgICB7XG4gKiAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwie1xcXCJhdHRhY2hlZFxcXCI6dHJ1ZSxcXFwiZW1wdHlcXFwiOmZhbHNlLFxcXCJoZWlnaHRcXFwiOjE0NTgsXFxcInNjcmVlblhcXFwiOjAsXFxcInNjcmVlbllcXFwiOjMzNixcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwid2lkdGhcXFwiOjEwODB9XCIsXG4gKiAgICAgICBcImRldnRvb2xzRnJvbnRlbmRVcmxcIjogXCJodHRwOi8vY2hyb21lLWRldnRvb2xzLWZyb250ZW5kLmFwcHNwb3QuY29tL3NlcnZlX3Jldi9AMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZC9pbnNwZWN0b3IuaHRtbD93cz0xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJpZFwiOiBcIjI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcInRpdGxlXCI6IFwiUmVsZWFzZXMgwrcgYXBwaXVtL2FwcGl1bSDCtyBHaXRIdWJcIixcbiAqICAgICAgIFwidHlwZVwiOiBcInBhZ2VcIixcbiAqICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcmVsZWFzZXNcIixcbiAqICAgICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCJcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwid2Vidmlld05hbWVcIjogXCJXRUJWSUVXX2NvbS5pby5hcHBpdW0uc2V0dGluZ1wiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgd2Vidmlld3NNYXBwaW5nIGJhc2VkIG9uIENEUCBlbmRwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldDogdGhpcy5vcHRzLmFuZHJvaWREZXZpY2VTb2NrZXQsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHRydWUsXG4gICAgd2Vidmlld0RldnRvb2xzUG9ydDogdGhpcy5vcHRzLndlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB0cnVlXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5zd2l0Y2hDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc3dpdGNoQ29udGV4dCAobmFtZSkge1xuICAvLyBXZSBoYXZlIHNvbWUgb3B0aW9ucyB3aGVuIGl0IGNvbWVzIHRvIHdlYnZpZXdzLiBJZiB3ZSB3YW50IGFcbiAgLy8gQ2hyb21lZHJpdmVyIHdlYnZpZXcsIHdlIGNhbiBvbmx5IGNvbnRyb2wgb25lIGF0IGEgdGltZS5cbiAgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3RhcnQgcHJveHlpbmcgY29tbWFuZHMgZGlyZWN0bHkgdG8gY2hyb21lZHJpdmVyXG4gICAgYXdhaXQgdGhpcy5zdGFydENocm9tZWRyaXZlclByb3h5KG5hbWUpO1xuICB9IGVsc2UgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KHRoaXMuY3VyQ29udGV4dCkpIHtcbiAgICAvLyBpZiB3ZSdyZSBtb3ZpbmcgdG8gYSBub24tY2hyb21lZHJpdmVyIHdlYnZpZXcsIGFuZCBvdXIgY3VycmVudCBjb250ZXh0XG4gICAgLy8gX2lzXyBhIGNocm9tZWRyaXZlciB3ZWJ2aWV3LCBpZiBjYXBzIHJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgaXMgc2V0XG4gICAgLy8gdG8gdHJ1ZSB0aGVuIGtpbGwgY2hyb21lZHJpdmVyIHNlc3Npb24gdXNpbmcgc3RvcENocm9tZWRyaXZlclByb3hpZXMgb3JcbiAgICAvLyBlbHNlIHNpbXBseSBzdXNwZW5kIHByb3h5aW5nIHRvIHRoZSBsYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRzLnJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMpIHtcbiAgICAgIGxvZy5kZWJ1ZygncmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBzZXQgdG8gdHJ1ZTsga2lsbGluZyBleGlzdGluZyBjaHJvbWVkcml2ZXJzJyk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGlkbid0IGtub3cgaG93IHRvIGhhbmRsZSBzd2l0Y2hpbmcgdG8gY29udGV4dCAnJHtuYW1lfSdgKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIE9uLW9iamVjdCBjb250ZXh0LXJlbGF0ZWQgaGVscGVyc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8vIFRoZSByZWFzb24gdGhpcyBpcyBhIGZ1bmN0aW9uIGFuZCBub3QganVzdCBhIGNvbnN0YW50IGlzIHRoYXQgYm90aCBhbmRyb2lkLVxuLy8gZHJpdmVyIGFuZCBzZWxlbmRyb2lkLWRyaXZlciB1c2UgdGhpcyBsb2dpYywgYW5kIGVhY2ggb25lIHJldHVybnNcbi8vIGEgZGlmZmVyZW50IGRlZmF1bHQgY29udGV4dCBuYW1lXG5oZWxwZXJzLmRlZmF1bHRDb250ZXh0TmFtZSA9IGZ1bmN0aW9uIGRlZmF1bHRDb250ZXh0TmFtZSAoKSB7XG4gIHJldHVybiBOQVRJVkVfV0lOO1xufTtcblxuaGVscGVycy5kZWZhdWx0V2Vidmlld05hbWUgPSBmdW5jdGlvbiBkZWZhdWx0V2Vidmlld05hbWUgKCkge1xuICByZXR1cm4gV0VCVklFV19CQVNFICsgdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG59O1xuXG5oZWxwZXJzLmlzV2ViQ29udGV4dCA9IGZ1bmN0aW9uIGlzV2ViQ29udGV4dCAoKSB7XG4gIHJldHVybiB0aGlzLmN1ckNvbnRleHQgIT09IG51bGwgJiYgdGhpcy5jdXJDb250ZXh0ICE9PSBOQVRJVkVfV0lOO1xufTtcblxuLy8gVHVybiBvbiBwcm94eWluZyB0byBhbiBleGlzdGluZyBDaHJvbWVkcml2ZXIgc2Vzc2lvbiBvciBhIG5ldyBvbmVcbmhlbHBlcnMuc3RhcnRDaHJvbWVkcml2ZXJQcm94eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgKGNvbnRleHQpIHtcbiAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIGxvZy5kZWJ1ZyhgRm91bmQgZXhpc3RpbmcgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICcke2NvbnRleHR9Jy4gVXNpbmcgaXQuYCk7XG4gICAgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGF3YWl0IHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIoY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNkID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIsIGNvbnRleHQpO1xuICAgIC8vIGJpbmQgb3VyIHN0b3AvZXhpdCBoYW5kbGVyLCBwYXNzaW5nIGluIGNvbnRleHQgc28gd2Uga25vdyB3aGljaFxuICAgIC8vIG9uZSBzdG9wcGVkIHVuZXhwZWN0ZWRseVxuICAgIGNkLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzYXZlIHRoZSBjaHJvbWVkcml2ZXIgb2JqZWN0IHVuZGVyIHRoZSBjb250ZXh0XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSA9IGNkO1xuICB9XG4gIC8vIGhvb2sgdXAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzbyB3ZSBjYW4gcHJveHkgdGhpcyBiaXpcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBjZDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlclxuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gZmFsc2U7XG59O1xuXG4vLyBIYW5kbGUgYW4gb3V0LW9mLWJhbmQgQ2hyb21lZHJpdmVyIHN0b3AgZXZlbnRcbmhlbHBlcnMub25DaHJvbWVkcml2ZXJTdG9wID0gYXN5bmMgZnVuY3Rpb24gb25DaHJvbWVkcml2ZXJTdG9wIChjb250ZXh0KSB7XG4gIGxvZy53YXJuKGBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fSBzdG9wcGVkIHVuZXhwZWN0ZWRseWApO1xuICBpZiAoY29udGV4dCA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgLy8gd2UgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aGlsZSBhdXRvbWF0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHNvIHdhbnRcbiAgICAvLyB0byBzaHV0IGRvd24gdGhlIHNlc3Npb24gYW5kIHJlc3BvbmQgd2l0aCBhbiBlcnJvclxuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoJ0Nocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSBkdXJpbmcgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIENocm9tZWRyaXZlciBpbiB0aGUgbm9uLWFjdGl2ZSBjb250ZXh0IGJhcmZzLCB3ZSBkb24ndCByZWFsbHlcbiAgICAvLyBjYXJlLCB3ZSdsbCBqdXN0IG1ha2UgYSBuZXcgb25lIG5leHQgdGltZSB3ZSBuZWVkIHRoZSBjb250ZXh0LlxuICAgIGxvZy53YXJuKFwiQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5LCBidXQgaXQgd2Fzbid0IHRoZSBhY3RpdmUgXCIgK1xuICAgICAgICAgICAgICAgICdjb250ZXh0LCBpZ25vcmluZycpO1xuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG4vLyBJbnRlbnRpb25hbGx5IHN0b3AgYWxsIHRoZSBjaHJvbWVkcml2ZXJzIGN1cnJlbnRseSBhY3RpdmUsIGFuZCBpZ25vcmVcbi8vIHRoZWlyIGV4aXQgZXZlbnRzXG5oZWxwZXJzLnN0b3BDaHJvbWVkcml2ZXJQcm94aWVzID0gYXN5bmMgZnVuY3Rpb24gc3RvcENocm9tZWRyaXZlclByb3hpZXMgKCkge1xuICB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpOyAvLyBtYWtlIHN1cmUgd2UgdHVybiBvZmYgdGhlIHByb3h5IGZsYWdcbiAgZm9yIChsZXQgY29udGV4dCBvZiBfLmtleXModGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVycykpIHtcbiAgICBsZXQgY2QgPSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICAgIGxvZy5kZWJ1ZyhgU3RvcHBpbmcgY2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH1gKTtcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIHN0b3BwZWQgc3RhdGUgZXZlbnRcbiAgICBjZC5yZW1vdmVBbGxMaXN0ZW5lcnMoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjZC5zdG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihgRXJyb3Igc3RvcHBpbmcgQ2hyb21lZHJpdmVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckNvbnRleHQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckNvbnRleHQgKHZpZXdOYW1lKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKHZpZXdOYW1lLCBXRUJWSUVXX1dJTikgfHwgdmlld05hbWUgPT09IENIUk9NSVVNX1dJTjtcbn07XG5cbmhlbHBlcnMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBmdW5jdGlvbiBzaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHJldHVybiAhIXRoaXMub3B0cy5jaHJvbWVPcHRpb25zICYmXG4gICAgICAgICBfLmlzQXJyYXkodGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncykgJiZcbiAgICAgICAgIHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MuaW5jbHVkZXMoJy0tbm8tZmlyc3QtcnVuJyk7XG59O1xuXG5oZWxwZXJzLmRpc21pc3NDaHJvbWVXZWxjb21lID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICBsb2cuaW5mbygnVHJ5aW5nIHRvIGRpc21pc3MgQ2hyb21lIHdlbGNvbWUnKTtcbiAgbGV0IGFjdGl2aXR5ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50QWN0aXZpdHkoKTtcbiAgaWYgKGFjdGl2aXR5ICE9PSAnb3JnLmNocm9taXVtLmNocm9tZS5icm93c2VyLmZpcnN0cnVuLkZpcnN0UnVuQWN0aXZpdHknKSB7XG4gICAgbG9nLmluZm8oJ0Nocm9tZSB3ZWxjb21lIGRpYWxvZyBuZXZlciBzaG93ZWQgdXAhIENvbnRpbnVpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL3Rlcm1zX2FjY2VwdCcsIGZhbHNlKTtcbiAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgdHJ5IHtcbiAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvbmVnYXRpdmVfYnV0dG9uJywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBETyBOT1RISU5HLCBUSElTIERFVklDRSBESUROVCBMQVVOQ0ggVEhFIFNJR05JTiBESUFMT0dcbiAgICAvLyBJVCBNVVNUIEJFIEEgTk9OIEdNUyBERVZJQ0VcbiAgICBsb2cud2FybihgVGhpcyBkZXZpY2UgZGlkIG5vdCBzaG93IENocm9tZSBTaWduSW4gZGlhbG9nLCAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5zdGFydENocm9tZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZVNlc3Npb24gKCkge1xuICBsb2cuaW5mbygnU3RhcnRpbmcgYSBjaHJvbWUtYmFzZWQgYnJvd3NlciBzZXNzaW9uJyk7XG4gIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcblxuICBjb25zdCBrbm93blBhY2thZ2VzID0gW1xuICAgICdvcmcuY2hyb21pdW0uY2hyb21lLnNoZWxsJyxcbiAgICAnY29tLmFuZHJvaWQuY2hyb21lJyxcbiAgICAnY29tLmNocm9tZS5iZXRhJyxcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZScsXG4gICAgJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJyxcbiAgXTtcblxuICBpZiAoXy5pbmNsdWRlcyhrbm93blBhY2thZ2VzLCB0aGlzLm9wdHMuYXBwUGFja2FnZSkpIHtcbiAgICBvcHRzLmNocm9tZUJ1bmRsZUlkID0gdGhpcy5vcHRzLmFwcFBhY2thZ2U7XG4gIH0gZWxzZSB7XG4gICAgb3B0cy5jaHJvbWVBbmRyb2lkQWN0aXZpdHkgPSB0aGlzLm9wdHMuYXBwQWN0aXZpdHk7XG4gIH1cbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYik7XG4gIHRoaXMuY2hyb21lZHJpdmVyLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgaWYgKG1zZy5zdGF0ZSA9PT0gQ2hyb21lZHJpdmVyLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKENIUk9NSVVNX1dJTik7XG4gICAgfVxuICB9KTtcblxuICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgQ2hyb21lIHNlc3Npb24sIHdlIGVuc3VyZSB0aGF0IHRoZSBjb250ZXh0IGlzXG4gIC8vIGFwcHJvcHJpYXRlbHkgc2V0IGFuZCB0aGF0IHRoaXMgY2hyb21lZHJpdmVyIGlzIGFkZGVkIHRvIHRoZSBsaXN0XG4gIC8vIG9mIHNlc3Npb24gY2hyb21lZHJpdmVycyBzbyB3ZSBjYW4gc3dpdGNoIGJhY2sgYW5kIGZvcnRoXG4gIHRoaXMuY3VyQ29udGV4dCA9IENIUk9NSVVNX1dJTjtcbiAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tDSFJPTUlVTV9XSU5dID0gdGhpcy5jaHJvbWVkcml2ZXI7XG4gIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmNocm9tZWRyaXZlci5wcm94eVJlcS5iaW5kKHRoaXMuY2hyb21lZHJpdmVyKTtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IHRydWU7XG5cbiAgaWYgKHRoaXMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUoKSkge1xuICAgIC8vIGRpc21pc3MgQ2hyb21lIHdlbGNvbWUgZGlhbG9nXG4gICAgYXdhaXQgdGhpcy5kaXNtaXNzQ2hyb21lV2VsY29tZSgpO1xuICB9XG59O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBJbnRlcm5hbCBsaWJyYXJ5IGZ1bmN0aW9uc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciAoY2hyb21lZHJpdmVyKSB7XG4gIC8vIGNoZWNrIHRoZSBzdGF0dXMgYnkgc2VuZGluZyBhIHNpbXBsZSB3aW5kb3ctYmFzZWQgY29tbWFuZCB0byBDaHJvbWVEcml2ZXJcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHdlIHdhbnQgdG8gcmVjcmVhdGUgdGhlIENocm9tZURyaXZlciBzZXNzaW9uXG4gIGlmICghYXdhaXQgY2hyb21lZHJpdmVyLmhhc1dvcmtpbmdXZWJ2aWV3KCkpIHtcbiAgICBsb2cuZGVidWcoJ0Nocm9tZURyaXZlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgJ1JlLWluaXRpYWxpemluZyB0aGUgc2Vzc2lvbi4nKTtcbiAgICBhd2FpdCBjaHJvbWVkcml2ZXIucmVzdGFydCgpO1xuICB9XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59XG5cbi8qKlxuICogRmluZCBhIGZyZWUgcG9ydCB0byBoYXZlIENocm9tZWRyaXZlciBsaXN0ZW4gb24uXG4gKlxuICogQHBhcmFtIHthcnJheX0gW3BvcnRTcGVjXSAtIEFycmF5IHdoaWNoIGlzIGEgbGlzdCBvZiBwb3J0cy4gQSBsaXN0IGl0ZW0gbWF5XG4gKiBhbHNvIGl0c2VsZiBiZSBhbiBhcnJheSBvZiBsZW5ndGggMiBzcGVjaWZ5aW5nIGEgc3RhcnQgYW5kIGVuZCBwb3J0IG9mXG4gKiBhIHJhbmdlLiBTb21lIHZhbGlkIHBvcnQgc3BlY3M6XG4gKiAgICAtIFs4MDAwLCA4MDAxLCA4MDAyXVxuICogICAgLSBbWzgwMDAsIDgwMDVdXVxuICogICAgLSBbODAwMCwgWzkwMDAsIDkxMDBdXVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSBmcmVlIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyUG9ydCAocG9ydFNwZWMpIHtcbiAgY29uc3QgZ2V0UG9ydCA9IEIucHJvbWlzaWZ5KFBvcnRGaW5kZXIuZ2V0UG9ydCwge2NvbnRleHQ6IFBvcnRGaW5kZXJ9KTtcblxuICAvLyBpZiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSB1cyBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgY2hyb21lZHJpdmVyXG4gIC8vIHBvcnQgcmFuZ2VzLCBqdXN0IGZpbmQgYW55IGZyZWUgcG9ydFxuICBpZiAoIXBvcnRTcGVjKSB7XG4gICAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoKTtcbiAgICBsb2cuZGVidWcoYEEgcG9ydCB3YXMgbm90IGdpdmVuLCB1c2luZyByYW5kb20gZnJlZSBwb3J0OiAke3BvcnR9YCk7XG4gICAgcmV0dXJuIHBvcnQ7XG4gIH1cblxuICAvLyBvdGhlcndpc2UgZmluZCB0aGUgZnJlZSBwb3J0IGJhc2VkIG9uIGEgbGlzdCBvciByYW5nZSBwcm92aWRlZCBieSB0aGUgdXNlclxuICBsb2cuZGVidWcoYEZpbmRpbmcgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICBsZXQgZm91bmRQb3J0ID0gbnVsbDtcbiAgZm9yIChjb25zdCBwb3RlbnRpYWxQb3J0IG9mIHBvcnRTcGVjKSB7XG4gICAgbGV0IHBvcnQsIHN0b3BQb3J0O1xuICAgIGlmIChfLmlzQXJyYXkocG90ZW50aWFsUG9ydCkpIHtcbiAgICAgIChbcG9ydCwgc3RvcFBvcnRdID0gcG90ZW50aWFsUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChwb3RlbnRpYWxQb3J0LCAxMCk7IC8vIGVuc3VyZSB3ZSBoYXZlIGEgbnVtYmVyIGFuZCBub3QgYSBzdHJpbmdcbiAgICAgIHN0b3BQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9YCk7XG4gICAgICBmb3VuZFBvcnQgPSBhd2FpdCBnZXRQb3J0KHtwb3J0LCBzdG9wUG9ydH0pO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmRlYnVnKGBOb3RoaW5nIGluIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fSB3YXMgYXZhaWxhYmxlYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZvdW5kUG9ydCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBgICtcbiAgICAgICAgICAgICAgICAgICAgYGNocm9tZWRyaXZlclBvcnRzIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIH1cblxuICBsb2cuZGVidWcoYFVzaW5nIGZyZWUgcG9ydCAke2ZvdW5kUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICByZXR1cm4gZm91bmRQb3J0O1xufVxuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCAoKSB7XG4gIGlmICh0aGlzLmlzRmVhdHVyZUVuYWJsZWQoQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxvZy5kZWJ1ZyhgQXV0b21hdGVkIENocm9tZWRyaXZlciBkb3dubG9hZCBpcyBkaXNhYmxlZC4gYCArXG4gICAgYFVzZSAnJHtDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkV9JyBzZXJ2ZXIgZmVhdHVyZSB0byBlbmFibGUgaXRgKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlciA9IGFzeW5jIGZ1bmN0aW9uIHNldHVwTmV3Q2hyb21lZHJpdmVyIChvcHRzLCBjdXJEZXZpY2VJZCwgYWRiLCBjb250ZXh0ID0gbnVsbCkge1xuICBpZiAob3B0cy5jaHJvbWVEcml2ZXJQb3J0KSB7XG4gICAgbG9nLndhcm4oYFRoZSAnY2hyb21lRHJpdmVyUG9ydCcgY2FwYWJpbGl0eSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICdjaHJvbWVkcml2ZXJQb3J0JyBpbnN0ZWFkYCk7XG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gb3B0cy5jaHJvbWVEcml2ZXJQb3J0O1xuICB9XG5cbiAgaWYgKG9wdHMuY2hyb21lZHJpdmVyUG9ydCkge1xuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgdXNlci1zcGVjaWZpZWQgcG9ydCAke29wdHMuY2hyb21lZHJpdmVyUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgc2luZ2xlIHBvcnQgd2Fzbid0IGdpdmVuLCB3ZSdsbCBsb29rIGZvciBhIGZyZWUgb25lXG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyUG9ydChvcHRzLmNocm9tZWRyaXZlclBvcnRzKTtcbiAgfVxuXG4gIGNvbnN0IGRldGFpbHMgPSBjb250ZXh0ID8gd2Vidmlld0hlbHBlcnMuZ2V0V2Vidmlld0RldGFpbHMoYWRiLCBjb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFfLmlzRW1wdHkoZGV0YWlscykpIHtcbiAgICBsb2cuZGVidWcoJ1Bhc3Npbmcgd2ViIHZpZXcgZGV0YWlscyB0byB0aGUgQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRldGFpbHMsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGNvbnN0IGNocm9tZWRyaXZlciA9IG5ldyBDaHJvbWVkcml2ZXIoe1xuICAgIHBvcnQ6IG9wdHMuY2hyb21lZHJpdmVyUG9ydCxcbiAgICBleGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGUsXG4gICAgYWRiLFxuICAgIGNtZEFyZ3M6IG9wdHMuY2hyb21lZHJpdmVyQXJncyxcbiAgICB2ZXJib3NlOiAhIW9wdHMuc2hvd0Nocm9tZWRyaXZlckxvZyxcbiAgICBleGVjdXRhYmxlRGlyOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXIsXG4gICAgbWFwcGluZ1BhdGg6IG9wdHMuY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUsXG4gICAgYnVuZGxlSWQ6IG9wdHMuY2hyb21lQnVuZGxlSWQsXG4gICAgdXNlU3lzdGVtRXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlLFxuICAgIGRpc2FibGVCdWlsZENoZWNrOiBvcHRzLmNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrLFxuICAgIGRldGFpbHMsXG4gICAgaXNBdXRvZG93bmxvYWRFbmFibGVkOiAodGhpcyB8fCB7fSkuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkXG4gICAgICA/IHRoaXMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkKCkgOiB1bmRlZmluZWQsXG4gIH0pO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgY2hyb21lT3B0aW9uc1xuICBvcHRzLmNocm9tZU9wdGlvbnMgPSBvcHRzLmNocm9tZU9wdGlvbnMgfHwge307XG4gIC8vIHRyeSBvdXQgYW55IHByZWZpeGVkIGNocm9tZU9wdGlvbnMsXG4gIC8vIGFuZCBzdHJpcCB0aGUgcHJlZml4XG4gIGZvciAoY29uc3Qgb3B0IG9mIF8ua2V5cyhvcHRzKSkge1xuICAgIGlmIChvcHQuZW5kc1dpdGgoJzpjaHJvbWVPcHRpb25zJykpIHtcbiAgICAgIGxvZy53YXJuKGBNZXJnaW5nICcke29wdH0nIGludG8gJ2Nocm9tZU9wdGlvbnMnLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICBfLm1lcmdlKG9wdHMuY2hyb21lT3B0aW9ucywgb3B0c1tvcHRdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjYXBzID0gd2Vidmlld0hlbHBlcnMuY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyhvcHRzLCBjdXJEZXZpY2VJZCk7XG4gIGxvZy5kZWJ1ZyhgQmVmb3JlIHN0YXJ0aW5nIGNocm9tZWRyaXZlciwgYW5kcm9pZFBhY2thZ2UgaXMgJyR7Y2Fwcy5jaHJvbWVPcHRpb25zLmFuZHJvaWRQYWNrYWdlfSdgKTtcbiAgYXdhaXQgY2hyb21lZHJpdmVyLnN0YXJ0KGNhcHMpO1xuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufTtcbmNvbnN0IHNldHVwTmV3Q2hyb21lZHJpdmVyID0gaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlcjtcblxuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzLCBzZXR1cE5ld0Nocm9tZWRyaXZlciB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
378
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9jb250ZXh0LmpzIl0sIm5hbWVzIjpbIkNIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJnZXRDdXJyZW50Q29udGV4dCIsImN1ckNvbnRleHQiLCJkZWZhdWx0Q29udGV4dE5hbWUiLCJnZXRDb250ZXh0cyIsIndlYnZpZXdzIiwiaXNDaHJvbWVTZXNzaW9uIiwiQ0hST01JVU1fV0lOIiwid2Vidmlld0hlbHBlcnMiLCJnZXRXZWJ2aWV3cyIsImFkYiIsIm9wdHMiLCJjb250ZXh0cyIsIl8iLCJ1bmlvbiIsIk5BVElWRV9XSU4iLCJsb2ciLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXRDb250ZXh0IiwibmFtZSIsInV0aWwiLCJoYXNWYWx1ZSIsIldFQlZJRVdfV0lOIiwiZGVmYXVsdFdlYnZpZXdOYW1lIiwiaW5jbHVkZXMiLCJlcnJvcnMiLCJOb1N1Y2hDb250ZXh0RXJyb3IiLCJzd2l0Y2hDb250ZXh0IiwibW9iaWxlR2V0Q29udGV4dHMiLCJhbmRyb2lkRGV2aWNlU29ja2V0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIiwiZ2V0V2ViVmlld3NNYXBwaW5nIiwiaXNDaHJvbWVkcml2ZXJDb250ZXh0Iiwic3RhcnRDaHJvbWVkcml2ZXJQcm94eSIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJzdG9wQ2hyb21lZHJpdmVyUHJveGllcyIsInN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSIsIkVycm9yIiwiV0VCVklFV19CQVNFIiwiYXBwUGFja2FnZSIsImlzV2ViQ29udGV4dCIsImNvbnRleHQiLCJjZCIsInNlc3Npb25DaHJvbWVkcml2ZXJzIiwic2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlciIsImNsb25lRGVlcCIsImNocm9tZVVzZVJ1bm5pbmdBcHAiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhbmRyb2lkUGFja2FnZSIsIm1hdGNoIiwibGVuZ3RoIiwiY2hyb21lQW5kcm9pZFBhY2thZ2UiLCJzZXR1cE5ld0Nocm9tZWRyaXZlciIsImN1ckRldmljZUlkIiwib24iLCJDaHJvbWVkcml2ZXIiLCJFVkVOVF9DSEFOR0VEIiwibXNnIiwic3RhdGUiLCJTVEFURV9TVE9QUEVEIiwib25DaHJvbWVkcml2ZXJTdG9wIiwiY2hyb21lZHJpdmVyIiwicHJveHlSZXFSZXMiLCJwcm94eVJlcSIsImJpbmQiLCJqd3BQcm94eUFjdGl2ZSIsIndhcm4iLCJlcnIiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzdG9wIiwibWVzc2FnZSIsInZpZXdOYW1lIiwic2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJjaHJvbWVPcHRpb25zIiwiaXNBcnJheSIsImFyZ3MiLCJkaXNtaXNzQ2hyb21lV2VsY29tZSIsImluZm8iLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0IiwiT2JqZWN0IiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsaUNBQWlDLEdBQUcsMkJBQTFDO0FBRUEsSUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFBQSxJQUFtQkMsT0FBTyxHQUFHLEVBQTdCO0FBQUEsSUFBaUNDLFVBQVUsR0FBRyxFQUE5Qzs7OztBQU1BRixRQUFRLENBQUNHLGlCQUFULEdBQTZCLGVBQWVBLGlCQUFmLEdBQW9DO0FBRy9ELFNBQU8sS0FBS0MsVUFBTCxJQUFtQixLQUFLQyxrQkFBTCxFQUExQjtBQUNELENBSkQ7O0FBTUFMLFFBQVEsQ0FBQ00sV0FBVCxHQUF1QixlQUFlQSxXQUFmLEdBQThCO0FBQ25ELE1BQUlDLFFBQUo7O0FBQ0EsTUFBSSxLQUFLQyxlQUFULEVBQTBCO0FBR3hCRCxJQUFBQSxRQUFRLEdBQUcs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LHNCQUFJc0QsSUFBSixDQUFVLFlBQVdnRSxHQUFJLDREQUF6Qjs7QUFDQXpILHNCQUFFMkgsS0FBRixDQUFRN0gsSUFBSSxDQUFDb0UsYUFBYixFQUE0QnBFLElBQUksQ0FBQzJILEdBQUQsQ0FBaEM7QUFDRDtBQUNGOztBQUVELFFBQU1HLElBQUksR0FBR2pJLHdCQUFla0ksc0JBQWYsQ0FBc0MvSCxJQUF0QyxFQUE0QzhDLFdBQTVDLEVBQXlEeUQsT0FBekQsQ0FBYjs7QUFDQWxHLGtCQUFJQyxLQUFKLENBQVcsb0RBQW1Ed0gsSUFBSSxDQUFDMUQsYUFBTCxDQUFtQjNCLGNBQWUsR0FBaEc7O0FBQ0EsUUFBTWEsWUFBWSxDQUFDMEUsS0FBYixDQUFtQkYsSUFBbkIsQ0FBTjtBQUNBLFNBQU94RSxZQUFQO0FBQ0QsQ0FsREQ7O0FBbURBLE1BQU1ULG9CQUFvQixHQUFHekQsT0FBTyxDQUFDeUQsb0JBQXJDOztBQUdBb0YsTUFBTSxDQUFDQyxNQUFQLENBQWM3SSxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgQ2hyb21lZHJpdmVyIGZyb20gJ2FwcGl1bS1jaHJvbWVkcml2ZXInO1xuaW1wb3J0IFBvcnRGaW5kZXIgZnJvbSAncG9ydGZpbmRlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtLWJhc2UtZHJpdmVyJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgd2Vidmlld0hlbHBlcnMsXG4gIE5BVElWRV9XSU4sIFdFQlZJRVdfQkFTRSwgV0VCVklFV19XSU4sIENIUk9NSVVNX1dJTlxufSBmcm9tICcuLi93ZWJ2aWV3LWhlbHBlcnMnO1xuXG5jb25zdCBDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUgPSAnY2hyb21lZHJpdmVyX2F1dG9kb3dubG9hZCc7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBY3R1YWwgTUpTT05XUCBjb21tYW5kIGhhbmRsZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jb21tYW5kcy5nZXRDdXJyZW50Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDb250ZXh0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gIC8vIGlmIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgYG51bGxgLCBpbmRpY2F0aW5nIG5vIGNvbnRleHRcbiAgLy8gZXhwbGljaXRseSBzZXQsIGl0IGlzIHRoZSBkZWZhdWx0IGNvbnRleHRcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCB8fCB0aGlzLmRlZmF1bHRDb250ZXh0TmFtZSgpO1xufTtcblxuY29tbWFuZHMuZ2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0cyAoKSB7XG4gIGxldCB3ZWJ2aWV3cztcbiAgaWYgKHRoaXMuaXNDaHJvbWVTZXNzaW9uKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIENocm9tZSBicm93c2VyIHNlc3Npb24sIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgQ2hyb21lXG4gICAgLy8gY29udGV4dCBhbmQgdGhlIG5hdGl2ZSBjb250ZXh0XG4gICAgd2Vidmlld3MgPSBbQ0hST01JVU1fV0lOXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdGhlcndpc2Ugd2UgdXNlIEFEQiB0byBmaWd1cmUgb3V0IHdoaWNoIHdlYnZpZXdzIGFyZSBhdmFpbGFibGVcbiAgICB3ZWJ2aWV3cyA9IGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdzKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICB9XG4gIHRoaXMuY29udGV4dHMgPSBfLnVuaW9uKFtOQVRJVkVfV0lOXSwgd2Vidmlld3MpO1xuICBsb2cuZGVidWcoYEF2YWlsYWJsZSBjb250ZXh0czogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnRleHRzKX1gKTtcbiAgcmV0dXJuIHRoaXMuY29udGV4dHM7XG59O1xuXG5jb21tYW5kcy5zZXRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gc2V0Q29udGV4dCAobmFtZSkge1xuICBpZiAoIXV0aWwuaGFzVmFsdWUobmFtZSkpIHtcbiAgICBuYW1lID0gdGhpcy5kZWZhdWx0Q29udGV4dE5hbWUoKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBXRUJWSUVXX1dJTikge1xuICAgIC8vIGhhbmRsZSBzZXRDb250ZXh0IFwiV0VCVklFV1wiXG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdFdlYnZpZXdOYW1lKCk7XG4gIH1cbiAgLy8gaWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgY29udGV4dCB3ZSB3YW50LCBkbyBub3RoaW5nXG4gIGlmIChuYW1lID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgY29udGV4dHMgPSBhd2FpdCB0aGlzLmdldENvbnRleHRzKCk7XG4gIC8vIGlmIHRoZSBjb250ZXh0IHdlIHdhbnQgZG9lc24ndCBleGlzdCwgZmFpbFxuICBpZiAoIV8uaW5jbHVkZXMoY29udGV4dHMsIG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hDb250ZXh0RXJyb3IoKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuc3dpdGNoQ29udGV4dChuYW1lKTtcbiAgdGhpcy5jdXJDb250ZXh0ID0gbmFtZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gV2Vidmlld3NNYXBwaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcHJvYyBUaGUgbmFtZSBvZiB0aGUgRGV2dG9vbHMgVW5peCBzb2NrZXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3ZWJ2aWV3IFRoZSB3ZWIgdmlldyBhbGlhcy4gTG9va3MgbGlrZSBgV0VCVklFV19gXG4gKiBwcmVmaXggcGx1cyBQSUQgb3IgcGFja2FnZSBuYW1lXG4gKiBAcHJvcGVydHkgez9PYmplY3R9IGluZm8gV2VidmlldyBpbmZvcm1hdGlvbiBhcyBpdCBpcyByZXRyaWV2ZWQgYnlcbiAqIC9qc29uL3ZlcnNpb24gQ0RQIGVuZHBvaW50XG4gKiBAcHJvcGVydHkgez9BcnJheTxPYmplY3Q+fSBwYWdlcyBXZWJ2aWV3IHBhZ2VzIGxpc3QgYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi9saXN0IENEUCBlbmRwb2ludFxuICogQHByb3Blcnkgez9zdHJpbmd9IHdlYnZpZXdOYW1lIEFuIGFjdHVhbCB3ZWJ2aWV3IG5hbWUgZm9yIHN3aXRjaGluZyBjb250ZXh0LlxuICogVGhpcyB2YWx1ZSBiZWNvbWVzIG51bGwgd2hlbiBmYWlsaW5nIHRvIGZpbmQgYSBQSUQgZm9yIGEgd2Vidmlldy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGpzb24gZGVtb25zdHJhdGVzIHRoZSBleGFtcGxlIG9mIFdlYnZpZXdzTWFwcGluZyBvYmplY3QuXG4gKiBOb3RlIHRoYXQgYGRlc2NyaXB0aW9uYCBpbiBgcGFnZWAgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBtb3N0IGxpa2VseSB3aGVuIGl0IGNvbWVzIHRvIE1vYmlsZSBDaHJvbWUpXG4gKiB7XG4gKiAgIFwicHJvY1wiOiBcIkB3ZWJ2aWV3X2RldnRvb2xzX3JlbW90ZV8yMjEzOFwiLFxuICogICBcIndlYnZpZXdcIjogXCJXRUJWSUVXXzIyMTM4XCIsXG4gKiAgIFwiaW5mb1wiOiB7XG4gKiAgICAgXCJBbmRyb2lkLVBhY2thZ2VcIjogXCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICBcIkJyb3dzZXJcIjogXCJDaHJvbWUvNzQuMC4zNzI5LjE4NVwiLFxuICogICAgIFwiUHJvdG9jb2wtVmVyc2lvblwiOiBcIjEuM1wiLFxuICogICAgIFwiVXNlci1BZ2VudFwiOiBcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMDsgQW5kcm9pZCBTREsgYnVpbHQgZm9yIHg4NiBCdWlsZC9RU1IxLjE5MDkyMC4wMDE7IHd2KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzQuMCBDaHJvbWUvNzQuMC4zNzI5LjE4NSBNb2JpbGUgU2FmYXJpLzUzNy4zNlwiLFxuICogICAgIFwiVjgtVmVyc2lvblwiOiBcIjcuNC4yODguMjhcIixcbiAqICAgICBcIldlYktpdC1WZXJzaW9uXCI6IFwiNTM3LjM2IChAMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZClcIixcbiAqICAgICBcIndlYlNvY2tldERlYnVnZ2VyVXJsXCI6IFwid3M6Ly8xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvYnJvd3NlclwiXG4gKiAgIH0sXG4gKiAgIFwicGFnZXNcIjogW1xuICogICAgIHtcbiAqICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJ7XFxcImF0dGFjaGVkXFxcIjp0cnVlLFxcXCJlbXB0eVxcXCI6ZmFsc2UsXFxcImhlaWdodFxcXCI6MTQ1OCxcXFwic2NyZWVuWFxcXCI6MCxcXFwic2NyZWVuWVxcXCI6MzM2LFxcXCJ2aXNpYmxlXFxcIjp0cnVlLFxcXCJ3aWR0aFxcXCI6MTA4MH1cIixcbiAqICAgICAgIFwiZGV2dG9vbHNGcm9udGVuZFVybFwiOiBcImh0dHA6Ly9jaHJvbWUtZGV2dG9vbHMtZnJvbnRlbmQuYXBwc3BvdC5jb20vc2VydmVfcmV2L0AyMjk1NTY4MmY5NGNlMDkzMzYxOTdiZmI4ZGZmZWE5OTFmYTMyZjBkL2luc3BlY3Rvci5odG1sP3dzPTEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcImlkXCI6IFwiMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIixcbiAqICAgICAgIFwidGl0bGVcIjogXCJSZWxlYXNlcyDCtyBhcHBpdW0vYXBwaXVtIMK3IEdpdEh1YlwiLFxuICogICAgICAgXCJ0eXBlXCI6IFwicGFnZVwiLFxuICogICAgICAgXCJ1cmxcIjogXCJodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9yZWxlYXNlc1wiLFxuICogICAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL3BhZ2UvMjczMjVDQzUwQjYwMEQzMUIyMzNGNDVFMDk0ODdCMUZcIlxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ3ZWJ2aWV3TmFtZVwiOiBcIldFQlZJRVdfY29tLmlvLmFwcGl1bS5zZXR0aW5nXCJcbiAqIH1cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSB3ZWJ2aWV3c01hcHBpbmcgYmFzZWQgb24gQ0RQIGVuZHBvaW50c1xuICpcbiAqIEByZXR1cm4ge0FycmF5PFdlYnZpZXdzTWFwcGluZz59IHdlYnZpZXdzTWFwcGluZ1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBhbmRyb2lkRGV2aWNlU29ja2V0OiB0aGlzLm9wdHMuYW5kcm9pZERldmljZVNvY2tldCxcbiAgICBlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlczogdHJ1ZSxcbiAgICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB0aGlzLm9wdHMud2Vidmlld0RldnRvb2xzUG9ydCxcbiAgICBlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb246IHRydWVcbiAgfTtcbiAgcmV0dXJuIGF3YWl0IHdlYnZpZXdIZWxwZXJzLmdldFdlYlZpZXdzTWFwcGluZyh0aGlzLmFkYiwgb3B0cyk7XG59O1xuXG5oZWxwZXJzLnN3aXRjaENvbnRleHQgPSBhc3luYyBmdW5jdGlvbiBzd2l0Y2hDb250ZXh0IChuYW1lKSB7XG4gIC8vIFdlIGhhdmUgc29tZSBvcHRpb25zIHdoZW4gaXQgY29tZXMgdG8gd2Vidmlld3MuIElmIHdlIHdhbnQgYVxuICAvLyBDaHJvbWVkcml2ZXIgd2Vidmlldywgd2UgY2FuIG9ubHkgY29udHJvbCBvbmUgYXQgYSB0aW1lLlxuICBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQobmFtZSkpIHtcbiAgICAvLyBzdGFydCBwcm94eWluZyBjb21tYW5kcyBkaXJlY3RseSB0byBjaHJvbWVkcml2ZXJcbiAgICBhd2FpdCB0aGlzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkobmFtZSk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGlmIHdlJ3JlIG1vdmluZyB0byBhIG5vbi1jaHJvbWVkcml2ZXIgd2VidmlldywgYW5kIG91ciBjdXJyZW50IGNvbnRleHRcbiAgICAvLyBfaXNfIGEgY2hyb21lZHJpdmVyIHdlYnZpZXcsIGlmIGNhcHMgcmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBpcyBzZXRcbiAgICAvLyB0byB0cnVlIHRoZW4ga2lsbCBjaHJvbWVkcml2ZXIgc2Vzc2lvbiB1c2luZyBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyBvclxuICAgIC8vIGVsc2Ugc2ltcGx5IHN1c3BlbmQgcHJveHlpbmcgdG8gdGhlIGxhdHRlclxuICAgIGlmICh0aGlzLm9wdHMucmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucykge1xuICAgICAgbG9nLmRlYnVnKCdyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIHNldCB0byB0cnVlOyBraWxsaW5nIGV4aXN0aW5nIGNocm9tZWRyaXZlcnMnKTtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcENocm9tZWRyaXZlclByb3hpZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWRuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHN3aXRjaGluZyB0byBjb250ZXh0ICcke25hbWV9J2ApO1xuICB9XG59O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogT24tb2JqZWN0IGNvbnRleHQtcmVsYXRlZCBoZWxwZXJzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gVGhlIHJlYXNvbiB0aGlzIGlzIGEgZnVuY3Rpb24gYW5kIG5vdCBqdXN0IGEgY29uc3RhbnQgaXMgdGhhdCBib3RoIGFuZHJvaWQtXG4vLyBkcml2ZXIgYW5kIHNlbGVuZHJvaWQtZHJpdmVyIHVzZSB0aGlzIGxvZ2ljLCBhbmQgZWFjaCBvbmUgcmV0dXJuc1xuLy8gYSBkaWZmZXJlbnQgZGVmYXVsdCBjb250ZXh0IG5hbWVcbmhlbHBlcnMuZGVmYXVsdENvbnRleHROYW1lID0gZnVuY3Rpb24gZGVmYXVsdENvbnRleHROYW1lICgpIHtcbiAgcmV0dXJuIE5BVElWRV9XSU47XG59O1xuXG5oZWxwZXJzLmRlZmF1bHRXZWJ2aWV3TmFtZSA9IGZ1bmN0aW9uIGRlZmF1bHRXZWJ2aWV3TmFtZSAoKSB7XG4gIHJldHVybiBXRUJWSUVXX0JBU0UgKyB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbn07XG5cbmhlbHBlcnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCAhPT0gbnVsbCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG4vLyBUdXJuIG9uIHByb3h5aW5nIHRvIGFuIGV4aXN0aW5nIENocm9tZWRyaXZlciBzZXNzaW9uIG9yIGEgbmV3IG9uZVxuaGVscGVycy5zdGFydENocm9tZWRyaXZlclByb3h5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVkcml2ZXJQcm94eSAoY29udGV4dCkge1xuICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gY2hyb21lLWJhY2tlZCB3ZWJ2aWV3IGNvbnRleHQgJyR7Y29udGV4dH0nYCk7XG5cbiAgbGV0IGNkO1xuICBpZiAodGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSkge1xuICAgIC8vIGluIHRoZSBjYXNlIHdoZXJlIHdlJ3ZlIGFscmVhZHkgc2V0IHVwIGEgY2hyb21lZHJpdmVyIGZvciBhIGNvbnRleHQsXG4gICAgLy8gd2Ugd2FudCB0byByZWNvbm5lY3QgdG8gaXQsIG5vdCBjcmVhdGUgYSB3aG9sZSBuZXcgb25lXG4gICAgbG9nLmRlYnVnKGBGb3VuZCBleGlzdGluZyBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nLiBVc2luZyBpdC5gKTtcbiAgICBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgYXdhaXQgc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlcihjZCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgIG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcCA9IHRydWU7XG5cbiAgICAvLyBpZiByZXF1ZXN0ZWQsIHRlbGwgY2hyb21lZHJpdmVyIHRvIGF0dGFjaCB0byB0aGUgYW5kcm9pZCBwYWNrYWdlIHdlIGhhdmVcbiAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgbmFtZSwgcmF0aGVyIHRoYW4gdGhlIHBhY2thZ2Ugb2YgdGhlIEFVVC5cbiAgICAvLyBBbmQgdHVybiB0aGlzIG9uIGJ5IGRlZmF1bHQgZm9yIGNocm9tZS0taWYgY2hyb21lIHBvcHMgdXAgd2l0aCBhIHdlYnZpZXdcbiAgICAvLyBhbmQgc29tZW9uZSB3YW50cyB0byBzd2l0Y2ggdG8gaXQsIHdlIHNob3VsZCBsZXQgY2hyb21lZHJpdmVyIGNvbm5lY3QgdG9cbiAgICAvLyBjaHJvbWUgcmF0aGVyIHRoYW4gc3RheWluZyBzdHVjayBvbiB0aGUgQVVUXG4gICAgaWYgKG9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIHx8IGNvbnRleHQgPT09IGAke1dFQlZJRVdfQkFTRX1jaHJvbWVgKSB7XG4gICAgICBsZXQgYW5kcm9pZFBhY2thZ2UgPSBjb250ZXh0Lm1hdGNoKGAke1dFQlZJRVdfQkFTRX0oLispYCk7XG4gICAgICBpZiAoYW5kcm9pZFBhY2thZ2UgJiYgYW5kcm9pZFBhY2thZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gYW5kcm9pZFBhY2thZ2VbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbn07XG5cbi8vIEhhbmRsZSBhbiBvdXQtb2YtYmFuZCBDaHJvbWVkcml2ZXIgc3RvcCBldmVudFxuaGVscGVycy5vbkNocm9tZWRyaXZlclN0b3AgPSBhc3luYyBmdW5jdGlvbiBvbkNocm9tZWRyaXZlclN0b3AgKGNvbnRleHQpIHtcbiAgbG9nLndhcm4oYENocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9IHN0b3BwZWQgdW5leHBlY3RlZGx5YCk7XG4gIGlmIChjb250ZXh0ID09PSB0aGlzLmN1ckNvbnRleHQpIHtcbiAgICAvLyB3ZSBleGl0ZWQgdW5leHBlY3RlZGx5IHdoaWxlIGF1dG9tYXRpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgc28gd2FudFxuICAgIC8vIHRvIHNodXQgZG93biB0aGUgc2Vzc2lvbiBhbmQgcmVzcG9uZCB3aXRoIGFuIGVycm9yXG4gICAgbGV0IGVyciA9IG5ldyBFcnJvcignQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5IGR1cmluZyBzZXNzaW9uJyk7XG4gICAgYXdhaXQgdGhpcy5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihlcnIpO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgQ2hyb21lZHJpdmVyIGluIHRoZSBub24tYWN0aXZlIGNvbnRleHQgYmFyZnMsIHdlIGRvbid0IHJlYWxseVxuICAgIC8vIGNhcmUsIHdlJ2xsIGp1c3QgbWFrZSBhIG5ldyBvbmUgbmV4dCB0aW1lIHdlIG5lZWQgdGhlIGNvbnRleHQuXG4gICAgbG9nLndhcm4oXCJDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHksIGJ1dCBpdCB3YXNuJ3QgdGhlIGFjdGl2ZSBcIiArXG4gICAgICAgICAgICAgICAgJ2NvbnRleHQsIGlnbm9yaW5nJyk7XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbi8vIEludGVudGlvbmFsbHkgc3RvcCBhbGwgdGhlIGNocm9tZWRyaXZlcnMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIGlnbm9yZVxuLy8gdGhlaXIgZXhpdCBldmVudHNcbmhlbHBlcnMuc3RvcENocm9tZWRyaXZlclByb3hpZXMgPSBhc3luYyBmdW5jdGlvbiBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyAoKSB7XG4gIHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7IC8vIG1ha2Ugc3VyZSB3ZSB0dXJuIG9mZiB0aGUgcHJveHkgZmxhZ1xuICBmb3IgKGxldCBjb250ZXh0IG9mIF8ua2V5cyh0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzKSkge1xuICAgIGxldCBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgbG9nLmRlYnVnKGBTdG9wcGluZyBjaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fWApO1xuICAgIC8vIHN0b3AgbGlzdGVuaW5nIGZvciB0aGUgc3RvcHBlZCBzdGF0ZSBldmVudFxuICAgIGNkLnJlbW92ZUFsbExpc3RlbmVycyhDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNkLnN0b3AoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBFcnJvciBzdG9wcGluZyBDaHJvbWVkcml2ZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQ29udGV4dCAodmlld05hbWUpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXModmlld05hbWUsIFdFQlZJRVdfV0lOKSB8fCB2aWV3TmFtZSA9PT0gQ0hST01JVU1fV0lOO1xufTtcblxuaGVscGVycy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSA9IGZ1bmN0aW9uIHNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgcmV0dXJuICEhdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMgJiZcbiAgICAgICAgIF8uaXNBcnJheSh0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzKSAmJlxuICAgICAgICAgdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncy5pbmNsdWRlcygnLS1uby1maXJzdC1ydW4nKTtcbn07XG5cbmhlbHBlcnMuZGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBhc3luYyBmdW5jdGlvbiBkaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIGxvZy5pbmZvKCdUcnlpbmcgdG8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZScpO1xuICBsZXQgYWN0aXZpdHkgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRBY3Rpdml0eSgpO1xuICBpZiAoYWN0aXZpdHkgIT09ICdvcmcuY2hyb21pdW0uY2hyb21lLmJyb3dzZXIuZmlyc3RydW4uRmlyc3RSdW5BY3Rpdml0eScpIHtcbiAgICBsb2cuaW5mbygnQ2hyb21lIHdlbGNvbWUgZGlhbG9nIG5ldmVyIHNob3dlZCB1cCEgQ29udGludWluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvdGVybXNfYWNjZXB0JywgZmFsc2UpO1xuICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB0cnkge1xuICAgIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC9uZWdhdGl2ZV9idXR0b24nLCBmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIERPIE5PVEhJTkcsIFRISVMgREVWSUNFIERJRE5UIExBVU5DSCBUSEUgU0lHTklOIERJQUxPR1xuICAgIC8vIElUIE1VU1QgQkUgQSBOT04gR01TIERFVklDRVxuICAgIGxvZy53YXJuKGBUaGlzIGRldmljZSBkaWQgbm90IHNob3cgQ2hyb21lIFNpZ25JbiBkaWFsb2csICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLnN0YXJ0Q2hyb21lU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lU2Vzc2lvbiAoKSB7XG4gIGxvZy5pbmZvKCdTdGFydGluZyBhIGNocm9tZS1iYXNlZCBicm93c2VyIHNlc3Npb24nKTtcbiAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gIGNvbnN0IGtub3duUGFja2FnZXMgPSBbXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgICdjb20uY2hyb21lLmJldGEnLFxuICAgICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICBdO1xuXG4gIGlmIChfLmluY2x1ZGVzKGtub3duUGFja2FnZXMsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgIG9wdHMuY2hyb21lQnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICB0aGlzLmNocm9tZWRyaXZlciA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiKTtcbiAgdGhpcy5jaHJvbWVkcml2ZXIub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoQ0hST01JVU1fV0lOKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBDaHJvbWUgc2Vzc2lvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIGNvbnRleHQgaXNcbiAgLy8gYXBwcm9wcmlhdGVseSBzZXQgYW5kIHRoYXQgdGhpcyBjaHJvbWVkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3RcbiAgLy8gb2Ygc2Vzc2lvbiBjaHJvbWVkcml2ZXJzIHNvIHdlIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGhcbiAgdGhpcy5jdXJDb250ZXh0ID0gQ0hST01JVU1fV0lOO1xuICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW0NIUk9NSVVNX1dJTl0gPSB0aGlzLmNocm9tZWRyaXZlcjtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICBpZiAodGhpcy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSgpKSB7XG4gICAgLy8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZSBkaWFsb2dcbiAgICBhd2FpdCB0aGlzLmRpc21pc3NDaHJvbWVXZWxjb21lKCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyIChjaHJvbWVkcml2ZXIpIHtcbiAgLy8gY2hlY2sgdGhlIHN0YXR1cyBieSBzZW5kaW5nIGEgc2ltcGxlIHdpbmRvdy1iYXNlZCBjb21tYW5kIHRvIENocm9tZURyaXZlclxuICAvLyBpZiB0aGVyZSBpcyBhbiBlcnJvciwgd2Ugd2FudCB0byByZWNyZWF0ZSB0aGUgQ2hyb21lRHJpdmVyIHNlc3Npb25cbiAgaWYgKCFhd2FpdCBjaHJvbWVkcml2ZXIuaGFzV29ya2luZ1dlYnZpZXcoKSkge1xuICAgIGxvZy5kZWJ1ZygnQ2hyb21lRHJpdmVyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSB3aW5kb3cuICcgK1xuICAgICAgICAgICAgICAgICAnUmUtaW5pdGlhbGl6aW5nIHRoZSBzZXNzaW9uLicpO1xuICAgIGF3YWl0IGNocm9tZWRyaXZlci5yZXN0YXJ0KCk7XG4gIH1cbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn1cblxuLyoqXG4gKiBGaW5kIGEgZnJlZSBwb3J0IHRvIGhhdmUgQ2hyb21lZHJpdmVyIGxpc3RlbiBvbi5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBbcG9ydFNwZWNdIC0gQXJyYXkgd2hpY2ggaXMgYSBsaXN0IG9mIHBvcnRzLiBBIGxpc3QgaXRlbSBtYXlcbiAqIGFsc28gaXRzZWxmIGJlIGFuIGFycmF5IG9mIGxlbmd0aCAyIHNwZWNpZnlpbmcgYSBzdGFydCBhbmQgZW5kIHBvcnQgb2ZcbiAqIGEgcmFuZ2UuIFNvbWUgdmFsaWQgcG9ydCBzcGVjczpcbiAqICAgIC0gWzgwMDAsIDgwMDEsIDgwMDJdXG4gKiAgICAtIFtbODAwMCwgODAwNV1dXG4gKiAgICAtIFs4MDAwLCBbOTAwMCwgOTEwMF1dXG4gKlxuICogQHJldHVybiB7bnVtYmVyfSBBIGZyZWUgcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDaHJvbWVkcml2ZXJQb3J0IChwb3J0U3BlYykge1xuICBjb25zdCBnZXRQb3J0ID0gQi5wcm9taXNpZnkoUG9ydEZpbmRlci5nZXRQb3J0LCB7Y29udGV4dDogUG9ydEZpbmRlcn0pO1xuXG4gIC8vIGlmIHRoZSB1c2VyIGRpZG4ndCBnaXZlIHVzIGFueSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjaHJvbWVkcml2ZXJcbiAgLy8gcG9ydCByYW5nZXMsIGp1c3QgZmluZCBhbnkgZnJlZSBwb3J0XG4gIGlmICghcG9ydFNwZWMpIHtcbiAgICBjb25zdCBwb3J0ID0gYXdhaXQgZ2V0UG9ydCgpO1xuICAgIGxvZy5kZWJ1ZyhgQSBwb3J0IHdhcyBub3QgZ2l2ZW4sIHVzaW5nIHJhbmRvbSBmcmVlIHBvcnQ6ICR7cG9ydH1gKTtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBmcmVlIHBvcnQgYmFzZWQgb24gYSBsaXN0IG9yIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGxvZy5kZWJ1ZyhgRmluZGluZyBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIGxldCBmb3VuZFBvcnQgPSBudWxsO1xuICBmb3IgKGNvbnN0IHBvdGVudGlhbFBvcnQgb2YgcG9ydFNwZWMpIHtcbiAgICBsZXQgcG9ydCwgc3RvcFBvcnQ7XG4gICAgaWYgKF8uaXNBcnJheShwb3RlbnRpYWxQb3J0KSkge1xuICAgICAgKFtwb3J0LCBzdG9wUG9ydF0gPSBwb3RlbnRpYWxQb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9ydCA9IHBhcnNlSW50KHBvdGVudGlhbFBvcnQsIDEwKTsgLy8gZW5zdXJlIHdlIGhhdmUgYSBudW1iZXIgYW5kIG5vdCBhIHN0cmluZ1xuICAgICAgc3RvcFBvcnQgPSBwb3J0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKGBDaGVja2luZyBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH1gKTtcbiAgICAgIGZvdW5kUG9ydCA9IGF3YWl0IGdldFBvcnQoe3BvcnQsIHN0b3BQb3J0fSk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZGVidWcoYE5vdGhpbmcgaW4gcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9IHdhcyBhdmFpbGFibGVgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRQb3J0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgY2hyb21lZHJpdmVyUG9ydHMgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgfVxuXG4gIGxvZy5kZWJ1ZyhgVXNpbmcgZnJlZSBwb3J0ICR7Zm91bmRQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIHJldHVybiBmb3VuZFBvcnQ7XG59XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkICgpIHtcbiAgaWYgKHRoaXMuaXNGZWF0dXJlRW5hYmxlZChDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbG9nLmRlYnVnKGBBdXRvbWF0ZWQgQ2hyb21lZHJpdmVyIGRvd25sb2FkIGlzIGRpc2FibGVkLiBgICtcbiAgICBgVXNlICcke0NIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRX0nIHNlcnZlciBmZWF0dXJlIHRvIGVuYWJsZSBpdGApO1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5oZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyID0gYXN5bmMgZnVuY3Rpb24gc2V0dXBOZXdDaHJvbWVkcml2ZXIgKG9wdHMsIGN1ckRldmljZUlkLCBhZGIsIGNvbnRleHQgPSBudWxsKSB7XG4gIGlmIChvcHRzLmNocm9tZURyaXZlclBvcnQpIHtcbiAgICBsb2cud2FybihgVGhlICdjaHJvbWVEcml2ZXJQb3J0JyBjYXBhYmlsaXR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2Nocm9tZWRyaXZlclBvcnQnIGluc3RlYWRgKTtcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBvcHRzLmNocm9tZURyaXZlclBvcnQ7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVkcml2ZXJQb3J0KSB7XG4gICAgbG9nLmRlYnVnKGBVc2luZyB1c2VyLXNwZWNpZmllZCBwb3J0ICR7b3B0cy5jaHJvbWVkcml2ZXJQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBzaW5nbGUgcG9ydCB3YXNuJ3QgZ2l2ZW4sIHdlJ2xsIGxvb2sgZm9yIGEgZnJlZSBvbmVcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBhd2FpdCBnZXRDaHJvbWVkcml2ZXJQb3J0KG9wdHMuY2hyb21lZHJpdmVyUG9ydHMpO1xuICB9XG5cbiAgY29uc3QgZGV0YWlscyA9IGNvbnRleHQgPyB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3RGV0YWlscyhhZGIsIGNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBpZiAoIV8uaXNFbXB0eShkZXRhaWxzKSkge1xuICAgIGxvZy5kZWJ1ZygnUGFzc2luZyB3ZWIgdmlldyBkZXRhaWxzIHRvIHRoZSBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3I6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZGV0YWlscywgbnVsbCwgMikpO1xuICB9XG5cbiAgY29uc3QgY2hyb21lZHJpdmVyID0gbmV3IENocm9tZWRyaXZlcih7XG4gICAgcG9ydDogb3B0cy5jaHJvbWVkcml2ZXJQb3J0LFxuICAgIGV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZSxcbiAgICBhZGIsXG4gICAgY21kQXJnczogb3B0cy5jaHJvbWVkcml2ZXJBcmdzLFxuICAgIHZlcmJvc2U6ICEhb3B0cy5zaG93Q2hyb21lZHJpdmVyTG9nLFxuICAgIGV4ZWN1dGFibGVEaXI6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpcixcbiAgICBtYXBwaW5nUGF0aDogb3B0cy5jaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSxcbiAgICBidW5kbGVJZDogb3B0cy5jaHJvbWVCdW5kbGVJZCxcbiAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUsXG4gICAgZGlzYWJsZUJ1aWxkQ2hlY2s6IG9wdHMuY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgZGV0YWlscyxcbiAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQ6ICh0aGlzIHx8IHt9KS5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWRcbiAgICAgID8gdGhpcy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQoKSA6IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBjaHJvbWVPcHRpb25zXG4gIG9wdHMuY2hyb21lT3B0aW9ucyA9IG9wdHMuY2hyb21lT3B0aW9ucyB8fCB7fTtcbiAgLy8gdHJ5IG91dCBhbnkgcHJlZml4ZWQgY2hyb21lT3B0aW9ucyxcbiAgLy8gYW5kIHN0cmlwIHRoZSBwcmVmaXhcbiAgZm9yIChjb25zdCBvcHQgb2YgXy5rZXlzKG9wdHMpKSB7XG4gICAgaWYgKG9wdC5lbmRzV2l0aCgnOmNocm9tZU9wdGlvbnMnKSkge1xuICAgICAgbG9nLndhcm4oYE1lcmdpbmcgJyR7b3B0fScgaW50byAnY2hyb21lT3B0aW9ucycuIFRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JgKTtcbiAgICAgIF8ubWVyZ2Uob3B0cy5jaHJvbWVPcHRpb25zLCBvcHRzW29wdF0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNhcHMgPSB3ZWJ2aWV3SGVscGVycy5jcmVhdGVDaHJvbWVkcml2ZXJDYXBzKG9wdHMsIGN1ckRldmljZUlkLCBkZXRhaWxzKTtcbiAgbG9nLmRlYnVnKGBCZWZvcmUgc3RhcnRpbmcgY2hyb21lZHJpdmVyLCBhbmRyb2lkUGFja2FnZSBpcyAnJHtjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2V9J2ApO1xuICBhd2FpdCBjaHJvbWVkcml2ZXIuc3RhcnQoY2Fwcyk7XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59O1xuY29uc3Qgc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBoZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyO1xuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMsIHNldHVwTmV3Q2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|