oxygen-cli 1.37.9 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1687 -1687
- package/LICENSE +672 -672
- package/README.md +37 -37
- package/build/core/OxygenCore.js +1 -1
- package/build/core/OxygenEvents.js +1 -1
- package/build/core/OxygenModule.js +1 -1
- package/build/core/OxygenService.js +1 -1
- package/build/core/OxygenSubModule.js +1 -1
- package/build/core/WebDriverModule.js +1 -1
- package/build/core/utils.js +1 -1
- package/build/errors/HookError.js +1 -1
- package/build/errors/ModuleError.js +1 -1
- package/build/errors/ModuleUnavailableError.js +1 -1
- package/build/errors/OxygenError.js +1 -1
- package/build/errors/ScriptNotFound.js +1 -1
- package/build/errors/helper.js +1 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +2 -1
- package/build/lib/cli.js +12 -2
- package/build/lib/debugger.js +1 -1
- package/build/lib/img-merge.js +1 -1
- package/build/lib/launcher.js +1 -1
- package/build/lib/logger.js +43 -43
- package/build/lib/moduleRequire.js +1 -1
- package/build/lib/parallel-launcher.js +1 -1
- package/build/lib/param-manager.js +1 -1
- package/build/lib/param-reader-csv.js +1 -1
- package/build/lib/param-reader-excel.js +1 -1
- package/build/lib/param-reader-json.js +1 -1
- package/build/lib/text-to-image.js +1 -1
- package/build/lib/util.js +1 -1
- package/build/model/case-result.js +1 -1
- package/build/model/failure.js +1 -1
- package/build/model/status.js +1 -1
- package/build/model/step-result.js +1 -1
- package/build/model/suite-result.js +1 -1
- package/build/model/test-result.js +1 -1
- package/build/model/testcase.js +1 -1
- package/build/model/testsuite.js +1 -1
- package/build/ox_modules/index.js +1 -1
- package/build/ox_modules/module-assert.js +37 -37
- package/build/ox_modules/module-date.js +24 -24
- package/build/ox_modules/module-db.js +52 -52
- package/build/ox_modules/module-email.js +59 -59
- package/build/ox_modules/module-eyes.js +34 -34
- package/build/ox_modules/module-http/ntlm-util.js +10 -10
- package/build/ox_modules/module-http/ntlm.js +15 -15
- package/build/ox_modules/module-http.js +132 -132
- package/build/ox_modules/module-log.js +27 -27
- package/build/ox_modules/module-mailinator.js +87 -87
- package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-mob/commands/assertText.js +21 -21
- package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
- package/build/ox_modules/module-mob/commands/back.js +16 -16
- package/build/ox_modules/module-mob/commands/clear.js +19 -19
- package/build/ox_modules/module-mob/commands/click.js +17 -17
- package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
- package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
- package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/debug.js +16 -16
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
- package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
- package/build/ox_modules/module-mob/commands/execute.js +21 -21
- package/build/ox_modules/module-mob/commands/findElement.js +20 -20
- package/build/ox_modules/module-mob/commands/findElements.js +23 -23
- package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
- package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
- package/build/ox_modules/module-mob/commands/getSource.js +16 -16
- package/build/ox_modules/module-mob/commands/getText.js +18 -18
- package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
- package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
- package/build/ox_modules/module-mob/commands/getValue.js +18 -18
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
- package/build/ox_modules/module-mob/commands/index.js +1 -1
- package/build/ox_modules/module-mob/commands/installApp.js +16 -16
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
- package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
- package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
- package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
- package/build/ox_modules/module-mob/commands/isExist.js +19 -19
- package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
- package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
- package/build/ox_modules/module-mob/commands/open.js +17 -17
- package/build/ox_modules/module-mob/commands/pause.js +16 -16
- package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
- package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
- package/build/ox_modules/module-mob/commands/select.js +24 -24
- package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
- package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
- package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
- package/build/ox_modules/module-mob/commands/setContext.js +16 -16
- package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
- package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
- package/build/ox_modules/module-mob/commands/shake.js +16 -16
- package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
- package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
- package/build/ox_modules/module-mob/commands/swipe.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
- package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-mob/commands/tap.js +17 -17
- package/build/ox_modules/module-mob/commands/type.js +20 -20
- package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
- package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-mob.js +74 -74
- package/build/ox_modules/module-pdf.js +35 -35
- package/build/ox_modules/module-proxy.js +77 -77
- package/build/ox_modules/module-serial.js +55 -55
- package/build/ox_modules/module-shell.js +25 -25
- package/build/ox_modules/module-soap.js +72 -72
- package/build/ox_modules/module-twilio.js +41 -41
- package/build/ox_modules/module-utils.js +91 -91
- package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
- package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
- package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
- package/build/ox_modules/module-web/commands/assertExist.js +17 -17
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/assertText.js +21 -21
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
- package/build/ox_modules/module-web/commands/assertValue.js +20 -20
- package/build/ox_modules/module-web/commands/back.js +16 -16
- package/build/ox_modules/module-web/commands/clear.js +18 -18
- package/build/ox_modules/module-web/commands/click.js +25 -25
- package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
- package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
- package/build/ox_modules/module-web/commands/debug.js +15 -15
- package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
- package/build/ox_modules/module-web/commands/deselect.js +22 -22
- package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
- package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
- package/build/ox_modules/module-web/commands/execute.js +24 -24
- package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
- package/build/ox_modules/module-web/commands/findElement.js +19 -19
- package/build/ox_modules/module-web/commands/findElements.js +22 -22
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
- package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
- package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
- package/build/ox_modules/module-web/commands/getCookies.js +13 -13
- package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
- package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
- package/build/ox_modules/module-web/commands/getHTML.js +17 -17
- package/build/ox_modules/module-web/commands/getSource.js +16 -16
- package/build/ox_modules/module-web/commands/getText.js +18 -18
- package/build/ox_modules/module-web/commands/getTitle.js +12 -12
- package/build/ox_modules/module-web/commands/getUrl.js +16 -16
- package/build/ox_modules/module-web/commands/getValue.js +18 -18
- package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
- package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
- package/build/ox_modules/module-web/commands/index.js +1 -1
- package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
- package/build/ox_modules/module-web/commands/isChecked.js +18 -18
- package/build/ox_modules/module-web/commands/isExist.js +19 -19
- package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
- package/build/ox_modules/module-web/commands/isSelected.js +23 -23
- package/build/ox_modules/module-web/commands/isVisible.js +19 -19
- package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
- package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
- package/build/ox_modules/module-web/commands/mock.js +20 -20
- package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
- package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
- package/build/ox_modules/module-web/commands/newWindow.js +16 -16
- package/build/ox_modules/module-web/commands/open.js +16 -16
- package/build/ox_modules/module-web/commands/pause.js +15 -15
- package/build/ox_modules/module-web/commands/point.js +21 -21
- package/build/ox_modules/module-web/commands/pointJS.js +15 -15
- package/build/ox_modules/module-web/commands/refresh.js +15 -15
- package/build/ox_modules/module-web/commands/rightClick.js +17 -17
- package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
- package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
- package/build/ox_modules/module-web/commands/select.js +23 -23
- package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
- package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
- package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
- package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
- package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
- package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
- package/build/ox_modules/module-web/commands/type.js +20 -20
- package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
- package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
- package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
- package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
- package/build/ox_modules/module-web/commands/verifyText.js +21 -21
- package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
- package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
- package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
- package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
- package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForText.js +20 -20
- package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
- package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
- package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
- package/build/ox_modules/module-web.js +94 -94
- package/build/ox_modules/module-win/commands/assertText.js +17 -17
- package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
- package/build/ox_modules/module-win/commands/assertValue.js +14 -14
- package/build/ox_modules/module-win/commands/back.js +11 -11
- package/build/ox_modules/module-win/commands/clear.js +13 -13
- package/build/ox_modules/module-win/commands/click.js +13 -13
- package/build/ox_modules/module-win/commands/clickLong.js +14 -14
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
- package/build/ox_modules/module-win/commands/findElement.js +15 -15
- package/build/ox_modules/module-win/commands/findElements.js +15 -15
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
- package/build/ox_modules/module-win/commands/getLocation.js +14 -14
- package/build/ox_modules/module-win/commands/getSource.js +12 -12
- package/build/ox_modules/module-win/commands/getText.js +14 -14
- package/build/ox_modules/module-win/commands/getValue.js +14 -14
- package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
- package/build/ox_modules/module-win/commands/index.js +1 -1
- package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
- package/build/ox_modules/module-win/commands/isChecked.js +14 -14
- package/build/ox_modules/module-win/commands/isClickable.js +14 -14
- package/build/ox_modules/module-win/commands/isExist.js +15 -15
- package/build/ox_modules/module-win/commands/isSelected.js +14 -14
- package/build/ox_modules/module-win/commands/isVisible.js +15 -15
- package/build/ox_modules/module-win/commands/open.js +13 -13
- package/build/ox_modules/module-win/commands/pause.js +12 -12
- package/build/ox_modules/module-win/commands/rightClick.js +13 -13
- package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
- package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
- package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
- package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
- package/build/ox_modules/module-win/commands/tap.js +13 -13
- package/build/ox_modules/module-win/commands/type.js +16 -16
- package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
- package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
- package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
- package/build/ox_modules/module-win.js +47 -47
- package/build/ox_modules/utils.js +8 -8
- package/build/ox_reporters/excel/template.json +48 -48
- package/build/ox_reporters/html/index.ejs +163 -163
- package/build/ox_reporters/html/summary.ejs +77 -77
- package/build/ox_reporters/html/tests-details.ejs +134 -134
- package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
- package/build/ox_reporters/reporter-excel.js +1 -1
- package/build/ox_reporters/reporter-html.js +1 -1
- package/build/ox_reporters/reporter-json.js +1 -1
- package/build/ox_reporters/reporter-junit.js +1 -1
- package/build/ox_reporters/reporter-pdf.js +1 -1
- package/build/ox_reporters/reporter-rp.js +1 -1
- package/build/ox_reporters/reporter-xml.js +1 -1
- package/build/ox_services/service-devtools/submodule-network.js +1 -1
- package/build/ox_services/service-devtools.js +1 -1
- package/build/reporter/FileReporterBase.js +1 -1
- package/build/reporter/ReportAggregator.js +1 -1
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +136 -0
- package/build/runners/WorkerProcess.js +1 -1
- package/build/runners/cucumber/CucumberEventListener.js +1 -1
- package/build/runners/cucumber/CucumberReporter.js +1 -1
- package/build/runners/cucumber/CucumberWorker.js +1 -1
- package/build/runners/cucumber/index.js +1 -1
- package/build/runners/cucumber/worker.js +1 -1
- package/build/runners/index.js +1 -1
- package/build/runners/oxygen/OxygenWorker.js +1 -1
- package/build/runners/oxygen/index.js +1 -1
- package/build/runners/oxygen/worker.js +1 -1
- package/config/default.json +6 -6
- package/package.json +137 -136
- package/types/index.d.ts +70 -70
- package/types/module-eyes.d.ts +39 -39
- package/types/module-http.d.ts +163 -163
- package/types/module-log.d.ts +34 -34
- package/types/module-mob.d.ts +966 -966
- package/types/module-pdf.d.ts +40 -40
- package/types/module-proxy.d.ts +100 -100
- package/types/module-shell.d.ts +24 -24
- package/types/module-utils.d.ts +99 -99
- package/types/module-web.d.ts +1053 -1053
- package/types/module-win.d.ts +352 -352
- package/types/oxygen.d.ts +53 -53
- package/log.txt +0 -1614
package/README.md
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
Oxygen
|
|
2
|
-
=======
|
|
3
|
-
|
|
4
|
-
Oxygen is an open source framework and tool-set built on top of Appium, WebdriverIO, and Selenium that significantly simplifies writing and running automation tests. It implements many commonly recurring patterns out-of-the-box and hides complexities of the aforementioned backends behind a concise API.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Supported Platforms
|
|
8
|
-
|
|
9
|
-
* Android - Native, Hybrid, and Web
|
|
10
|
-
* iOS - Native, Hybrid, and Web
|
|
11
|
-
* Windows - Chrome, Internet Explorer
|
|
12
|
-
* Linux - Chrome
|
|
13
|
-
* OS X - Chrome
|
|
14
|
-
|
|
15
|
-
## Installation
|
|
16
|
-
```shell
|
|
17
|
-
npm install -g oxygen-cli
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## OS Specific requirements for building:
|
|
21
|
-
|
|
22
|
-
#### Windows:
|
|
23
|
-
* ```npm --add-python-to-path='true' --debug install --global windows-build-tools``` from ```cmd``` with admin rights.
|
|
24
|
-
* [Optional. Required for DB support] Windows SDK
|
|
25
|
-
|
|
26
|
-
#### Linux
|
|
27
|
-
* [Optional. Required for DB support] unixodbc binaries and development libraries:
|
|
28
|
-
Debian/Ubuntu - `sudo apt-get install unixodbc unixodbc-dev`
|
|
29
|
-
RedHat/CentOS - `sudo dnf install unixODBC unixODBC-devel`
|
|
30
|
-
|
|
31
|
-
#### OS X
|
|
32
|
-
* [Optional. Required for DB support] unixodbc binaries and development libraries: `brew install unixodbc`
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## Getting Started
|
|
36
|
-
|
|
37
|
-
See the documentation at [docs.oxygenhq.org](http://docs.oxygenhq.org)
|
|
1
|
+
Oxygen
|
|
2
|
+
=======
|
|
3
|
+
|
|
4
|
+
Oxygen is an open source framework and tool-set built on top of Appium, WebdriverIO, and Selenium that significantly simplifies writing and running automation tests. It implements many commonly recurring patterns out-of-the-box and hides complexities of the aforementioned backends behind a concise API.
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## Supported Platforms
|
|
8
|
+
|
|
9
|
+
* Android - Native, Hybrid, and Web
|
|
10
|
+
* iOS - Native, Hybrid, and Web
|
|
11
|
+
* Windows - Chrome, Internet Explorer
|
|
12
|
+
* Linux - Chrome
|
|
13
|
+
* OS X - Chrome
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
```shell
|
|
17
|
+
npm install -g oxygen-cli
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## OS Specific requirements for building:
|
|
21
|
+
|
|
22
|
+
#### Windows:
|
|
23
|
+
* ```npm --add-python-to-path='true' --debug install --global windows-build-tools``` from ```cmd``` with admin rights.
|
|
24
|
+
* [Optional. Required for DB support] Windows SDK
|
|
25
|
+
|
|
26
|
+
#### Linux
|
|
27
|
+
* [Optional. Required for DB support] unixodbc binaries and development libraries:
|
|
28
|
+
Debian/Ubuntu - `sudo apt-get install unixodbc unixodbc-dev`
|
|
29
|
+
RedHat/CentOS - `sudo dnf install unixODBC unixODBC-devel`
|
|
30
|
+
|
|
31
|
+
#### OS X
|
|
32
|
+
* [Optional. Required for DB support] unixodbc binaries and development libraries: `brew install unixodbc`
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## Getting Started
|
|
36
|
+
|
|
37
|
+
See the documentation at [docs.oxygenhq.org](http://docs.oxygenhq.org)
|
package/build/core/OxygenCore.js
CHANGED
|
@@ -1075,4 +1075,4 @@ class Oxygen extends _OxygenEvents.default {
|
|
|
1075
1075
|
}
|
|
1076
1076
|
|
|
1077
1077
|
exports.default = Oxygen;
|
|
1078
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwibmFtZXMiOlsidjEiLCJyZXF1aXJlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJnZXQiLCJvcmlnIiwiRXJyb3IiLCJwcmVwYXJlU3RhY2tUcmFjZSIsIl8iLCJzdGFjayIsImVyciIsImNhcHR1cmVTdGFja1RyYWNlIiwiREVGQVVMVF9USU1FT1VUIiwiREVGQVVMVF9PUFRTIiwiYmFja3RyYWNlIiwiY29tcGlsZXIiLCJmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnMiLCJmYWlsRmFzdCIsImlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zIiwibmFtZSIsInByb2ZpbGUiLCJvcmRlciIsInNuaXBwZXRTeW50YXgiLCJ1bmRlZmluZWQiLCJzbmlwcGV0cyIsInNvdXJjZSIsInN0cmljdCIsInRhZ0V4cHJlc3Npb24iLCJ0YWdzSW5UaXRsZSIsInRpbWVvdXQiLCJNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWCIsIlNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCIsIkRPX05PVF9XUkFQX01FVEhPRFMiLCJERUZBVUxUX0NUWCIsInBhcmFtcyIsInZhcnMiLCJlbnYiLCJjYXBzIiwiYXR0cmlidXRlcyIsIkRFRkFVTFRfUkVTVUxUX1NUT1JFIiwic3RlcHMiLCJsb2dzIiwiYXR0YWNobWVudHMiLCJoYXIiLCJPeHlnZW4iLCJPeHlnZW5FdmVudHMiLCJjb25zdHJ1Y3RvciIsImlzSW5pdGlhbGl6ZWQiLCJyZXN1bHRTdG9yZSIsImN0eCIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInJlcG8iLCJjYXBhYmlsaXRpZXMiLCJvcHRzIiwib3hCYXNlRGlyIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJsb2dnZXIiLCJfd3JhcExvZ2dlciIsIl93YWl0U3RlcFJlc3VsdExpc3QiLCJpbml0Iiwib3B0aW9ucyIsInJlc3VsdHMiLCJhc3NpZ24iLCJjd2QiLCJwcm9jZXNzIiwia2V5cyIsImxlbmd0aCIsIm1ha2VPeEdsb2JhbCIsIl9sb2FkU2VydmljZXMiLCJfbG9hZE1vZHVsZXMiLCJnbG9iYWxTY29wZSIsIm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCIsImRpc3Bvc2VNb2R1bGVzIiwic3RhdHVzIiwiX2Rpc3Bvc2VNb2R1bGVzIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJTVEFUVVMiLCJXQVJOSU5HIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm1vZENhcHMiLCJtb2R1bGVOYW1lIiwibW9kdWxlIiwiX2dldENhcGFiaWxpdGllcyIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImFkZEF0dHJpYnV0ZSIsImJpbmQiLCJhZGRBdHRhY2htZW50IiwidmFsdWUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJmaWxlUGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInB1c2giLCJjb3JlVXRpbHMiLCJuZXdGaWxlQXR0YWNobWVudCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJ0b1VwcGVyQ2FzZSIsIm1zZyIsInNoaWZ0IiwiZW1pdExvZyIsIm94U2VydmljZXNEaXJQYXRoIiwicmVzb2x2ZSIsInNlcnZpY2VGaWxlcyIsImdsb2IiLCJzeW5jIiwiaSIsInNlcnZpY2VGaWxlTmFtZSIsInNlcnZpY2VGaWxlUGF0aCIsIm1hdGNoIiwic2VydmljZU5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJzZXJ2aWNlIiwiX2xvYWRTZXJ2aWNlIiwiRU9MIiwic3RhY2t0cmFjZSIsInNlcnZpY2VQYXRoIiwiU2VydmljZUNsYXNzIiwiZGVmYXVsdCIsInNlcnZpY2VMb2dnZXIiLCJfbG9hZEludGVybmFsTW9kdWxlcyIsIl9sb2FkRXh0ZXJuYWxNb2R1bGVzIiwibW9kdWxlc0ZvbGRlclBhdGgiLCJtb2R1bGVzX2V4dCIsIm94TW9kdWxlc0RpclBhdGgiLCJtb2R1bGVGaWxlcyIsImZvckVhY2giLCJtb2R1bGVGaWxlTmFtZSIsInN0YXJ0VGltZSIsIkRhdGUiLCJtb2R1bGVMb2dnZXIiLCJtb2QiLCJsb2FkTW9kdWxlRnJvbUZpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQiLCJfd3JhcE1vZHVsZSIsImV4Y2x1ZGVVbmRlZmluZWRNb2RzIiwiTW9kdWxlcyIsIk1vZHVsZUNsYXNzIiwiZ2V0T3hNb2R1bGVzRGlyIiwibG9hZE1vZHVsZUZyb21DbGFzcyIsIndyYXBwZXIiLCJfdGhpcyIsIm1vZHVsZU1ldGhvZHMiLCJzb21lIiwieCIsIl9nZXRBbGxQcm9wZXJ0eU5hbWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZCIsIkZ1bmN0aW9uIiwiT3h5Z2VuU3ViTW9kdWxlIiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsImFyZ3VtZW50cyIsImdldE1ldGhvZFNpZ25hdHVyZSIsImdldE94eWdlbkVycm9yIiwiX2NvbW1hbmRXcmFwcGVyIiwiY21kTmFtZSIsImNtZEFyZ3MiLCJyZXR2YWwiLCJjbWRGbiIsInB1YmxpY01ldGhvZCIsInN0YXJ0c1dpdGgiLCJkZWxheSIsImRlYXN5bmMiLCJzbGVlcCIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJkZWNyeXB0ZWRBcmdzIiwiX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseSIsIl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZSIsImNtZExvY2F0aW9uIiwic3RlcFJlc3VsdElkIiwiX2dldENvbW1hbmRMb2NhdGlvbiIsImVtaXRCZWZvcmVDb21tYW5kIiwiX3dyYXBBc3luYyIsIl9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlIiwicmV0dmFsUHJvbWlzZSIsInRoZW4iLCJwcm9taXNlRG9uZSIsImxvb3BXaGlsZSIsIl9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkIiwic3RlcFJlc3VsdCIsImRvbmUiLCJ3YWl0SWQiLCJfZ2V0U3RlcFJlc3VsdCIsImlkIiwiaW5kZXgiLCJzcGxpY2UiLCJlbWl0QWZ0ZXJDb21tYW5kIiwiaXNGYXRhbCIsImNvbnRpbnVlT25FcnJvciIsImxvY2F0aW9uIiwiZmFpbHVyZSIsImZuIiwic2VsZiIsIkZpYmVyIiwiY3VycmVudCIsImZpbmFsVmFsIiwiUHJvbWlzZSIsInZhbCIsImNhdGNoIiwiZnV0dXJlIiwiRnV0dXJlIiwicmV0dXJuIiwidGhyb3ciLCJ3YWl0IiwiX19zdGFjayIsImNhbGxlciIsIl9fZmlsZW5hbWUiLCJnZXRGaWxlTmFtZSIsImdldExpbmVOdW1iZXIiLCJnZXRDb2x1bW5OdW1iZXIiLCJTdGVwUmVzdWx0IiwiZGlzcGxheU5hbWUiLCJnZXRTdGVwRGlzcGxheU5hbWUiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsImV4dHJhIiwiaHR0cCIsInR5cGUiLCJBU1NFUlRfUEFTU0VEIiwiUEFTU0VEIiwiRkFJTEVEIiwiYWN0aW9uIiwiX2lzQWN0aW9uIiwiX2dldFN0YXRzIiwic3RhdHMiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJBUFBJVU1fU0VTU0lPTl9USU1FT1VUIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImRpc2FibGVTY3JlZW5zaG90Iiwic2NyZWVuc2hvdCIsImtleSIsImRpc3Bvc2VSZXN1bHQiLCJvbk1vZHVsZUxvYWRlZCIsIm9uTW9kdWxlSW5pdGlhbGl6ZWQiLCJvbk1vZHVsZVdpbGxEaXNwb3NlIiwiX25ld0FyZ3MiLCJhcmciLCJfcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQiLCJnZXREZWNyeXB0UmVzdWx0IiwicGFyYW1OYW1lIiwiaGFzT3duUHJvcGVydHkiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7Ozs7Ozs7O0FBWkEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQVNDLE9BQU8sQ0FBQyxNQUFELENBQXRCOztBQWVBQyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLEVBQThCLFNBQTlCLEVBQXlDO0FBQ3JDQyxFQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUNiLFFBQUlDLElBQUksR0FBR0MsS0FBSyxDQUFDQyxpQkFBakI7O0FBQ0FELElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sR0FBMEIsVUFBVUMsQ0FBVixFQUFhQyxLQUFiLEVBQW9CO0FBQUUsYUFBT0EsS0FBUDtBQUFlLEtBQS9EOztBQUNBLFFBQUlDLEdBQUcsR0FBRyxJQUFJSixLQUFKLEVBQVY7QUFDQUEsSUFB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LEVBQXVEO0FBQ25ELFVBQUkvTCxVQUFVLEtBQUssS0FBbkIsRUFBMEI7QUFDdEIsZUFBTyxXQUFQO0FBQ0gsT0FGRCxNQUVPO0FBQ0gsZUFBTzZMLEdBQUcsQ0FBQ0UsZ0JBQUosRUFBUDtBQUNIO0FBQ0o7O0FBRUQsV0FBT0YsR0FBUDtBQUNIOztBQXQ5QjRDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5pbXBvcnQgZ2xvYiBmcm9tICdnbG9iJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBkZWFzeW5jIGZyb20gJ2RlYXN5bmMnO1xuaW1wb3J0IEZ1dHVyZSBmcm9tICdmaWJlcnMvZnV0dXJlJztcbmltcG9ydCBGaWJlciBmcm9tICdmaWJlcnMnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xuaW1wb3J0IFN0ZXBSZXN1bHQgZnJvbSAnLi4vbW9kZWwvc3RlcC1yZXN1bHQnO1xuaW1wb3J0IE94eWdlbkV2ZW50cyBmcm9tICcuL094eWdlbkV2ZW50cyc7XG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcbmltcG9ydCAqIGFzIGNvcmVVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XG5pbXBvcnQgU1RBVFVTIGZyb20gJy4uL21vZGVsL3N0YXR1cy5qcyc7XG5pbXBvcnQgKiBhcyBNb2R1bGVzIGZyb20gJy4uL294X21vZHVsZXMvaW5kZXgnO1xuXG4vLyBzZXR1cCBsb2dnZXJcbmltcG9ydCBsb2dnZXIsIHsgREVGQVVMVF9MT0dHRVJfSVNTVUVSLCBJU1NVRVJTIH0gZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgeyBPeHlnZW5TdWJNb2R1bGUgfSBmcm9tICcuL094eWdlblN1Yk1vZHVsZSc7XG5cbi8qZ2xvYmFsIF9fc3RhY2sqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ19fc3RhY2snLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcmlnID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKF8sIHN0YWNrKSB7IHJldHVybiBzdGFjazsgfTtcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIpO1xuICAgICAgICB2YXIgc3RhY2sgPSBlcnIuc3RhY2s7XG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZztcbiAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgIH1cbn0pO1xuXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSAzMDAwMDtcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcbiAgICBiYWNrdHJhY2U6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gc2hvdyBmdWxsIGJhY2t0cmFjZSBmb3IgZXJyb3JzXG4gICAgY29tcGlsZXI6IFtdLCAvLyA8c3RyaW5nW10+IChcImV4dGVuc2lvbjptb2R1bGVcIikgcmVxdWlyZSBmaWxlcyB3aXRoIHRoZSBnaXZlbiBFWFRFTlNJT04gYWZ0ZXIgcmVxdWlyaW5nIE1PRFVMRSAocmVwZWF0YWJsZSlcbiAgICBmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnM6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gdHJlYXQgYW1iaWd1b3VzIGRlZmluaXRpb25zIGFzIGVycm9yc1xuICAgIGZhaWxGYXN0OiBmYWxzZSwgLy8gPGJvb2xlYW4+IGFib3J0IHRoZSBydW4gb24gZmlyc3QgZmFpbHVyZVxuICAgIGlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zOiBmYWxzZSwgLy8gPGJvb2xlYW4+IHRyZWF0IHVuZGVmaW5lZCBkZWZpbml0aW9ucyBhcyB3YXJuaW5nc1xuICAgIG5hbWU6IFtdLCAvLyA8UkVHRVhQW10+IG9ubHkgZXhlY3V0ZSB0aGUgc2NlbmFyaW9zIHdpdGggbmFtZSBtYXRjaGluZyB0aGUgZXhwcmVzc2lvbiAocmVwZWF0YWJsZSlcbiAgICBwcm9maWxlOiBbXSwgLy8gPHN0cmluZz4gKG5hbWUpIHNwZWNpZnkgdGhlIHByb2ZpbGUgdG8gdXNlXG4gICAgcmVxdWlyZTogW10sIC8vIDxzdHJpbmc+IChmaWxlL2Rpci9nbG9iKSByZXF1aXJlIGZpbGVzIGJlZm9yZSBleGVjdXRpbmcgZmVhdHVyZXNcbiAgICBvcmRlcjogJ2RlZmluZWQnLCAvLyA8c3RyaW5nPiBzd2l0Y2ggYmV0d2VlbiBkZXRlcm1pbmlzdGljICBhbmQgcmFuZG9tIGZlYXR1cmUgZXhlY3V0aW9uLiBFaXRoZXIgXCJkZWZpbmVkXCIsIFwicmFuZG9tXCIgb3IgXCJyYW5kb206NDJcIiB3aGVyZWFzIDQyIGlzIHRoZSBzZWVkIGZvciByYW5kb21pemF0aW9uXG4gICAgc25pcHBldFN5bnRheDogdW5kZWZpbmVkLCAvLyA8c3RyaW5nPiBzcGVjaWZ5IGEgY3VzdG9tIHNuaXBwZXQgc3ludGF4XG4gICAgc25pcHBldHM6IHRydWUsIC8vIDxib29sZWFuPiBoaWRlIHN0ZXAgZGVmaW5pdGlvbiBzbmlwcGV0cyBmb3IgcGVuZGluZyBzdGVwc1xuICAgIHNvdXJjZTogdHJ1ZSwgLy8gPGJvb2xlYW4+IGhpZGUgc291cmNlIHVyaXNcbiAgICBzdHJpY3Q6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gZmFpbCBpZiB0aGVyZSBhcmUgYW55IHVuZGVmaW5lZCBvciBwZW5kaW5nIHN0ZXBzXG4gICAgdGFnRXhwcmVzc2lvbjogJycsIC8vIDxzdHJpbmc+IChleHByZXNzaW9uKSBvbmx5IGV4ZWN1dGUgdGhlIGZlYXR1cmVzIG9yIHNjZW5hcmlvcyB3aXRoIHRhZ3MgbWF0Y2hpbmcgdGhlIGV4cHJlc3Npb25cbiAgICB0YWdzSW5UaXRsZTogZmFsc2UsIC8vIDxib29sZWFuPiBhZGQgY3VjdW1iZXIgdGFncyB0byBmZWF0dXJlIG9yIHNjZW5hcmlvIG5hbWVcbiAgICB0aW1lb3V0OiBERUZBVUxUX1RJTUVPVVQgLy8gPG51bWJlcj4gdGltZW91dCBmb3Igc3RlcCBkZWZpbml0aW9ucyBpbiBtaWxsaXNlY29uZHNcbn07XG5jb25zdCBNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWCA9IC9ebW9kdWxlLSguKz8pXFwuanMkLztcbmNvbnN0IFNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCA9IC9ec2VydmljZS0oLis/KVxcLmpzJC87XG5jb25zdCBET19OT1RfV1JBUF9NRVRIT0RTID0gWydkcml2ZXInLCAnZ2V0RHJpdmVyJ107XG5cbmNvbnN0IERFRkFVTFRfQ1RYID0ge1xuICAgIHBhcmFtczoge30sXG4gICAgdmFyczoge30sXG4gICAgZW52OiB7fSxcbiAgICBjYXBzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbn07XG5jb25zdCBERUZBVUxUX1JFU1VMVF9TVE9SRSA9IHtcbiAgICBzdGVwczogW10sXG4gICAgbG9nczogW10sXG4gICAgYXR0YWNobWVudHM6IFtdLFxuICAgIGhhcjogbnVsbCxcbiAgICBhdHRyaWJ1dGVzOiB7fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3h5Z2VuIGV4dGVuZHMgT3h5Z2VuRXZlbnRzIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlID0geyAuLi5ERUZBVUxUX1JFU1VMVF9TVE9SRSB9O1xuICAgICAgICB0aGlzLmN0eCA9IHsgLi4uREVGQVVMVF9DVFggfTtcbiAgICAgICAgdGhpcy5tb2R1bGVzID0ge307XG4gICAgICAgIHRoaXMuc2VydmljZXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZXBvID0ge307XG4gICAgICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcHRzID0gbnVsbDtcbiAgICAgICAgdGhpcy5veEJhc2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vJyk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoJ094eWdlbicpKTtcbiAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0ID0gW107XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdChvcHRpb25zLCBjYXBzLCBjdHggPSB7fSwgcmVzdWx0cyA9IHt9KSB7XG4gICAgICAgIHRoaXMub3B0cyA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9PUFRTLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5jd2QgPSB0aGlzLm9wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgIHRoaXMuY3R4ID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX0NUWCwgY3R4IHx8IHt9KTtcbiAgICAgICAgdGhpcy5jdHguY2FwcyA9IHsgLi4uY3R4LmNhcHMgfHwge30sIC4uLmNhcHMsIH07XG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUgPSBPYmplY3QuYXNzaWduKERFRkFVTFRfUkVTVUxUX1NUT1JFLCByZXN1bHRzIHx8IHt9KTtcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmN0eC5jYXBzID0gY2FwcztcblxuICAgICAgICBpZiAoY3R4LmF0dHJpYnV0ZXMgJiYgKCFyZXN1bHRzLmF0dHJpYnV0ZXMgfHwgIU9iamVjdC5rZXlzKHJlc3VsdHMuYXR0cmlidXRlcykubGVuZ3RoKSkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRyaWJ1dGVzID0geyAuLi5jdHguYXR0cmlidXRlcyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVmaW5lICdveCcgb2JqZWN0IGluIGdsb2JhbCBKUyBzY29wZVxuICAgICAgICAvLyB3ZSB3aWxsIHVzZSB0aGlzIG9iamVjdCB0byBhY2Nlc3MgT3h5Z2VuIG1vZHVsZXMgYW5kIHRlc3QgY29udGV4dCBmcm9tIG1vZHVsZXMgdXNlZCBpbiB0aGUgdGVzdCAoaWYgYW55KSAgICAgICAgXG4gICAgICAgIHRoaXMubWFrZU94R2xvYmFsKCk7XG4gICAgICAgIC8vIGxvYWQgc2VydmljZXNcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZpY2VzKCk7XG4gICAgICAgIC8vIGxvYWQgbW9kdWxlc1xuICAgICAgICB0aGlzLl9sb2FkTW9kdWxlcygpO1xuICAgICAgICAvLyBpZiBvcHRpb25zLm1ha2VNb2R1bGVzR2xvYmFsIGlzIHRydWUgb3IgdW5kZWZpbmVkIHRoYW4gZGVmaW5lICdjdHgnIGNvbnRlbnQgYW5kIGVhY2ggbW9kdWxlIGluIGdsb2JhbCBzY29wZVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IG9wdGlvbnMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUNvbnRleHRBbmRNb2R1bGVzR2xvYmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBkaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGVzOiAnLCBlKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rpc3Bvc2VNb2R1bGVzKHN0YXR1cyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlU2VydmljZXMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkaXNwb3NlOiAnLCBlKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgYWRqdXN0U2NyaXB0TGluZSgpIHtcbiAgICAgICAgY29uc3QgaXNJbkRlYnVnTW9kZSA9IG94dXRpbC5pc0luRGVidWdNb2RlKCk7XG4gICAgICAgIC8vIGFkZCBleHRyYSBsaW5lIGlmIHdlIGFyZSBydW5uaW5nIGluIGRlYnVnZ2VyIG1vZGUgKFY4IGRlYnVnZ2VyIGFkZHMgYW4gZXh0cmEgbGluZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlKVxuICAgICAgICBjb25zdCByZXN1bHQgPSBpc0luRGVidWdNb2RlID8gLTEgOiAwO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldCBjb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHg7XG4gICAgfVxuXG4gICAgc2V0IGNvbnRleHQoY3R4KSB7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgICAgICBpZiAoZ2xvYmFsLm94KSB7XG4gICAgICAgICAgICBnbG9iYWwub3guY3R4ID0gY3R4O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBcInBhcmFtc1wiIGFuZCBcImVudlwiIGluIFwib3hcIiBnbG9iYWwgdmFyaWFibGVcbiAgICAgICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gY3R4LnBhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgICAgICBnbG9iYWwuZW52ID0gY3R4LmVudiB8fCB7fTtcbiAgICAgICAgICAgICAgICBnbG9iYWwuYXR0cmlidXRlcyA9IGN0eC5hdHRyaWJ1dGVzIHx8IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJlcG9zaXRvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG87XG4gICAgfVxuXG4gICAgc2V0IHJlcG9zaXRvcnkocmVwbykge1xuICAgICAgICB0aGlzLnJlcG8gPSByZXBvO1xuICAgICAgICBpZiAoZ2xvYmFsLm94KSB7XG4gICAgICAgICAgICBnbG9iYWwub3gucmVwbyA9IHJlcG87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcmVzdWx0cygpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRpbWUgZm9yIHRoZSB0cmFuc2FjdGlvbiBpdHNlbGYgLSBzdW1tYXJ5IG9mIGR1cmF0aW9ucyBmb3IgYWxsIHRoZSBzdGVwcyBpbiB0aGlzIHRyYW5zYWN0aW9uXG4gICAgICAgIC8vIGFsc28gYWRqdXN0IHRyYW5zYWN0aW9uIGVuZCB0aW1lIHRvIG11Y2ggZW5kIHRpbWUgZm9yIHRoZSBsYXN0IGV4ZWN1dGVkIHN0ZXAgd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAgICAgIGZvciAoY29uc3QgdHJhbnNTdGVwIG9mIHRoaXMucmVzdWx0U3RvcmUuc3RlcHMpIHtcbiAgICAgICAgICAgIGlmICh0cmFuc1N0ZXAubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc05hbWUgPSB0cmFuc1N0ZXAudHJhbnNhY3Rpb247XG4gICAgICAgICAgICAgICAgdHJhbnNTdGVwLmR1cmF0aW9uID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcykge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdGVwIGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gJiBpcyBub3QgdGhlIHRyYW5zYWN0aW9uIHN0ZXBcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAudHJhbnNhY3Rpb24gPT09IHRyYW5zTmFtZSAmJiBzdGVwICE9PSB0cmFuc1N0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiArPSBzdGVwLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXAuZW5kVGltZSA+IHRyYW5zU3RlcC5lbmRUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLmVuZFRpbWUgPSBzdGVwLmVuZFRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0cmFuc2FjdGlvbiBzdGF0dXMgdG8gd2FybmluZyBpZiBhdCBsZWFzdCBvbmUgb2Ygc3RlcHMgaGFzIHdhcm5pbmcgc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5zdGF0dXMgPT09IFNUQVRVUy5XQVJOSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNTdGVwLnN0YXR1cyA9IFNUQVRVUy5XQVJOSU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdFN0b3JlO1xuICAgIH1cblxuICAgIGdldE1vZHVsZXNDYXBhYmlsaXRpZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5tb2R1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RDYXBzID0ge307XG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XG4gICAgICAgICAgICBpZiAobW9kdWxlLm5hbWUgJiYgbW9kdWxlLl9nZXRDYXBhYmlsaXRpZXMgJiYgdHlwZW9mIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FwcyA9IG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzKCk7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgb25seSBub24tZW1wdHkgY2FwcyBwZXIgbW9kdWxlIHRoYXQgaGFzIHRoaXMuY2FwcyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChjYXBzICYmIHR5cGVvZiBjYXBzID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhjYXBzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZENhcHNbbW9kdWxlLm5hbWVdID0gY2FwcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZENhcHM7XG4gICAgfVxuXG4gICAgcmVzZXRSZXN1bHRzKCkge1xuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzID0gW107XG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncyA9IFtdO1xuICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzID0gW107XG4gICAgICAgIHRoaXMuaGFyID0gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlLm9uQmVmb3JlQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25CZWZvcmVDYXNlKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5faXRlcmF0aW9uU3RhcnQgJiYgYXdhaXQgbW9kdWxlLl9pdGVyYXRpb25TdGFydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbkJlZm9yZUNhc2VcIiBtZXRob2Qgb2YgJHttb2R1bGVOYW1lfSBtb2R1bGUuYCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkFmdGVyQ2FzZShlcnJvciA9IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGZvciBhdm9pZCBzdHVjayBvbiAqLmRpc3Bvc2UgY2FsbFxuICAgICAgICAgICAgICAgIG1vZHVsZS5vbkFmdGVyQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25BZnRlckNhc2UoZXJyb3IpO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5faXRlcmF0aW9uRW5kICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uRW5kKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25BZnRlckNhc2VcIiBtZXRob2Qgb2YgJHttb2R1bGVOYW1lfSBtb2R1bGUuYCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYWtlT3hHbG9iYWwoKSB7XG4gICAgICAgIGlmICghZ2xvYmFsLm94KSB7XG4gICAgICAgICAgICBnbG9iYWwub3ggPSB7XG4gICAgICAgICAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLFxuICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIGNhcHM6IHRoaXMuY2FwYWJpbGl0aWVzLFxuICAgICAgICAgICAgICAgIHJlc3VsdFN0b3JlOiB0aGlzLnJlc3VsdFN0b3JlLFxuICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZTogdGhpcy5hZGRBdHRyaWJ1dGUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBhZGRBdHRhY2htZW50OiB0aGlzLmFkZEF0dGFjaG1lbnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGdsb2JhbC52YXJzID0gdGhpcy5jdHgudmFycztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlICdveCcgaXMgYWxyZWFkeSBnbG9iYWxcbiAgICAgICAgaWYgKGdsb2JhbC5veCkge1xuICAgICAgICAgICAgLy8gZXhwb3NlIG1vZHVsZXMgYXMgZ2xvYmFsIHZhcmlhYmxlc1xuICAgICAgICAgICAgZm9yIChsZXQgbW9kdWxlTmFtZSBpbiB0aGlzLm1vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFttb2R1bGVOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbbW9kdWxlTmFtZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXhwb3NlIFwiY3R4XCIsIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgYXMgZ2xvYmFsIHZhcmlhYmxlc1xuICAgICAgICAgICAgZ2xvYmFsLnBhcmFtcyA9IGdsb2JhbC5veC5jdHgucGFyYW1zO1xuICAgICAgICAgICAgZ2xvYmFsLmVudiA9IGdsb2JhbC5veC5jdHguZW52O1xuICAgICAgICAgICAgZ2xvYmFsLmN0eCA9IGdsb2JhbC5veC5jdHg7XG4gICAgICAgICAgICBnbG9iYWwuYXR0cmlidXRlcyA9IGdsb2JhbC5veC5jdHguYXR0cmlidXRlcyB8fCB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIW5hbWUgfHwgIXZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBcIiduYW1lJyBhbmQgJ3ZhbHVlJyBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIGZvciBveC5hZGRBdHRyaWJ1dGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZXN1bHRTdG9yZSAmJiB0aGlzLnJlc3VsdFN0b3JlLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQXR0YWNobWVudChmaWxlUGF0aCkge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0U3RvcmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyKGBGaWxlICR7ZmlsZVBhdGh9IGRvZXNuJ3QgZXhpc3RgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cykge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMucHVzaChcbiAgICAgICAgICAgIGNvcmVVdGlscy5uZXdGaWxlQXR0YWNobWVudChmaWxlUGF0aClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsb2FkUGFnZU9iamVjdEZpbGUocG9QYXRoKSB7XG4gICAgICAgIGlmICghcG9QYXRoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBvID0gcmVxdWlyZShwb1BhdGgpO1xuICAgICAgICAgICAgLy8gc2V0IHBhZ2Ugb2JqZWN0IHJlcG9zaXRvcnkgYXMgdGhlIG1haW4gb25lXG4gICAgICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSBwbztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSAndW5kZWZpbmVkJyB8fCB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSBwbztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBvID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFByaXZhdGUgTWV0aG9kc1xuICAgICAqL1xuICAgIF93cmFwTG9nZ2VyKF9sb2dnZXIpIHtcbiAgICAgICAgY29uc3QgbG9nZ2VyV3JhcCA9IHtcbiAgICAgICAgICAgIGluZm86ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2luZm8nLCBhcmdzKSxcbiAgICAgICAgICAgIGRlYnVnOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdkZWJ1ZycsIGFyZ3MpLFxuICAgICAgICAgICAgZXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncyksXG4gICAgICAgICAgICB3YXJuOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICd3YXJuJywgYXJncyksXG4gICAgICAgICAgICB1c2VySW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MsIElTU1VFUlMuVVNFUiksXG4gICAgICAgICAgICB1c2VyRGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2RlYnVnJywgYXJncywgSVNTVUVSUy5VU0VSKSxcbiAgICAgICAgICAgIHVzZXJFcnJvcjogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZXJyb3InLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxuICAgICAgICAgICAgdXNlcldhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbG9nZ2VyV3JhcDtcbiAgICB9XG5cbiAgICBfbG9nKF9sb2dnZXIsIGxldmVsLCBhcmdzLCBzcmMgPSBERUZBVUxUX0xPR0dFUl9JU1NVRVIpIHtcbiAgICAgICAgaWYgKCFfbG9nZ2VyW2xldmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIF9sb2dnZXJbbGV2ZWxdLmFwcGx5KF9sb2dnZXIsIGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBveHV0aWwuc3RyaW5naWZ5KGFyZ3MsIDIpO1xuICAgICAgICBjb25zdCB0aW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuICAgICAgICAvLyBhZGQgdGhlIGxvZyBlbnRyeSB0byB0aGUgcmVzdWx0IHN0b3JlXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUubG9ncykge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5sb2dzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpbWU6IHRpbWUsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IGxldmVsLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgbXNnOiBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIHNyYzogc3JjXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgZmlyc3QgYXJndW1lbnQsIGlmIGl0J3MgYSBtZXNzYWdlXG4gICAgICAgIGFyZ3MgPSBtZXNzYWdlID8gYXJncy5zaGlmdCgpIDogYXJncztcbiAgICAgICAgdGhpcy5lbWl0TG9nKHRpbWUsIGxldmVsLCBtZXNzYWdlLCBhcmdzLCBzcmMpO1xuICAgIH1cblxuICAgIF9sb2FkU2VydmljZXMoKSB7XG4gICAgICAgIGNvbnN0IG94U2VydmljZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3hCYXNlRGlyLCAnLi9veF9zZXJ2aWNlcycpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZXMgPSBnbG9iLnN5bmMoJ3NlcnZpY2UtKi5qcycsIHsgY3dkOiBveFNlcnZpY2VzRGlyUGF0aCB9KTtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgc2VydmljZXNcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZXMuLi4nKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlcnZpY2VGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVOYW1lID0gc2VydmljZUZpbGVzW2ldO1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVQYXRoID0gcGF0aC5qb2luKG94U2VydmljZXNEaXJQYXRoLCBzZXJ2aWNlRmlsZU5hbWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc2VydmljZUZpbGVOYW1lLm1hdGNoKFNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCk7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHJlc3VsdFsxXTtcblxuICAgICAgICAgICAgLy8gdGhpcy5vcHRzLnNlcnZpY2VzID0gdW5kZWZpbmVkIGluIHNpbmdsZSBmaWxlIG1vZGVcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5zZXJ2aWNlcykgJiYgIXRoaXMub3B0cy5zZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBzZXJ2aWNlOiAnICsgc2VydmljZU5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLl9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZUZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLmluaXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXSA9IHNlcnZpY2U7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBzZXJ2aWNlIFwiJyArIHNlcnZpY2VOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2xvYWRTZXJ2aWNlKHNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aCkge1xuICAgICAgICBsZXQgU2VydmljZUNsYXNzID0gcmVxdWlyZShzZXJ2aWNlUGF0aCk7XG4gICAgICAgIC8vIEVTNiBjbGFzcyB3aWxsIGJlIHVuZGVyICdkZWZhdWx0JyBwcm9wZXJ0eVxuICAgICAgICBpZiAoU2VydmljZUNsYXNzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzcy5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2VMb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcihgU2VydmljZToke3NlcnZpY2VOYW1lfWApKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlQ2xhc3ModGhpcy5vcHRzLCB0aGlzLmN0eCwgdGhpcy5yZXN1bHRTdG9yZSwgc2VydmljZUxvZ2dlcik7XG4gICAgfVxuXG4gICAgX2xvYWRNb2R1bGVzKCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBpbnRlcm5hbCBtb2R1bGVzLi4uJyk7XG4gICAgICAgIHRoaXMuX2xvYWRJbnRlcm5hbE1vZHVsZXMoKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgZXh0ZXJuYWwgbW9kdWxlcy4uLicpO1xuICAgICAgICB0aGlzLl9sb2FkRXh0ZXJuYWxNb2R1bGVzKCk7XG4gICAgfVxuXG4gICAgX2xvYWRFeHRlcm5hbE1vZHVsZXMoKSB7XG4gICAgICAgIGxldCBtb2R1bGVzRm9sZGVyUGF0aCA9ICcuL21vZHVsZXMnO1xuICAgICAgICBpZiAodGhpcy5vcHRzLm1vZHVsZXNfZXh0ICYmIHR5cGVvZiB0aGlzLm9wdHMubW9kdWxlc19leHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBtb2R1bGVzRm9sZGVyUGF0aCA9IHRoaXMub3B0cy5tb2R1bGVzX2V4dDtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X21vZHVsZXMnKTtcbiAgICAgICAgY29uc3Qgb3hNb2R1bGVzRGlyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmN3ZCwgbW9kdWxlc0ZvbGRlclBhdGgpO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3hNb2R1bGVzRGlyUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbW9kdWxlRmlsZXMgPSBbXTtcbiAgICAgICAgLy8gaWYgcGFydGljdWxhciBtb2R1bGUgbmFtZXMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZywgdGhlbiBsb2FkIG9ubHkgdGhlc2UgbW9kdWxlc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdHMubW9kdWxlcykgJiYgdGhpcy5vcHRzLm1vZHVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5vcHRzLm1vZHVsZXMuZm9yRWFjaChtb2R1bGVOYW1lID0+IG1vZHVsZUZpbGVzLnB1c2goYG1vZHVsZS0ke21vZHVsZU5hbWV9LmpzYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwgbG9hZCBhbGwgYXZhaWxhYmxlIG1vZHVsZXMgKG1pZ2h0IGJlIG1vcmUgdGltZSBjb25zdW1pbmcpXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbW9kdWxlRmlsZXMgPSBnbG9iLnN5bmMoJ21vZHVsZS0qLmpzJywgeyBjd2Q6IG94TW9kdWxlc0RpclBhdGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBhbGwgbW9kdWxlcyAgICAgICAgXG4gICAgICAgIGZvciAobGV0IG1vZHVsZUZpbGVOYW1lIG9mIG1vZHVsZUZpbGVzKSB7XG4gICAgICAgICAgICAvLyBleHRyYWN0IG5hbWUgZnJvbSB0aGUgbW9kdWxlIGZpbGUgbmFtZSBiYXNlZCBvbiBtb2R1bGUgbmFtZSBwYXR0ZXJuXG4gICAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gbW9kdWxlRmlsZU5hbWUubWF0Y2goTU9EVUxFX05BTUVfTUFUQ0hfUkVHRVgpWzFdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBNb2R1bGU6JHttb2R1bGVOYW1lfWApKTtcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBtb2R1bGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21GaWxlKG1vZHVsZU5hbWUsIG1vZHVsZUZpbGVOYW1lLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZCk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XG4gICAgICAgICAgICAgICAgLy8gd3JhcCB1cFxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBtb2R1bGU6ICcgKyBtb2R1bGVOYW1lICsgJyBbICcgKyBkdXJhdGlvbiArICcgc2VjIF0nKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGFueSBtb2R1bGUgdGhhdCBmYWlsZWQgdG8gbG9hZCwgZXhjZXB0IFdlYiBhbmQgTW9iIG1vZHVsZXNcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9sb2FkSW50ZXJuYWxNb2R1bGVzKCkge1xuICAgICAgICAvLyBpZiBgbW9kdWxlc2AgaXMgZW1wdHkgb3IgdW5kZWZpbmVkIGluIG94eWdlbi5jb25mIHRoZW4gbG9hZCBhbGwgbW9kdWxlc1xuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgb25seSB0aG9zZSBpbXBsaWNpdGx5IGRlZmluZWRcbiAgICAgICAgY29uc3QgZXhjbHVkZVVuZGVmaW5lZE1vZHMgPSB0aGlzLm9wdHMubW9kdWxlcyAmJiB0aGlzLm9wdHMubW9kdWxlcy5sZW5ndGggPiAwO1xuXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoTW9kdWxlcykpIHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlVW5kZWZpbmVkTW9kcyAmJiAhdGhpcy5vcHRzLm1vZHVsZXMuaW5jbHVkZXMobW9kdWxlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IE1vZHVsZUNsYXNzID0gTW9kdWxlc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IG94TW9kdWxlc0RpclBhdGggPSBveHV0aWwuZ2V0T3hNb2R1bGVzRGlyKCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbG9nZ2VyIGZvciB0aGUgbW9kdWxlXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IG1vZHVsZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IGNvcmVVdGlscy5sb2FkTW9kdWxlRnJvbUNsYXNzKG1vZHVsZU5hbWUsIE1vZHVsZUNsYXNzLCBtb2R1bGVMb2dnZXIsIG94TW9kdWxlc0RpclBhdGgsIHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZCk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIG1vZHVsZSBsaXN0XG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XG4gICAgICAgICAgICAgICAgLy8gd3JhcCB1cFxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTG9hZGluZyBtb2R1bGU6ICcgKyBtb2R1bGVOYW1lICsgJyBbICcgKyBkdXJhdGlvbiArICcgc2VjIF0nKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGFueSBtb2R1bGUgdGhhdCBmYWlsZWQgdG8gbG9hZCwgZXhjZXB0IFdlYiBhbmQgTW9iIG1vZHVsZXNcbiAgICAgICAgICAgICAgICAvLyB3aXRob3V0IE1vYiBhbmQgV2ViIG1vZHVsZXMgbG9hZGVkLCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaGFsbCBmYWlsXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF93cmFwTW9kdWxlKG5hbWUsIG1vZHVsZSkge1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVyID0ge1xuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGxldCBtb2R1bGVNZXRob2RzID0gT2JqZWN0LmtleXMobW9kdWxlKTtcbiAgICAgICAgaWYgKCFtb2R1bGVNZXRob2RzLnNvbWUoeCA9PiB4PT09ICdleHBvcnRzJykpIHtcbiAgICAgICAgICAgIG1vZHVsZU1ldGhvZHMgPSB0aGlzLl9nZXRBbGxQcm9wZXJ0eU5hbWVzKG1vZHVsZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbWV0aG9kTmFtZSBvZiBtb2R1bGVNZXRob2RzKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBtb2R1bGVbbWV0aG9kTmFtZV07XG4gICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGEgT3h5Z2VuU3ViTW9kdWxlXG4gICAgICAgICAgICBpZiAoKCEobWV0aG9kIGluc3RhbmNlb2YgRnVuY3Rpb24pICYmICEobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSAmJiB0eXBlb2YgbWV0aG9kICE9PSAnZnVuY3Rpb24nKSB8fCBtZXRob2ROYW1lID09PSAnZXhwb3J0cycgfHwgbWV0aG9kTmFtZSA9PT0gJ19jb21waWxlJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbWFwIGFuZCB3cmFwIHN1Yi1tb2R1bGUgbWV0aG9kcyAocmVjdXJzaXZlIGNhbGwgdG8gX3dyYXBNb2R1bGUpXG4gICAgICAgICAgICBpZiAobWV0aG9kIGluc3RhbmNlb2YgT3h5Z2VuU3ViTW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUoYCR7bmFtZX0uJHttZXRob2ROYW1lfWAsIG1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyBub3Qgd3JhcCBtZXRob2RzXG4gICAgICAgICAgICBlbHNlIGlmIChET19OT1RfV1JBUF9NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gPT09ICdkcml2ZXInIHx8IG1ldGhvZE5hbWUgPT09ICdnZXREcml2ZXInXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IG1vZHVsZVttZXRob2ROYW1lXS5iaW5kKG1vZHVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBwcml2YXRlIG1ldGhvZHMgYW5kIGV2ZW50IGhhbmRsZXJzXG4gICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLmluZGV4T2YoJ18nKSA9PT0gMCB8fCBtZXRob2ROYW1lLmluZGV4T2YoJ29uJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobmFtZSwgbWV0aG9kTmFtZSwgYXJncykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlW21ldGhvZE5hbWVdLmFwcGx5KG1vZHVsZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbnRlcm5hbCBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCBmb3IgaW50ZXJuYWwgT3h5Z2VuIENvcmUgdXNlXG4gICAgICAgICAgICAgICAgLy8gY2FsbGluZyBfZ2V0Q2FwYWJpbGl0aWVzIG1ldGhvZCB3b24ndCBiZSB2aXNpYmxlIGluIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2dldENhcGFiaWxpdGllcycpIHtcbiAgICAgICAgICAgICAgICAgICAgd3JhcHBlclsnX2dldENhcGFiaWxpdGllcyddID0gbWV0aG9kLmJpbmQobW9kdWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuX2NvbW1hbmRXcmFwcGVyKG1ldGhvZE5hbWUsIGFyZ3MsIG1vZHVsZSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgT3hFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1Rocm93aW5nIGFnYWluOicsIGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICB9XG5cbiAgICBfY29tbWFuZFdyYXBwZXIoY21kTmFtZSwgY21kQXJncywgbW9kdWxlLCBtb2R1bGVOYW1lKSB7XG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGVbY21kTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0dmFsID0gbnVsbDtcbiAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcbiAgICAgICAgY29uc3QgY21kRm4gPSBtb2R1bGVbY21kTmFtZV07XG4gICAgICAgIGNvbnN0IHB1YmxpY01ldGhvZCA9ICFjbWROYW1lLnN0YXJ0c1dpdGgoJ18nKSAmJiBjbWROYW1lICE9PSAnZGlzcG9zZSc7XG5cbiAgICAgICAgLy8gZGVsYXkgdGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlmIHJlcXVpcmVkXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMub3B0cy5kZWxheSAmJlxuICAgICAgICAgICAgcHVibGljTWV0aG9kICYmXG4gICAgICAgICAgICBjbWROYW1lICE9PSAnaW5pdCcgJiZcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWFzeW5jLnNsZWVwKHRoaXMub3B0cy5kZWxheSAqIDEwMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhyb3cgaWYgYSBjb21tYW5kIGV4ZWN1dGVkIG9uIHVuaXRpYWxpemVkIG1vZHVsZSAoZXhjZXB0IGludGVybmFsIG1ldGhvZHMgYW5kIGEgZmV3IG90aGVyKVxuICAgICAgICBpZiAoIW1vZHVsZS5pc0luaXRpYWxpemVkICYmIHB1YmxpY01ldGhvZCAmJiBjbWROYW1lICE9PSAnaW5pdCcgJiYgY21kTmFtZSAhPT0gJ3RyYW5zYWN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdNaXNzaW5nICcgKyBtb2R1bGVOYW1lICsgJy5pbml0KCknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlY3R5cHQgYXJndW1lbnRzXG4gICAgICAgIGxldCBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGNtZEFyZ3MsIG1vZHVsZU5hbWUpO1xuICAgICAgICBkZWNyeXB0ZWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoZGVjcnlwdGVkQXJncyk7XG5cbiAgICAgICAgLy8gcmVwbGFjZSBwYXJhbWV0ZXJzIGluIG1ldGhvZCBhcmd1bWVudHMgd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlc1xuICAgICAgICBjbWRBcmdzID0gdGhpcy5fcG9wdWxhdGVQYXJhbWV0ZXJzVmFsdWUoY21kQXJncyk7XG4gICAgICAgIC8vIHN0YXJ0IG1lYXN1cmluZyBtZXRob2QgZXhlY3V0aW9uIHRpbWVcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuXG4gICAgICAgIC8vIGFkZCBjb21tYW5kIGxvY2F0aW9uIGluZm9ybWF0aW9uIChlLmcuIGZpbGUgbmFtZSBhbmQgY29tbWFuZCBsaW5lKVxuICAgICAgICBsZXQgY21kTG9jYXRpb24gPSBudWxsO1xuICAgICAgICAvLyBnZW5lcmF0ZSBzdGVwIHJlc3VsdCBpZFxuICAgICAgICBjb25zdCBzdGVwUmVzdWx0SWQgPSB2MSgpO1xuICAgICAgICAvLyBkbyBub3QgcmVwb3J0IHJlc3VsdHMgb3IgbGluZSB1cGRhdGVzIG9uIGludGVybmFsIG1ldGhvZHMgKHN0YXJ0ZWQgd2l0aCAnXycpXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcbiAgICAgICAgICAgIGNtZExvY2F0aW9uID0gdGhpcy5fZ2V0Q29tbWFuZExvY2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXRCZWZvcmVDb21tYW5kKHN0ZXBSZXN1bHRJZCwgY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmc6ICcgKyBveHV0aWwuZ2V0TWV0aG9kU2lnbmF0dXJlKG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MpKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZW1pdCBiZWZvcmUgZXZlbnRzXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2Rpc3Bvc2UnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmV0dmFsUHJvbWlzZSA9IHRoaXMuX3dyYXBBc3luYyhtb2R1bGVbY21kTmFtZV0pLmFwcGx5KG1vZHVsZSwgZGVjcnlwdGVkQXJncyk7XG5cbiAgICAgICAgICAgIGlmIChyZXR2YWxQcm9taXNlICYmIHJldHZhbFByb21pc2UudGhlbikge1xuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dmFsUHJvbWlzZS50aGVuKCh2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlRG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhcHJvbWlzZURvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR2YWwgPSByZXR2YWxQcm9taXNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY21kTmFtZSA9PT0gJ2luaXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlSW5pdGlhbGl6ZWQpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkIHNlc3Npb24gaWQnKSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZyBpZiBlcnJvciBvY3VycmVkIGFmdGVyIHRoZSBtb2R1bGUgd2FzIGRpc3Bvc2VkIChvciBpbiBhIHByb2Nlc3Mgb2YgYmVpbmcgZGlzcG9zZWQpXG4gICAgICAgICAgICAgICAgLy8gZXhjZXB0IGZvciBpbml0IG1ldGhvZHMgb2YgY291cnNlXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG1vZHVsZS5pc0luaXRpYWxpemVkID09PSAnYm9vbGVhbicgJiYgIW1vZHVsZS5pc0luaXRpYWxpemVkKVxuICAgICAgICAgICAgICAgICAgICAmJiBjbWROYW1lICE9PSAnaW5pdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCc9PT09IGVycm9yID09PT0nLCBlKVxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xuXG4gICAgICAgIGxldCBzdGVwUmVzdWx0O1xuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhaXRJZCA9ICtuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LnB1c2god2FpdElkKTtcblxuICAgICAgICAgICAgc3RlcFJlc3VsdCA9IHRoaXMuX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzLCBjbWRMb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycm9yKTtcbiAgICAgICAgICAgIHN0ZXBSZXN1bHQuaWQgPSBzdGVwUmVzdWx0SWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0LmluZGV4T2Yod2FpdElkKTtcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgICAgICAvL3N0ZXBSZXN1bHQubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcblxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcy5wdXNoKHN0ZXBSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5lbWl0QWZ0ZXJDb21tYW5kKGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCB0aGlzLmN0eCwgY21kTG9jYXRpb24sIGVuZFRpbWUsIHN0ZXBSZXN1bHQpO1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuaXNGYXRhbCAmJiAhdGhpcy5vcHRzLmNvbnRpbnVlT25FcnJvcikge1xuICAgICAgICAgICAgaWYgKCFlcnJvci5sb2NhdGlvbiAmJiBjbWRMb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIGVycm9yLmxvY2F0aW9uID0gY21kTG9jYXRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGVwUmVzdWx0ICYmIHN0ZXBSZXN1bHQuZmFpbHVyZSAmJiBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICBlcnJvci5sb2NhdGlvbiA9IHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXB1YmxpY01ldGhvZCkge1xuICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xuXG4gICAgICAgIHJldHVybiByZXR2YWw7XG4gICAgfVxuXG4gICAgX3dyYXBBc3luYyAoZm4sIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IGNvbnRleHQgfHwgdGhpcztcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGNvZGUgaXMgbm90IHJ1bm5pbmcgaW5zaWRlIHRoZSBGaWJlciBjb250ZXh0LCB0aGVuIHJ1biBhc3luYyBjb2RlIGFzIHN5bmMgdXNpbmcgZGVhc3luYyBtb2R1bGVcbiAgICAgICAgICAgIGlmICghRmliZXIuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHZhbCA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBmaW5hbFZhbCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAocmV0dmFsICYmIHJldHZhbC50aGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXR2YWwpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gcmV0dmFsO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3JlYWR5U3RhdGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGlzIGVycm9yIGFzIGl0IHVzdWFsbHkgaGFwcGVucyBcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBPeHlnZW4gaXMgZGlzcG9zZWQgYW5kIHByb2Nlc3MgaXMgYmVpbmcga2lsbGVkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWFzeW5jLmxvb3BXaGlsZSgpIGZhaWxlZDonLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XG5cbiAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGlmIHdlIGFyZSBpbnNpZGUgdGhlIEZpYmVyIGNvbnRleHQsIHRoZW4gdXNlIEZpYmVyJ3MgRnV0dXJlXG4gICAgICAgICAgICAgICAgY29uc3QgZnV0dXJlID0gbmV3IEZ1dHVyZSgpO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQudGhlbigodmFsKSA9PiBmdXR1cmUucmV0dXJuKHZhbCksIChlcnIpID0+IGZ1dHVyZS50aHJvdyhlcnIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1dHVyZS53YWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlYXN5bmMubG9vcFdoaWxlKCgpID0+ICFkb25lICYmICFlcnJvcik7XG5cbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gcmV0cmlldmUgY3VycmVudCBsaW5lIGFuZCBmdW5jdGlvbiBuYW1lIGZyb20gdGhlIGNhbGwgc3RhY2tcbiAgICBfZ2V0Q29tbWFuZExvY2F0aW9uKCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IF9fc3RhY2s7XG4gICAgICAgIGxldCBjYWxsZXIgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBjYWxsIG9mIHN0YWNrKSB7XG4gICAgICAgICAgICBpZiAoX19maWxlbmFtZSA9PT0gY2FsbC5nZXRGaWxlTmFtZSgpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IGNhbGxlciwgd2hpY2ggaXMgbm90IHRoZSBjdXJyZW50IGZpbGVcbiAgICAgICAgICAgIGNhbGxlciA9IGNhbGw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7Y2FsbGVyLmdldEZpbGVOYW1lKCl9OiR7Y2FsbGVyLmdldExpbmVOdW1iZXIoKSArIHRoaXMuYWRqdXN0U2NyaXB0TGluZX06JHtjYWxsZXIuZ2V0Q29sdW1uTnVtYmVyKCl9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBfZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MsIGxvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyKSB7XG4gICAgICAgIHZhciBzdGVwID0gbmV3IFN0ZXBSZXN1bHQoKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9XG4gICAgICAgICAgICAobW9kdWxlLmdldFN0ZXBEaXNwbGF5TmFtZSAmJiBtb2R1bGUuZ2V0U3RlcERpc3BsYXlOYW1lKG1ldGhvZE5hbWUsIGFyZ3MsIHJldHZhbCwgZXJyKSkgfHxcbiAgICAgICAgICAgIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgbWV0aG9kTmFtZSwgYXJncyk7XG5cbiAgICAgICAgc3RlcC5uYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICAgIHN0ZXAudHJhbnNhY3Rpb24gPSBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgfHwgbnVsbDsgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGhlcmUgaWYgaXQncyBhbHJlYWR5IHBvcHVsYXRlZCBpbiBycz9cbiAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICAvLyBtb2R1bGUuZXh0cmEgaXMgcmVzZXRlZCBmb3IgZWFjaCBzdGVwLCBzbyB3ZSBtdXN0IGNsb25lIGl0XG4gICAgICAgIHN0ZXAuZXh0cmEgPSB7IC4uLm1vZHVsZS5leHRyYSB9O1xuICAgICAgICBpZiAobW9kdWxlLmV4dHJhICYmIG1vZHVsZS5leHRyYS5odHRwKSB7XG4gICAgICAgICAgICBzdGVwLnR5cGUgPSAnaHR0cCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xuICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuUEFTU0VEO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHN0ZXAgc3RhdHVzXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyci5pc0ZhdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLkZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycgJiYgbWV0aG9kTmFtZSA9PT0gJ3dhcm4nKSB7XG4gICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLlBBU1NFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0ZXAuYWN0aW9uID0gKHR5cGVvZiBtb2R1bGUuX2lzQWN0aW9uID09PSAnZnVuY3Rpb24nID8gbW9kdWxlLl9pc0FjdGlvbihtZXRob2ROYW1lKSA6IGZhbHNlKTtcbiAgICAgICAgc3RlcC5zdGFydFRpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgIHN0ZXAuZW5kVGltZSA9IGVuZFRpbWU7XG4gICAgICAgIHN0ZXAuZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlLl9nZXRTdGF0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IG1vZHVsZS5fZ2V0U3RhdHMobWV0aG9kTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGVwLnN0YXRzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xuICAgICAgICAgICAgICAgIC8vaWdub3JlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiBlcnIudHlwZSAmJiAoZXJyLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQgfHwgZXJyLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5BUFBJVU1fU0VTU0lPTl9USU1FT1VUKSkge1xuICAgICAgICAgICAgICAgIC8vaWdub3JlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ZXAuZmFpbHVyZSA9IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGhlIG1vZHVsZSBkZWNpZGUgd2hldGhlciBhIHNjcmVlbnNob3Qgc2hvdWxkIGJlIHRha2VuIG9uIGVycm9yIG9yIG5vdFxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50ID09PSAnZnVuY3Rpb24nICYmICF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdCA9IG1vZHVsZS5fdGFrZVNjcmVlbnNob3RTaWxlbnQobWV0aG9kTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIHVuYWJsZSB0byBnZXQgYSBzY3JlZW5zaG90XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQgKGluIFBlcmZlY3RvIENsb3VkLCB0aGUgc2NyZWVuc2hvdCBtaWdodCBub3QgYmUgaW1taWRpYXRlbHkgYXZhaWxhYmxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5zbGVlcCgxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIHRvIHVzZXIgdGhhdCBhbiBhdHRlbXB0IHRvIHRha2UgYSBzY3JlZW5zaG90IGhhcyBmYWlsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RlcDtcbiAgICB9XG5cbiAgICBhc3luYyBfZGlzcG9zZVNlcnZpY2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZXMgfHwgdHlwZW9mIHRoaXMuc2VydmljZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuc2VydmljZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW2tleV07XG4gICAgICAgICAgICBpZiAoc2VydmljZS5kaXNwb3NlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBzZXJ2aWNlIGRpc3Bvc2FsIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke2tleX0nOmAsIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBfZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMubW9kdWxlcyB8fCB0eXBlb2YgdGhpcy5tb2R1bGVzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLm1vZHVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlc1trZXldO1xuXG4gICAgICAgICAgICBpZiAobW9kLmRpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNwb3NlUmVzdWx0ID0gbW9kLmRpc3Bvc2Uoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VSZXN1bHQgJiYgdHlwZW9mIGRpc3Bvc2VSZXN1bHQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSBwcm9taXNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkaXNwb3NlUmVzdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIG1vZHVsZSBkaXNwb3NhbCBlcnJvciBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZSAnJHtrZXl9JzogYCwgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKlxuICAgICAqIFNlcnZpY2VzIEV2ZW50IEVtaXR0ZXJzXG4gICAgICovXG4gICAgX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZUxvYWRlZChtb2R1bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZUxvYWRlZFwiIG1ldGhvZCBvZiAke3NlcnZpY2VOYW1lfSBzZXJ2aWNlLmAsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSkge1xuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV07XG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5vbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlSW5pdGlhbGl6ZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVXaWxsRGlzcG9zZShtb2R1bGUpIHtcbiAgICAgICAgaWYgKCF0aGlzIHx8ICF0aGlzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgc2VydmljZU5hbWUgaW4gdGhpcy5zZXJ2aWNlcykge1xuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlLm9uTW9kdWxlV2lsbERpc3Bvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNhbGwgXCJvbk1vZHVsZVdpbGxEaXNwb3NlXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGFyZ3MpIHtcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XG4gICAgICAgIGZvciAobGV0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV3QXJncztcbiAgICB9XG4gICAgX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykge1xuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuICdFTkNSWVBURUQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhcmcgfHwgdHlwZW9mIGFyZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjZSB1c2VyIHBhcmFtZXRlcnMgd2l0aCB2YWx1ZXNcbiAgICAgICAgLy8gbm90ZTogdXNlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgICAgICBmb3IgKGxldCBwYXJhbU5hbWUgaW4gdGhpcy5jdHgucGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdHgucGFyYW1zLmhhc093blByb3BlcnR5KHBhcmFtTmFtZSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHRoaXMuY3R4LnBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwkeycgKyBwYXJhbU5hbWUgKyAnfScsICdnJyksIHBhcmFtVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlcGxhY2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggdmFsdWVzXG4gICAgICAgIGZvciAobGV0IGVudk5hbWUgaW4gdGhpcy5jdHguZW52KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdHguZW52Lmhhc093blByb3BlcnR5KGVudk5hbWUpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gdGhpcy5jdHguZW52W2Vudk5hbWVdO1xuICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFwkeycgKyBlbnZOYW1lICsgJ30nLCAnZycpLCBlbnZWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgX2dldEFsbFByb3BlcnR5TmFtZXMoIG9iaiApIHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBbXTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyggb2JqICkuZm9yRWFjaChmdW5jdGlvbiAoIHByb3AgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBwcm9wcy5pbmRleE9mKCBwcm9wICkgPT09IC0xICkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKCBwcm9wICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICAgICAgfSB3aGlsZSAoIG9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiggb2JqICkgKTtcblxuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3dhaXRTdGVwUmVzdWx0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkoYXJncywgbW9kdWxlTmFtZSkge1xuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIF9uZXdBcmdzLnB1c2godGhpcy5fZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX25ld0FyZ3M7XG4gICAgfVxuXG4gICAgX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSB7XG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0VOQ1JZUFRFRCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG59XG4iXX0=
|
|
1078
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkNvcmUuanMiXSwibmFtZXMiOlsidjEiLCJyZXF1aXJlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWwiLCJnZXQiLCJvcmlnIiwiRXJyb3IiLCJwcmVwYXJlU3RhY2tUcmFjZSIsIl8iLCJzdGFjayIsImVyciIsImNhcHR1cmVTdGFja1RyYWNlIiwiREVGQVVMVF9USU1FT1VUIiwiREVGQVVMVF9PUFRTIiwiYmFja3RyYWNlIiwiY29tcGlsZXIiLCJmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnMiLCJmYWlsRmFzdCIsImlnbm9yZVVuZGVmaW5lZERlZmluaXRpb25zIiwibmFtZSIsInByb2ZpbGUiLCJvcmRlciIsInNuaXBwZXRTeW50YXgiLCJ1bmRlZmluZWQiLCJzbmlwcGV0cyIsInNvdXJjZSIsInN0cmljdCIsInRhZ0V4cHJlc3Npb24iLCJ0YWdzSW5UaXRsZSIsInRpbWVvdXQiLCJNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWCIsIlNFUlZJQ0VfTkFNRV9NQVRDSF9SRUdFWCIsIkRPX05PVF9XUkFQX01FVEhPRFMiLCJERUZBVUxUX0NUWCIsInBhcmFtcyIsInZhcnMiLCJlbnYiLCJjYXBzIiwiYXR0cmlidXRlcyIsIkRFRkFVTFRfUkVTVUxUX1NUT1JFIiwic3RlcHMiLCJsb2dzIiwiYXR0YWNobWVudHMiLCJoYXIiLCJPeHlnZW4iLCJPeHlnZW5FdmVudHMiLCJjb25zdHJ1Y3RvciIsImlzSW5pdGlhbGl6ZWQiLCJyZXN1bHRTdG9yZSIsImN0eCIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInJlcG8iLCJjYXBhYmlsaXRpZXMiLCJvcHRzIiwib3hCYXNlRGlyIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJsb2dnZXIiLCJfd3JhcExvZ2dlciIsIl93YWl0U3RlcFJlc3VsdExpc3QiLCJpbml0Iiwib3B0aW9ucyIsInJlc3VsdHMiLCJhc3NpZ24iLCJjd2QiLCJwcm9jZXNzIiwia2V5cyIsImxlbmd0aCIsIm1ha2VPeEdsb2JhbCIsIl9sb2FkU2VydmljZXMiLCJfbG9hZE1vZHVsZXMiLCJnbG9iYWxTY29wZSIsIm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCIsImRpc3Bvc2VNb2R1bGVzIiwic3RhdHVzIiwiX2Rpc3Bvc2VNb2R1bGVzIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImRpc3Bvc2UiLCJfZGlzcG9zZVNlcnZpY2VzIiwiYWRqdXN0U2NyaXB0TGluZSIsImlzSW5EZWJ1Z01vZGUiLCJveHV0aWwiLCJyZXN1bHQiLCJjb250ZXh0Iiwib3giLCJyZXBvc2l0b3J5IiwidHJhbnNTdGVwIiwiaW5jbHVkZXMiLCJ0cmFuc05hbWUiLCJ0cmFuc2FjdGlvbiIsImR1cmF0aW9uIiwic3RlcCIsImVuZFRpbWUiLCJTVEFUVVMiLCJXQVJOSU5HIiwiZ2V0TW9kdWxlc0NhcGFiaWxpdGllcyIsIm1vZENhcHMiLCJtb2R1bGVOYW1lIiwibW9kdWxlIiwiX2dldENhcGFiaWxpdGllcyIsInJlc2V0UmVzdWx0cyIsIm9uQmVmb3JlQ2FzZSIsIl9pdGVyYXRpb25TdGFydCIsIm9uQWZ0ZXJDYXNlIiwiX2l0ZXJhdGlvbkVuZCIsImFkZEF0dHJpYnV0ZSIsImJpbmQiLCJhZGRBdHRhY2htZW50IiwidmFsdWUiLCJPeEVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJTQ1JJUFRfRVJST1IiLCJmaWxlUGF0aCIsImZzIiwiZXhpc3RzU3luYyIsInB1c2giLCJjb3JlVXRpbHMiLCJuZXdGaWxlQXR0YWNobWVudCIsImxvYWRQYWdlT2JqZWN0RmlsZSIsInBvUGF0aCIsInBvIiwiX2xvZ2dlciIsImxvZ2dlcldyYXAiLCJpbmZvIiwiYXJncyIsIl9sb2ciLCJkZWJ1ZyIsIndhcm4iLCJ1c2VySW5mbyIsIklTU1VFUlMiLCJVU0VSIiwidXNlckRlYnVnIiwidXNlckVycm9yIiwidXNlcldhcm4iLCJsZXZlbCIsInNyYyIsIkRFRkFVTFRfTE9HR0VSX0lTU1VFUiIsImFwcGx5IiwibWVzc2FnZSIsInN0cmluZ2lmeSIsInRpbWUiLCJnZXRUaW1lU3RhbXAiLCJ0b1VwcGVyQ2FzZSIsIm1zZyIsInNoaWZ0IiwiZW1pdExvZyIsIm94U2VydmljZXNEaXJQYXRoIiwicmVzb2x2ZSIsInNlcnZpY2VGaWxlcyIsImdsb2IiLCJzeW5jIiwiaSIsInNlcnZpY2VGaWxlTmFtZSIsInNlcnZpY2VGaWxlUGF0aCIsIm1hdGNoIiwic2VydmljZU5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJzZXJ2aWNlIiwiX2xvYWRTZXJ2aWNlIiwiRU9MIiwic3RhY2t0cmFjZSIsInNlcnZpY2VQYXRoIiwiU2VydmljZUNsYXNzIiwiZGVmYXVsdCIsInNlcnZpY2VMb2dnZXIiLCJfbG9hZEludGVybmFsTW9kdWxlcyIsIl9sb2FkRXh0ZXJuYWxNb2R1bGVzIiwibW9kdWxlc0ZvbGRlclBhdGgiLCJtb2R1bGVzX2V4dCIsIm94TW9kdWxlc0RpclBhdGgiLCJtb2R1bGVGaWxlcyIsImZvckVhY2giLCJtb2R1bGVGaWxlTmFtZSIsInN0YXJ0VGltZSIsIkRhdGUiLCJtb2R1bGVMb2dnZXIiLCJtb2QiLCJsb2FkTW9kdWxlRnJvbUZpbGUiLCJfY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQiLCJfd3JhcE1vZHVsZSIsImV4Y2x1ZGVVbmRlZmluZWRNb2RzIiwiTW9kdWxlcyIsIk1vZHVsZUNsYXNzIiwiZ2V0T3hNb2R1bGVzRGlyIiwibG9hZE1vZHVsZUZyb21DbGFzcyIsIndyYXBwZXIiLCJfdGhpcyIsIm1vZHVsZU1ldGhvZHMiLCJzb21lIiwieCIsIl9nZXRBbGxQcm9wZXJ0eU5hbWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZCIsIkZ1bmN0aW9uIiwiT3h5Z2VuU3ViTW9kdWxlIiwiaW5kZXhPZiIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsImFyZ3VtZW50cyIsImdldE1ldGhvZFNpZ25hdHVyZSIsImdldE94eWdlbkVycm9yIiwiX2NvbW1hbmRXcmFwcGVyIiwiY21kTmFtZSIsImNtZEFyZ3MiLCJyZXR2YWwiLCJjbWRGbiIsInB1YmxpY01ldGhvZCIsInN0YXJ0c1dpdGgiLCJkZWxheSIsImRlYXN5bmMiLCJzbGVlcCIsIk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IiLCJkZWNyeXB0ZWRBcmdzIiwiX2dldERlY3J5cHRlZEFyZ3NGb3JBcHBseSIsIl9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZSIsImNtZExvY2F0aW9uIiwic3RlcFJlc3VsdElkIiwiX2dldENvbW1hbmRMb2NhdGlvbiIsImVtaXRCZWZvcmVDb21tYW5kIiwiX3dyYXBBc3luYyIsIl9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlIiwicmV0dmFsUHJvbWlzZSIsInRoZW4iLCJwcm9taXNlRG9uZSIsImxvb3BXaGlsZSIsIl9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkIiwic3RlcFJlc3VsdCIsImRvbmUiLCJ3YWl0SWQiLCJfZ2V0U3RlcFJlc3VsdCIsImlkIiwiaW5kZXgiLCJzcGxpY2UiLCJlbWl0QWZ0ZXJDb21tYW5kIiwiaXNGYXRhbCIsImNvbnRpbnVlT25FcnJvciIsImxvY2F0aW9uIiwiZmFpbHVyZSIsImZuIiwic2VsZiIsIkZpYmVyIiwiY3VycmVudCIsImZpbmFsVmFsIiwiUHJvbWlzZSIsInZhbCIsImNhdGNoIiwiZnV0dXJlIiwiRnV0dXJlIiwicmV0dXJuIiwidGhyb3ciLCJ3YWl0IiwiX19zdGFjayIsImNhbGxlciIsIl9fZmlsZW5hbWUiLCJnZXRGaWxlTmFtZSIsImdldExpbmVOdW1iZXIiLCJnZXRDb2x1bW5OdW1iZXIiLCJTdGVwUmVzdWx0IiwiZGlzcGxheU5hbWUiLCJnZXRTdGVwRGlzcGxheU5hbWUiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsImV4dHJhIiwiaHR0cCIsInR5cGUiLCJBU1NFUlRfUEFTU0VEIiwiUEFTU0VEIiwiRkFJTEVEIiwiYWN0aW9uIiwiX2lzQWN0aW9uIiwiX2dldFN0YXRzIiwic3RhdHMiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJBUFBJVU1fU0VTU0lPTl9USU1FT1VUIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImRpc2FibGVTY3JlZW5zaG90Iiwic2NyZWVuc2hvdCIsImtleSIsImRpc3Bvc2VSZXN1bHQiLCJvbk1vZHVsZUxvYWRlZCIsIm9uTW9kdWxlSW5pdGlhbGl6ZWQiLCJvbk1vZHVsZVdpbGxEaXNwb3NlIiwiX25ld0FyZ3MiLCJhcmciLCJfcmVwbGFjZVBhcmFtZXRlckluQXJndW1lbnQiLCJnZXREZWNyeXB0UmVzdWx0IiwicGFyYW1OYW1lIiwiaGFzT3duUHJvcGVydHkiLCJwYXJhbVZhbHVlIiwicmVwbGFjZSIsIlJlZ0V4cCIsImVudk5hbWUiLCJlbnZWYWx1ZSIsIm9iaiIsInByb3BzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3AiLCJnZXRQcm90b3R5cGVPZiIsIl9jaGVja1N0ZXBSZXN1bHQiLCJyZWplY3QiLCJfd2FpdFN0ZXBSZXN1bHQiLCJfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7Ozs7Ozs7O0FBWkEsTUFBTTtBQUFFQSxFQUFBQTtBQUFGLElBQVNDLE9BQU8sQ0FBQyxNQUFELENBQXRCOztBQWVBQyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLEVBQThCLFNBQTlCLEVBQXlDO0FBQ3JDQyxFQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUNiLFFBQUlDLElBQUksR0FBR0MsS0FBSyxDQUFDQyxpQkFBakI7O0FBQ0FELElBQUFBLEtBQUssQ0FBQ0MsaUJBQU4sR0FBMEIsVUFBVUMsQ0FBVixFQUFhQyxLQUFiLEVBQW9CO0FBQUUsYUFBT0EsS0FBUDtBQUFlLEtBQS9EOztBQUNBLFFBQUlDLEdBQUcsR0FBRyxJQUFJSixLQUFKLEVBQVY7QUFDQUEsSUFBQUEsS0FBSyxDQUFDSyxpQkFBTixDQUF3QkQsR0FBeEI7QUFDQSxRQUFJRCxLQUFLLEdBQUdDLEdBQUcsQ0FBQ0QsS0FBaEI7QUFDQUgsSUFBQUEsS0FBSyxDQUFDQyxpQkFBTixHQUEwQkYsSUFBMUI7QUFDQSxXQUFPSSxLQUFQO0FBQ0g7QUFUb0MsQ0FBekM7QUFZQSxNQUFNRyxlQUFlLEdBQUcsS0FBeEI7QUFDQSxNQUFNQyxZQUFZLEdBQUc7QUFDakJDLEVBQUFBLFNBQVMsRUFBRSxLQURNO0FBRWpCQyxFQUFBQSxRQUFRLEVBQUUsRUFGTztBQUdqQkMsRUFBQUEsd0JBQXdCLEVBQUUsS0FIVDtBQUlqQkMsRUFBQUEsUUFBUSxFQUFFLEtBSk87QUFLakJDLEVBQUFBLDBCQUEwQixFQUFFLEtBTFg7QUFNakJDLEVBQUFBLElBQUksRUFBRSxFQU5XO0FBT2pCQyxFQUFBQSxPQUFPLEVBQUUsRUFQUTtBQVFqQnBCLEVBQUFBLE9BQU8sRUFBRSxFQVJRO0FBU2pCcUIsRUFBQUEsS0FBSyxFQUFFLFNBVFU7QUFVakJDLEVBQUFBLGFBQWEsRUFBRUMsU0FWRTtBQVdqQkMsRUFBQUEsUUFBUSxFQUFFLElBWE87QUFZakJDLEVBQUFBLE1BQU0sRUFBRSxJQVpTO0FBYWpCQyxFQUFBQSxNQUFNLEVBQUUsS0FiUztBQWNqQkMsRUFBQUEsYUFBYSxFQUFFLEVBZEU7QUFlakJDLEVBQUFBLFdBQVcsRUFBRSxLQWZJO0FBZ0JqQkMsRUFBQUEsT0FBTyxFQUFFakI7QUFoQlEsQ0FBckI7QUFrQkEsTUFBTWtCLHVCQUF1QixHQUFHLG9CQUFoQztBQUNBLE1BQU1DLHdCQUF3QixHQUFHLHFCQUFqQztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLENBQUMsUUFBRCxFQUFXLFdBQVgsQ0FBNUI7QUFFQSxNQUFNQyxXQUFXLEdBQUc7QUFDaEJDLEVBQUFBLE1BQU0sRUFBRSxFQURRO0FBRWhCQyxFQUFBQSxJQUFJLEVBQUUsRUFGVTtBQUdoQkMsRUFBQUEsR0FBRyxFQUFFLEVBSFc7QUFJaEJDLEVBQUFBLElBQUksRUFBRSxFQUpVO0FBS2hCQyxFQUFBQSxVQUFVLEVBQUU7QUFMSSxDQUFwQjtBQU9BLE1BQU1DLG9CQUFvQixHQUFHO0FBQ3pCQyxFQUFBQSxLQUFLLEVBQUUsRUFEa0I7QUFFekJDLEVBQUFBLElBQUksRUFBRSxFQUZtQjtBQUd6QkMsRUFBQUEsV0FBVyxFQUFFLEVBSFk7QUFJekJDLEVBQUFBLEdBQUcsRUFBRSxJQUpvQjtBQUt6QkwsRUFBQUEsVUFBVSxFQUFFO0FBTGEsQ0FBN0I7O0FBUWUsTUFBTU0sTUFBTixTQUFxQkMscUJBQXJCLENBQWtDO0FBQzdDQyxFQUFBQSxXQUFXLEdBQUk7QUFDWDtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsS0FBckI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEVBQUUsR0FBR1Q7QUFBTCxLQUFuQjtBQUNBLFNBQUtVLEdBQUwsR0FBVyxFQUFFLEdBQUdoQjtBQUFMLEtBQVg7QUFDQSxTQUFLaUIsT0FBTCxHQUFlLEVBQWY7QUFDQSxTQUFLQyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZLEVBQVo7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZLElBQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCQyxjQUFLQyxJQUFMLENBQVVDLFNBQVYsRUFBcUIsS0FBckIsQ0FBakI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsS0FBS0MsV0FBTCxDQUFpQixzQkFBTyxRQUFQLENBQWpCLENBQWQ7QUFDQSxTQUFLQyxtQkFBTCxHQUEyQixFQUEzQjtBQUNIOztBQUVTLFFBQUpDLElBQUksQ0FBQ0MsT0FBRCxFQUFVMUIsSUFBVixFQUFnQlksR0FBRyxHQUFHLEVBQXRCLEVBQTBCZSxPQUFPLEdBQUcsRUFBcEMsRUFBd0M7QUFDOUMsU0FBS1YsSUFBTCxHQUFZckQsTUFBTSxDQUFDZ0UsTUFBUCxDQUFjcEQsWUFBZCxFQUE0QmtELE9BQTVCLENBQVo7QUFDQSxTQUFLRyxHQUFMLEdBQVcsS0FBS1osSUFBTCxDQUFVWSxHQUFWLElBQWlCQyxPQUFPLENBQUNELEdBQVIsRUFBNUI7QUFDQSxTQUFLakIsR0FBTCxHQUFXaEQsTUFBTSxDQUFDZ0UsTUFBUCxDQUFjaEMsV0FBZCxFQUEyQmdCLEdBQUcsSUFBSSxFQUFsQyxDQUFYO0FBQ0EsU0FBS0EsR0FBTCxDQUFTWixJQUFULEdBQWdCLEVBQUUsSUFBR1ksR0FBRyxDQUFDWixJQUFKLElBQVksRUFBZixDQUFGO0FBQXFCLFNBQUdBO0FBQXhCLEtBQWhCO0FBQ0EsU0FBS1csV0FBTCxHQUFtQi9DLE1BQU0sQ0FBQ2dFLE1BQVAsQ0FBYzFCLG9CQUFkLEVBQW9DeUIsT0FBTyxJQUFJLEVBQS9DLENBQW5CO0FBQ0EsU0FBS1gsWUFBTCxHQUFvQixLQUFLSixHQUFMLENBQVNaLElBQVQsR0FBZ0JBLElBQXBDOztBQUVBLFFBQUlZLEdBQUcsQ0FBQ1gsVUFBSixLQUFtQixDQUFDMEIsT0FBTyxDQUFDMUIsVUFBVCxJQUF1QixDQUFDckMsTUFBTSxDQUFDbUUsSUFBUCxDQUFZSixPQUFPLENBQUMxQixVQUFwQixFQUFnQytCLE1BQTNFLENBQUosRUFBd0Y7QUFDcEYsV0FBS3JCLFdBQUwsQ0FBaUJWLFVBQWpCLEdBQThCLEVBQUUsR0FBR1csR0FBRyxDQUFDWDtBQUFULE9BQTlCO0FBQ0g7O0FBSUQsU0FBS2dDLFlBQUw7O0FBRUEsU0FBS0MsYUFBTDs7QUFFQSxTQUFLQyxZQUFMOztBQUVBLFFBQUksT0FBT1QsT0FBTyxDQUFDVSxXQUFmLEtBQStCLFdBQS9CLElBQThDVixPQUFPLENBQUNVLFdBQVIsS0FBd0IsSUFBMUUsRUFBZ0Y7QUFDNUUsV0FBS0MsMkJBQUw7QUFDSDs7QUFDRCxTQUFLM0IsYUFBTCxHQUFxQixJQUFyQjtBQUNIOztBQUVtQixRQUFkNEIsY0FBYyxDQUFDQyxNQUFNLEdBQUcsSUFBVixFQUFnQjtBQUNoQyxRQUFJO0FBQ0EsWUFBTSxLQUFLQyxlQUFMLENBQXFCRCxNQUFyQixDQUFOO0FBQ0gsS0FGRCxDQUdBLE9BQU9FLENBQVAsRUFBVTtBQUNOQyxNQUFBQSxPQUFPLENBQUNDLEtBQVIsQ0FBYyw2QkFBZCxFQUE2Q0YsQ0FBN0M7QUFDQSxZQUFNQSxDQUFOO0FBQ0g7QUFDSjs7QUFFWSxRQUFQRyxPQUFPLENBQUNMLE1BQU0sR0FBRyxJQUFWLEVBQWdCO0FBQ3pCLFFBQUk7QUFDQSxZQUFNLEtBQUtDLGVBQUwsQ0FBcUJELE1BQXJCLENBQU47QUFDQSxZQUFNLEtBQUtNLGdCQUFMLEVBQU47QUFDQSxXQUFLbkMsYUFBTCxHQUFxQixLQUFyQjtBQUNILEtBSkQsQ0FLQSxPQUFPK0IsQ0FBUCxFQUFVO0FBQ04sV0FBSy9CLGFBQUwsR0FBcUIsS0FBckI7QUFDQWdDLE1BQUFBLE9BQU8sQ0FBQ0MsS0FBUixDQUFjLHFCQUFkLEVBQXFDRixDQUFyQztBQUNBLFlBQU1BLENBQU47QUFDSDtBQUNKOztBQUVtQixNQUFoQkssZ0JBQWdCLEdBQUc7QUFDbkIsVUFBTUMsYUFBYSxHQUFHQyxjQUFPRCxhQUFQLEVBQXRCOztBQUVBLFVBQU1FLE1BQU0sR0FBR0YsYUFBYSxHQUFHLENBQUMsQ0FBSixHQUFRLENBQXBDO0FBQ0EsV0FBT0UsTUFBUDtBQUNIOztBQUVVLE1BQVBDLE9BQU8sR0FBRztBQUNWLFdBQU8sS0FBS3RDLEdBQVo7QUFDSDs7QUFFVSxNQUFQc0MsT0FBTyxDQUFDdEMsR0FBRCxFQUFNO0FBQ2IsU0FBS0EsR0FBTCxHQUFXQSxHQUFYOztBQUNBLFFBQUk5QyxNQUFNLENBQUNxRixFQUFYLEVBQWU7QUFDWHJGLE1BQUFBLE1BQU0sQ0FBQ3FGLEVBQVAsQ0FBVXZDLEdBQVYsR0FBZ0JBLEdBQWhCOztBQUNBLFVBQUksT0FBTyxLQUFLSyxJQUFMLENBQVVtQixXQUFqQixLQUFpQyxXQUFqQyxJQUFnRCxLQUFLbkIsSUFBTCxDQUFVbUIsV0FBVixLQUEwQixJQUE5RSxFQUFvRjtBQUVoRnRFLFFBQUFBLE1BQU0sQ0FBQytCLE1BQVAsR0FBZ0JlLEdBQUcsQ0FBQ2YsTUFBSixJQUFjLEVBQTlCO0FBQ0EvQixRQUFBQSxNQUFNLENBQUNpQyxHQUFQLEdBQWFhLEdBQUcsQ0FBQ2IsR0FBSixJQUFXLEVBQXhCO0FBQ0FqQyxRQUFBQSxNQUFNLENBQUNtQyxVQUFQLEdBQW9CVyxHQUFHLENBQUNYLFVBQUosSUFBa0IsRUFBdEM7QUFDSDtBQUNKO0FBQ0o7O0FBRWEsTUFBVm1ELFVBQVUsR0FBRztBQUNiLFdBQU8sS0FBS3JDLElBQVo7QUFDSDs7QUFFYSxNQUFWcUMsVUFBVSxDQUFDckMsSUFBRCxFQUFPO0FBQ2pCLFNBQUtBLElBQUwsR0FBWUEsSUFBWjs7QUFDQSxRQUFJakQsTUFBTSxDQUFDcUYsRUFBWCxFQUFlO0FBQ1hyRixNQUFBQSxNQUFNLENBQUNxRixFQUFQLENBQVVwQyxJQUFWLEdBQWlCQSxJQUFqQjtBQUNIO0FBQ0o7O0FBRVUsTUFBUFksT0FBTyxHQUFHO0FBR1YsU0FBSyxNQUFNMEIsU0FBWCxJQUF3QixLQUFLMUMsV0FBTCxDQUFpQlIsS0FBekMsRUFBZ0Q7QUFDNUMsVUFBSWtELFNBQVMsQ0FBQ3ZFLElBQVYsQ0FBZXdFLFFBQWYsQ0FBd0IsY0FBeEIsQ0FBSixFQUE2QztBQUN6QyxjQUFNQyxTQUFTLEdBQUdGLFNBQVMsQ0FBQ0csV0FBNUI7QUFDQUgsUUFBQUEsU0FBUyxDQUFDSSxRQUFWLEdBQXFCLENBQXJCOztBQUNBLGFBQUssTUFBTUMsSUFBWCxJQUFtQixLQUFLL0MsV0FBTCxDQUFpQlIsS0FBcEMsRUFBMkM7QUFFdkMsY0FBSXVELElBQUksQ0FBQ0YsV0FBTCxLQUFxQkQsU0FBckIsSUFBa0NHLElBQUksS0FBS0wsU0FBL0MsRUFBMEQ7QUFDdERBLFlBQUFBLFNBQVMsQ0FBQ0ksUUFBVixJQUFzQkMsSUFBSSxDQUFDRCxRQUEzQjs7QUFDQSxnQkFBSUMsSUFBSSxDQUFDQyxPQUFMLEdBQWVOLFNBQVMsQ0FBQ00sT0FBN0IsRUFBc0M7QUFDbENOLGNBQUFBLFNBQVMsQ0FBQ00sT0FBVixHQUFvQkQsSUFBSSxDQUFDQyxPQUF6QjtBQUNIOztBQUdELGdCQUFJRCxJQUFJLENBQUNuQixNQUFMLEtBQWdCcUIsZ0JBQU9DLE9BQTNCLEVBQW9DO0FBQ2hDUixjQUFBQSxTQUFTLENBQUNkLE1BQVYsR0FBbUJxQixnQkFBT0MsT0FBMUI7QUFDSDtBQUNKO0FBQ0o7QUFDSjtBQUNKOztBQUNELFdBQU8sS0FBS2xELFdBQVo7QUFDSDs7QUFFRG1ELEVBQUFBLHNCQUFzQixHQUFHO0FBQ3JCLFFBQUksQ0FBQyxLQUFLakQsT0FBVixFQUFtQjtBQUNmLGFBQU8sSUFBUDtBQUNIOztBQUNELFVBQU1rRCxPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsU0FBSyxJQUFJQyxVQUFULElBQXVCLEtBQUtuRCxPQUE1QixFQUFxQztBQUNqQyxZQUFNb0QsTUFBTSxHQUFHLEtBQUtwRCxPQUFMLENBQWFtRCxVQUFiLENBQWY7O0FBQ0EsVUFBSUMsTUFBTSxDQUFDbkYsSUFBUCxJQUFlbUYsTUFBTSxDQUFDQyxnQkFBdEIsSUFBMEMsT0FBT0QsTUFBTSxDQUFDQyxnQkFBZCxLQUFtQyxVQUFqRixFQUE2RjtBQUN6RixjQUFNbEUsSUFBSSxHQUFHaUUsTUFBTSxDQUFDQyxnQkFBUCxFQUFiOztBQUVBLFlBQUlsRSxJQUFJLElBQUksT0FBT0EsSUFBUCxLQUFnQixRQUF4QixJQUFvQ3BDLE1BQU0sQ0FBQ21FLElBQVAsQ0FBWS9CLElBQVosRUFBa0JnQyxNQUFsQixHQUEyQixDQUFuRSxFQUFzRTtBQUNsRStCLFVBQUFBLE9BQU8sQ0FBQ0UsTUFBTSxDQUFDbkYsSUFBUixDQUFQLEdBQXVCa0IsSUFBdkI7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTytELE9BQVA7QUFDSDs7QUFFREksRUFBQUEsWUFBWSxHQUFHO0FBQ1gsU0FBS3hELFdBQUwsQ0FBaUJSLEtBQWpCLEdBQXlCLEVBQXpCO0FBQ0EsU0FBS1EsV0FBTCxDQUFpQlAsSUFBakIsR0FBd0IsRUFBeEI7QUFDQSxTQUFLTyxXQUFMLENBQWlCTixXQUFqQixHQUErQixFQUEvQjtBQUNBLFNBQUtDLEdBQUwsR0FBVyxJQUFYO0FBQ0g7O0FBRWlCLFFBQVo4RCxZQUFZLENBQUNsQixPQUFELEVBQVU7QUFDeEIsU0FBSyxJQUFJYyxVQUFULElBQXVCLEtBQUtuRCxPQUE1QixFQUFxQztBQUNqQyxZQUFNb0QsTUFBTSxHQUFHLEtBQUtwRCxPQUFMLENBQWFtRCxVQUFiLENBQWY7O0FBQ0EsVUFBSSxDQUFDQyxNQUFMLEVBQWE7QUFDVDtBQUNIOztBQUNELFVBQUk7QUFDQUEsUUFBQUEsTUFBTSxDQUFDRyxZQUFQLEtBQXVCLE1BQU1ILE1BQU0sQ0FBQ0csWUFBUCxDQUFvQmxCLE9BQXBCLENBQTdCO0FBQ0FlLFFBQUFBLE1BQU0sQ0FBQ0ksZUFBUCxLQUEwQixNQUFNSixNQUFNLENBQUNJLGVBQVAsRUFBaEM7QUFDSCxPQUhELENBSUEsT0FBTzVCLENBQVAsRUFBVTtBQUNOLGFBQUtuQixNQUFMLENBQVlxQixLQUFaLENBQW1CLDJDQUEwQ3FCLFVBQVcsVUFBeEUsRUFBbUZ2QixDQUFuRjtBQUNIO0FBQ0o7QUFDSjs7QUFFZ0IsUUFBWDZCLFdBQVcsQ0FBQzNCLEtBQUssR0FBRyxJQUFULEVBQWU7QUFDNUIsU0FBSyxJQUFJcUIsVUFBVCxJQUF1QixLQUFLbkQsT0FBNUIsRUFBcUM7QUFDakMsWUFBTW9ELE1BQU0sR0FBRyxLQUFLcEQsT0FBTCxDQUFhbUQsVUFBYixDQUFmOztBQUNBLFVBQUksQ0FBQ0MsTUFBTCxFQUFhO0FBQ1Q7QUFDSDs7QUFDRCxVQUFJO0FBRUFBLFFBQUFBLE1BQU0sQ0FBQ0ssV0FBUCxLQUFzQixNQUFNTCxNQUFNLENBQUNLLFdBQVAsQ0FBbUIzQixLQUFuQixDQUE1QjtBQUNBc0IsUUFBQUEsTUFBTSxDQUFDTSxhQUFQLEtBQXdCLE1BQU1OLE1BQU0sQ0FBQ00sYUFBUCxDQUFxQjVCLEtBQXJCLENBQTlCO0FBQ0gsT0FKRCxDQUtBLE9BQU9GLENBQVAsRUFBVTtBQUNOLGFBQUtuQixNQUFMLENBQVlxQixLQUFaLENBQW1CLDBDQUF5Q3FCLFVBQVcsVUFBdkUsRUFBa0Z2QixDQUFsRjtBQUNIO0FBQ0o7QUFDSjs7QUFFRFIsRUFBQUEsWUFBWSxHQUFHO0FBQ1gsUUFBSSxDQUFDbkUsTUFBTSxDQUFDcUYsRUFBWixFQUFnQjtBQUNackYsTUFBQUEsTUFBTSxDQUFDcUYsRUFBUCxHQUFZO0FBQ1J0QyxRQUFBQSxPQUFPLEVBQUUsS0FBS0EsT0FETjtBQUVSRCxRQUFBQSxHQUFHLEVBQUUsS0FBS0EsR0FGRjtBQUdSYyxRQUFBQSxPQUFPLEVBQUUsS0FBS1QsSUFITjtBQUlSakIsUUFBQUEsSUFBSSxFQUFFLEtBQUtnQixZQUpIO0FBS1JMLFFBQUFBLFdBQVcsRUFBRSxLQUFLQSxXQUxWO0FBTVI2RCxRQUFBQSxZQUFZLEVBQUUsS0FBS0EsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FOTjtBQU9SQyxRQUFBQSxhQUFhLEVBQUUsS0FBS0EsYUFBTCxDQUFtQkQsSUFBbkIsQ0FBd0IsSUFBeEI7QUFQUCxPQUFaO0FBVUEzRyxNQUFBQSxNQUFNLENBQUNnQyxJQUFQLEdBQWMsS0FBS2MsR0FBTCxDQUFTZCxJQUF2QjtBQUNIO0FBQ0o7O0FBRUR1QyxFQUFBQSwyQkFBMkIsR0FBRztBQUUxQixRQUFJdkUsTUFBTSxDQUFDcUYsRUFBWCxFQUFlO0FBRVgsV0FBSyxJQUFJYSxVQUFULElBQXVCLEtBQUtuRCxPQUE1QixFQUFxQztBQUNqQyxZQUFJLENBQUMvQyxNQUFNLENBQUNrRyxVQUFELENBQVgsRUFBeUI7QUFDckJsRyxVQUFBQSxNQUFNLENBQUNrRyxVQUFELENBQU4sR0FBcUIsS0FBS25ELE9BQUwsQ0FBYW1ELFVBQWIsQ0FBckI7QUFDSDtBQUNKOztBQUVEbEcsTUFBQUEsTUFBTSxDQUFDK0IsTUFBUCxHQUFnQi9CLE1BQU0sQ0FBQ3FGLEVBQVAsQ0FBVXZDLEdBQVYsQ0FBY2YsTUFBOUI7QUFDQS9CLE1BQUFBLE1BQU0sQ0FBQ2lDLEdBQVAsR0FBYWpDLE1BQU0sQ0FBQ3FGLEVBQVAsQ0FBVXZDLEdBQVYsQ0FBY2IsR0FBM0I7QUFDQWpDLE1BQUFBLE1BQU0sQ0FBQzhDLEdBQVAsR0FBYTlDLE1BQU0sQ0FBQ3FGLEVBQVAsQ0FBVXZDLEdBQXZCO0FBQ0E5QyxNQUFBQSxNQUFNLENBQUNtQyxVQUFQLEdBQW9CbkMsTUFBTSxDQUFDcUYsRUFBUCxDQUFVdkMsR0FBVixDQUFjWCxVQUFkLElBQTRCLEVBQWhEO0FBQ0g7QUFDSjs7QUFFRHVFLEVBQUFBLFlBQVksQ0FBQzFGLElBQUQsRUFBTzZGLEtBQVAsRUFBYztBQUN0QixRQUFJLENBQUM3RixJQUFELElBQVMsQ0FBQzZGLEtBQWQsRUFBcUI7QUFDakIsWUFBTSxJQUFJQyxvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQkMsWUFBbEMsRUFBZ0QsK0RBQWhELENBQU47QUFDSDs7QUFFRCxRQUFJLEtBQUtwRSxXQUFMLElBQW9CLEtBQUtBLFdBQUwsQ0FBaUJWLFVBQXpDLEVBQXFEO0FBQ2pELFdBQUtVLFdBQUwsQ0FBaUJWLFVBQWpCLENBQTRCbkIsSUFBNUIsSUFBb0M2RixLQUFwQztBQUNIO0FBQ0o7O0FBRURELEVBQUFBLGFBQWEsQ0FBQ00sUUFBRCxFQUFXO0FBQ3BCLFFBQUksQ0FBQyxLQUFLckUsV0FBVixFQUF1QjtBQUNuQjtBQUNIOztBQUVELFFBQUksQ0FBQ3NFLFlBQUdDLFVBQUgsQ0FBY0YsUUFBZCxDQUFMLEVBQThCO0FBQzFCdEMsTUFBQUEsT0FBTyxDQUFDckUsR0FBUixDQUFhLFFBQU8yRyxRQUFTLGdCQUE3QjtBQUNBO0FBQ0g7O0FBRUQsUUFBSSxDQUFDLEtBQUtyRSxXQUFMLENBQWlCTixXQUF0QixFQUFtQztBQUMvQixXQUFLTSxXQUFMLENBQWlCTixXQUFqQixHQUErQixFQUEvQjtBQUNIOztBQUNELFNBQUtNLFdBQUwsQ0FBaUJOLFdBQWpCLENBQTZCOEUsSUFBN0IsQ0FDSUMsU0FBUyxDQUFDQyxpQkFBVixDQUE0QkwsUUFBNUIsQ0FESjtBQUdIOztBQUVETSxFQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBRCxFQUFTO0FBQ3ZCLFFBQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1Q7QUFDSDs7QUFDRCxRQUFJO0FBQ0EsWUFBTUMsRUFBRSxHQUFHN0gsT0FBTyxDQUFDNEgsTUFBRCxDQUFsQjs7QUFFQSxXQUFLbkMsVUFBTCxHQUFrQm9DLEVBQWxCOztBQUNBLFVBQUksT0FBTyxLQUFLdkUsSUFBTCxDQUFVbUIsV0FBakIsS0FBaUMsV0FBakMsSUFBZ0QsS0FBS25CLElBQUwsQ0FBVW1CLFdBQVYsS0FBMEIsSUFBOUUsRUFBb0Y7QUFDaEZ0RSxRQUFBQSxNQUFNLENBQUMwSCxFQUFQLEdBQVlBLEVBQVo7QUFDSDtBQUNKLEtBUEQsQ0FRQSxPQUFPL0MsQ0FBUCxFQUFVO0FBRU4sVUFBSSxPQUFPLEtBQUt4QixJQUFMLENBQVVtQixXQUFqQixLQUFpQyxXQUFqQyxJQUFnRCxLQUFLbkIsSUFBTCxDQUFVbUIsV0FBVixLQUEwQixJQUE5RSxFQUFvRjtBQUNoRnRFLFFBQUFBLE1BQU0sQ0FBQzBILEVBQVAsR0FBWSxFQUFaO0FBQ0g7QUFDSjtBQUNKOztBQUtEakUsRUFBQUEsV0FBVyxDQUFDa0UsT0FBRCxFQUFVO0FBQ2pCLFVBQU1DLFVBQVUsR0FBRztBQUNmQyxNQUFBQSxJQUFJLEVBQUUsQ0FBQyxHQUFHQyxJQUFKLEtBQWEsS0FBS0MsSUFBTCxDQUFVSixPQUFWLEVBQW1CLE1BQW5CLEVBQTJCRyxJQUEzQixDQURKO0FBRWZFLE1BQUFBLEtBQUssRUFBRSxDQUFDLEdBQUdGLElBQUosS0FBYSxLQUFLQyxJQUFMLENBQVVKLE9BQVYsRUFBbUIsT0FBbkIsRUFBNEJHLElBQTVCLENBRkw7QUFHZmpELE1BQUFBLEtBQUssRUFBRSxDQUFDLEdBQUdpRCxJQUFKLEtBQWEsS0FBS0MsSUFBTCxDQUFVSixPQUFWLEVBQW1CLE9BQW5CLEVBQTRCRyxJQUE1QixDQUhMO0FBSWZHLE1BQUFBLElBQUksRUFBRSxDQUFDLEdBQUdILElBQUosS0FBYSxLQUFLQyxJQUFMLENBQVVKLE9BQVYsRUFBbUIsTUFBbkIsRUFBMkJHLElBQTNCLENBSko7QUFLZkksTUFBQUEsUUFBUSxFQUFFLENBQUMsR0FBR0osSUFBSixLQUFhLEtBQUtDLElBQUwsQ0FBVUosT0FBVixFQUFtQixNQUFuQixFQUEyQkcsSUFBM0IsRUFBaUNLLGlCQUFRQyxJQUF6QyxDQUxSO0FBTWZDLE1BQUFBLFNBQVMsRUFBRSxDQUFDLEdBQUdQLElBQUosS0FBYSxLQUFLQyxJQUFMLENBQVVKLE9BQVYsRUFBbUIsT0FBbkIsRUFBNEJHLElBQTVCLEVBQWtDSyxpQkFBUUMsSUFBMUMsQ0FOVDtBQU9mRSxNQUFBQSxTQUFTLEVBQUUsQ0FBQyxHQUFHUixJQUFKLEtBQWEsS0FBS0MsSUFBTCxDQUFVSixPQUFWLEVBQW1CLE9BQW5CLEVBQTRCRyxJQUE1QixFQUFrQ0ssaUJBQVFDLElBQTFDLENBUFQ7QUFRZkcsTUFBQUEsUUFBUSxFQUFFLENBQUMsR0FBR1QsSUFBSixLQUFhLEtBQUtDLElBQUwsQ0FBVUosT0FBVixFQUFtQixNQUFuQixFQUEyQkcsSUFBM0IsRUFBaUNLLGlCQUFRQyxJQUF6QztBQVJSLEtBQW5CO0FBVUEsV0FBT1IsVUFBUDtBQUNIOztBQUVERyxFQUFBQSxJQUFJLENBQUNKLE9BQUQsRUFBVWEsS0FBVixFQUFpQlYsSUFBakIsRUFBdUJXLEdBQUcsR0FBR0MsOEJBQTdCLEVBQW9EO0FBQ3BELFFBQUksQ0FBQ2YsT0FBTyxDQUFDYSxLQUFELENBQVosRUFBcUI7QUFDakI7QUFDSDs7QUFDRGIsSUFBQUEsT0FBTyxDQUFDYSxLQUFELENBQVAsQ0FBZUcsS0FBZixDQUFxQmhCLE9BQXJCLEVBQThCRyxJQUE5Qjs7QUFFQSxVQUFNYyxPQUFPLEdBQUcxRCxjQUFPMkQsU0FBUCxDQUFpQmYsSUFBakIsRUFBdUIsQ0FBdkIsQ0FBaEI7O0FBQ0EsVUFBTWdCLElBQUksR0FBRzVELGNBQU82RCxZQUFQLEVBQWI7O0FBRUEsUUFBSSxLQUFLbEcsV0FBTCxJQUFvQixLQUFLQSxXQUFMLENBQWlCUCxJQUF6QyxFQUErQztBQUMzQyxXQUFLTyxXQUFMLENBQWlCUCxJQUFqQixDQUFzQitFLElBQXRCLENBQTJCO0FBQ3ZCeUIsUUFBQUEsSUFBSSxFQUFFQSxJQURpQjtBQUV2Qk4sUUFBQUEsS0FBSyxFQUFFQSxLQUFLLENBQUNRLFdBQU4sRUFGZ0I7QUFHdkJDLFFBQUFBLEdBQUcsRUFBRUwsT0FIa0I7QUFJdkJILFFBQUFBLEdBQUcsRUFBRUE7QUFKa0IsT0FBM0I7QUFNSDs7QUFFRFgsSUFBQUEsSUFBSSxHQUFHYyxPQUFPLEdBQUdkLElBQUksQ0FBQ29CLEtBQUwsRUFBSCxHQUFrQnBCLElBQWhDO0FBQ0EsU0FBS3FCLE9BQUwsQ0FBYUwsSUFBYixFQUFtQk4sS0FBbkIsRUFBMEJJLE9BQTFCLEVBQW1DZCxJQUFuQyxFQUF5Q1csR0FBekM7QUFDSDs7QUFFRHJFLEVBQUFBLGFBQWEsR0FBRztBQUNaLFVBQU1nRixpQkFBaUIsR0FBRy9GLGNBQUtnRyxPQUFMLENBQWEsS0FBS2pHLFNBQWxCLEVBQTZCLGVBQTdCLENBQTFCOztBQUNBLFVBQU1rRyxZQUFZLEdBQUdDLGNBQUtDLElBQUwsQ0FBVSxjQUFWLEVBQTBCO0FBQUV6RixNQUFBQSxHQUFHLEVBQUVxRjtBQUFQLEtBQTFCLENBQXJCOztBQUVBLFNBQUs1RixNQUFMLENBQVl3RSxLQUFaLENBQWtCLHFCQUFsQjs7QUFFQSxTQUFLLElBQUl5QixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSCxZQUFZLENBQUNwRixNQUFqQyxFQUF5Q3VGLENBQUMsRUFBMUMsRUFBOEM7QUFDMUMsWUFBTUMsZUFBZSxHQUFHSixZQUFZLENBQUNHLENBQUQsQ0FBcEM7O0FBQ0EsWUFBTUUsZUFBZSxHQUFHdEcsY0FBS0MsSUFBTCxDQUFVOEYsaUJBQVYsRUFBNkJNLGVBQTdCLENBQXhCOztBQUNBLFlBQU12RSxNQUFNLEdBQUd1RSxlQUFlLENBQUNFLEtBQWhCLENBQXNCaEksd0JBQXRCLENBQWY7QUFDQSxZQUFNaUksV0FBVyxHQUFHMUUsTUFBTSxDQUFDLENBQUQsQ0FBMUI7O0FBR0EsVUFBSTJFLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUs1RyxJQUFMLENBQVVILFFBQXhCLEtBQXFDLENBQUMsS0FBS0csSUFBTCxDQUFVSCxRQUFWLENBQW1Cd0MsUUFBbkIsQ0FBNEJxRSxXQUE1QixDQUExQyxFQUFvRjtBQUNoRjtBQUNIOztBQUVELFVBQUk7QUFDQSxhQUFLckcsTUFBTCxDQUFZd0UsS0FBWixDQUFrQixzQkFBc0I2QixXQUF4Qzs7QUFDQSxjQUFNRyxPQUFPLEdBQUcsS0FBS0MsWUFBTCxDQUFrQkosV0FBbEIsRUFBK0JGLGVBQS9CLENBQWhCOztBQUNBSyxRQUFBQSxPQUFPLENBQUNyRyxJQUFSO0FBQ0EsYUFBS1gsUUFBTCxDQUFjNkcsV0FBZCxJQUE2QkcsT0FBN0I7QUFDSCxPQUxELENBS0UsT0FBT3JGLENBQVAsRUFBVTtBQUNSLGFBQUtuQixNQUFMLENBQVlxQixLQUFaLENBQWtCLGlDQUFpQ2dGLFdBQWpDLEdBQStDLEtBQS9DLEdBQXVEbEYsQ0FBQyxDQUFDaUUsT0FBekQsR0FBbUVzQixPQUFuRSxJQUEwRXZGLENBQUMsQ0FBQ3dGLFVBQUYsR0FBZXhGLENBQUMsQ0FBQ3dGLFVBQWpCLEdBQThCLEVBQXhHLENBQWxCO0FBQ0g7QUFDSjtBQUNKOztBQUNERixFQUFBQSxZQUFZLENBQUNKLFdBQUQsRUFBY08sV0FBZCxFQUEyQjtBQUNuQyxRQUFJQyxZQUFZLEdBQUd4SyxPQUFPLENBQUN1SyxXQUFELENBQTFCOztBQUVBLFFBQUlDLFlBQVksQ0FBQ0MsT0FBakIsRUFBMEI7QUFDdEJELE1BQUFBLFlBQVksR0FBR0EsWUFBWSxDQUFDQyxPQUE1QjtBQUNIOztBQUNELFVBQU1DLGFBQWEsR0FBRyxLQUFLOUcsV0FBTCxDQUFpQixzQkFBUSxXQUFVb0csV0FBWSxFQUE5QixDQUFqQixDQUF0Qjs7QUFDQSxXQUFPLElBQUlRLFlBQUosQ0FBaUIsS0FBS2xILElBQXRCLEVBQTRCLEtBQUtMLEdBQWpDLEVBQXNDLEtBQUtELFdBQTNDLEVBQXdEMEgsYUFBeEQsQ0FBUDtBQUNIOztBQUVEbEcsRUFBQUEsWUFBWSxHQUFHO0FBQ1gsU0FBS2IsTUFBTCxDQUFZd0UsS0FBWixDQUFrQiw2QkFBbEI7O0FBQ0EsU0FBS3dDLG9CQUFMOztBQUNBLFNBQUtoSCxNQUFMLENBQVl3RSxLQUFaLENBQWtCLDZCQUFsQjs7QUFDQSxTQUFLeUMsb0JBQUw7QUFDSDs7QUFFREEsRUFBQUEsb0JBQW9CLEdBQUc7QUFDbkIsUUFBSUMsaUJBQWlCLEdBQUcsV0FBeEI7O0FBQ0EsUUFBSSxLQUFLdkgsSUFBTCxDQUFVd0gsV0FBVixJQUF5QixPQUFPLEtBQUt4SCxJQUFMLENBQVV3SCxXQUFqQixLQUFpQyxRQUE5RCxFQUF3RTtBQUNwRUQsTUFBQUEsaUJBQWlCLEdBQUcsS0FBS3ZILElBQUwsQ0FBVXdILFdBQTlCO0FBQ0g7O0FBRUQsVUFBTUMsZ0JBQWdCLEdBQUd2SCxjQUFLZ0csT0FBTCxDQUFhLEtBQUt0RixHQUFsQixFQUF1QjJHLGlCQUF2QixDQUF6Qjs7QUFDQSxRQUFJLENBQUN2RCxZQUFHQyxVQUFILENBQWN3RCxnQkFBZCxDQUFMLEVBQXNDO0FBQ2xDLGFBQU8sS0FBUDtBQUNIOztBQUNELFFBQUlDLFdBQVcsR0FBRyxFQUFsQjs7QUFFQSxRQUFJZixLQUFLLENBQUNDLE9BQU4sQ0FBYyxLQUFLNUcsSUFBTCxDQUFVSixPQUF4QixLQUFvQyxLQUFLSSxJQUFMLENBQVVKLE9BQVYsQ0FBa0JtQixNQUFsQixHQUEyQixDQUFuRSxFQUFzRTtBQUNsRSxXQUFLZixJQUFMLENBQVVKLE9BQVYsQ0FBa0IrSCxPQUFsQixDQUEwQjVFLFVBQVUsSUFBSTJFLFdBQVcsQ0FBQ3hELElBQVosQ0FBa0IsVUFBU25CLFVBQVcsS0FBdEMsQ0FBeEM7QUFDSCxLQUZELE1BSUs7QUFDRDJFLFFBQUFBLFdBQVcsR0FBR3RCLGNBQUtDLElBQUwsQ0FBVSxhQUFWLEVBQXlCO0FBQUV6RixVQUFBQSxHQUFHLEVBQUU2RztBQUFQLFNBQXpCLENBQWQ7QUFDSDs7QUFFRCxTQUFLLElBQUlHLGNBQVQsSUFBMkJGLFdBQTNCLEVBQXdDO0FBRXBDLFlBQU0zRSxVQUFVLEdBQUc2RSxjQUFjLENBQUNuQixLQUFmLENBQXFCakksdUJBQXJCLEVBQThDLENBQTlDLENBQW5COztBQUNBLFVBQUk7QUFDQSxjQUFNcUosU0FBUyxHQUFHLElBQUlDLElBQUosRUFBbEI7O0FBRUEsY0FBTUMsWUFBWSxHQUFHLEtBQUt6SCxXQUFMLENBQWlCLHNCQUFRLFVBQVN5QyxVQUFXLEVBQTVCLENBQWpCLENBQXJCOztBQUVBLGNBQU1pRixHQUFHLEdBQUc3RCxTQUFTLENBQUM4RCxrQkFBVixDQUE2QmxGLFVBQTdCLEVBQXlDNkUsY0FBekMsRUFBeURHLFlBQXpELEVBQXVFTixnQkFBdkUsRUFBeUYsSUFBekYsQ0FBWjs7QUFFQSxhQUFLUywyQkFBTCxDQUFpQ0YsR0FBakM7O0FBRUEsYUFBS3BJLE9BQUwsQ0FBYW1ELFVBQWIsSUFBMkJsRyxNQUFNLENBQUNxRixFQUFQLENBQVV0QyxPQUFWLENBQWtCbUQsVUFBbEIsSUFBZ0MsS0FBS29GLFdBQUwsQ0FBaUJwRixVQUFqQixFQUE2QmlGLEdBQTdCLENBQTNEO0FBRUEsY0FBTXRGLE9BQU8sR0FBRyxJQUFJb0YsSUFBSixFQUFoQjtBQUNBLGNBQU10RixRQUFRLEdBQUcsQ0FBQ0UsT0FBTyxHQUFHbUYsU0FBWCxJQUF3QixJQUF6QztBQUNBLGFBQUt4SCxNQUFMLENBQVl3RSxLQUFaLENBQWtCLHFCQUFxQjlCLFVBQXJCLEdBQWtDLEtBQWxDLEdBQTBDUCxRQUExQyxHQUFxRCxRQUF2RTtBQUNILE9BZEQsQ0FjRSxPQUFPaEIsQ0FBUCxFQUFVO0FBQ1IsYUFBS25CLE1BQUwsQ0FBWXFCLEtBQVosQ0FBa0IsZ0NBQWdDcUIsVUFBaEMsR0FBNkMsS0FBN0MsR0FBcUR2QixDQUFDLENBQUNpRSxPQUF2RCxHQUFpRXNCLE9BQWpFLElBQXdFdkYsQ0FBQyxDQUFDd0YsVUFBRixHQUFleEYsQ0FBQyxDQUFDd0YsVUFBakIsR0FBOEIsRUFBdEcsQ0FBbEI7O0FBR0EsWUFBSWpFLFVBQVUsS0FBSyxLQUFmLElBQXdCQSxVQUFVLEtBQUssS0FBM0MsRUFBa0Q7QUFDOUM7QUFDSDtBQUNKO0FBQ0o7QUFDSjs7QUFFRHNFLEVBQUFBLG9CQUFvQixHQUFHO0FBR25CLFVBQU1lLG9CQUFvQixHQUFHLEtBQUtwSSxJQUFMLENBQVVKLE9BQVYsSUFBcUIsS0FBS0ksSUFBTCxDQUFVSixPQUFWLENBQWtCbUIsTUFBbEIsR0FBMkIsQ0FBN0U7O0FBRUEsU0FBSyxJQUFJZ0MsVUFBVCxJQUF1QnBHLE1BQU0sQ0FBQ21FLElBQVAsQ0FBWXVILE9BQVosQ0FBdkIsRUFBNkM7QUFDekMsVUFBSUQsb0JBQW9CLElBQUksQ0FBQyxLQUFLcEksSUFBTCxDQUFVSixPQUFWLENBQWtCeUMsUUFBbEIsQ0FBMkJVLFVBQTNCLENBQTdCLEVBQXFFO0FBQ2pFO0FBQ0g7O0FBQ0QsWUFBTXVGLFdBQVcsR0FBR0QsT0FBTyxDQUFDdEYsVUFBRCxDQUEzQjs7QUFDQSxZQUFNMEUsZ0JBQWdCLEdBQUcxRixjQUFPd0csZUFBUCxFQUF6Qjs7QUFDQSxVQUFJO0FBQ0EsY0FBTVYsU0FBUyxHQUFHLElBQUlDLElBQUosRUFBbEI7O0FBRUEsY0FBTUMsWUFBWSxHQUFHLEtBQUt6SCxXQUFMLENBQWlCLHNCQUFRLFVBQVN5QyxVQUFXLEVBQTVCLENBQWpCLENBQXJCOztBQUVBLGNBQU1pRixHQUFHLEdBQUc3RCxTQUFTLENBQUNxRSxtQkFBVixDQUE4QnpGLFVBQTlCLEVBQTBDdUYsV0FBMUMsRUFBdURQLFlBQXZELEVBQXFFTixnQkFBckUsRUFBdUYsSUFBdkYsQ0FBWjs7QUFFQSxhQUFLUywyQkFBTCxDQUFpQ0YsR0FBakM7O0FBRUEsYUFBS3BJLE9BQUwsQ0FBYW1ELFVBQWIsSUFBMkJsRyxNQUFNLENBQUNxRixFQUFQLENBQVV0QyxPQUFWLENBQWtCbUQsVUFBbEIsSUFBZ0MsS0FBS29GLFdBQUwsQ0FBaUJwRixVQUFqQixFQUE2QmlGLEdBQTdCLENBQTNEO0FBRUEsY0FBTXRGLE9BQU8sR0FBRyxJQUFJb0YsSUFBSixFQUFoQjtBQUNBLGNBQU10RixRQUFRLEdBQUcsQ0FBQ0UsT0FBTyxHQUFHbUYsU0FBWCxJQUF3QixJQUF6QztBQUNBLGFBQUt4SCxNQUFMLENBQVl3RSxLQUFaLENBQWtCLHFCQUFxQjlCLFVBQXJCLEdBQWtDLEtBQWxDLEdBQTBDUCxRQUExQyxHQUFxRCxRQUF2RTtBQUNILE9BZEQsQ0FjRSxPQUFPaEIsQ0FBUCxFQUFVO0FBQ1IsYUFBS25CLE1BQUwsQ0FBWXFCLEtBQVosQ0FBa0IsZ0NBQWdDcUIsVUFBaEMsR0FBNkMsS0FBN0MsR0FBcUR2QixDQUFDLENBQUNpRSxPQUF2RCxHQUFpRXNCLE9BQWpFLElBQXdFdkYsQ0FBQyxDQUFDd0YsVUFBRixHQUFleEYsQ0FBQyxDQUFDd0YsVUFBakIsR0FBOEIsRUFBdEcsQ0FBbEI7O0FBR0EsWUFBSWpFLFVBQVUsS0FBSyxLQUFmLElBQXdCQSxVQUFVLEtBQUssS0FBM0MsRUFBa0Q7QUFDOUM7QUFDSDtBQUNKO0FBQ0o7QUFDSjs7QUFFRG9GLEVBQUFBLFdBQVcsQ0FBQ3RLLElBQUQsRUFBT21GLE1BQVAsRUFBZTtBQUN0QixRQUFJLENBQUNBLE1BQUwsRUFBYTtBQUNULGFBQU8vRSxTQUFQO0FBQ0g7O0FBQ0QsVUFBTXdLLE9BQU8sR0FBRztBQUNaNUssTUFBQUEsSUFBSSxFQUFFQTtBQURNLEtBQWhCOztBQUdBLFVBQU02SyxLQUFLLEdBQUcsSUFBZDs7QUFDQSxRQUFJQyxhQUFhLEdBQUdoTSxNQUFNLENBQUNtRSxJQUFQLENBQVlrQyxNQUFaLENBQXBCOztBQUNBLFFBQUksQ0FBQzJGLGFBQWEsQ0FBQ0MsSUFBZCxDQUFtQkMsQ0FBQyxJQUFJQSxDQUFDLEtBQUksU0FBN0IsQ0FBTCxFQUE4QztBQUMxQ0YsTUFBQUEsYUFBYSxHQUFHLEtBQUtHLG9CQUFMLENBQTBCOUYsTUFBMUIsQ0FBaEI7QUFDSDs7QUFDRCxTQUFLLElBQUkrRixVQUFULElBQXVCSixhQUF2QixFQUFzQztBQUNsQyxZQUFNSyxNQUFNLEdBQUdoRyxNQUFNLENBQUMrRixVQUFELENBQXJCOztBQUVBLFVBQUssRUFBRUMsTUFBTSxZQUFZQyxRQUFwQixLQUFpQyxFQUFFRCxNQUFNLFlBQVlFLGdDQUFwQixDQUFqQyxJQUF5RSxPQUFPRixNQUFQLEtBQWtCLFVBQTVGLElBQTJHRCxVQUFVLEtBQUssU0FBMUgsSUFBdUlBLFVBQVUsS0FBSyxVQUExSixFQUFzSztBQUNsSztBQUNIOztBQUVELFVBQUlDLE1BQU0sWUFBWUUsZ0NBQXRCLEVBQXVDO0FBQ25DVCxRQUFBQSxPQUFPLENBQUNNLFVBQUQsQ0FBUCxHQUFzQixLQUFLWixXQUFMLENBQWtCLEdBQUV0SyxJQUFLLElBQUdrTCxVQUFXLEVBQXZDLEVBQTBDQyxNQUExQyxDQUF0QjtBQUNILE9BRkQsTUFJSyxJQUFJdEssbUJBQW1CLENBQUMyRCxRQUFwQixDQUE2QjBHLFVBQTdCLENBQUosRUFBOEM7QUFFL0NOLFVBQUFBLE9BQU8sQ0FBQ00sVUFBRCxDQUFQLEdBQXNCL0YsTUFBTSxDQUFDK0YsVUFBRCxDQUFOLENBQW1CdkYsSUFBbkIsQ0FBd0JSLE1BQXhCLENBQXRCO0FBQ0gsU0FISSxNQUtBLElBQUkrRixVQUFVLENBQUNJLE9BQVgsQ0FBbUIsR0FBbkIsTUFBNEIsQ0FBNUIsSUFBaUNKLFVBQVUsQ0FBQ0ksT0FBWCxDQUFtQixJQUFuQixNQUE2QixDQUFsRSxFQUFxRTtBQUN0RVYsWUFBQUEsT0FBTyxDQUFDTSxVQUFELENBQVAsR0FBc0IsWUFBVztBQUM3QixrQkFBSXBFLElBQUksR0FBR2dDLEtBQUssQ0FBQ3lDLFNBQU4sQ0FBZ0JDLEtBQWhCLENBQXNCQyxJQUF0QixDQUEyQkMsU0FBM0IsQ0FBWDs7QUFFQWIsY0FBQUEsS0FBSyxDQUFDckksTUFBTixDQUFhd0UsS0FBYixDQUFtQixnQkFBZ0I5QyxjQUFPeUgsa0JBQVAsQ0FBMEIzTCxJQUExQixFQUFnQ2tMLFVBQWhDLEVBQTRDcEUsSUFBNUMsQ0FBbkM7O0FBRUEsa0JBQUk7QUFDQSx1QkFBTzNCLE1BQU0sQ0FBQytGLFVBQUQsQ0FBTixDQUFtQnZELEtBQW5CLENBQXlCeEMsTUFBekIsRUFBaUMyQixJQUFqQyxDQUFQO0FBQ0gsZUFGRCxDQUVFLE9BQU9uRCxDQUFQLEVBQVU7QUFDUixzQkFBTW9DLGdCQUFZNkYsY0FBWixDQUEyQmpJLENBQTNCLEVBQThCM0QsSUFBOUIsRUFBb0NrTCxVQUFwQyxFQUFnRHBFLElBQWhELENBQU47QUFDSDtBQUNKLGFBVkQ7QUFXSCxXQVpJLE1BYUE7QUFHRCxnQkFBSW9FLFVBQVUsS0FBSyxpQkFBbkIsRUFBc0M7QUFDbENOLGNBQUFBLE9BQU8sQ0FBQyxrQkFBRCxDQUFQLEdBQThCTyxNQUFNLENBQUN4RixJQUFQLENBQVlSLE1BQVosQ0FBOUI7QUFDSDs7QUFDRHlGLFlBQUFBLE9BQU8sQ0FBQ00sVUFBRCxDQUFQLEdBQXNCLENBQUMsR0FBR3BFLElBQUosS0FBYTtBQUMvQixrQkFBSTtBQUNBLHVCQUFPK0QsS0FBSyxDQUFDZ0IsZUFBTixDQUFzQlgsVUFBdEIsRUFBa0NwRSxJQUFsQyxFQUF3QzNCLE1BQXhDLEVBQWdEbkYsSUFBaEQsQ0FBUDtBQUNILGVBRkQsQ0FHQSxPQUFPMkQsQ0FBUCxFQUFVO0FBQ04sb0JBQUlBLENBQUMsWUFBWW1DLG9CQUFqQixFQUEwQjtBQUV0Qix3QkFBTW5DLENBQU47QUFDSDs7QUFDRCxzQkFBTW9DLGdCQUFZNkYsY0FBWixDQUEyQmpJLENBQTNCLEVBQThCM0QsSUFBOUIsRUFBb0NrTCxVQUFwQyxFQUFnRHBFLElBQWhELENBQU47QUFDSDtBQUNKLGFBWEQ7QUFZSDtBQUNKOztBQUNELFdBQU84RCxPQUFQO0FBQ0g7O0FBRURpQixFQUFBQSxlQUFlLENBQUNDLE9BQUQsRUFBVUMsT0FBVixFQUFtQjVHLE1BQW5CLEVBQTJCRCxVQUEzQixFQUF1QztBQUNsRCxRQUFJLENBQUNDLE1BQUQsSUFBVyxDQUFDQSxNQUFNLENBQUMyRyxPQUFELENBQXRCLEVBQWlDO0FBQzdCLGFBQU8xTCxTQUFQO0FBQ0g7O0FBRUQsUUFBSTRMLE1BQU0sR0FBRyxJQUFiO0FBQ0EsUUFBSW5JLEtBQUssR0FBRyxJQUFaO0FBQ0EsVUFBTW9JLEtBQUssR0FBRzlHLE1BQU0sQ0FBQzJHLE9BQUQsQ0FBcEI7QUFDQSxVQUFNSSxZQUFZLEdBQUcsQ0FBQ0osT0FBTyxDQUFDSyxVQUFSLENBQW1CLEdBQW5CLENBQUQsSUFBNEJMLE9BQU8sS0FBSyxTQUE3RDs7QUFHQSxRQUNJLEtBQUszSixJQUFMLENBQVVpSyxLQUFWLElBQ0FGLFlBREEsSUFFQUosT0FBTyxLQUFLLE1BRlosSUFHQUEsT0FBTyxLQUFLLGFBSmhCLEVBS0U7QUFDRU8sdUJBQVFDLEtBQVIsQ0FBYyxLQUFLbkssSUFBTCxDQUFVaUssS0FBVixHQUFrQixJQUFoQztBQUNIOztBQUdELFFBQUksQ0FBQ2pILE1BQU0sQ0FBQ3ZELGFBQVIsSUFBeUJzSyxZQUF6QixJQUF5Q0osT0FBTyxLQUFLLE1BQXJELElBQStEQSxPQUFPLEtBQUssYUFBL0UsRUFBOEY7QUFDMUYsWUFBTSxJQUFJaEcsb0JBQUosQ0FBWUMsZ0JBQVlDLFNBQVosQ0FBc0J1Ryw0QkFBbEMsRUFBZ0UsYUFBYXJILFVBQWIsR0FBMEIsU0FBMUYsQ0FBTjtBQUNIOztBQUdELFFBQUlzSCxhQUFhLEdBQUcsS0FBS0MseUJBQUwsQ0FBK0JWLE9BQS9CLEVBQXdDN0csVUFBeEMsQ0FBcEI7O0FBQ0FzSCxJQUFBQSxhQUFhLEdBQUcsS0FBS0Usd0JBQUwsQ0FBOEJGLGFBQTlCLENBQWhCO0FBR0FULElBQUFBLE9BQU8sR0FBRyxLQUFLVyx3QkFBTCxDQUE4QlgsT0FBOUIsQ0FBVjs7QUFFQSxVQUFNL0IsU0FBUyxHQUFHOUYsY0FBTzZELFlBQVAsRUFBbEI7O0FBR0EsUUFBSTRFLFdBQVcsR0FBRyxJQUFsQjtBQUVBLFVBQU1DLFlBQVksR0FBR2hPLEVBQUUsRUFBdkI7O0FBRUEsUUFBSXNOLFlBQUosRUFBa0I7QUFDZFMsTUFBQUEsV0FBVyxHQUFHLEtBQUtFLG1CQUFMLEVBQWQ7QUFDQSxXQUFLQyxpQkFBTCxDQUF1QkYsWUFBdkIsRUFBcUNkLE9BQXJDLEVBQThDNUcsVUFBOUMsRUFBMEQrRyxLQUExRCxFQUFpRUYsT0FBakUsRUFBMEUsS0FBS2pLLEdBQS9FLEVBQW9GNkssV0FBcEYsRUFBaUczQyxTQUFqRztBQUNIOztBQUVELFNBQUt4SCxNQUFMLENBQVl3RSxLQUFaLENBQWtCLGdCQUFnQjlDLGNBQU95SCxrQkFBUCxDQUEwQnpHLFVBQTFCLEVBQXNDNEcsT0FBdEMsRUFBK0NDLE9BQS9DLENBQWxDOztBQUVBLFFBQUk7QUFFQSxVQUFJRCxPQUFPLEtBQUssU0FBaEIsRUFBMkI7QUFDdkIsYUFBS2lCLFVBQUwsQ0FBZ0IsS0FBS0MsZ0NBQXJCLEVBQXVEckYsS0FBdkQsQ0FBNkQsSUFBN0QsRUFBbUUsQ0FBQ3hDLE1BQUQsQ0FBbkU7QUFDSDs7QUFFRCxZQUFNOEgsYUFBYSxHQUFHLEtBQUtGLFVBQUwsQ0FBZ0I1SCxNQUFNLENBQUMyRyxPQUFELENBQXRCLEVBQWlDbkUsS0FBakMsQ0FBdUN4QyxNQUF2QyxFQUErQ3FILGFBQS9DLENBQXRCOztBQUVBLFVBQUlTLGFBQWEsSUFBSUEsYUFBYSxDQUFDQyxJQUFuQyxFQUF5QztBQUNyQyxZQUFJQyxXQUFXLEdBQUcsS0FBbEI7QUFFQUYsUUFBQUEsYUFBYSxDQUFDQyxJQUFkLENBQW9CckgsS0FBRCxJQUFXO0FBRTFCbUcsVUFBQUEsTUFBTSxHQUFHbkcsS0FBVDtBQUNBc0gsVUFBQUEsV0FBVyxHQUFHLElBQWQ7QUFDSCxTQUpELEVBSUl4SixDQUFELElBQU87QUFDTkUsVUFBQUEsS0FBSyxHQUFHRixDQUFSO0FBQ0F3SixVQUFBQSxXQUFXLEdBQUcsSUFBZDtBQUNILFNBUEQ7O0FBU0FkLHlCQUFRZSxTQUFSLENBQWtCLE1BQU0sQ0FBQ0QsV0FBekI7QUFDSCxPQWJELE1BYU87QUFDSG5CLFFBQUFBLE1BQU0sR0FBR2lCLGFBQVQ7QUFDSDs7QUFFRCxVQUFJbkIsT0FBTyxLQUFLLE1BQWhCLEVBQXdCO0FBQ3BCLGFBQUtpQixVQUFMLENBQWdCLEtBQUtNLGdDQUFyQixFQUF1RDFGLEtBQXZELENBQTZELElBQTdELEVBQW1FLENBQUN4QyxNQUFELENBQW5FO0FBQ0g7QUFFSixLQTdCRCxDQTZCRSxPQUFPeEIsQ0FBUCxFQUFVO0FBQ1IsVUFBSUEsQ0FBQyxJQUFJQSxDQUFDLENBQUNpRSxPQUFQLElBQWtCLE9BQU9qRSxDQUFDLENBQUNpRSxPQUFULEtBQXFCLFFBQXZDLElBQW1EakUsQ0FBQyxDQUFDaUUsT0FBRixDQUFVcEQsUUFBVixDQUFtQixvQkFBbkIsQ0FBdkQsRUFBaUc7QUFFN0Y7QUFDSCxPQUhELE1BR087QUFHSCxZQUFJVyxNQUFNLElBQ0wsT0FBT0EsTUFBTSxDQUFDdkQsYUFBZCxLQUFnQyxTQUFoQyxJQUE2QyxDQUFDdUQsTUFBTSxDQUFDdkQsYUFEdEQsSUFFR2tLLE9BQU8sS0FBSyxNQUZuQixFQUUyQjtBQUN2QjtBQUNIOztBQUVEakksUUFBQUEsS0FBSyxHQUFHa0MsZ0JBQVk2RixjQUFaLENBQTJCakksQ0FBM0IsRUFBOEJ1QixVQUE5QixFQUEwQzRHLE9BQTFDLEVBQW1EQyxPQUFuRCxDQUFSO0FBQ0g7QUFDSjs7QUFFRCxVQUFNbEgsT0FBTyxHQUFHWCxjQUFPNkQsWUFBUCxFQUFoQjs7QUFFQSxRQUFJdUYsVUFBSjtBQUNBLFFBQUlDLElBQUksR0FBRyxLQUFYOztBQUVBLFFBQUlyQixZQUFKLEVBQWtCO0FBQ2QsWUFBTXNCLE1BQU0sR0FBRyxDQUFDLElBQUl2RCxJQUFKLEVBQWhCOztBQUNBLFdBQUt2SCxtQkFBTCxDQUF5QjJELElBQXpCLENBQThCbUgsTUFBOUI7O0FBRUFGLE1BQUFBLFVBQVUsR0FBRyxLQUFLRyxjQUFMLENBQW9CdEksTUFBcEIsRUFBNEJELFVBQTVCLEVBQXdDNEcsT0FBeEMsRUFBaURDLE9BQWpELEVBQTBEWSxXQUExRCxFQUF1RTNDLFNBQXZFLEVBQWtGbkYsT0FBbEYsRUFBMkZtSCxNQUEzRixFQUFtR25JLEtBQW5HLENBQWI7QUFDQXlKLE1BQUFBLFVBQVUsQ0FBQ0ksRUFBWCxHQUFnQmQsWUFBaEI7O0FBRUEsWUFBTWUsS0FBSyxHQUFHLEtBQUtqTCxtQkFBTCxDQUF5QjRJLE9BQXpCLENBQWlDa0MsTUFBakMsQ0FBZDs7QUFDQSxXQUFLOUssbUJBQUwsQ0FBeUJrTCxNQUF6QixDQUFnQ0QsS0FBaEMsRUFBdUMsQ0FBdkM7O0FBSUEsV0FBSzlMLFdBQUwsQ0FBaUJSLEtBQWpCLENBQXVCZ0YsSUFBdkIsQ0FBNEJpSCxVQUE1QjtBQUNBLFdBQUtPLGdCQUFMLENBQXNCL0IsT0FBdEIsRUFBK0I1RyxVQUEvQixFQUEyQytHLEtBQTNDLEVBQWtERixPQUFsRCxFQUEyRCxLQUFLakssR0FBaEUsRUFBcUU2SyxXQUFyRSxFQUFrRjlILE9BQWxGLEVBQTJGeUksVUFBM0Y7QUFDQUMsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDSDs7QUFFRCxRQUFJMUosS0FBSyxJQUFJQSxLQUFLLENBQUNpSyxPQUFmLElBQTBCLENBQUMsS0FBSzNMLElBQUwsQ0FBVTRMLGVBQXpDLEVBQTBEO0FBQ3RELFVBQUksQ0FBQ2xLLEtBQUssQ0FBQ21LLFFBQVAsSUFBbUJyQixXQUF2QixFQUFvQztBQUNoQzlJLFFBQUFBLEtBQUssQ0FBQ21LLFFBQU4sR0FBaUJyQixXQUFqQjtBQUNIOztBQUVELFVBQUlXLFVBQVUsSUFBSUEsVUFBVSxDQUFDVyxPQUF6QixJQUFvQ1gsVUFBVSxDQUFDVyxPQUFYLENBQW1CRCxRQUEzRCxFQUFxRTtBQUNqRW5LLFFBQUFBLEtBQUssQ0FBQ21LLFFBQU4sR0FBaUJWLFVBQVUsQ0FBQ1csT0FBWCxDQUFtQkQsUUFBcEM7QUFDSDs7QUFFRCxZQUFNbkssS0FBTjtBQUNIOztBQUVELFFBQUksQ0FBQ3FJLFlBQUwsRUFBbUI7QUFDZnFCLE1BQUFBLElBQUksR0FBRyxJQUFQO0FBQ0g7O0FBRURsQixxQkFBUWUsU0FBUixDQUFrQixNQUFNLENBQUNHLElBQUQsSUFBUyxDQUFDMUosS0FBbEM7O0FBRUEsV0FBT21JLE1BQVA7QUFDSDs7QUFFRGUsRUFBQUEsVUFBVSxDQUFFbUIsRUFBRixFQUFNOUosT0FBTixFQUFlO0FBQ3JCLFdBQU8sVUFBVSxHQUFHMEMsSUFBYixFQUFtQjtBQUN0QixVQUFJcUgsSUFBSSxHQUFHL0osT0FBTyxJQUFJLElBQXRCOztBQUVBLFVBQUksQ0FBQ2dLLGdCQUFNQyxPQUFYLEVBQW9CO0FBQ2hCLGNBQU1yQyxNQUFNLEdBQUdrQyxFQUFFLENBQUN2RyxLQUFILENBQVN3RyxJQUFULEVBQWVySCxJQUFmLENBQWY7QUFFQSxZQUFJeUcsSUFBSSxHQUFHLEtBQVg7QUFDQSxZQUFJMUosS0FBSyxHQUFHLElBQVo7QUFDQSxZQUFJeUssUUFBUSxHQUFHLElBQWY7O0FBRUEsWUFBSXRDLE1BQU0sSUFBSUEsTUFBTSxDQUFDa0IsSUFBckIsRUFBMkI7QUFDdkJxQixVQUFBQSxPQUFPLENBQUNsRyxPQUFSLENBQWdCMkQsTUFBaEIsRUFDQ2tCLElBREQsQ0FDT3NCLEdBQUQsSUFBUztBQUNYRixZQUFBQSxRQUFRLEdBQUdFLEdBQVg7QUFDQWpCLFlBQUFBLElBQUksR0FBRyxJQUFQO0FBQ0gsV0FKRCxFQUtDa0IsS0FMRCxDQUtROUssQ0FBRCxJQUFPO0FBQ1ZFLFlBQUFBLEtBQUssR0FBR0YsQ0FBUjtBQUNBNEosWUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDSCxXQVJEO0FBU0gsU0FWRCxNQVVPO0FBQ0hlLFVBQUFBLFFBQVEsR0FBR3RDLE1BQVg7QUFDQXVCLFVBQUFBLElBQUksR0FBRyxJQUFQO0FBQ0g7O0FBRUQsWUFBSTtBQUNBbEIsMkJBQVFlLFNBQVIsQ0FBa0IsTUFBTSxDQUFDRyxJQUFELElBQVMsQ0FBQzFKLEtBQWxDO0FBQ0gsU0FGRCxDQUdBLE9BQU9GLENBQVAsRUFBVTtBQUVOLGNBQUlBLENBQUMsSUFBSUEsQ0FBQyxDQUFDaUUsT0FBUCxJQUFrQixPQUFPakUsQ0FBQyxDQUFDaUUsT0FBVCxLQUFxQixRQUF2QyxJQUFtRGpFLENBQUMsQ0FBQ2lFLE9BQUYsQ0FBVXBELFFBQVYsQ0FBbUIsWUFBbkIsQ0FBdkQsRUFBeUY7QUFDckYsbUJBQU9wRSxTQUFQO0FBQ0g7O0FBSUQsZUFBS29DLE1BQUwsQ0FBWXFCLEtBQVosQ0FBa0IsNkJBQWxCLEVBQWlERixDQUFqRDtBQUNBLGlCQUFPdkQsU0FBUDtBQUNIOztBQUVELFlBQUksQ0FBQ3lELEtBQUwsRUFBWTtBQUNSLGlCQUFPeUssUUFBUDtBQUNIOztBQUNELGNBQU16SyxLQUFOO0FBQ0g7O0FBRUQsVUFBSUEsS0FBSyxHQUFHLElBQVo7QUFDQSxVQUFJMEosSUFBSSxHQUFHLEtBQVg7QUFDQSxVQUFJdkIsTUFBTSxHQUFHLElBQWI7O0FBRUEsVUFBSTtBQUdBLGNBQU0wQyxNQUFNLEdBQUcsSUFBSUMsZUFBSixFQUFmO0FBQ0EsWUFBSXhLLE1BQU0sR0FBRytKLEVBQUUsQ0FBQ3ZHLEtBQUgsQ0FBU3dHLElBQVQsRUFBZXJILElBQWYsQ0FBYjs7QUFDQSxZQUFJM0MsTUFBTSxJQUFJLE9BQU9BLE1BQU0sQ0FBQytJLElBQWQsS0FBdUIsVUFBckMsRUFBaUQ7QUFDN0MvSSxVQUFBQSxNQUFNLENBQUMrSSxJQUFQLENBQWFzQixHQUFELElBQVNFLE1BQU0sQ0FBQ0UsTUFBUCxDQUFjSixHQUFkLENBQXJCLEVBQTBDalAsR0FBRCxJQUFTbVAsTUFBTSxDQUFDRyxLQUFQLENBQWF0UCxHQUFiLENBQWxEO0FBQ0EsaUJBQU9tUCxNQUFNLENBQUNJLElBQVAsRUFBUDtBQUNIOztBQUNELGVBQU8zSyxNQUFQO0FBRUgsT0FYRCxDQVdFLE9BQU9SLENBQVAsRUFBVTtBQUNSRSxRQUFBQSxLQUFLLEdBQUdGLENBQVI7QUFDSDs7QUFFRDBJLHVCQUFRZSxTQUFSLENBQWtCLE1BQU0sQ0FBQ0csSUFBRCxJQUFTLENBQUMxSixLQUFsQzs7QUFFQSxVQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNSLGVBQU9tSSxNQUFQO0FBQ0g7O0FBQ0QsWUFBTW5JLEtBQU47QUFDSCxLQXZFRDtBQXdFSDs7QUFHRGdKLEVBQUFBLG1CQUFtQixHQUFHO0FBQ2xCLFVBQU12TixLQUFLLEdBQUd5UCxPQUFkO0FBQ0EsUUFBSUMsTUFBTSxHQUFHLElBQWI7O0FBQ0EsU0FBSyxJQUFJdkQsSUFBVCxJQUFpQm5NLEtBQWpCLEVBQXdCO0FBQ3BCLFVBQUkyUCxVQUFVLEtBQUt4RCxJQUFJLENBQUN5RCxXQUFMLEVBQW5CLEVBQXVDO0FBQ25DO0FBQ0g7O0FBRURGLE1BQUFBLE1BQU0sR0FBR3ZELElBQVQ7QUFDQTtBQUNIOztBQUNELFFBQUl1RCxNQUFKLEVBQVk7QUFDUixhQUFRLEdBQUVBLE1BQU0sQ0FBQ0UsV0FBUCxFQUFxQixJQUFHRixNQUFNLENBQUNHLGFBQVAsS0FBeUIsS0FBS25MLGdCQUFpQixJQUFHZ0wsTUFBTSxDQUFDSSxlQUFQLEVBQXlCLEVBQTdHO0FBQ0g7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBRUQzQixFQUFBQSxjQUFjLENBQUN0SSxNQUFELEVBQVNELFVBQVQsRUFBcUJnRyxVQUFyQixFQUFpQ3BFLElBQWpDLEVBQXVDa0gsUUFBdkMsRUFBaURoRSxTQUFqRCxFQUE0RG5GLE9BQTVELEVBQXFFbUgsTUFBckUsRUFBNkV6TSxHQUE3RSxFQUFrRjtBQUM1RixRQUFJcUYsSUFBSSxHQUFHLElBQUl5SyxtQkFBSixFQUFYOztBQUVBLFVBQU1DLFdBQVcsR0FDWm5LLE1BQU0sQ0FBQ29LLGtCQUFQLElBQTZCcEssTUFBTSxDQUFDb0ssa0JBQVAsQ0FBMEJyRSxVQUExQixFQUFzQ3BFLElBQXRDLEVBQTRDa0YsTUFBNUMsRUFBb0R6TSxHQUFwRCxDQUE5QixJQUNBMkUsY0FBT3lILGtCQUFQLENBQTBCekcsVUFBMUIsRUFBc0NnRyxVQUF0QyxFQUFrRHBFLElBQWxELENBRko7O0FBSUFsQyxJQUFBQSxJQUFJLENBQUM1RSxJQUFMLEdBQVlzUCxXQUFaO0FBQ0ExSyxJQUFBQSxJQUFJLENBQUNGLFdBQUwsR0FBbUIxRixNQUFNLENBQUN3USxvQkFBUCxJQUErQixJQUFsRDtBQUNBNUssSUFBQUEsSUFBSSxDQUFDb0osUUFBTCxHQUFnQkEsUUFBaEI7QUFFQXBKLElBQUFBLElBQUksQ0FBQzZLLEtBQUwsR0FBYSxFQUFFLEdBQUd0SyxNQUFNLENBQUNzSztBQUFaLEtBQWI7O0FBQ0EsUUFBSXRLLE1BQU0sQ0FBQ3NLLEtBQVAsSUFBZ0J0SyxNQUFNLENBQUNzSyxLQUFQLENBQWFDLElBQWpDLEVBQXVDO0FBQ25DOUssTUFBQUEsSUFBSSxDQUFDK0ssSUFBTCxHQUFZLE1BQVo7QUFDSDs7QUFFRCxRQUFJcFEsR0FBRyxJQUFJQSxHQUFHLENBQUNvUSxJQUFYLElBQW1CcFEsR0FBRyxDQUFDb1EsSUFBSixLQUFhNUosZ0JBQVlDLFNBQVosQ0FBc0I0SixhQUExRCxFQUF5RTtBQUNyRWhMLE1BQUFBLElBQUksQ0FBQ25CLE1BQUwsR0FBY3FCLGdCQUFPK0ssTUFBckI7QUFDSCxLQUZELE1BR0s7QUFFRCxVQUFJdFEsR0FBSixFQUFTO0FBQ0wsWUFBSUEsR0FBRyxDQUFDdU8sT0FBUixFQUFpQjtBQUNibEosVUFBQUEsSUFBSSxDQUFDbkIsTUFBTCxHQUFjcUIsZ0JBQU9nTCxNQUFyQjtBQUNILFNBRkQsTUFHSztBQUNEbEwsVUFBQUEsSUFBSSxDQUFDbkIsTUFBTCxHQUFjcUIsZ0JBQU9DLE9BQXJCO0FBQ0g7QUFDSixPQVBELE1BUUssSUFBSUcsVUFBVSxLQUFLLEtBQWYsSUFBd0JnRyxVQUFVLEtBQUssTUFBM0MsRUFBbUQ7QUFDcER0RyxRQUFBQSxJQUFJLENBQUNuQixNQUFMLEdBQWNxQixnQkFBT0MsT0FBckI7QUFDSCxPQUZJLE1BR0E7QUFDREgsUUFBQUEsSUFBSSxDQUFDbkIsTUFBTCxHQUFjcUIsZ0JBQU8rSyxNQUFyQjtBQUNIO0FBQ0o7O0FBRURqTCxJQUFBQSxJQUFJLENBQUNtTCxNQUFMLEdBQWUsT0FBTzVLLE1BQU0sQ0FBQzZLLFNBQWQsS0FBNEIsVUFBNUIsR0FBeUM3SyxNQUFNLENBQUM2SyxTQUFQLENBQWlCOUUsVUFBakIsQ0FBekMsR0FBd0UsS0FBdkY7QUFDQXRHLElBQUFBLElBQUksQ0FBQ29GLFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0FwRixJQUFBQSxJQUFJLENBQUNDLE9BQUwsR0FBZUEsT0FBZjtBQUNBRCxJQUFBQSxJQUFJLENBQUNELFFBQUwsR0FBZ0JFLE9BQU8sR0FBR21GLFNBQTFCOztBQUVBLFFBQUksT0FBTzdFLE1BQU0sQ0FBQzhLLFNBQWQsS0FBNEIsVUFBaEMsRUFBNEM7QUFDeENyTCxNQUFBQSxJQUFJLENBQUNzTCxLQUFMLEdBQWEvSyxNQUFNLENBQUM4SyxTQUFQLENBQWlCL0UsVUFBakIsQ0FBYjtBQUNILEtBRkQsTUFFTztBQUNIdEcsTUFBQUEsSUFBSSxDQUFDc0wsS0FBTCxHQUFhLEVBQWI7QUFDSDs7QUFFRCxRQUFJM1EsR0FBSixFQUFTO0FBQ0wsVUFBSUEsR0FBRyxJQUFJQSxHQUFHLENBQUNvUSxJQUFYLElBQW1CcFEsR0FBRyxDQUFDb1EsSUFBSixLQUFhNUosZ0JBQVlDLFNBQVosQ0FBc0I0SixhQUExRCxFQUF5RSxDQUV4RSxDQUZELE1BRU8sSUFBSXJRLEdBQUcsSUFBSUEsR0FBRyxDQUFDb1EsSUFBWCxLQUFvQnBRLEdBQUcsQ0FBQ29RLElBQUosS0FBYTVKLGdCQUFZQyxTQUFaLENBQXNCbUssd0JBQW5DLElBQStENVEsR0FBRyxDQUFDb1EsSUFBSixLQUFhNUosZ0JBQVlDLFNBQVosQ0FBc0JvSyxzQkFBdEgsQ0FBSixFQUFtSixDQUV6SixDQUZNLE1BRUE7QUFDSHhMLFFBQUFBLElBQUksQ0FBQ3FKLE9BQUwsR0FBZWxJLGdCQUFZc0ssbUJBQVosQ0FBZ0M5USxHQUFoQyxDQUFmO0FBQ0FxRixRQUFBQSxJQUFJLENBQUNxSixPQUFMLENBQWFELFFBQWIsR0FBd0JBLFFBQXhCOztBQUdBLFlBQUksT0FBTzdJLE1BQU0sQ0FBQ21MLHFCQUFkLEtBQXdDLFVBQXhDLElBQXNELENBQUMsS0FBS25PLElBQUwsQ0FBVW9PLGlCQUFyRSxFQUF3RjtBQUNwRixjQUFJO0FBQ0EzTCxZQUFBQSxJQUFJLENBQUM0TCxVQUFMLEdBQWtCckwsTUFBTSxDQUFDbUwscUJBQVAsQ0FBNkJwRixVQUE3QixDQUFsQjtBQUNILFdBRkQsQ0FHQSxPQUFPdkgsQ0FBUCxFQUFVO0FBR04wSSw2QkFBUUMsS0FBUixDQUFjLElBQWQ7O0FBQ0EsZ0JBQUk7QUFDQTFILGNBQUFBLElBQUksQ0FBQzRMLFVBQUwsR0FBa0JyTCxNQUFNLENBQUNtTCxxQkFBUCxDQUE2QnBGLFVBQTdCLENBQWxCO0FBQ0gsYUFGRCxDQUdBLE9BQU92SCxDQUFQLEVBQVUsQ0FFVDtBQUNKO0FBQ0o7QUFDSjtBQUNKOztBQUNELFdBQU9pQixJQUFQO0FBQ0g7O0FBRXFCLFFBQWhCYixnQkFBZ0IsR0FBRztBQUNyQixRQUFJLENBQUMsS0FBSy9CLFFBQU4sSUFBa0IsT0FBTyxLQUFLQSxRQUFaLEtBQXlCLFFBQS9DLEVBQXlEO0FBQ3JELGFBQU8sS0FBUDtBQUNIOztBQUNELFNBQUssSUFBSXlPLEdBQVQsSUFBZ0IsS0FBS3pPLFFBQXJCLEVBQStCO0FBQzNCLFlBQU1nSCxPQUFPLEdBQUcsS0FBS2hILFFBQUwsQ0FBY3lPLEdBQWQsQ0FBaEI7O0FBQ0EsVUFBSXpILE9BQU8sQ0FBQ2xGLE9BQVosRUFBcUI7QUFDakIsWUFBSTtBQUNBLGdCQUFNa0YsT0FBTyxDQUFDbEYsT0FBUixFQUFOO0FBQ0gsU0FGRCxDQUdBLE9BQU9ILENBQVAsRUFBVTtBQUVOLGVBQUtuQixNQUFMLENBQVlxQixLQUFaLENBQW1CLDhCQUE2QjRNLEdBQUksSUFBcEQsRUFBeUQ5TSxDQUF6RDtBQUNIO0FBQ0o7QUFDSjs7QUFDRCxXQUFPLElBQVA7QUFDSDs7QUFFb0IsUUFBZkQsZUFBZSxDQUFDRCxNQUFNLEdBQUcsSUFBVixFQUFnQjtBQUNqQyxRQUFJLENBQUMsS0FBSzFCLE9BQU4sSUFBaUIsT0FBTyxLQUFLQSxPQUFaLEtBQXdCLFFBQTdDLEVBQXVEO0FBQ25ELGFBQU8sS0FBUDtBQUNIOztBQUNELFNBQUssSUFBSTBPLEdBQVQsSUFBZ0IsS0FBSzFPLE9BQXJCLEVBQThCO0FBQzFCLFlBQU1vSSxHQUFHLEdBQUcsS0FBS3BJLE9BQUwsQ0FBYTBPLEdBQWIsQ0FBWjs7QUFFQSxVQUFJdEcsR0FBRyxDQUFDckcsT0FBUixFQUFpQjtBQUNiLFlBQUk7QUFDQSxnQkFBTTRNLGFBQWEsR0FBR3ZHLEdBQUcsQ0FBQ3JHLE9BQUosQ0FBWUwsTUFBWixDQUF0Qjs7QUFDQSxjQUFJaU4sYUFBYSxJQUFJLE9BQU9BLGFBQWEsQ0FBQ3hELElBQXJCLEtBQThCLFVBQW5ELEVBQStEO0FBRTNELGtCQUFNd0QsYUFBYSxFQUFuQjtBQUNIO0FBQ0osU0FORCxDQU9BLE9BQU8vTSxDQUFQLEVBQVU7QUFFTixlQUFLbkIsTUFBTCxDQUFZcUIsS0FBWixDQUFtQiw2QkFBNEI0TSxHQUFJLEtBQW5ELEVBQXlEOU0sQ0FBekQ7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBSUQwRyxFQUFBQSwyQkFBMkIsQ0FBQ2xGLE1BQUQsRUFBUztBQUNoQyxTQUFLLElBQUkwRCxXQUFULElBQXdCLEtBQUs3RyxRQUE3QixFQUF1QztBQUNuQyxZQUFNZ0gsT0FBTyxHQUFHLEtBQUtoSCxRQUFMLENBQWM2RyxXQUFkLENBQWhCOztBQUNBLFVBQUksQ0FBQ0csT0FBTCxFQUFjO0FBQ1Y7QUFDSDs7QUFDRCxVQUFJO0FBQ0FBLFFBQUFBLE9BQU8sQ0FBQzJILGNBQVIsQ0FBdUJ4TCxNQUF2QjtBQUNILE9BRkQsQ0FHQSxPQUFPeEIsQ0FBUCxFQUFVO0FBQ04sYUFBS25CLE1BQUwsQ0FBWXFCLEtBQVosQ0FBbUIsNkNBQTRDZ0YsV0FBWSxXQUEzRSxFQUF1RmxGLENBQXZGO0FBQ0g7QUFDSjtBQUNKOztBQUNxQyxRQUFoQzBKLGdDQUFnQyxDQUFDbEksTUFBRCxFQUFTO0FBQzNDLFNBQUssSUFBSTBELFdBQVQsSUFBd0IsS0FBSzdHLFFBQTdCLEVBQXVDO0FBQ25DLFlBQU1nSCxPQUFPLEdBQUcsS0FBS2hILFFBQUwsQ0FBYzZHLFdBQWQsQ0FBaEI7O0FBQ0EsVUFBSSxDQUFDRyxPQUFMLEVBQWM7QUFDVjtBQUNIOztBQUNELFVBQUk7QUFDQSxjQUFNQSxPQUFPLENBQUM0SCxtQkFBUixDQUE0QnpMLE1BQTVCLENBQU47QUFDSCxPQUZELENBR0EsT0FBT3hCLENBQVAsRUFBVTtBQUNOLGFBQUtuQixNQUFMLENBQVlxQixLQUFaLENBQW1CLGtEQUFpRGdGLFdBQVksV0FBaEYsRUFBNEZsRixDQUE1RjtBQUNIO0FBQ0o7QUFDSjs7QUFDcUMsUUFBaENxSixnQ0FBZ0MsQ0FBQzdILE1BQUQsRUFBUztBQUMzQyxRQUFJLENBQUMsSUFBRCxJQUFTLENBQUMsS0FBS25ELFFBQW5CLEVBQTZCO0FBQ3pCO0FBQ0g7O0FBQ0QsU0FBSyxJQUFJNkcsV0FBVCxJQUF3QixLQUFLN0csUUFBN0IsRUFBdUM7QUFDbkMsWUFBTWdILE9BQU8sR0FBRyxLQUFLaEgsUUFBTCxDQUFjNkcsV0FBZCxDQUFoQjs7QUFDQSxVQUFJLENBQUNHLE9BQUwsRUFBYztBQUNWO0FBQ0g7O0FBQ0QsVUFBSTtBQUNBLFlBQUlBLE9BQU8sQ0FBQzZILG1CQUFaLEVBQWlDO0FBQzdCN0gsVUFBQUEsT0FBTyxDQUFDNkgsbUJBQVIsQ0FBNEIxTCxNQUE1QjtBQUNIO0FBQ0osT0FKRCxDQUtBLE9BQU94QixDQUFQLEVBQVU7QUFDTixhQUFLbkIsTUFBTCxDQUFZcUIsS0FBWixDQUFtQixrREFBaURnRixXQUFZLFdBQWhGLEVBQTRGbEYsQ0FBNUY7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QrSSxFQUFBQSx3QkFBd0IsQ0FBQzVGLElBQUQsRUFBTztBQUMzQixRQUFJLENBQUNBLElBQUQsSUFBUyxDQUFDZ0MsS0FBSyxDQUFDQyxPQUFOLENBQWNqQyxJQUFkLENBQVYsSUFBaUNBLElBQUksQ0FBQzVELE1BQUwsSUFBZSxDQUFwRCxFQUF1RDtBQUNuRCxhQUFPNEQsSUFBUDtBQUNIOztBQUNELFVBQU1nSyxRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJQyxHQUFULElBQWdCakssSUFBaEIsRUFBc0I7QUFDbEJnSyxNQUFBQSxRQUFRLENBQUN6SyxJQUFULENBQWMsS0FBSzJLLDJCQUFMLENBQWlDRCxHQUFqQyxDQUFkO0FBQ0g7O0FBQ0QsV0FBT0QsUUFBUDtBQUNIOztBQUNERSxFQUFBQSwyQkFBMkIsQ0FBQ0QsR0FBRCxFQUFNO0FBQzdCLFFBQUlBLEdBQUcsSUFBSSxPQUFPQSxHQUFHLENBQUNFLGdCQUFYLEtBQWdDLFVBQTNDLEVBQXVEO0FBQ25ELGFBQU8sV0FBUDtBQUNIOztBQUVELFFBQUksQ0FBQ0YsR0FBRCxJQUFRLE9BQU9BLEdBQVAsS0FBZSxRQUEzQixFQUFxQztBQUNqQyxhQUFPQSxHQUFQO0FBQ0g7O0FBR0QsU0FBSyxJQUFJRyxTQUFULElBQXNCLEtBQUtwUCxHQUFMLENBQVNmLE1BQS9CLEVBQXVDO0FBQ25DLFVBQUksS0FBS2UsR0FBTCxDQUFTZixNQUFULENBQWdCb1EsY0FBaEIsQ0FBK0JELFNBQS9CLENBQUosRUFDQTtBQUNJLGNBQU1FLFVBQVUsR0FBRyxLQUFLdFAsR0FBTCxDQUFTZixNQUFULENBQWdCbVEsU0FBaEIsQ0FBbkI7QUFDQUgsUUFBQUEsR0FBRyxHQUFHQSxHQUFHLENBQUNNLE9BQUosQ0FBWSxJQUFJQyxNQUFKLENBQVcsU0FBU0osU0FBVCxHQUFxQixHQUFoQyxFQUFxQyxHQUFyQyxDQUFaLEVBQXVERSxVQUF2RCxDQUFOO0FBQ0g7QUFDSjs7QUFFRCxTQUFLLElBQUlHLE9BQVQsSUFBb0IsS0FBS3pQLEdBQUwsQ0FBU2IsR0FBN0IsRUFBa0M7QUFDOUIsVUFBSSxLQUFLYSxHQUFMLENBQVNiLEdBQVQsQ0FBYWtRLGNBQWIsQ0FBNEJJLE9BQTVCLENBQUosRUFDQTtBQUNJLGNBQU1DLFFBQVEsR0FBRyxLQUFLMVAsR0FBTCxDQUFTYixHQUFULENBQWFzUSxPQUFiLENBQWpCO0FBQ0FSLFFBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDTSxPQUFKLENBQVksSUFBSUMsTUFBSixDQUFXLFNBQVNDLE9BQVQsR0FBbUIsR0FBOUIsRUFBbUMsR0FBbkMsQ0FBWixFQUFxREMsUUFBckQsQ0FBTjtBQUNIO0FBQ0o7O0FBQ0QsV0FBT1QsR0FBUDtBQUNIOztBQUNEOUYsRUFBQUEsb0JBQW9CLENBQUV3RyxHQUFGLEVBQVE7QUFDeEIsVUFBTUMsS0FBSyxHQUFHLEVBQWQ7O0FBRUEsT0FBRztBQUNDNVMsTUFBQUEsTUFBTSxDQUFDNlMsbUJBQVAsQ0FBNEJGLEdBQTVCLEVBQWtDM0gsT0FBbEMsQ0FBMEMsVUFBVzhILElBQVgsRUFBa0I7QUFDeEQsWUFBS0YsS0FBSyxDQUFDcEcsT0FBTixDQUFlc0csSUFBZixNQUEwQixDQUFDLENBQWhDLEVBQW9DO0FBQ2hDRixVQUFBQSxLQUFLLENBQUNyTCxJQUFOLENBQVl1TCxJQUFaO0FBQ0g7QUFDSixPQUpEO0FBTUgsS0FQRCxRQU9VSCxHQUFHLEdBQUczUyxNQUFNLENBQUMrUyxjQUFQLENBQXVCSixHQUF2QixDQVBoQjs7QUFTQSxXQUFPQyxLQUFQO0FBQ0g7O0FBRURJLEVBQUFBLGdCQUFnQixDQUFDekosT0FBRCxFQUFVMEosTUFBVixFQUFrQjtBQUM5QixRQUFJLEtBQUtyUCxtQkFBTCxDQUF5QlEsTUFBekIsS0FBb0MsQ0FBeEMsRUFBMkM7QUFDdkNtRixNQUFBQSxPQUFPO0FBQ1YsS0FGRCxNQUVPO0FBQ0gsV0FBS3lKLGdCQUFMLENBQXNCekosT0FBdEIsRUFBK0IwSixNQUEvQjtBQUNIO0FBQ0o7O0FBRURDLEVBQUFBLGVBQWUsR0FBRztBQUNkLFdBQU8sSUFBSXpELE9BQUosQ0FBWSxDQUFDbEcsT0FBRCxFQUFVMEosTUFBVixLQUFxQjtBQUNwQyxXQUFLRCxnQkFBTCxDQUFzQnpKLE9BQXRCLEVBQStCMEosTUFBL0I7QUFDSCxLQUZNLENBQVA7QUFHSDs7QUFFRHRGLEVBQUFBLHlCQUF5QixDQUFDM0YsSUFBRCxFQUFPNUIsVUFBUCxFQUFtQjtBQUN4QyxRQUFJLENBQUM0QixJQUFELElBQVMsQ0FBQ2dDLEtBQUssQ0FBQ0MsT0FBTixDQUFjakMsSUFBZCxDQUFWLElBQWlDQSxJQUFJLENBQUM1RCxNQUFMLElBQWUsQ0FBcEQsRUFBdUQ7QUFDbkQsYUFBTzRELElBQVA7QUFDSDs7QUFDRCxVQUFNZ0ssUUFBUSxHQUFHLEVBQWpCOztBQUNBLFNBQUssSUFBSUMsR0FBVCxJQUFnQmpLLElBQWhCLEVBQXNCO0FBQ2xCZ0ssTUFBQUEsUUFBUSxDQUFDekssSUFBVCxDQUFjLEtBQUs0TCxtQ0FBTCxDQUF5Q2xCLEdBQXpDLEVBQThDN0wsVUFBOUMsQ0FBZDtBQUNIOztBQUNELFdBQU80TCxRQUFQO0FBQ0g7O0FBRURtQixFQUFBQSxtQ0FBbUMsQ0FBQ2xCLEdBQUQsRUFBTTdMLFVBQU4sRUFBa0I7QUFDakQsUUFBSTZMLEdBQUcsSUFBSSxPQUFPQSxHQUFHLENBQUNFLGdCQUFYLEtBQWdDLFVBQTNDLEVBQXVEO0FBQ25ELFVBQUkvTCxVQUFVLEtBQUssS0FBbkIsRUFBMEI7QUFDdEIsZUFBTyxXQUFQO0FBQ0gsT0FGRCxNQUVPO0FBQ0gsZUFBTzZMLEdBQUcsQ0FBQ0UsZ0JBQUosRUFBUDtBQUNIO0FBQ0o7O0FBRUQsV0FBT0YsR0FBUDtBQUNIOztBQXQ5QjRDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXHJcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IGRlYXN5bmMgZnJvbSAnZGVhc3luYyc7XHJcbmltcG9ydCBGdXR1cmUgZnJvbSAnZmliZXJzL2Z1dHVyZSc7XHJcbmltcG9ydCBGaWJlciBmcm9tICdmaWJlcnMnO1xyXG5pbXBvcnQgeyBFT0wgfSBmcm9tICdvcyc7XHJcbmNvbnN0IHsgdjEgfSA9IHJlcXVpcmUoJ3V1aWQnKTtcclxuaW1wb3J0IFN0ZXBSZXN1bHQgZnJvbSAnLi4vbW9kZWwvc3RlcC1yZXN1bHQnO1xyXG5pbXBvcnQgT3h5Z2VuRXZlbnRzIGZyb20gJy4vT3h5Z2VuRXZlbnRzJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCAqIGFzIGNvcmVVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgU1RBVFVTIGZyb20gJy4uL21vZGVsL3N0YXR1cy5qcyc7XHJcbmltcG9ydCAqIGFzIE1vZHVsZXMgZnJvbSAnLi4vb3hfbW9kdWxlcy9pbmRleCc7XHJcblxyXG4vLyBzZXR1cCBsb2dnZXJcclxuaW1wb3J0IGxvZ2dlciwgeyBERUZBVUxUX0xPR0dFUl9JU1NVRVIsIElTU1VFUlMgfSBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuaW1wb3J0IHsgT3h5Z2VuU3ViTW9kdWxlIH0gZnJvbSAnLi9PeHlnZW5TdWJNb2R1bGUnO1xyXG5cclxuLypnbG9iYWwgX19zdGFjayovXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWwsICdfX3N0YWNrJywge1xyXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIG9yaWcgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcclxuICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIChfLCBzdGFjaykgeyByZXR1cm4gc3RhY2s7IH07XHJcbiAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcigpO1xyXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycik7XHJcbiAgICAgICAgdmFyIHN0YWNrID0gZXJyLnN0YWNrO1xyXG4gICAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gb3JpZztcclxuICAgICAgICByZXR1cm4gc3RhY2s7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuY29uc3QgREVGQVVMVF9USU1FT1VUID0gMzAwMDA7XHJcbmNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgIGJhY2t0cmFjZTogZmFsc2UsIC8vIDxib29sZWFuPiBzaG93IGZ1bGwgYmFja3RyYWNlIGZvciBlcnJvcnNcclxuICAgIGNvbXBpbGVyOiBbXSwgLy8gPHN0cmluZ1tdPiAoXCJleHRlbnNpb246bW9kdWxlXCIpIHJlcXVpcmUgZmlsZXMgd2l0aCB0aGUgZ2l2ZW4gRVhURU5TSU9OIGFmdGVyIHJlcXVpcmluZyBNT0RVTEUgKHJlcGVhdGFibGUpXHJcbiAgICBmYWlsQW1iaWd1b3VzRGVmaW5pdGlvbnM6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gdHJlYXQgYW1iaWd1b3VzIGRlZmluaXRpb25zIGFzIGVycm9yc1xyXG4gICAgZmFpbEZhc3Q6IGZhbHNlLCAvLyA8Ym9vbGVhbj4gYWJvcnQgdGhlIHJ1biBvbiBmaXJzdCBmYWlsdXJlXHJcbiAgICBpZ25vcmVVbmRlZmluZWREZWZpbml0aW9uczogZmFsc2UsIC8vIDxib29sZWFuPiB0cmVhdCB1bmRlZmluZWQgZGVmaW5pdGlvbnMgYXMgd2FybmluZ3NcclxuICAgIG5hbWU6IFtdLCAvLyA8UkVHRVhQW10+IG9ubHkgZXhlY3V0ZSB0aGUgc2NlbmFyaW9zIHdpdGggbmFtZSBtYXRjaGluZyB0aGUgZXhwcmVzc2lvbiAocmVwZWF0YWJsZSlcclxuICAgIHByb2ZpbGU6IFtdLCAvLyA8c3RyaW5nPiAobmFtZSkgc3BlY2lmeSB0aGUgcHJvZmlsZSB0byB1c2VcclxuICAgIHJlcXVpcmU6IFtdLCAvLyA8c3RyaW5nPiAoZmlsZS9kaXIvZ2xvYikgcmVxdWlyZSBmaWxlcyBiZWZvcmUgZXhlY3V0aW5nIGZlYXR1cmVzXHJcbiAgICBvcmRlcjogJ2RlZmluZWQnLCAvLyA8c3RyaW5nPiBzd2l0Y2ggYmV0d2VlbiBkZXRlcm1pbmlzdGljICBhbmQgcmFuZG9tIGZlYXR1cmUgZXhlY3V0aW9uLiBFaXRoZXIgXCJkZWZpbmVkXCIsIFwicmFuZG9tXCIgb3IgXCJyYW5kb206NDJcIiB3aGVyZWFzIDQyIGlzIHRoZSBzZWVkIGZvciByYW5kb21pemF0aW9uXHJcbiAgICBzbmlwcGV0U3ludGF4OiB1bmRlZmluZWQsIC8vIDxzdHJpbmc+IHNwZWNpZnkgYSBjdXN0b20gc25pcHBldCBzeW50YXhcclxuICAgIHNuaXBwZXRzOiB0cnVlLCAvLyA8Ym9vbGVhbj4gaGlkZSBzdGVwIGRlZmluaXRpb24gc25pcHBldHMgZm9yIHBlbmRpbmcgc3RlcHNcclxuICAgIHNvdXJjZTogdHJ1ZSwgLy8gPGJvb2xlYW4+IGhpZGUgc291cmNlIHVyaXNcclxuICAgIHN0cmljdDogZmFsc2UsIC8vIDxib29sZWFuPiBmYWlsIGlmIHRoZXJlIGFyZSBhbnkgdW5kZWZpbmVkIG9yIHBlbmRpbmcgc3RlcHNcclxuICAgIHRhZ0V4cHJlc3Npb246ICcnLCAvLyA8c3RyaW5nPiAoZXhwcmVzc2lvbikgb25seSBleGVjdXRlIHRoZSBmZWF0dXJlcyBvciBzY2VuYXJpb3Mgd2l0aCB0YWdzIG1hdGNoaW5nIHRoZSBleHByZXNzaW9uXHJcbiAgICB0YWdzSW5UaXRsZTogZmFsc2UsIC8vIDxib29sZWFuPiBhZGQgY3VjdW1iZXIgdGFncyB0byBmZWF0dXJlIG9yIHNjZW5hcmlvIG5hbWVcclxuICAgIHRpbWVvdXQ6IERFRkFVTFRfVElNRU9VVCAvLyA8bnVtYmVyPiB0aW1lb3V0IGZvciBzdGVwIGRlZmluaXRpb25zIGluIG1pbGxpc2Vjb25kc1xyXG59O1xyXG5jb25zdCBNT0RVTEVfTkFNRV9NQVRDSF9SRUdFWCA9IC9ebW9kdWxlLSguKz8pXFwuanMkLztcclxuY29uc3QgU0VSVklDRV9OQU1FX01BVENIX1JFR0VYID0gL15zZXJ2aWNlLSguKz8pXFwuanMkLztcclxuY29uc3QgRE9fTk9UX1dSQVBfTUVUSE9EUyA9IFsnZHJpdmVyJywgJ2dldERyaXZlciddO1xyXG5cclxuY29uc3QgREVGQVVMVF9DVFggPSB7XHJcbiAgICBwYXJhbXM6IHt9LFxyXG4gICAgdmFyczoge30sXHJcbiAgICBlbnY6IHt9LFxyXG4gICAgY2Fwczoge30sXHJcbiAgICBhdHRyaWJ1dGVzOiB7fSxcclxufTtcclxuY29uc3QgREVGQVVMVF9SRVNVTFRfU1RPUkUgPSB7XHJcbiAgICBzdGVwczogW10sXHJcbiAgICBsb2dzOiBbXSxcclxuICAgIGF0dGFjaG1lbnRzOiBbXSxcclxuICAgIGhhcjogbnVsbCxcclxuICAgIGF0dHJpYnV0ZXM6IHt9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW4gZXh0ZW5kcyBPeHlnZW5FdmVudHMge1xyXG4gICAgY29uc3RydWN0b3IgKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZSA9IHsgLi4uREVGQVVMVF9SRVNVTFRfU1RPUkUgfTtcclxuICAgICAgICB0aGlzLmN0eCA9IHsgLi4uREVGQVVMVF9DVFggfTtcclxuICAgICAgICB0aGlzLm1vZHVsZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VzID0ge307XHJcbiAgICAgICAgdGhpcy5yZXBvID0ge307XHJcbiAgICAgICAgdGhpcy5jYXBhYmlsaXRpZXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMub3B0cyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5veEJhc2VEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vJyk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSB0aGlzLl93cmFwTG9nZ2VyKGxvZ2dlcignT3h5Z2VuJykpO1xyXG4gICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQob3B0aW9ucywgY2FwcywgY3R4ID0ge30sIHJlc3VsdHMgPSB7fSkge1xyXG4gICAgICAgIHRoaXMub3B0cyA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9PUFRTLCBvcHRpb25zKTtcclxuICAgICAgICB0aGlzLmN3ZCA9IHRoaXMub3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgICAgICB0aGlzLmN0eCA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9DVFgsIGN0eCB8fCB7fSk7XHJcbiAgICAgICAgdGhpcy5jdHguY2FwcyA9IHsgLi4uY3R4LmNhcHMgfHwge30sIC4uLmNhcHMsIH07XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZSA9IE9iamVjdC5hc3NpZ24oREVGQVVMVF9SRVNVTFRfU1RPUkUsIHJlc3VsdHMgfHwge30pO1xyXG4gICAgICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdGhpcy5jdHguY2FwcyA9IGNhcHM7XHJcblxyXG4gICAgICAgIGlmIChjdHguYXR0cmlidXRlcyAmJiAoIXJlc3VsdHMuYXR0cmlidXRlcyB8fCAhT2JqZWN0LmtleXMocmVzdWx0cy5hdHRyaWJ1dGVzKS5sZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlcyA9IHsgLi4uY3R4LmF0dHJpYnV0ZXMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlZmluZSAnb3gnIG9iamVjdCBpbiBnbG9iYWwgSlMgc2NvcGVcclxuICAgICAgICAvLyB3ZSB3aWxsIHVzZSB0aGlzIG9iamVjdCB0byBhY2Nlc3MgT3h5Z2VuIG1vZHVsZXMgYW5kIHRlc3QgY29udGV4dCBmcm9tIG1vZHVsZXMgdXNlZCBpbiB0aGUgdGVzdCAoaWYgYW55KSAgICAgICAgXHJcbiAgICAgICAgdGhpcy5tYWtlT3hHbG9iYWwoKTtcclxuICAgICAgICAvLyBsb2FkIHNlcnZpY2VzXHJcbiAgICAgICAgdGhpcy5fbG9hZFNlcnZpY2VzKCk7XHJcbiAgICAgICAgLy8gbG9hZCBtb2R1bGVzXHJcbiAgICAgICAgdGhpcy5fbG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAvLyBpZiBvcHRpb25zLm1ha2VNb2R1bGVzR2xvYmFsIGlzIHRydWUgb3IgdW5kZWZpbmVkIHRoYW4gZGVmaW5lICdjdHgnIGNvbnRlbnQgYW5kIGVhY2ggbW9kdWxlIGluIGdsb2JhbCBzY29wZVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgb3B0aW9ucy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kaXNwb3NlTW9kdWxlcyhzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZGlzcG9zZSBtb2R1bGVzOiAnLCBlKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZU1vZHVsZXMoc3RhdHVzKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGlzcG9zZVNlcnZpY2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRpc3Bvc2U6ICcsIGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWRqdXN0U2NyaXB0TGluZSgpIHtcclxuICAgICAgICBjb25zdCBpc0luRGVidWdNb2RlID0gb3h1dGlsLmlzSW5EZWJ1Z01vZGUoKTtcclxuICAgICAgICAvLyBhZGQgZXh0cmEgbGluZSBpZiB3ZSBhcmUgcnVubmluZyBpbiBkZWJ1Z2dlciBtb2RlIChWOCBkZWJ1Z2dlciBhZGRzIGFuIGV4dHJhIGxpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSlcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBpc0luRGVidWdNb2RlID8gLTEgOiAwO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbnRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBjb250ZXh0KGN0eCkge1xyXG4gICAgICAgIHRoaXMuY3R4ID0gY3R4O1xyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLm94LmN0eCA9IGN0eDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgaW4gXCJveFwiIGdsb2JhbCB2YXJpYWJsZVxyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBhcmFtcyA9IGN0eC5wYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwuZW52ID0gY3R4LmVudiB8fCB7fTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5hdHRyaWJ1dGVzID0gY3R4LmF0dHJpYnV0ZXMgfHwge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlcG9zaXRvcnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwbztcclxuICAgIH1cclxuXHJcbiAgICBzZXQgcmVwb3NpdG9yeShyZXBvKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvID0gcmVwbztcclxuICAgICAgICBpZiAoZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veC5yZXBvID0gcmVwbztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlc3VsdHMoKSB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRlIHRpbWUgZm9yIHRoZSB0cmFuc2FjdGlvbiBpdHNlbGYgLSBzdW1tYXJ5IG9mIGR1cmF0aW9ucyBmb3IgYWxsIHRoZSBzdGVwcyBpbiB0aGlzIHRyYW5zYWN0aW9uXHJcbiAgICAgICAgLy8gYWxzbyBhZGp1c3QgdHJhbnNhY3Rpb24gZW5kIHRpbWUgdG8gbXVjaCBlbmQgdGltZSBmb3IgdGhlIGxhc3QgZXhlY3V0ZWQgc3RlcCB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbi5cclxuICAgICAgICBmb3IgKGNvbnN0IHRyYW5zU3RlcCBvZiB0aGlzLnJlc3VsdFN0b3JlLnN0ZXBzKSB7XHJcbiAgICAgICAgICAgIGlmICh0cmFuc1N0ZXAubmFtZS5pbmNsdWRlcygnLnRyYW5zYWN0aW9uJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zTmFtZSA9IHRyYW5zU3RlcC50cmFuc2FjdGlvbjtcclxuICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0ZXAgYmVsb25ncyB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAmIGlzIG5vdCB0aGUgdHJhbnNhY3Rpb24gc3RlcFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGVwLnRyYW5zYWN0aW9uID09PSB0cmFuc05hbWUgJiYgc3RlcCAhPT0gdHJhbnNTdGVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5kdXJhdGlvbiArPSBzdGVwLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5lbmRUaW1lID4gdHJhbnNTdGVwLmVuZFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zU3RlcC5lbmRUaW1lID0gc3RlcC5lbmRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdHJhbnNhY3Rpb24gc3RhdHVzIHRvIHdhcm5pbmcgaWYgYXQgbGVhc3Qgb25lIG9mIHN0ZXBzIGhhcyB3YXJuaW5nIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcC5zdGF0dXMgPT09IFNUQVRVUy5XQVJOSU5HKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc1N0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0U3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlc0NhcGFiaWxpdGllcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kQ2FwcyA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc1ttb2R1bGVOYW1lXTtcclxuICAgICAgICAgICAgaWYgKG1vZHVsZS5uYW1lICYmIG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzICYmIHR5cGVvZiBtb2R1bGUuX2dldENhcGFiaWxpdGllcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FwcyA9IG1vZHVsZS5fZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBzdG9yZSBvbmx5IG5vbi1lbXB0eSBjYXBzIHBlciBtb2R1bGUgdGhhdCBoYXMgdGhpcy5jYXBzIHByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FwcyAmJiB0eXBlb2YgY2FwcyA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoY2FwcykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZENhcHNbbW9kdWxlLm5hbWVdID0gY2FwcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbW9kQ2FwcztcclxuICAgIH1cclxuXHJcbiAgICByZXNldFJlc3VsdHMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB0aGlzLmhhciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25CZWZvcmVDYXNlKGNvbnRleHQpIHtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLm9uQmVmb3JlQ2FzZSAmJiBhd2FpdCBtb2R1bGUub25CZWZvcmVDYXNlKGNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9pdGVyYXRpb25TdGFydCAmJiBhd2FpdCBtb2R1bGUuX2l0ZXJhdGlvblN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uQmVmb3JlQ2FzZVwiIG1ldGhvZCBvZiAke21vZHVsZU5hbWV9IG1vZHVsZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkFmdGVyQ2FzZShlcnJvciA9IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gYXdhaXQgZm9yIGF2b2lkIHN0dWNrIG9uICouZGlzcG9zZSBjYWxsXHJcbiAgICAgICAgICAgICAgICBtb2R1bGUub25BZnRlckNhc2UgJiYgYXdhaXQgbW9kdWxlLm9uQWZ0ZXJDYXNlKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5faXRlcmF0aW9uRW5kICYmIGF3YWl0IG1vZHVsZS5faXRlcmF0aW9uRW5kKGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBjYWxsIFwib25BZnRlckNhc2VcIiBtZXRob2Qgb2YgJHttb2R1bGVOYW1lfSBtb2R1bGUuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFrZU94R2xvYmFsKCkge1xyXG4gICAgICAgIGlmICghZ2xvYmFsLm94KSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5veCA9IHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZXM6IHRoaXMubW9kdWxlcyxcclxuICAgICAgICAgICAgICAgIGN0eDogdGhpcy5jdHgsXHJcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLm9wdHMsXHJcbiAgICAgICAgICAgICAgICBjYXBzOiB0aGlzLmNhcGFiaWxpdGllcyxcclxuICAgICAgICAgICAgICAgIHJlc3VsdFN0b3JlOiB0aGlzLnJlc3VsdFN0b3JlLFxyXG4gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlOiB0aGlzLmFkZEF0dHJpYnV0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgYWRkQXR0YWNobWVudDogdGhpcy5hZGRBdHRhY2htZW50LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBnbG9iYWwudmFycyA9IHRoaXMuY3R4LnZhcnM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1ha2VDb250ZXh0QW5kTW9kdWxlc0dsb2JhbCgpIHtcclxuICAgICAgICAvLyBtYWtlIHN1cmUgJ294JyBpcyBhbHJlYWR5IGdsb2JhbFxyXG4gICAgICAgIGlmIChnbG9iYWwub3gpIHtcclxuICAgICAgICAgICAgLy8gZXhwb3NlIG1vZHVsZXMgYXMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtb2R1bGVOYW1lIGluIHRoaXMubW9kdWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFnbG9iYWxbbW9kdWxlTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbbW9kdWxlTmFtZV0gPSB0aGlzLm1vZHVsZXNbbW9kdWxlTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZXhwb3NlIFwiY3R4XCIsIFwicGFyYW1zXCIgYW5kIFwiZW52XCIgYXMgZ2xvYmFsIHZhcmlhYmxlc1xyXG4gICAgICAgICAgICBnbG9iYWwucGFyYW1zID0gZ2xvYmFsLm94LmN0eC5wYXJhbXM7XHJcbiAgICAgICAgICAgIGdsb2JhbC5lbnYgPSBnbG9iYWwub3guY3R4LmVudjtcclxuICAgICAgICAgICAgZ2xvYmFsLmN0eCA9IGdsb2JhbC5veC5jdHg7XHJcbiAgICAgICAgICAgIGdsb2JhbC5hdHRyaWJ1dGVzID0gZ2xvYmFsLm94LmN0eC5hdHRyaWJ1dGVzIHx8IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIFwiJ25hbWUnIGFuZCAndmFsdWUnIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgZm9yIG94LmFkZEF0dHJpYnV0ZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdFN0b3JlICYmIHRoaXMucmVzdWx0U3RvcmUuYXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFN0b3JlLmF0dHJpYnV0ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQXR0YWNobWVudChmaWxlUGF0aCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTdG9yZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyKGBGaWxlICR7ZmlsZVBhdGh9IGRvZXNuJ3QgZXhpc3RgKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFN0b3JlLmF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5hdHRhY2htZW50cy5wdXNoKFxyXG4gICAgICAgICAgICBjb3JlVXRpbHMubmV3RmlsZUF0dGFjaG1lbnQoZmlsZVBhdGgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGFnZU9iamVjdEZpbGUocG9QYXRoKSB7XHJcbiAgICAgICAgaWYgKCFwb1BhdGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwbyA9IHJlcXVpcmUocG9QYXRoKTtcclxuICAgICAgICAgICAgLy8gc2V0IHBhZ2Ugb2JqZWN0IHJlcG9zaXRvcnkgYXMgdGhlIG1haW4gb25lXHJcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHBvO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5vcHRzLmdsb2JhbFNjb3BlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBnbG9iYWwucG8gPSBwbztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuZ2xvYmFsU2NvcGUgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMub3B0cy5nbG9iYWxTY29wZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ2xvYmFsLnBvID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGUgTWV0aG9kc1xyXG4gICAgICovXHJcbiAgICBfd3JhcExvZ2dlcihfbG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3QgbG9nZ2VyV3JhcCA9IHtcclxuICAgICAgICAgICAgaW5mbzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnaW5mbycsIGFyZ3MpLFxyXG4gICAgICAgICAgICBkZWJ1ZzogKC4uLmFyZ3MpID0+IHRoaXMuX2xvZyhfbG9nZ2VyLCAnZGVidWcnLCBhcmdzKSxcclxuICAgICAgICAgICAgZXJyb3I6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2Vycm9yJywgYXJncyksXHJcbiAgICAgICAgICAgIHdhcm46ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ3dhcm4nLCBhcmdzKSxcclxuICAgICAgICAgICAgdXNlckluZm86ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2luZm8nLCBhcmdzLCBJU1NVRVJTLlVTRVIpLFxyXG4gICAgICAgICAgICB1c2VyRGVidWc6ICguLi5hcmdzKSA9PiB0aGlzLl9sb2coX2xvZ2dlciwgJ2RlYnVnJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICAgICAgdXNlckVycm9yOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICdlcnJvcicsIGFyZ3MsIElTU1VFUlMuVVNFUiksXHJcbiAgICAgICAgICAgIHVzZXJXYXJuOiAoLi4uYXJncykgPT4gdGhpcy5fbG9nKF9sb2dnZXIsICd3YXJuJywgYXJncywgSVNTVUVSUy5VU0VSKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBsb2dnZXJXcmFwO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2coX2xvZ2dlciwgbGV2ZWwsIGFyZ3MsIHNyYyA9IERFRkFVTFRfTE9HR0VSX0lTU1VFUikge1xyXG4gICAgICAgIGlmICghX2xvZ2dlcltsZXZlbF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBfbG9nZ2VyW2xldmVsXS5hcHBseShfbG9nZ2VyLCBhcmdzKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG94dXRpbC5zdHJpbmdpZnkoYXJncywgMik7XHJcbiAgICAgICAgY29uc3QgdGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAvLyBhZGQgdGhlIGxvZyBlbnRyeSB0byB0aGUgcmVzdWx0IHN0b3JlXHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0U3RvcmUgJiYgdGhpcy5yZXN1bHRTdG9yZS5sb2dzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U3RvcmUubG9ncy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRpbWU6IHRpbWUsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwudG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgIG1zZzogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZW1vdmUgZmlyc3QgYXJndW1lbnQsIGlmIGl0J3MgYSBtZXNzYWdlXHJcbiAgICAgICAgYXJncyA9IG1lc3NhZ2UgPyBhcmdzLnNoaWZ0KCkgOiBhcmdzO1xyXG4gICAgICAgIHRoaXMuZW1pdExvZyh0aW1lLCBsZXZlbCwgbWVzc2FnZSwgYXJncywgc3JjKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFNlcnZpY2VzKCkge1xyXG4gICAgICAgIGNvbnN0IG94U2VydmljZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3hCYXNlRGlyLCAnLi9veF9zZXJ2aWNlcycpO1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VGaWxlcyA9IGdsb2Iuc3luYygnc2VydmljZS0qLmpzJywgeyBjd2Q6IG94U2VydmljZXNEaXJQYXRoIH0pO1xyXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWxsIHNlcnZpY2VzXHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZXMuLi4nKTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXJ2aWNlRmlsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUZpbGVOYW1lID0gc2VydmljZUZpbGVzW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlRmlsZVBhdGggPSBwYXRoLmpvaW4ob3hTZXJ2aWNlc0RpclBhdGgsIHNlcnZpY2VGaWxlTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHNlcnZpY2VGaWxlTmFtZS5tYXRjaChTRVJWSUNFX05BTUVfTUFUQ0hfUkVHRVgpO1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHJlc3VsdFsxXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMub3B0cy5zZXJ2aWNlcyA9IHVuZGVmaW5lZCBpbiBzaW5nbGUgZmlsZSBtb2RlXHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5zZXJ2aWNlcykgJiYgIXRoaXMub3B0cy5zZXJ2aWNlcy5pbmNsdWRlcyhzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgc2VydmljZTogJyArIHNlcnZpY2VOYW1lKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLl9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZUZpbGVQYXRoKTtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2UuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1tzZXJ2aWNlTmFtZV0gPSBzZXJ2aWNlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIHNlcnZpY2UgXCInICsgc2VydmljZU5hbWUgKyAnXCI6ICcgKyBlLm1lc3NhZ2UgKyBFT0wgKyAoZS5zdGFja3RyYWNlID8gZS5zdGFja3RyYWNlIDogJycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9sb2FkU2VydmljZShzZXJ2aWNlTmFtZSwgc2VydmljZVBhdGgpIHtcclxuICAgICAgICBsZXQgU2VydmljZUNsYXNzID0gcmVxdWlyZShzZXJ2aWNlUGF0aCk7XHJcbiAgICAgICAgLy8gRVM2IGNsYXNzIHdpbGwgYmUgdW5kZXIgJ2RlZmF1bHQnIHByb3BlcnR5XHJcbiAgICAgICAgaWYgKFNlcnZpY2VDbGFzcy5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIFNlcnZpY2VDbGFzcyA9IFNlcnZpY2VDbGFzcy5kZWZhdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzZXJ2aWNlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYFNlcnZpY2U6JHtzZXJ2aWNlTmFtZX1gKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2aWNlQ2xhc3ModGhpcy5vcHRzLCB0aGlzLmN0eCwgdGhpcy5yZXN1bHRTdG9yZSwgc2VydmljZUxvZ2dlcik7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRNb2R1bGVzKCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGludGVybmFsIG1vZHVsZXMuLi4nKTtcclxuICAgICAgICB0aGlzLl9sb2FkSW50ZXJuYWxNb2R1bGVzKCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgZXh0ZXJuYWwgbW9kdWxlcy4uLicpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRFeHRlcm5hbE1vZHVsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEV4dGVybmFsTW9kdWxlcygpIHtcclxuICAgICAgICBsZXQgbW9kdWxlc0ZvbGRlclBhdGggPSAnLi9tb2R1bGVzJztcclxuICAgICAgICBpZiAodGhpcy5vcHRzLm1vZHVsZXNfZXh0ICYmIHR5cGVvZiB0aGlzLm9wdHMubW9kdWxlc19leHQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG1vZHVsZXNGb2xkZXJQYXRoID0gdGhpcy5vcHRzLm1vZHVsZXNfZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2NvbnN0IG94TW9kdWxlc0RpclBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5veEJhc2VEaXIsICcuL294X21vZHVsZXMnKTtcclxuICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY3dkLCBtb2R1bGVzRm9sZGVyUGF0aCk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG94TW9kdWxlc0RpclBhdGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG1vZHVsZUZpbGVzID0gW107XHJcbiAgICAgICAgLy8gaWYgcGFydGljdWxhciBtb2R1bGUgbmFtZXMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbmZpZywgdGhlbiBsb2FkIG9ubHkgdGhlc2UgbW9kdWxlc1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0cy5tb2R1bGVzKSAmJiB0aGlzLm9wdHMubW9kdWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3B0cy5tb2R1bGVzLmZvckVhY2gobW9kdWxlTmFtZSA9PiBtb2R1bGVGaWxlcy5wdXNoKGBtb2R1bGUtJHttb2R1bGVOYW1lfS5qc2ApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBsb2FkIGFsbCBhdmFpbGFibGUgbW9kdWxlcyAobWlnaHQgYmUgbW9yZSB0aW1lIGNvbnN1bWluZylcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9kdWxlRmlsZXMgPSBnbG9iLnN5bmMoJ21vZHVsZS0qLmpzJywgeyBjd2Q6IG94TW9kdWxlc0RpclBhdGggfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGluaXRpYWxpemUgYWxsIG1vZHVsZXMgICAgICAgIFxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZUZpbGVOYW1lIG9mIG1vZHVsZUZpbGVzKSB7XHJcbiAgICAgICAgICAgIC8vIGV4dHJhY3QgbmFtZSBmcm9tIHRoZSBtb2R1bGUgZmlsZSBuYW1lIGJhc2VkIG9uIG1vZHVsZSBuYW1lIHBhdHRlcm5cclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IG1vZHVsZUZpbGVOYW1lLm1hdGNoKE1PRFVMRV9OQU1FX01BVENIX1JFR0VYKVsxXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBsb2dnZXIgZm9yIHRoZSBtb2R1bGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZUxvZ2dlciA9IHRoaXMuX3dyYXBMb2dnZXIobG9nZ2VyKGBNb2R1bGU6JHttb2R1bGVOYW1lfWApKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IG1vZHVsZSBpbnN0YW5jZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kID0gY29yZVV0aWxzLmxvYWRNb2R1bGVGcm9tRmlsZShtb2R1bGVOYW1lLCBtb2R1bGVGaWxlTmFtZSwgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRJbnRlcm5hbE1vZHVsZXMoKSB7XHJcbiAgICAgICAgLy8gaWYgYG1vZHVsZXNgIGlzIGVtcHR5IG9yIHVuZGVmaW5lZCBpbiBveHlnZW4uY29uZiB0aGVuIGxvYWQgYWxsIG1vZHVsZXNcclxuICAgICAgICAvLyBvdGhlcndpc2UsIGxvYWQgb25seSB0aG9zZSBpbXBsaWNpdGx5IGRlZmluZWRcclxuICAgICAgICBjb25zdCBleGNsdWRlVW5kZWZpbmVkTW9kcyA9IHRoaXMub3B0cy5tb2R1bGVzICYmIHRoaXMub3B0cy5tb2R1bGVzLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoTW9kdWxlcykpIHtcclxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVVbmRlZmluZWRNb2RzICYmICF0aGlzLm9wdHMubW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgTW9kdWxlQ2xhc3MgPSBNb2R1bGVzW21vZHVsZU5hbWVdO1xyXG4gICAgICAgICAgICBjb25zdCBveE1vZHVsZXNEaXJQYXRoID0gb3h1dGlsLmdldE94TW9kdWxlc0RpcigpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgbmV3IGxvZ2dlciBmb3IgdGhlIG1vZHVsZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlTG9nZ2VyID0gdGhpcy5fd3JhcExvZ2dlcihsb2dnZXIoYE1vZHVsZToke21vZHVsZU5hbWV9YCkpO1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBuZXcgbW9kdWxlIGluc3RhbmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSBjb3JlVXRpbHMubG9hZE1vZHVsZUZyb21DbGFzcyhtb2R1bGVOYW1lLCBNb2R1bGVDbGFzcywgbW9kdWxlTG9nZ2VyLCBveE1vZHVsZXNEaXJQYXRoLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbGwgb25Nb2R1bGVMb2FkZWQgaG9va1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFNlcnZpY2VzT25Nb2R1bGVMb2FkZWQobW9kKTtcclxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBtb2R1bGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW21vZHVsZU5hbWVdID0gZ2xvYmFsLm94Lm1vZHVsZXNbbW9kdWxlTmFtZV0gPSB0aGlzLl93cmFwTW9kdWxlKG1vZHVsZU5hbWUsIG1vZCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3cmFwIHVwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIG1vZHVsZTogJyArIG1vZHVsZU5hbWUgKyAnIFsgJyArIGR1cmF0aW9uICsgJyBzZWMgXScpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIG1vZHVsZSBcIicgKyBtb2R1bGVOYW1lICsgJ1wiOiAnICsgZS5tZXNzYWdlICsgRU9MICsgKGUuc3RhY2t0cmFjZSA/IGUuc3RhY2t0cmFjZSA6ICcnKSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSB0aGF0IGZhaWxlZCB0byBsb2FkLCBleGNlcHQgV2ViIGFuZCBNb2IgbW9kdWxlc1xyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBNb2IgYW5kIFdlYiBtb2R1bGVzIGxvYWRlZCwgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc2hhbGwgZmFpbFxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT09ICd3ZWInIHx8IG1vZHVsZU5hbWUgPT09ICdtb2InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3dyYXBNb2R1bGUobmFtZSwgbW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHtcclxuICAgICAgICAgICAgbmFtZTogbmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGxldCBtb2R1bGVNZXRob2RzID0gT2JqZWN0LmtleXMobW9kdWxlKTtcclxuICAgICAgICBpZiAoIW1vZHVsZU1ldGhvZHMuc29tZSh4ID0+IHg9PT0gJ2V4cG9ydHMnKSkge1xyXG4gICAgICAgICAgICBtb2R1bGVNZXRob2RzID0gdGhpcy5fZ2V0QWxsUHJvcGVydHlOYW1lcyhtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBtZXRob2ROYW1lIG9mIG1vZHVsZU1ldGhvZHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gbW9kdWxlW21ldGhvZE5hbWVdO1xyXG4gICAgICAgICAgICAvLyBpZ25vcmUgYW55IG1vZHVsZSBwcm9wZXJ0eSB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGEgT3h5Z2VuU3ViTW9kdWxlXHJcbiAgICAgICAgICAgIGlmICgoIShtZXRob2QgaW5zdGFuY2VvZiBGdW5jdGlvbikgJiYgIShtZXRob2QgaW5zdGFuY2VvZiBPeHlnZW5TdWJNb2R1bGUpICYmIHR5cGVvZiBtZXRob2QgIT09ICdmdW5jdGlvbicpIHx8IG1ldGhvZE5hbWUgPT09ICdleHBvcnRzJyB8fCBtZXRob2ROYW1lID09PSAnX2NvbXBpbGUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBtYXAgYW5kIHdyYXAgc3ViLW1vZHVsZSBtZXRob2RzIChyZWN1cnNpdmUgY2FsbCB0byBfd3JhcE1vZHVsZSlcclxuICAgICAgICAgICAgaWYgKG1ldGhvZCBpbnN0YW5jZW9mIE94eWdlblN1Yk1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9IHRoaXMuX3dyYXBNb2R1bGUoYCR7bmFtZX0uJHttZXRob2ROYW1lfWAsIG1ldGhvZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZG8gbm90IHdyYXAgbWV0aG9kc1xyXG4gICAgICAgICAgICBlbHNlIGlmIChET19OT1RfV1JBUF9NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyA9PT0gJ2RyaXZlcicgfHwgbWV0aG9kTmFtZSA9PT0gJ2dldERyaXZlcidcclxuICAgICAgICAgICAgICAgIHdyYXBwZXJbbWV0aG9kTmFtZV0gPSBtb2R1bGVbbWV0aG9kTmFtZV0uYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHByaXZhdGUgbWV0aG9kcyBhbmQgZXZlbnQgaGFuZGxlcnNcclxuICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kTmFtZS5pbmRleE9mKCdfJykgPT09IDAgfHwgbWV0aG9kTmFtZS5pbmRleE9mKCdvbicpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobmFtZSwgbWV0aG9kTmFtZSwgYXJncykpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlW21ldGhvZE5hbWVdLmFwcGx5KG1vZHVsZSwgYXJncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvckhlbHBlci5nZXRPeHlnZW5FcnJvcihlLCBuYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGludGVybmFsIF9nZXRDYXBhYmlsaXRpZXMgbWV0aG9kIGZvciBpbnRlcm5hbCBPeHlnZW4gQ29yZSB1c2VcclxuICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgX2dldENhcGFiaWxpdGllcyBtZXRob2Qgd29uJ3QgYmUgdmlzaWJsZSBpbiB0aGUgdGVzdCByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2dldENhcGFiaWxpdGllcycpIHtcclxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyWydfZ2V0Q2FwYWJpbGl0aWVzJ10gPSBtZXRob2QuYmluZChtb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd3JhcHBlclttZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl9jb21tYW5kV3JhcHBlcihtZXRob2ROYW1lLCBhcmdzLCBtb2R1bGUsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE94RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ1Rocm93aW5nIGFnYWluOicsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9ySGVscGVyLmdldE94eWdlbkVycm9yKGUsIG5hbWUsIG1ldGhvZE5hbWUsIGFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgX2NvbW1hbmRXcmFwcGVyKGNtZE5hbWUsIGNtZEFyZ3MsIG1vZHVsZSwgbW9kdWxlTmFtZSkge1xyXG4gICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGVbY21kTmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXR2YWwgPSBudWxsO1xyXG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgY21kRm4gPSBtb2R1bGVbY21kTmFtZV07XHJcbiAgICAgICAgY29uc3QgcHVibGljTWV0aG9kID0gIWNtZE5hbWUuc3RhcnRzV2l0aCgnXycpICYmIGNtZE5hbWUgIT09ICdkaXNwb3NlJztcclxuXHJcbiAgICAgICAgLy8gZGVsYXkgdGhlIGNvbW1hbmQgZXhlY3V0aW9uIGlmIHJlcXVpcmVkXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm9wdHMuZGVsYXkgJiZcclxuICAgICAgICAgICAgcHVibGljTWV0aG9kICYmXHJcbiAgICAgICAgICAgIGNtZE5hbWUgIT09ICdpbml0JyAmJlxyXG4gICAgICAgICAgICBjbWROYW1lICE9PSAndHJhbnNhY3Rpb24nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGRlYXN5bmMuc2xlZXAodGhpcy5vcHRzLmRlbGF5ICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aHJvdyBpZiBhIGNvbW1hbmQgZXhlY3V0ZWQgb24gdW5pdGlhbGl6ZWQgbW9kdWxlIChleGNlcHQgaW50ZXJuYWwgbWV0aG9kcyBhbmQgYSBmZXcgb3RoZXIpXHJcbiAgICAgICAgaWYgKCFtb2R1bGUuaXNJbml0aWFsaXplZCAmJiBwdWJsaWNNZXRob2QgJiYgY21kTmFtZSAhPT0gJ2luaXQnICYmIGNtZE5hbWUgIT09ICd0cmFuc2FjdGlvbicpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLk1PRFVMRV9OT1RfSU5JVElBTElaRURfRVJST1IsICdNaXNzaW5nICcgKyBtb2R1bGVOYW1lICsgJy5pbml0KCknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlY3R5cHQgYXJndW1lbnRzXHJcbiAgICAgICAgbGV0IGRlY3J5cHRlZEFyZ3MgPSB0aGlzLl9nZXREZWNyeXB0ZWRBcmdzRm9yQXBwbHkoY21kQXJncywgbW9kdWxlTmFtZSk7XHJcbiAgICAgICAgZGVjcnlwdGVkQXJncyA9IHRoaXMuX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGRlY3J5cHRlZEFyZ3MpO1xyXG5cclxuICAgICAgICAvLyByZXBsYWNlIHBhcmFtZXRlcnMgaW4gbWV0aG9kIGFyZ3VtZW50cyB3aXRoIGNvcnJlc3BvbmRpbmcgdmFsdWVzXHJcbiAgICAgICAgY21kQXJncyA9IHRoaXMuX3BvcHVsYXRlUGFyYW1ldGVyc1ZhbHVlKGNtZEFyZ3MpO1xyXG4gICAgICAgIC8vIHN0YXJ0IG1lYXN1cmluZyBtZXRob2QgZXhlY3V0aW9uIHRpbWVcclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgIC8vIGFkZCBjb21tYW5kIGxvY2F0aW9uIGluZm9ybWF0aW9uIChlLmcuIGZpbGUgbmFtZSBhbmQgY29tbWFuZCBsaW5lKVxyXG4gICAgICAgIGxldCBjbWRMb2NhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgc3RlcCByZXN1bHQgaWRcclxuICAgICAgICBjb25zdCBzdGVwUmVzdWx0SWQgPSB2MSgpO1xyXG4gICAgICAgIC8vIGRvIG5vdCByZXBvcnQgcmVzdWx0cyBvciBsaW5lIHVwZGF0ZXMgb24gaW50ZXJuYWwgbWV0aG9kcyAoc3RhcnRlZCB3aXRoICdfJylcclxuICAgICAgICBpZiAocHVibGljTWV0aG9kKSB7XHJcbiAgICAgICAgICAgIGNtZExvY2F0aW9uID0gdGhpcy5fZ2V0Q29tbWFuZExvY2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdEJlZm9yZUNvbW1hbmQoc3RlcFJlc3VsdElkLCBjbWROYW1lLCBtb2R1bGVOYW1lLCBjbWRGbiwgY21kQXJncywgdGhpcy5jdHgsIGNtZExvY2F0aW9uLCBzdGFydFRpbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0V4ZWN1dGluZzogJyArIG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncykpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBlbWl0IGJlZm9yZSBldmVudHNcclxuICAgICAgICAgICAgaWYgKGNtZE5hbWUgPT09ICdkaXNwb3NlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd3JhcEFzeW5jKHRoaXMuX2NhbGxTZXJ2aWNlc09uTW9kdWxlV2lsbERpc3Bvc2UpLmFwcGx5KHRoaXMsIFttb2R1bGVdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmV0dmFsUHJvbWlzZSA9IHRoaXMuX3dyYXBBc3luYyhtb2R1bGVbY21kTmFtZV0pLmFwcGx5KG1vZHVsZSwgZGVjcnlwdGVkQXJncyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmV0dmFsUHJvbWlzZSAmJiByZXR2YWxQcm9taXNlLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlRG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHZhbFByb21pc2UudGhlbigodmFsdWUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZURvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZURvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIXByb21pc2VEb25lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHZhbCA9IHJldHZhbFByb21pc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjbWROYW1lID09PSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3dyYXBBc3luYyh0aGlzLl9jYWxsU2VydmljZXNPbk1vZHVsZUluaXRpYWxpemVkKS5hcHBseSh0aGlzLCBbbW9kdWxlXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoZSAmJiBlLm1lc3NhZ2UgJiYgdHlwZW9mIGUubWVzc2FnZSA9PT0gJ3N0cmluZycgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdpbnZhbGlkIHNlc3Npb24gaWQnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIGVycm9yIG9jdXJyZWQgYWZ0ZXIgdGhlIG1vZHVsZSB3YXMgZGlzcG9zZWQgKG9yIGluIGEgcHJvY2VzcyBvZiBiZWluZyBkaXNwb3NlZClcclxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdCBmb3IgaW5pdCBtZXRob2RzIG9mIGNvdXJzZVxyXG4gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPT09ICdib29sZWFuJyAmJiAhbW9kdWxlLmlzSW5pdGlhbGl6ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgY21kTmFtZSAhPT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnPT09PSBlcnJvciA9PT09JywgZSlcclxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JIZWxwZXIuZ2V0T3h5Z2VuRXJyb3IoZSwgbW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcblxyXG4gICAgICAgIGxldCBzdGVwUmVzdWx0O1xyXG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FpdElkID0gK25ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dhaXRTdGVwUmVzdWx0TGlzdC5wdXNoKHdhaXRJZCk7XHJcblxyXG4gICAgICAgICAgICBzdGVwUmVzdWx0ID0gdGhpcy5fZ2V0U3RlcFJlc3VsdChtb2R1bGUsIG1vZHVsZU5hbWUsIGNtZE5hbWUsIGNtZEFyZ3MsIGNtZExvY2F0aW9uLCBzdGFydFRpbWUsIGVuZFRpbWUsIHJldHZhbCwgZXJyb3IpO1xyXG4gICAgICAgICAgICBzdGVwUmVzdWx0LmlkID0gc3RlcFJlc3VsdElkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3QuaW5kZXhPZih3YWl0SWQpO1xyXG4gICAgICAgICAgICB0aGlzLl93YWl0U3RlcFJlc3VsdExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vc3RlcFJlc3VsdC5sb2NhdGlvbiA9IGNtZExvY2F0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTdG9yZS5zdGVwcy5wdXNoKHN0ZXBSZXN1bHQpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRBZnRlckNvbW1hbmQoY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIHRoaXMuY3R4LCBjbWRMb2NhdGlvbiwgZW5kVGltZSwgc3RlcFJlc3VsdCk7XHJcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLmlzRmF0YWwgJiYgIXRoaXMub3B0cy5jb250aW51ZU9uRXJyb3IpIHtcclxuICAgICAgICAgICAgaWYgKCFlcnJvci5sb2NhdGlvbiAmJiBjbWRMb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubG9jYXRpb24gPSBjbWRMb2NhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQgJiYgc3RlcFJlc3VsdC5mYWlsdXJlICYmIHN0ZXBSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IubG9jYXRpb24gPSBzdGVwUmVzdWx0LmZhaWx1cmUubG9jYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFwdWJsaWNNZXRob2QpIHtcclxuICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgfVxyXG5cclxuICAgIF93cmFwQXN5bmMgKGZuLCBjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gY29udGV4dCB8fCB0aGlzO1xyXG4gICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBjb2RlIGlzIG5vdCBydW5uaW5nIGluc2lkZSB0aGUgRmliZXIgY29udGV4dCwgdGhlbiBydW4gYXN5bmMgY29kZSBhcyBzeW5jIHVzaW5nIGRlYXN5bmMgbW9kdWxlXHJcbiAgICAgICAgICAgIGlmICghRmliZXIuY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmluYWxWYWwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgJiYgcmV0dmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmV0dmFsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxWYWwgPSB2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsVmFsID0gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVhc3luYy5sb29wV2hpbGUoKCkgPT4gIWRvbmUgJiYgIWVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUubWVzc2FnZSAmJiB0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ3JlYWR5U3RhdGUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHRoaXMgZXJyb3IgYXMgaXQgdXN1YWxseSBoYXBwZW5zIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gT3h5Z2VuIGlzIGRpc3Bvc2VkIGFuZCBwcm9jZXNzIGlzIGJlaW5nIGtpbGxlZFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWFzeW5jLmxvb3BXaGlsZSgpIGZhaWxlZDonLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxWYWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJldHZhbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaWYgd2UgYXJlIGluc2lkZSB0aGUgRmliZXIgY29udGV4dCwgdGhlbiB1c2UgRmliZXIncyBGdXR1cmVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1dHVyZSA9IG5ldyBGdXR1cmUoKTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseShzZWxmLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnRoZW4oKHZhbCkgPT4gZnV0dXJlLnJldHVybih2YWwpLCAoZXJyKSA9PiBmdXR1cmUudGhyb3coZXJyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1dHVyZS53YWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSAmJiAhZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHJpZXZlIGN1cnJlbnQgbGluZSBhbmQgZnVuY3Rpb24gbmFtZSBmcm9tIHRoZSBjYWxsIHN0YWNrXHJcbiAgICBfZ2V0Q29tbWFuZExvY2F0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHN0YWNrID0gX19zdGFjaztcclxuICAgICAgICBsZXQgY2FsbGVyID0gbnVsbDtcclxuICAgICAgICBmb3IgKGxldCBjYWxsIG9mIHN0YWNrKSB7XHJcbiAgICAgICAgICAgIGlmIChfX2ZpbGVuYW1lID09PSBjYWxsLmdldEZpbGVOYW1lKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0aGUgZmlyc3QgY2FsbGVyLCB3aGljaCBpcyBub3QgdGhlIGN1cnJlbnQgZmlsZVxyXG4gICAgICAgICAgICBjYWxsZXIgPSBjYWxsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7Y2FsbGVyLmdldEZpbGVOYW1lKCl9OiR7Y2FsbGVyLmdldExpbmVOdW1iZXIoKSArIHRoaXMuYWRqdXN0U2NyaXB0TGluZX06JHtjYWxsZXIuZ2V0Q29sdW1uTnVtYmVyKCl9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFN0ZXBSZXN1bHQobW9kdWxlLCBtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBhcmdzLCBsb2NhdGlvbiwgc3RhcnRUaW1lLCBlbmRUaW1lLCByZXR2YWwsIGVycikge1xyXG4gICAgICAgIHZhciBzdGVwID0gbmV3IFN0ZXBSZXN1bHQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPVxyXG4gICAgICAgICAgICAobW9kdWxlLmdldFN0ZXBEaXNwbGF5TmFtZSAmJiBtb2R1bGUuZ2V0U3RlcERpc3BsYXlOYW1lKG1ldGhvZE5hbWUsIGFyZ3MsIHJldHZhbCwgZXJyKSkgfHxcclxuICAgICAgICAgICAgb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuXHJcbiAgICAgICAgc3RlcC5uYW1lID0gZGlzcGxheU5hbWU7XHJcbiAgICAgICAgc3RlcC50cmFuc2FjdGlvbiA9IGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSB8fCBudWxsOyAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgaGVyZSBpZiBpdCdzIGFscmVhZHkgcG9wdWxhdGVkIGluIHJzP1xyXG4gICAgICAgIHN0ZXAubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAvLyBtb2R1bGUuZXh0cmEgaXMgcmVzZXRlZCBmb3IgZWFjaCBzdGVwLCBzbyB3ZSBtdXN0IGNsb25lIGl0XHJcbiAgICAgICAgc3RlcC5leHRyYSA9IHsgLi4ubW9kdWxlLmV4dHJhIH07XHJcbiAgICAgICAgaWYgKG1vZHVsZS5leHRyYSAmJiBtb2R1bGUuZXh0cmEuaHR0cCkge1xyXG4gICAgICAgICAgICBzdGVwLnR5cGUgPSAnaHR0cCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgc3RlcCBzdGF0dXNcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5pc0ZhdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcC5zdGF0dXMgPSBTVEFUVVMuV0FSTklORztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChtb2R1bGVOYW1lID09PSAnbG9nJyAmJiBtZXRob2ROYW1lID09PSAnd2FybicpIHtcclxuICAgICAgICAgICAgICAgIHN0ZXAuc3RhdHVzID0gU1RBVFVTLldBUk5JTkc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLnN0YXR1cyA9IFNUQVRVUy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0ZXAuYWN0aW9uID0gKHR5cGVvZiBtb2R1bGUuX2lzQWN0aW9uID09PSAnZnVuY3Rpb24nID8gbW9kdWxlLl9pc0FjdGlvbihtZXRob2ROYW1lKSA6IGZhbHNlKTtcclxuICAgICAgICBzdGVwLnN0YXJ0VGltZSA9IHN0YXJ0VGltZTtcclxuICAgICAgICBzdGVwLmVuZFRpbWUgPSBlbmRUaW1lO1xyXG4gICAgICAgIHN0ZXAuZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZS5fZ2V0U3RhdHMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IG1vZHVsZS5fZ2V0U3RhdHMobWV0aG9kTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RlcC5zdGF0cyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICBpZiAoZXJyICYmIGVyci50eXBlICYmIGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVNTRVJUX1BBU1NFRCkge1xyXG4gICAgICAgICAgICAgICAgLy9pZ25vcmVcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgZXJyLnR5cGUgJiYgKGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIHx8IGVyci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuQVBQSVVNX1NFU1NJT05fVElNRU9VVCkpIHtcclxuICAgICAgICAgICAgICAgIC8vaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUgPSBlcnJvckhlbHBlci5nZXRGYWlsdXJlRnJvbUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICBzdGVwLmZhaWx1cmUubG9jYXRpb24gPSBsb2NhdGlvbjtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgbW9kdWxlIGRlY2lkZSB3aGV0aGVyIGEgc2NyZWVuc2hvdCBzaG91bGQgYmUgdGFrZW4gb24gZXJyb3Igb3Igbm90XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50ID09PSAnZnVuY3Rpb24nICYmICF0aGlzLm9wdHMuZGlzYWJsZVNjcmVlbnNob3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLnNjcmVlbnNob3QgPSBtb2R1bGUuX3Rha2VTY3JlZW5zaG90U2lsZW50KG1ldGhvZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSB1bmFibGUgdG8gZ2V0IGEgc2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQgKGluIFBlcmZlY3RvIENsb3VkLCB0aGUgc2NyZWVuc2hvdCBtaWdodCBub3QgYmUgaW1taWRpYXRlbHkgYXZhaWxhYmxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLnNsZWVwKDEwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbW9kdWxlLl90YWtlU2NyZWVuc2hvdFNpbGVudChtZXRob2ROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIHRvIHVzZXIgdGhhdCBhbiBhdHRlbXB0IHRvIHRha2UgYSBzY3JlZW5zaG90IGhhcyBmYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RlcDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZGlzcG9zZVNlcnZpY2VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlcyB8fCB0eXBlb2YgdGhpcy5zZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2VydmljZS5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNlcnZpY2UuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgc2VydmljZSBkaXNwb3NhbCBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGlzcG9zZSBzZXJ2aWNlICcke2tleX0nOmAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9kaXNwb3NlTW9kdWxlcyhzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMgfHwgdHlwZW9mIHRoaXMubW9kdWxlcyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5tb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlc1trZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1vZC5kaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VSZXN1bHQgPSBtb2QuZGlzcG9zZShzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNwb3NlUmVzdWx0ICYmIHR5cGVvZiBkaXNwb3NlUmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgYSBwcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpc3Bvc2VSZXN1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBtb2R1bGUgZGlzcG9zYWwgZXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkaXNwb3NlIG1vZHVsZSAnJHtrZXl9JzogYCwgZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvKlxyXG4gICAgICogU2VydmljZXMgRXZlbnQgRW1pdHRlcnNcclxuICAgICAqL1xyXG4gICAgX2NhbGxTZXJ2aWNlc09uTW9kdWxlTG9hZGVkKG1vZHVsZSkge1xyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uTW9kdWxlTG9hZGVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlTG9hZGVkXCIgbWV0aG9kIG9mICR7c2VydmljZU5hbWV9IHNlcnZpY2UuYCwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhc3luYyBfY2FsbFNlcnZpY2VzT25Nb2R1bGVJbml0aWFsaXplZChtb2R1bGUpIHtcclxuICAgICAgICBmb3IgKGxldCBzZXJ2aWNlTmFtZSBpbiB0aGlzLnNlcnZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2VzW3NlcnZpY2VOYW1lXTtcclxuICAgICAgICAgICAgaWYgKCFzZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgc2VydmljZS5vbk1vZHVsZUluaXRpYWxpemVkKG1vZHVsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlSW5pdGlhbGl6ZWRcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFzeW5jIF9jYWxsU2VydmljZXNPbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICghdGhpcyB8fCAhdGhpcy5zZXJ2aWNlcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHNlcnZpY2VOYW1lIGluIHRoaXMuc2VydmljZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuc2VydmljZXNbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIXNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZS5vbk1vZHVsZVdpbGxEaXNwb3NlKG1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gY2FsbCBcIm9uTW9kdWxlV2lsbERpc3Bvc2VcIiBtZXRob2Qgb2YgJHtzZXJ2aWNlTmFtZX0gc2VydmljZS5gLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIF9wb3B1bGF0ZVBhcmFtZXRlcnNWYWx1ZShhcmdzKSB7XHJcbiAgICAgICAgaWYgKCFhcmdzIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IGFyZ3MubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IF9uZXdBcmdzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYXJnIG9mIGFyZ3MpIHtcclxuICAgICAgICAgICAgX25ld0FyZ3MucHVzaCh0aGlzLl9yZXBsYWNlUGFyYW1ldGVySW5Bcmd1bWVudChhcmcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9uZXdBcmdzO1xyXG4gICAgfVxyXG4gICAgX3JlcGxhY2VQYXJhbWV0ZXJJbkFyZ3VtZW50KGFyZykge1xyXG4gICAgICAgIGlmIChhcmcgJiYgdHlwZW9mIGFyZy5nZXREZWNyeXB0UmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXJnIHx8IHR5cGVvZiBhcmcgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHJlcGxhY2UgdXNlciBwYXJhbWV0ZXJzIHdpdGggdmFsdWVzXHJcbiAgICAgICAgLy8gbm90ZTogdXNlciBwYXJhbWV0ZXIgd2l0aCB0aGUgc2FtZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBlbnZpcm9ubWVudCB2YXJpYWJsZVxyXG4gICAgICAgIGZvciAobGV0IHBhcmFtTmFtZSBpbiB0aGlzLmN0eC5wYXJhbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3R4LnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShwYXJhbU5hbWUpKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbVZhbHVlID0gdGhpcy5jdHgucGFyYW1zW3BhcmFtTmFtZV07XHJcbiAgICAgICAgICAgICAgICBhcmcgPSBhcmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcJHsnICsgcGFyYW1OYW1lICsgJ30nLCAnZycpLCBwYXJhbVZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyByZXBsYWNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHZhbHVlc1xyXG4gICAgICAgIGZvciAobGV0IGVudk5hbWUgaW4gdGhpcy5jdHguZW52KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5lbnYuaGFzT3duUHJvcGVydHkoZW52TmFtZSkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVudlZhbHVlID0gdGhpcy5jdHguZW52W2Vudk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgYXJnID0gYXJnLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCR7JyArIGVudk5hbWUgKyAnfScsICdnJyksIGVudlZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG4gICAgX2dldEFsbFByb3BlcnR5TmFtZXMoIG9iaiApIHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IFtdO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKCBvYmogKS5mb3JFYWNoKGZ1bmN0aW9uICggcHJvcCApIHtcclxuICAgICAgICAgICAgICAgIGlmICggcHJvcHMuaW5kZXhPZiggcHJvcCApID09PSAtMSApIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKCBwcm9wICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cclxuICAgICAgICB9IHdoaWxlICggb2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKCBvYmogKSApO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrU3RlcFJlc3VsdChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2FpdFN0ZXBSZXN1bHRMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2hlY2tTdGVwUmVzdWx0KHJlc29sdmUsIHJlamVjdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF93YWl0U3RlcFJlc3VsdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0ZXBSZXN1bHQocmVzb2x2ZSwgcmVqZWN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0RGVjcnlwdGVkQXJnc0ZvckFwcGx5KGFyZ3MsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoIWFyZ3MgfHwgIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXJncztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgX25ld0FyZ3MgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhcmcgb2YgYXJncykge1xyXG4gICAgICAgICAgICBfbmV3QXJncy5wdXNoKHRoaXMuX2RlY3J5cHRQYXJhbWV0ZXJGb3JBcHBseUluQXJndW1lbnQoYXJnLCBtb2R1bGVOYW1lKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfbmV3QXJncztcclxuICAgIH1cclxuXHJcbiAgICBfZGVjcnlwdFBhcmFtZXRlckZvckFwcGx5SW5Bcmd1bWVudChhcmcsIG1vZHVsZU5hbWUpIHtcclxuICAgICAgICBpZiAoYXJnICYmIHR5cGVvZiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PT0gJ2xvZycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnRU5DUllQVEVEJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcmcuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXJnO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -58,4 +58,4 @@ class OxygenEvents extends _events.EventEmitter {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
exports.default = OxygenEvents;
|
|
61
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbkV2ZW50cy5qcyJdLCJuYW1lcyI6WyJPeHlnZW5FdmVudHMiLCJFdmVudEVtaXR0ZXIiLCJjb25zdHJ1Y3RvciIsImVtaXRCZWZvcmVDb21tYW5kIiwic3RlcFJlc3VsdElkIiwiY21kTmFtZSIsIm1vZHVsZU5hbWUiLCJjbWRGbiIsImNtZEFyZ3MiLCJjdHgiLCJsb2NhdGlvbiIsInN0YXJ0VGltZSIsImVtaXQiLCJpZCIsIm5hbWUiLCJtb2R1bGUiLCJhcmdzIiwic2lnbmF0dXJlIiwib3h1dGlsIiwiZ2V0TWV0aG9kU2lnbmF0dXJlIiwidGltZSIsImVtaXRBZnRlckNvbW1hbmQiLCJlbmRUaW1lIiwicmVzdWx0IiwiZW1pdExvZyIsImxldmVsIiwibXNnIiwic3JjIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFFZSxNQUFNQSxZQUFOLFNBQTJCQyxvQkFBM0IsQ0FBd0M7QUFDbkRDLEVBQUFBLFdBQVcsR0FBSTtBQUNYO0FBQ0g7O0FBRURDLEVBQUFBLGlCQUFpQixDQUFDQyxZQUFELEVBQWVDLE9BQWYsRUFBd0JDLFVBQXhCLEVBQW9DQyxLQUFwQyxFQUEyQ0MsT0FBM0MsRUFBb0RDLEdBQXBELEVBQXlEQyxRQUF6RCxFQUFtRUMsU0FBbkUsRUFBOEU7QUFDM0YsU0FBS0MsSUFBTCxDQUFVLGdCQUFWLEVBQTRCO0FBQ3hCQyxNQUFBQSxFQUFFLEVBQUVULFlBRG9CO0FBRXhCVSxNQUFBQSxJQUFJLEVBQUVULE9BRmtCO0FBR3hCVSxNQUFBQSxNQUFNLEVBQUVULFVBSGdCO0FBSXhCVSxNQUFBQSxJQUFJLEVBQUVSLE9BSmtCO0FBS3hCUyxNQUFBQSxTQUFTLEVBQUVDLGNBQU9DLGtCQUFQLENBQTBCYixVQUExQixFQUFzQ0QsT0FBdEMsRUFBK0NHLE9BQS9DLENBTGE7QUFNeEJDLE1BQUFBLEdBQUcsRUFBRUEsR0FObUI7QUFPeEJXLE1BQUFBLElBQUksRUFBRVQsU0FQa0I7QUFReEJELE1BQUFBLFFBQVEsRUFBRUE7QUFSYyxLQUE1QjtBQVVIOztBQUVEVyxFQUFBQSxnQkFBZ0IsQ0FBQ2hCLE9BQUQsRUFBVUMsVUFBVixFQUFzQkMsS0FBdEIsRUFBNkJDLE9BQTdCLEVBQXNDQyxHQUF0QyxFQUEyQ0MsUUFBM0MsRUFBcURZLE9BQXJELEVBQThEQyxNQUE5RCxFQUFzRTtBQUNsRixTQUFLWCxJQUFMLENBQVUsZUFBVixFQUEyQjtBQUN2QkMsTUFBQUEsRUFBRSxFQUFFVSxNQUFNLENBQUNWLEVBRFk7QUFFdkJDLE1BQUFBLElBQUksRUFBRVQsT0FGaUI7QUFHdkJVLE1BQUFBLE1BQU0sRUFBRVQsVUFIZTtBQUl2QlUsTUFBQUEsSUFBSSxFQUFFUixPQUppQjtBQUt2QlMsTUFBQUEsU0FBUyxFQUFFQyxjQUFPQyxrQkFBUCxDQUEwQmIsVUFBMUIsRUFBc0NELE9BQXRDLEVBQStDRyxPQUEvQyxDQUxZO0FBTXZCQyxNQUFBQSxHQUFHLEVBQUVBLEdBTmtCO0FBT3ZCVyxNQUFBQSxJQUFJLEVBQUVFLE9BUGlCO0FBUXZCWixNQUFBQSxRQUFRLEVBQUVBLFFBUmE7QUFTdkJhLE1BQUFBLE1BQU0sRUFBRUE7QUFUZSxLQUEzQjtBQVdIOztBQUVEQyxFQUFBQSxPQUFPLENBQUNKLElBQUQsRUFBT0ssS0FBUCxFQUFjQyxHQUFkLEVBQW1CVixJQUFuQixFQUF5QlcsR0FBekIsRUFBOEI7QUFDakMsU0FBS2YsSUFBTCxDQUFVLEtBQVYsRUFBaUI7QUFDYlEsTUFBQUEsSUFBSSxFQUFFQSxJQURPO0FBRWJLLE1BQUFBLEtBQUssRUFBRUEsS0FGTTtBQUdiRyxNQUFBQSxPQUFPLEVBQUVGLEdBSEk7QUFJYlYsTUFBQUEsSUFBSSxFQUFFQSxJQUpPO0FBS2JXLE1BQUFBLEdBQUcsRUFBRUE7QUFMUSxLQUFqQjtBQU9IOztBQXhDa0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE94eWdlbkV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvciAoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbWl0QmVmb3JlQ29tbWFuZChzdGVwUmVzdWx0SWQsIGNtZE5hbWUsIG1vZHVsZU5hbWUsIGNtZEZuLCBjbWRBcmdzLCBjdHgsIGxvY2F0aW9uLCBzdGFydFRpbWUpIHtcclxuICAgICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6YmVmb3JlJywge1xyXG4gICAgICAgICAgICBpZDogc3RlcFJlc3VsdElkLFxyXG4gICAgICAgICAgICBuYW1lOiBjbWROYW1lLFxyXG4gICAgICAgICAgICBtb2R1bGU6IG1vZHVsZU5hbWUsXHJcbiAgICAgICAgICAgIGFyZ3M6IGNtZEFyZ3MsXHJcbiAgICAgICAgICAgIHNpZ25hdHVyZTogb3h1dGlsLmdldE1ldGhvZFNpZ25hdHVyZShtb2R1bGVOYW1lLCBjbWROYW1lLCBjbWRBcmdzKSxcclxuICAgICAgICAgICAgY3R4OiBjdHgsXHJcbiAgICAgICAgICAgIHRpbWU6IHN0YXJ0VGltZSxcclxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXRBZnRlckNvbW1hbmQoY21kTmFtZSwgbW9kdWxlTmFtZSwgY21kRm4sIGNtZEFyZ3MsIGN0eCwgbG9jYXRpb24sIGVuZFRpbWUsIHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDphZnRlcicsIHtcclxuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogY21kTmFtZSxcclxuICAgICAgICAgICAgbW9kdWxlOiBtb2R1bGVOYW1lLFxyXG4gICAgICAgICAgICBhcmdzOiBjbWRBcmdzLFxyXG4gICAgICAgICAgICBzaWduYXR1cmU6IG94dXRpbC5nZXRNZXRob2RTaWduYXR1cmUobW9kdWxlTmFtZSwgY21kTmFtZSwgY21kQXJncyksXHJcbiAgICAgICAgICAgIGN0eDogY3R4LFxyXG4gICAgICAgICAgICB0aW1lOiBlbmRUaW1lLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXHJcbiAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVtaXRMb2codGltZSwgbGV2ZWwsIG1zZywgYXJncywgc3JjKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdsb2cnLCB7XHJcbiAgICAgICAgICAgIHRpbWU6IHRpbWUsXHJcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbCxcclxuICAgICAgICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICAgICAgICBhcmdzOiBhcmdzLFxyXG4gICAgICAgICAgICBzcmM6IHNyYyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -70,4 +70,4 @@ class OxygenModule {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
exports.default = OxygenModule;
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL094eWdlbk1vZHVsZS5qcyJdLCJuYW1lcyI6WyJPeHlnZW5Nb2R1bGUiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjb250ZXh0IiwicnMiLCJsb2dnZXIiLCJtb2R1bGVzIiwic2VydmljZXMiLCJfdGhpcyIsImN0eCIsIl9pc0luaXRpYWxpemVkIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2V4dHJhIiwibmFtZSIsIkVycm9yIiwiaXNJbml0aWFsaXplZCIsImV4dHJhIiwiaW5pdCIsImRpc3Bvc2UiLCJnZXRTdGVwRGlzcGxheU5hbWUiLCJtZXRob2QiLCJyZXR2YWwiLCJlcnJvciIsInVuZGVmaW5lZCIsIm9uQmVmb3JlQ2FzZSIsIm9uQWZ0ZXJDYXNlIiwiYWRkQ29tbWFuZCIsImZ1bmMiLCJ0aGlzQXJnIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRQcm90b3R5cGVPZiIsInZhbHVlIiwiYmluZCIsImFkZFN1Yk1vZHVsZSIsInN1Ym1vZHVsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWUsTUFBTUEsWUFBTixDQUFtQjtBQUM5QkMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVBQXVCQyxNQUF2QixFQUErQkMsT0FBL0IsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQ3pELFNBQUtDLEtBQUwsR0FBYSxJQUFiO0FBQ0EsU0FBS04sT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS08sR0FBTCxHQUFXTixPQUFYO0FBQ0EsU0FBS0MsRUFBTCxHQUFVQSxFQUFWO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQkEsUUFBaEI7QUFDQSxTQUFLRyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0EsU0FBS0Msa0JBQUwsR0FBMEIsS0FBMUI7QUFDQSxTQUFLQyxNQUFMLEdBQWMsRUFBZDtBQUNIOztBQUNPLE1BQUpDLElBQUksR0FBRztBQUNQLFVBQU1DLEtBQUssQ0FBQywyREFBRCxDQUFYO0FBQ0g7O0FBQ2dCLE1BQWJDLGFBQWEsR0FBRztBQUNoQixXQUFPLEtBQUtMLGNBQVo7QUFDSDs7QUFDUSxNQUFMTSxLQUFLLEdBQUc7QUFDUixXQUFPLEtBQUtKLE1BQVo7QUFDSDs7QUFDREssRUFBQUEsSUFBSSxHQUFHO0FBQ0gsU0FBS1AsY0FBTCxHQUFzQixJQUF0QjtBQUNIOztBQUNEUSxFQUFBQSxPQUFPLEdBQUc7QUFDTixRQUFJLEtBQUtQLGtCQUFMLElBQTJCLEtBQS9CLEVBQXNDO0FBQ2xDLFdBQUtELGNBQUwsR0FBc0IsS0FBdEI7QUFDSDtBQUNKOztBQUNEUyxFQUFBQSxrQkFBa0IsQ0FBQ0MsTUFBRCxFQUFTQyxNQUFULEVBQWlCQyxLQUFqQixFQUF3Qk4sS0FBeEIsRUFBK0I7QUFDN0MsV0FBT08sU0FBUDtBQUNIOztBQUNEQyxFQUFBQSxZQUFZLENBQUNyQixPQUFELEVBQVUsQ0FFckI7O0FBQ0RzQixFQUFBQSxXQUFXLENBQUNILEtBQUQsRUFBUSxDQUVsQjs7QUFDREksRUFBQUEsVUFBVSxDQUFDYixJQUFELEVBQU9jLElBQVAsRUFBYUMsT0FBYixFQUFzQjtBQUM1QixRQUFJLENBQUNBLE9BQUwsRUFBYztBQUNWQSxNQUFBQSxPQUFPLEdBQUcsSUFBVjtBQUNIOztBQUNEQyxJQUFBQSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JELE1BQU0sQ0FBQ0UsY0FBUCxDQUFzQixJQUF0QixDQUF0QixFQUFtRGxCLElBQW5ELEVBQXlEO0FBQ3JEbUIsTUFBQUEsS0FBSyxFQUFFTCxJQUFJLENBQUNNLElBQUwsQ0FBVUwsT0FBVjtBQUQ4QyxLQUF6RDtBQUdIOztBQUNETSxFQUFBQSxZQUFZLENBQUNyQixJQUFELEVBQU9zQixTQUFQLEVBQWtCO0FBQzFCTixJQUFBQSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JELE1BQU0sQ0FBQ0UsY0FBUCxDQUFzQixJQUF0QixDQUF0QixFQUFtRGxCLElBQW5ELEVBQXlEO0FBQ3JEbUIsTUFBQUEsS0FBSyxFQUFFRztBQUQ4QyxLQUF6RDtBQUdIOztBQW5ENkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICB0aGlzLl90aGlzID0gdGhpcztcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgICAgIHRoaXMuY3R4ID0gY29udGV4dDtcclxuICAgICAgICB0aGlzLnJzID0gcnM7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgICAgICB0aGlzLnNlcnZpY2VzID0gc2VydmljZXM7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZXh0cmEgPSB7fTtcclxuICAgIH1cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdcIm5hbWVcIiBwcm9wZXJ0eSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHRoZSBkZXJpdmluZyBjbGFzcycpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5pdGlhbGl6ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgZXh0cmEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhO1xyXG4gICAgfVxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2Fsd2F5c0luaXRpYWxpemVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXRTdGVwRGlzcGxheU5hbWUobWV0aG9kLCByZXR2YWwsIGVycm9yLCBleHRyYSkge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBvbkJlZm9yZUNhc2UoY29udGV4dCkge1xyXG5cclxuICAgIH1cclxuICAgIG9uQWZ0ZXJDYXNlKGVycm9yKSB7XHJcblxyXG4gICAgfVxyXG4gICAgYWRkQ29tbWFuZChuYW1lLCBmdW5jLCB0aGlzQXJnKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzQXJnKSB7XHJcbiAgICAgICAgICAgIHRoaXNBcmcgPSB0aGlzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCBuYW1lLCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jLmJpbmQodGhpc0FyZylcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGFkZFN1Yk1vZHVsZShuYW1lLCBzdWJtb2R1bGUpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLCBuYW1lLCB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBzdWJtb2R1bGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdfQ==
|