oxygen-cli 1.40.1 → 1.40.2-beta.1
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 +1742 -1742
- 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 +2 -1
- package/build/index.js +1 -1
- package/build/lib/cli-util.js +5 -1
- 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 +9 -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-mongo.js +302 -0
- 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 +13 -5
- package/build/reporter/ReporterBase.js +1 -1
- package/build/reporter/WebSocketReporter.js +1 -1
- 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/log.txt +1614 -0
- package/package.json +139 -137
- package/reports/2025-06-08_231627/report.html +440 -0
- package/reports/2025-06-09_223615/report.html +440 -0
- package/transpiled/mongodb/etc/prepare.js +18 -0
- package/transpiled/mongodb/lib/admin.js +182 -0
- package/transpiled/mongodb/lib/beta.js +26 -0
- package/transpiled/mongodb/lib/bson.js +220 -0
- package/transpiled/mongodb/lib/bulk/common.js +1041 -0
- package/transpiled/mongodb/lib/bulk/ordered.js +76 -0
- package/transpiled/mongodb/lib/bulk/unordered.js +102 -0
- package/transpiled/mongodb/lib/change_stream.js +517 -0
- package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +329 -0
- package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +779 -0
- package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +95 -0
- package/transpiled/mongodb/lib/client-side-encryption/errors.js +171 -0
- package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +98 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +34 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +186 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +29 -0
- package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +58 -0
- package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +505 -0
- package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +63 -0
- package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +167 -0
- package/transpiled/mongodb/lib/cmap/auth/gssapi.js +207 -0
- package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +193 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +181 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +101 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +81 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +174 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +59 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +58 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +138 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +42 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +71 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +34 -0
- package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +111 -0
- package/transpiled/mongodb/lib/cmap/auth/plain.js +43 -0
- package/transpiled/mongodb/lib/cmap/auth/providers.js +22 -0
- package/transpiled/mongodb/lib/cmap/auth/scram.js +318 -0
- package/transpiled/mongodb/lib/cmap/auth/x509.js +61 -0
- package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +266 -0
- package/transpiled/mongodb/lib/cmap/commands.js +605 -0
- package/transpiled/mongodb/lib/cmap/connect.js +418 -0
- package/transpiled/mongodb/lib/cmap/connection.js +673 -0
- package/transpiled/mongodb/lib/cmap/connection_pool.js +688 -0
- package/transpiled/mongodb/lib/cmap/connection_pool_events.js +254 -0
- package/transpiled/mongodb/lib/cmap/errors.js +128 -0
- package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +278 -0
- package/transpiled/mongodb/lib/cmap/metrics.js +67 -0
- package/transpiled/mongodb/lib/cmap/stream_description.js +74 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +196 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +19 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +144 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +278 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +376 -0
- package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +49 -0
- package/transpiled/mongodb/lib/collection.js +852 -0
- package/transpiled/mongodb/lib/connection_string.js +1452 -0
- package/transpiled/mongodb/lib/constants.js +162 -0
- package/transpiled/mongodb/lib/cursor/abstract_cursor.js +1082 -0
- package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +227 -0
- package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +136 -0
- package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +69 -0
- package/transpiled/mongodb/lib/cursor/find_cursor.js +476 -0
- package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +48 -0
- package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +46 -0
- package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +30 -0
- package/transpiled/mongodb/lib/cursor/run_command_cursor.js +125 -0
- package/transpiled/mongodb/lib/db.js +467 -0
- package/transpiled/mongodb/lib/deps.js +174 -0
- package/transpiled/mongodb/lib/encrypter.js +129 -0
- package/transpiled/mongodb/lib/error.js +1550 -0
- package/transpiled/mongodb/lib/explain.js +122 -0
- package/transpiled/mongodb/lib/gridfs/download.js +369 -0
- package/transpiled/mongodb/lib/gridfs/index.js +240 -0
- package/transpiled/mongodb/lib/gridfs/upload.js +446 -0
- package/transpiled/mongodb/lib/index.js +975 -0
- package/transpiled/mongodb/lib/mongo_client.js +626 -0
- package/transpiled/mongodb/lib/mongo_client_auth_providers.js +98 -0
- package/transpiled/mongodb/lib/mongo_logger.js +812 -0
- package/transpiled/mongodb/lib/mongo_types.js +71 -0
- package/transpiled/mongodb/lib/operations/aggregate.js +129 -0
- package/transpiled/mongodb/lib/operations/bulk_write.js +48 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +96 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +409 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +5 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +144 -0
- package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +228 -0
- package/transpiled/mongodb/lib/operations/collections.js +49 -0
- package/transpiled/mongodb/lib/operations/command.js +102 -0
- package/transpiled/mongodb/lib/operations/count.js +60 -0
- package/transpiled/mongodb/lib/operations/create_collection.js +109 -0
- package/transpiled/mongodb/lib/operations/delete.js +134 -0
- package/transpiled/mongodb/lib/operations/distinct.js +77 -0
- package/transpiled/mongodb/lib/operations/drop.js +102 -0
- package/transpiled/mongodb/lib/operations/estimated_document_count.js +47 -0
- package/transpiled/mongodb/lib/operations/execute_operation.js +251 -0
- package/transpiled/mongodb/lib/operations/find.js +197 -0
- package/transpiled/mongodb/lib/operations/find_and_modify.js +191 -0
- package/transpiled/mongodb/lib/operations/get_more.js +84 -0
- package/transpiled/mongodb/lib/operations/indexes.js +197 -0
- package/transpiled/mongodb/lib/operations/insert.js +138 -0
- package/transpiled/mongodb/lib/operations/is_capped.js +44 -0
- package/transpiled/mongodb/lib/operations/kill_cursors.js +58 -0
- package/transpiled/mongodb/lib/operations/list_collections.js +66 -0
- package/transpiled/mongodb/lib/operations/list_databases.js +56 -0
- package/transpiled/mongodb/lib/operations/operation.js +88 -0
- package/transpiled/mongodb/lib/operations/options_operation.js +44 -0
- package/transpiled/mongodb/lib/operations/profiling_level.js +42 -0
- package/transpiled/mongodb/lib/operations/remove_user.js +35 -0
- package/transpiled/mongodb/lib/operations/rename.js +48 -0
- package/transpiled/mongodb/lib/operations/run_command.js +64 -0
- package/transpiled/mongodb/lib/operations/search_indexes/create.js +41 -0
- package/transpiled/mongodb/lib/operations/search_indexes/drop.js +51 -0
- package/transpiled/mongodb/lib/operations/search_indexes/update.js +40 -0
- package/transpiled/mongodb/lib/operations/set_profiling_level.js +70 -0
- package/transpiled/mongodb/lib/operations/stats.js +39 -0
- package/transpiled/mongodb/lib/operations/update.js +218 -0
- package/transpiled/mongodb/lib/operations/validate_collection.js +49 -0
- package/transpiled/mongodb/lib/read_concern.js +92 -0
- package/transpiled/mongodb/lib/read_preference.js +215 -0
- package/transpiled/mongodb/lib/resource_management.js +74 -0
- package/transpiled/mongodb/lib/sdam/common.js +53 -0
- package/transpiled/mongodb/lib/sdam/events.js +177 -0
- package/transpiled/mongodb/lib/sdam/monitor.js +656 -0
- package/transpiled/mongodb/lib/sdam/server.js +463 -0
- package/transpiled/mongodb/lib/sdam/server_description.js +196 -0
- package/transpiled/mongodb/lib/sdam/server_selection.js +283 -0
- package/transpiled/mongodb/lib/sdam/server_selection_events.js +112 -0
- package/transpiled/mongodb/lib/sdam/srv_polling.js +139 -0
- package/transpiled/mongodb/lib/sdam/topology.js +833 -0
- package/transpiled/mongodb/lib/sdam/topology_description.js +447 -0
- package/transpiled/mongodb/lib/sessions.js +988 -0
- package/transpiled/mongodb/lib/sort.js +123 -0
- package/transpiled/mongodb/lib/timeout.js +349 -0
- package/transpiled/mongodb/lib/transactions.js +149 -0
- package/transpiled/mongodb/lib/utils.js +1502 -0
- package/transpiled/mongodb/lib/write_concern.js +115 -0
- 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
|
@@ -29,22 +29,23 @@ var _reporterPdf = _interopRequireDefault(require("../ox_reporters/reporter-pdf"
|
|
|
29
29
|
|
|
30
30
|
var _reporterXml = _interopRequireDefault(require("../ox_reporters/reporter-xml"));
|
|
31
31
|
|
|
32
|
-
var _reporterRp = _interopRequireDefault(require("../ox_reporters/reporter-rp"));
|
|
33
|
-
|
|
34
32
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
35
33
|
|
|
36
34
|
var _status = _interopRequireDefault(require("../model/status"));
|
|
37
35
|
|
|
38
36
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
39
37
|
|
|
38
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
|
+
|
|
40
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
41
|
+
|
|
40
42
|
const Reporters = {
|
|
41
43
|
json: _reporterJson.default,
|
|
42
44
|
junit: _reporterJunit.default,
|
|
43
45
|
html: _reporterHtml.default,
|
|
44
46
|
excel: _reporterExcel.default,
|
|
45
47
|
pdf: _reporterPdf.default,
|
|
46
|
-
xml: _reporterXml.default
|
|
47
|
-
rp: _reporterRp.default
|
|
48
|
+
xml: _reporterXml.default
|
|
48
49
|
};
|
|
49
50
|
const DEFAULT_TEST_NAME = 'Oxygen Test';
|
|
50
51
|
const DEFAULT_REPORTERS = [];
|
|
@@ -74,6 +75,13 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
async init() {
|
|
78
|
+
if (!this.options._oxide) {
|
|
79
|
+
const {
|
|
80
|
+
default: ReportPortalReporter
|
|
81
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require('../ox_reporters/reporter-rp')));
|
|
82
|
+
Reporters.rp = ReportPortalReporter;
|
|
83
|
+
}
|
|
84
|
+
|
|
77
85
|
this.reporters = [];
|
|
78
86
|
const generalReportingOpts = this.options.reporting || {};
|
|
79
87
|
|
|
@@ -596,4 +604,4 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
596
604
|
}
|
|
597
605
|
|
|
598
606
|
exports.default = ReportAggregator;
|
|
599
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsInJwIiwiUmVwb3J0UG9ydGFsUmVwb3J0ZXIiLCJERUZBVUxUX1RFU1RfTkFNRSIsIkRFRkFVTFRfUkVQT1JURVJTIiwiUmVwb3J0QWdncmVnYXRvciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInJlc3VsdHMiLCJydW5uZXJFbmRQcm9taXNlcyIsImdldEV4aXRDb2RlIiwiZXhpdENvZGUiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ0ZXN0RmFpbGRlZCIsImZpbmQiLCJpdGVtIiwic3RhdHVzIiwiaW5pdCIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwidW5kZWZpbmVkIiwiZW5hYmxlZCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJtZXNzYWdlIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImUiLCJlcnJvciIsIndhaXRGb3JSZXN1bHQiLCJyaWQiLCJ3YWl0Rm9yUmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJvbkxhdW5jaFN0YXJ0IiwiZXZlbnRBcmdzIiwiX2ludm9rZVJlcG9ydGVyc0hvb2siLCJvbkxhdW5jaEVuZCIsImVtaXQiLCJvblJ1bm5lclN0YXJ0Iiwib3B0cyIsImNhcHMiLCJFcnJvciIsInRlc3RSZXN1bHQiLCJUZXN0UmVzdWx0Iiwic3RhcnRUaW1lIiwib3h1dGlsIiwiZ2V0VGltZVN0YW1wIiwiY2FwYWJpbGl0aWVzIiwiZW52aXJvbm1lbnQiLCJlbnZWYXJzIiwib25SdW5uZXJFbmQiLCJmaW5hbFJlc3VsdCIsImZhdGFsRXJyb3IiLCJ4IiwiZW5kVGltZSIsImR1cmF0aW9uIiwiX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyIsIlN0YXR1cyIsIkZBSUxFRCIsImZhaWx1cmUiLCJlcnJvckhlbHBlciIsImdldEZhaWx1cmVGcm9tRXJyb3IiLCJfZ2V0Rmlyc3RGYWlsdXJlIiwidHlwZSIsImxvY2F0aW9uIiwidG9VcHBlckNhc2UiLCJyZXN1bHQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJyZXNvbHZlIiwiaGFzRmFpbGVkU3VpdGVzIiwic3VpdGVzIiwic29tZSIsImhhc1dhcm5pbmdTdWl0ZXMiLCJXQVJOSU5HIiwiYWxsU3VpdGVzU2tpcHBlZCIsImV2ZXJ5IiwiU0tJUFBFRCIsIlBBU1NFRCIsIm9uSXRlcmF0aW9uU3RhcnQiLCJpdGVyYXRpb24iLCJzdGFydCIsIm1zZyIsIm9uTG9nRW50cnkiLCJvbkl0ZXJhdGlvbkVuZCIsIml0ZXJhdGlvbk51bSIsIm9uU3VpdGVTdGFydCIsInN1aXRlSWQiLCJzdWl0ZSIsIm9uU3VpdGVFbmQiLCJzdWl0ZVJlc3VsdCIsIm9uQ2FzZVN0YXJ0Iiwic3VpdGVSZWZJZCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIl9zYXZlVGVzdENhc2VWaWRlb0F0dGFjaG1lbnQiLCJvblN0ZXBTdGFydCIsInN0ZXAiLCJyb290UGF0aCIsImZyYW1ld29yayIsImZ1bGxQYXRoIiwicGF0aCIsIm9uU3RlcEVuZCIsInN0ZXBSZXN1bHQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJzdGVwSWQiLCJEYXRlIiwibm93IiwiY2FzZXMiLCJzdGVwcyIsInVuZ3JvdXBlZFJlc3VsdHMiLCJfZ3JvdXBSZXN1bHQiLCJyZXN1bHRLZXkiLCJzdWl0ZUtleSIsImdyb3VwZWRSZXN1bHQiLCJNYXRoIiwibWluIiwibWF4IiwiY3VycmVudFN1aXRlUmVzdWx0IiwiZ3JvdXBLZXkiLCJncm91cGVkU3VpdGVSZXN1bHQiLCJfc3VpdGVzSGFzaCIsImMiLCJncm91cGVkUmVzdWx0c0xpc3QiLCJrZXlzIiwibWFwIiwic3VpdGVHcm91cEtleSIsImZpcnN0RmFpbGVkU3VpdGUiLCJzIiwiZmlyc3RTdWl0ZVdpdGhXYXJuaW5nIiwicmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMiLCJ2YWxpZGF0ZVJlc3VsdCIsImZhaWxlZCIsInVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcyIsImluY2x1ZGVzIiwid2FybiIsImhvb2tOYW1lIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50c1RvUmVtb3ZlIiwiaSIsImF0dGFjaG1lbnQiLCJfdXJsIiwidmlkZW9GaWxlUGF0aCIsImRvd25sb2FkVmlkZW8iLCJmaWxlTmFtZSIsImZpbGVQYXRoIiwiZWxtSW5kZXhUb1JlbW92ZSIsImluZGV4T2YiLCJzcGxpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsU0FBUyxHQUFHO0FBQ2RDLEVBQUFBLElBQUksRUFBRUMscUJBRFE7QUFFZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFGTztBQUdkQyxFQUFBQSxJQUFJLEVBQUVDLHFCQUhRO0FBSWRDLEVBQUFBLEtBQUssRUFBRUMsc0JBSk87QUFLZEMsRUFBQUEsR0FBRyxFQUFFQyxvQkFMUztBQU1kQyxFQUFBQSxHQUFHLEVBQUVDLG9CQU5TO0FBT2RDLEVBQUFBLEVBQUUsRUFBRUM7QUFQVSxDQUFsQjtBQVVBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsRUFBMUI7O0FBRWUsTUFBTUMsZ0JBQU4sU0FBK0JDLG9CQUEvQixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVU7QUFDakI7QUFFQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLEVBQXpCO0FBQ0EsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBRUg7O0FBRURHLEVBQUFBLFdBQVcsR0FBRztBQUNWLFFBQUlDLFFBQVEsR0FBRyxDQUFmOztBQUVBLFFBQ0ksS0FBS0gsT0FBTCxJQUNBSSxLQUFLLENBQUNDLE9BQU4sQ0FBYyxLQUFLTCxPQUFuQixDQURBLElBRUEsS0FBS0EsT0FBTCxDQUFhTSxNQUFiLEdBQXNCLENBSDFCLEVBSUU7QUFDRSxZQUFNQyxXQUFXLEdBQUcsS0FBS1AsT0FBTCxDQUFhUSxJQUFiLENBQW1CQyxJQUFELElBQVVBLElBQUksQ0FBQ0MsTUFBTCxLQUFnQixRQUE1QyxDQUFwQjs7QUFFQSxVQUFJSCxXQUFKLEVBQWlCO0FBQ2JKLFFBQUFBLFFBQVEsR0FBRyxDQUFDLENBQVo7QUFDSDtBQUNKLEtBVkQsTUFVTztBQUVIQSxNQUFBQSxRQUFRLEdBQUcsQ0FBQyxDQUFaO0FBQ0g7O0FBRUQsV0FBT0EsUUFBUDtBQUNIOztBQUVTLFFBQUpRLElBQUksR0FBRztBQUNULFNBQUtDLFNBQUwsR0FBaUIsRUFBakI7QUFDQSxVQUFNQyxvQkFBb0IsR0FBRyxLQUFLZCxPQUFMLENBQWFlLFNBQWIsSUFBMEIsRUFBdkQ7O0FBQ0EsU0FBSyxJQUFJQyxRQUFULElBQXFCRixvQkFBb0IsQ0FBQ0QsU0FBckIsSUFBa0NqQixpQkFBdkQsRUFBMEU7QUFDdEUsVUFBSSxPQUFPb0IsUUFBUCxLQUFvQixRQUFwQixJQUFnQyxDQUFDQyxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ0osUUFBckMsRUFBK0MsTUFBL0MsQ0FBckMsRUFBNkY7QUFFekY7QUFDSDs7QUFFRCxZQUFNSyxZQUFZLEdBQUcsT0FBT0wsUUFBUCxLQUFvQixRQUFwQixHQUErQkEsUUFBL0IsR0FBMENBLFFBQVEsQ0FBQ00sSUFBeEU7QUFDQSxZQUFNQyxZQUFZLEdBQUcsT0FBT1AsUUFBUCxLQUFvQixRQUFwQixHQUErQkEsUUFBL0IsR0FBMENRLFNBQS9EOztBQUVBLFVBQUlQLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDeEMsU0FBckMsRUFBZ0R5QyxZQUFoRCxDQUFKLEVBQW1FO0FBRS9ELFlBQUlFLFlBQVksSUFBSSxPQUFPQSxZQUFZLENBQUNFLE9BQXBCLEtBQWdDLFNBQWhELElBQTZELENBQUNGLFlBQVksQ0FBQ0UsT0FBL0UsRUFBd0Y7QUFDcEY7QUFDSDs7QUFDRCxjQUFNVCxRQUFRLEdBQUcsSUFBSXBDLFNBQVMsQ0FBQ3lDLFlBQUQsQ0FBYixDQUE0QixLQUFLckIsT0FBakMsRUFBMEN1QixZQUExQyxFQUF3RCxJQUF4RCxDQUFqQjs7QUFFQSxZQUFJUCxRQUFRLENBQUNKLElBQWIsRUFBbUI7QUFDZixjQUFJO0FBQ0Esa0JBQU1JLFFBQVEsQ0FBQ0osSUFBVCxFQUFOO0FBQ0gsV0FGRCxDQUdBLE9BQU9jLEdBQVAsRUFBWTtBQUNSQyxZQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBYSx5QkFBd0JQLFlBQWEsZUFBY0ssR0FBRyxDQUFDRyxPQUFRLEVBQTVFO0FBQ0g7QUFDSjs7QUFDRCxhQUFLaEIsU0FBTCxDQUFlaUIsSUFBZixDQUFvQmQsUUFBcEI7QUFDSDtBQUNKO0FBQ0o7O0FBRURlLEVBQUFBLFVBQVUsR0FBRztBQUNULFdBQU8sS0FBSzlCLE9BQVo7QUFDSDs7QUFFb0IsUUFBZitCLGVBQWUsR0FBRztBQUNwQixRQUFJLENBQUMzQixLQUFLLENBQUNDLE9BQU4sQ0FBYyxLQUFLTyxTQUFuQixDQUFELElBQWtDLEtBQUtBLFNBQUwsQ0FBZU4sTUFBZixJQUF5QixDQUEvRCxFQUFrRTtBQUM5RCxhQUFPLEtBQVA7QUFDSDs7QUFDRCxVQUFNMEIsY0FBYyxHQUFHLEtBQUtDLFlBQUwsRUFBdkI7O0FBQ0EsU0FBSyxJQUFJbEIsUUFBVCxJQUFxQixLQUFLSCxTQUExQixFQUFxQztBQUNqQyxVQUFJO0FBQ0EsY0FBTXNCLFVBQVUsR0FBRyxNQUFNbkIsUUFBUSxDQUFDb0IsUUFBVCxDQUFrQkgsY0FBbEIsQ0FBekI7O0FBQ0EsWUFBSUUsVUFBSixFQUFnQjtBQUNaUixVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBYSx5QkFBd0JPLFVBQVcsRUFBaEQ7QUFDSDtBQUNKLE9BTEQsQ0FNQSxPQUFPRSxDQUFQLEVBQVU7QUFDTlYsUUFBQUEsT0FBTyxDQUFDVyxLQUFSLENBQWUsNkJBQTRCRCxDQUFDLENBQUNSLE9BQVEsRUFBckQ7QUFDSDtBQUNKOztBQUNELFdBQU8sSUFBUDtBQUNIOztBQUVrQixRQUFiVSxhQUFhLENBQUNDLEdBQUQsRUFBTTtBQUNyQixRQUFJLENBQUNBLEdBQUQsSUFBUSxDQUFDLEtBQUt0QyxpQkFBTCxDQUF1QnNDLEdBQXZCLENBQWIsRUFBMEM7QUFDdEMsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsV0FBTyxLQUFLdEMsaUJBQUwsQ0FBdUJzQyxHQUF2QixDQUFQO0FBQ0g7O0FBRW1CLFFBQWRDLGNBQWMsR0FBRztBQUNuQixRQUFJLEtBQUt2QyxpQkFBTCxJQUEwQixLQUFLQSxpQkFBTCxDQUF1QkssTUFBckQsRUFBNkQ7QUFDekQsYUFBT21DLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLEtBQUt6QyxpQkFBakIsQ0FBUDtBQUNIO0FBQ0o7O0FBRWtCLFFBQWIwQyxhQUFhLENBQUM1QyxPQUFELEVBQVU7QUFDekIsVUFBTTZDLFNBQVMsR0FBRztBQUNkN0MsTUFBQUE7QUFEYyxLQUFsQjtBQUdBLFVBQU0sS0FBSzhDLG9CQUFMLENBQTBCLGVBQTFCLEVBQTJDRCxTQUEzQyxDQUFOO0FBQ0g7O0FBRWdCLFFBQVhFLFdBQVcsR0FBRztBQUNoQixVQUFNOUMsT0FBTyxHQUFHLEtBQUtpQyxZQUFMLEVBQWhCO0FBQ0EsVUFBTVcsU0FBUyxHQUFHO0FBQ2Q1QyxNQUFBQTtBQURjLEtBQWxCO0FBR0EsU0FBSytDLElBQUwsQ0FBVSxZQUFWLEVBQXdCL0MsT0FBeEI7QUFDQSxVQUFNLEtBQUs2QyxvQkFBTCxDQUEwQixhQUExQixFQUF5Q0QsU0FBekMsQ0FBTjtBQUNIOztBQUVrQixRQUFiSSxhQUFhLENBQUNULEdBQUQsRUFBTVUsSUFBTixFQUFZQyxJQUFaLEVBQWtCO0FBQ2pDLFFBQUksQ0FBQ1gsR0FBTCxFQUFVO0FBQ04sWUFBTSxJQUFJWSxLQUFKLENBQVUsd0JBQVYsQ0FBTjtBQUNIOztBQUNELFVBQU1DLFVBQVUsR0FBRyxJQUFJQyxtQkFBSixFQUFuQjtBQUNBRCxJQUFBQSxVQUFVLENBQUNiLEdBQVgsR0FBaUJBLEdBQWpCO0FBQ0FhLElBQUFBLFVBQVUsQ0FBQy9CLElBQVgsR0FBa0I0QixJQUFJLENBQUM1QixJQUFMLElBQWEzQixpQkFBL0I7QUFDQTBELElBQUFBLFVBQVUsQ0FBQ0UsU0FBWCxHQUF1QkMsY0FBT0MsWUFBUCxFQUF2QjtBQUNBSixJQUFBQSxVQUFVLENBQUNLLFlBQVgsR0FBMEJQLElBQTFCO0FBQ0FFLElBQUFBLFVBQVUsQ0FBQ00sV0FBWCxHQUF5QlQsSUFBSSxDQUFDVSxPQUFMLElBQWdCLEVBQXpDO0FBQ0FQLElBQUFBLFVBQVUsQ0FBQ3JELE9BQVgsR0FBcUJrRCxJQUFyQjtBQUNBLFNBQUtqRCxPQUFMLENBQWE2QixJQUFiLENBQWtCdUIsVUFBbEI7QUFFQSxTQUFLbkQsaUJBQUwsQ0FBdUJzQyxHQUF2QixJQUE4QixrQkFBOUI7QUFDQWIsSUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQWEsUUFBT1ksR0FBSSxpQkFBeEI7QUFDQSxVQUFNSyxTQUFTLEdBQUc7QUFDZEwsTUFBQUEsR0FEYztBQUVkVSxNQUFBQSxJQUZjO0FBR2RDLE1BQUFBO0FBSGMsS0FBbEI7QUFLQSxTQUFLSCxJQUFMLENBQVUsY0FBVixFQUEwQkgsU0FBMUI7QUFDQSxVQUFNLEtBQUtDLG9CQUFMLENBQTBCLGVBQTFCLEVBQTJDRCxTQUEzQyxDQUFOO0FBQ0g7O0FBRWdCLFFBQVhnQixXQUFXLENBQUNyQixHQUFELEVBQU1zQixXQUFOLEVBQW1CQyxVQUFuQixFQUErQjtBQUM1QyxVQUFNVixVQUFVLEdBQUcsS0FBS3BELE9BQUwsQ0FBYVEsSUFBYixDQUFrQnVELENBQUMsSUFBSUEsQ0FBQyxDQUFDeEIsR0FBRixLQUFVQSxHQUFqQyxDQUFuQjs7QUFDQSxRQUFJYSxVQUFKLEVBQWdCO0FBQ1pBLE1BQUFBLFVBQVUsQ0FBQ1ksT0FBWCxHQUFxQlQsY0FBT0MsWUFBUCxFQUFyQjtBQUNBSixNQUFBQSxVQUFVLENBQUNhLFFBQVgsR0FBc0JiLFVBQVUsQ0FBQ1ksT0FBWCxHQUFxQlosVUFBVSxDQUFDRSxTQUF0RDtBQUVBRixNQUFBQSxVQUFVLENBQUMxQyxNQUFYLEdBQW9CLEtBQUt3RCw0QkFBTCxDQUFrQ2QsVUFBbEMsRUFBOENVLFVBQTlDLENBQXBCOztBQUVBLFVBQUlWLFVBQVUsQ0FBQzFDLE1BQVgsS0FBc0J5RCxnQkFBT0MsTUFBakMsRUFBeUM7QUFDckMsWUFBSU4sVUFBSixFQUFnQjtBQUVaVixVQUFBQSxVQUFVLENBQUNpQixPQUFYLEdBQXFCUCxVQUFVLFlBQVlYLEtBQXRCLEdBQThCbUIsZ0JBQVlDLG1CQUFaLENBQWdDVCxVQUFoQyxDQUE5QixHQUE0RUEsVUFBakc7QUFDSCxTQUhELE1BSUs7QUFDRFYsVUFBQUEsVUFBVSxDQUFDaUIsT0FBWCxHQUFxQixLQUFLRyxnQkFBTCxDQUFzQnBCLFVBQXRCLENBQXJCO0FBQ0g7QUFDSjs7QUFDRCxVQUFJUyxXQUFXLElBQUlBLFdBQVcsQ0FBQ0osWUFBL0IsRUFBNkM7QUFDekNMLFFBQUFBLFVBQVUsQ0FBQ0ssWUFBWCxHQUEwQkksV0FBVyxDQUFDSixZQUF0QztBQUNIOztBQUNELFVBQUlMLFVBQVUsQ0FBQ2lCLE9BQWYsRUFBd0I7QUFDcEIsWUFBSWpCLFVBQVUsQ0FBQ2lCLE9BQVgsQ0FBbUJJLElBQW5CLElBQTJCckIsVUFBVSxDQUFDaUIsT0FBWCxDQUFtQkssUUFBbEQsRUFBNEQ7QUFDeERoRCxVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBYSxVQUFTeUIsVUFBVSxDQUFDaUIsT0FBWCxDQUFtQkksSUFBSyxPQUFNckIsVUFBVSxDQUFDaUIsT0FBWCxDQUFtQkssUUFBUyxHQUFoRjtBQUNILFNBRkQsTUFFTyxJQUFJdEIsVUFBVSxDQUFDaUIsT0FBWCxDQUFtQkksSUFBdkIsRUFBNkI7QUFDaEMvQyxVQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBYSxVQUFTeUIsVUFBVSxDQUFDaUIsT0FBWCxDQUFtQkksSUFBSyxFQUE5QztBQUNILFNBRk0sTUFFQSxJQUFJLE9BQU9yQixVQUFVLENBQUNpQixPQUFsQixLQUE4QixRQUFsQyxFQUE0QztBQUMvQzNDLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLFVBQVN5QixVQUFVLENBQUNpQixPQUFRLEVBQXpDO0FBQ0g7QUFDSjs7QUFDRDNDLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLFFBQU9ZLEdBQUksOEJBQTZCYSxVQUFVLENBQUMxQyxNQUFYLENBQWtCaUUsV0FBbEIsRUFBZ0MsR0FBckY7QUFDSDs7QUFDRCxVQUFNL0IsU0FBUyxHQUFHO0FBQ2RMLE1BQUFBLEdBRGM7QUFFZHFDLE1BQUFBLE1BQU0sRUFBRXhCO0FBRk0sS0FBbEI7QUFJQSxTQUFLTCxJQUFMLENBQVUsWUFBVixFQUF3QkgsU0FBeEI7QUFDQSxVQUFNLEtBQUtDLG9CQUFMLENBQTBCLGFBQTFCLEVBQXlDRCxTQUF6QyxDQUFOOztBQUNBLFFBQUksS0FBSzNDLGlCQUFMLENBQXVCc0MsR0FBdkIsQ0FBSixFQUFpQztBQUU3QnNDLE1BQUFBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQixNQUFNO0FBQ25CLGFBQUs3RSxpQkFBTCxDQUF1QnNDLEdBQXZCLEVBQTRCd0MsT0FBNUIsQ0FBb0MzQixVQUFwQztBQUNILE9BRkQ7QUFHSDtBQUNKOztBQUVEYyxFQUFBQSw0QkFBNEIsQ0FBQ2QsVUFBRCxFQUFhVSxVQUFiLEVBQXlCO0FBQ2pELFFBQUlBLFVBQUosRUFBZ0I7QUFDWixhQUFPSyxnQkFBT0MsTUFBZDtBQUNIOztBQUNELFVBQU1ZLGVBQWUsR0FBRzVCLFVBQVUsQ0FBQzZCLE1BQVgsQ0FBa0JDLElBQWxCLENBQXVCbkIsQ0FBQyxJQUFJQSxDQUFDLENBQUNyRCxNQUFGLEtBQWF5RCxnQkFBT0MsTUFBaEQsQ0FBeEI7O0FBQ0EsUUFBSVksZUFBSixFQUFxQjtBQUNqQixhQUFPYixnQkFBT0MsTUFBZDtBQUNIOztBQUNELFVBQU1lLGdCQUFnQixHQUFHL0IsVUFBVSxDQUFDNkIsTUFBWCxDQUFrQkMsSUFBbEIsQ0FBdUJuQixDQUFDLElBQUlBLENBQUMsQ0FBQ3JELE1BQUYsS0FBYXlELGdCQUFPaUIsT0FBaEQsQ0FBekI7O0FBQ0EsUUFBSUQsZ0JBQUosRUFBc0I7QUFDbEIsYUFBT2hCLGdCQUFPaUIsT0FBZDtBQUNIOztBQUNELFVBQU1DLGdCQUFnQixHQUFHakMsVUFBVSxDQUFDNkIsTUFBWCxDQUFrQkssS0FBbEIsQ0FBd0J2QixDQUFDLElBQUlBLENBQUMsQ0FBQ3JELE1BQUYsS0FBYXlELGdCQUFPb0IsT0FBakQsQ0FBekI7O0FBQ0EsUUFBSUYsZ0JBQUosRUFBc0I7QUFDbEIsYUFBT2xCLGdCQUFPb0IsT0FBZDtBQUNIOztBQUNELFdBQU9wQixnQkFBT3FCLE1BQWQ7QUFDSDs7QUFFcUIsUUFBaEJDLGdCQUFnQixDQUFDbEQsR0FBRCxFQUFNbUQsU0FBTixFQUFpQkMsS0FBakIsRUFBd0I7QUFDMUMsUUFBSUQsU0FBSixFQUFlO0FBQ1gsWUFBTUUsR0FBRyxHQUFJLEdBQUVELEtBQU0sZUFBY0QsU0FBVSxhQUE3QztBQUNBaEUsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlpRSxHQUFaO0FBQ0EsWUFBTSxLQUFLQyxVQUFMLENBQWdCLElBQWhCLEVBQXNCLE1BQXRCLEVBQThCRCxHQUE5QixFQUFtQyxNQUFuQyxDQUFOO0FBQ0g7QUFDSjs7QUFFbUIsUUFBZEUsY0FBYyxDQUFDdkQsR0FBRCxFQUFNcUMsTUFBTixFQUFjZSxLQUFkLEVBQXFCO0FBQUE7O0FBQ3JDLFFBQUlmLE1BQU0sU0FBTixJQUFBQSxNQUFNLFdBQU4sSUFBQUEsTUFBTSxDQUFFbUIsWUFBUixzQkFBd0JuQixNQUFNLENBQUNsRSxNQUEvQiwyQ0FBd0IsZUFBZWlFLFdBQTNDLEVBQXdEO0FBQ3BELFlBQU1pQixHQUFHLEdBQUksR0FBRUQsS0FBTSxlQUFjZixNQUFNLENBQUNtQixZQUFhLHVCQUFzQm5CLE1BQU0sQ0FBQ2xFLE1BQVAsQ0FBY2lFLFdBQWQsRUFBNEIsR0FBekc7QUFDQWpELE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZaUUsR0FBWjtBQUNBLFlBQU0sS0FBS0MsVUFBTCxDQUFnQixJQUFoQixFQUFzQixNQUF0QixFQUE4QkQsR0FBOUIsRUFBbUMsTUFBbkMsQ0FBTjtBQUNIO0FBQ0o7O0FBRWlCLFFBQVpJLFlBQVksQ0FBQ3pELEdBQUQsRUFBTTBELE9BQU4sRUFBZUMsS0FBZixFQUFzQjtBQUNwQ3hFLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLFVBQVN1RSxLQUFLLENBQUM3RSxJQUFLLGtCQUFqQztBQUNBLFFBQUl1QixTQUFTLEdBQUc7QUFDWkwsTUFBQUEsR0FEWTtBQUVaMEQsTUFBQUEsT0FBTyxFQUFFQSxPQUZHO0FBR1pDLE1BQUFBLEtBQUssRUFBRUE7QUFISyxLQUFoQjtBQUtBLFNBQUtuRCxJQUFMLENBQVUsYUFBVixFQUF5QkgsU0FBekI7QUFDQSxVQUFNLEtBQUtDLG9CQUFMLENBQTBCLGNBQTFCLEVBQTBDRCxTQUExQyxDQUFOO0FBQ0g7O0FBRWUsUUFBVnVELFVBQVUsQ0FBQzVELEdBQUQsRUFBTTBELE9BQU4sRUFBZUcsV0FBZixFQUE0QjtBQUN4QyxVQUFNaEQsVUFBVSxHQUFHLEtBQUtwRCxPQUFMLENBQWFRLElBQWIsQ0FBa0J1RCxDQUFDLElBQUlBLENBQUMsQ0FBQ3hCLEdBQUYsS0FBVUEsR0FBakMsQ0FBbkI7O0FBQ0EsUUFBSSxDQUFDYSxVQUFMLEVBQWlCO0FBQ2I7QUFDSDs7QUFDREEsSUFBQUEsVUFBVSxDQUFDNkIsTUFBWCxDQUFrQnBELElBQWxCLENBQXVCdUUsV0FBdkI7QUFDQTFFLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLFVBQVN5RSxXQUFXLENBQUMvRSxJQUFLLDRCQUEyQitFLFdBQVcsQ0FBQzFGLE1BQVosQ0FBbUJpRSxXQUFuQixFQUFpQyxHQUFuRztBQUNBLFVBQU0vQixTQUFTLEdBQUc7QUFDZEwsTUFBQUEsR0FEYztBQUVkMEQsTUFBQUEsT0FGYztBQUdkckIsTUFBQUEsTUFBTSxFQUFFd0I7QUFITSxLQUFsQjtBQUtBLFNBQUtyRCxJQUFMLENBQVUsV0FBVixFQUF1QkgsU0FBdkI7QUFDQSxVQUFNLEtBQUtDLG9CQUFMLENBQTBCLFlBQTFCLEVBQXdDRCxTQUF4QyxDQUFOO0FBQ0g7O0FBRWdCLFFBQVh5RCxXQUFXLENBQUM5RCxHQUFELEVBQU0wRCxPQUFOLEVBQWVLLFVBQWYsRUFBMkJDLE1BQTNCLEVBQW1DQyxPQUFuQyxFQUE0QztBQUN6RDlFLElBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLFdBQVU2RSxPQUFPLENBQUNuRixJQUFLLGtCQUFwQztBQUNBLFVBQU11QixTQUFTLEdBQUc7QUFDZEwsTUFBQUEsR0FEYztBQUVkMEQsTUFBQUEsT0FGYztBQUdkSyxNQUFBQSxVQUhjO0FBSWRDLE1BQUFBLE1BSmM7QUFLZEUsTUFBQUEsSUFBSSxFQUFFRDtBQUxRLEtBQWxCO0FBT0EsU0FBS3pELElBQUwsQ0FBVSxZQUFWLEVBQXdCSCxTQUF4QjtBQUNBLFVBQU0sS0FBS0Msb0JBQUwsQ0FBMEIsYUFBMUIsRUFBeUNELFNBQXpDLENBQU47QUFDSDs7QUFFYyxRQUFUOEQsU0FBUyxDQUFDbkUsR0FBRCxFQUFNMEQsT0FBTixFQUFlSyxVQUFmLEVBQTJCQyxNQUEzQixFQUFtQ0ksVUFBbkMsRUFBK0M7QUFDMURqRixJQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBYSxXQUFVZ0YsVUFBVSxDQUFDdEYsSUFBSyw0QkFBMkJzRixVQUFVLENBQUNqRyxNQUFYLENBQWtCaUUsV0FBbEIsRUFBZ0MsR0FBbEc7QUFDQSxVQUFNLEtBQUtpQyw0QkFBTCxDQUFrQ0QsVUFBbEMsQ0FBTjtBQUNBLFVBQU0vRCxTQUFTLEdBQUc7QUFDZEwsTUFBQUEsR0FEYztBQUVkMEQsTUFBQUEsT0FGYztBQUdkSyxNQUFBQSxVQUhjO0FBSWRDLE1BQUFBLE1BSmM7QUFLZDNCLE1BQUFBLE1BQU0sRUFBRStCO0FBTE0sS0FBbEI7QUFPQSxTQUFLNUQsSUFBTCxDQUFVLFVBQVYsRUFBc0JILFNBQXRCO0FBQ0EsVUFBTSxLQUFLQyxvQkFBTCxDQUEwQixXQUExQixFQUF1Q0QsU0FBdkMsQ0FBTjtBQUNIOztBQUVnQixRQUFYaUUsV0FBVyxDQUFDdEUsR0FBRCxFQUFNMEQsT0FBTixFQUFlTSxNQUFmLEVBQXVCTyxJQUF2QixFQUE2QjtBQUUxQyxRQUFJLEtBQUsvRyxPQUFMLElBQWdCLEtBQUtBLE9BQUwsQ0FBYWdILFFBQTdCLElBQXlDLEtBQUtoSCxPQUFMLENBQWFpSCxTQUF0RCxJQUFtRSxLQUFLakgsT0FBTCxDQUFhaUgsU0FBYixLQUEyQixVQUFsRyxFQUE4RztBQUMxRyxZQUFNQyxRQUFRLEdBQUdDLGNBQUtuQyxPQUFMLENBQWEsS0FBS2hGLE9BQUwsQ0FBYWdILFFBQTFCLEVBQW9DRCxJQUFJLENBQUNwQyxRQUF6QyxDQUFqQjs7QUFDQW9DLE1BQUFBLElBQUksQ0FBQ3BDLFFBQUwsR0FBZ0J1QyxRQUFRLEdBQUMsSUFBekI7QUFDSDs7QUFDRCxVQUFNckUsU0FBUyxHQUFHO0FBQ2RMLE1BQUFBLEdBRGM7QUFFZDBELE1BQUFBLE9BRmM7QUFHZE0sTUFBQUEsTUFIYztBQUlkTyxNQUFBQSxJQUFJLEVBQUVBO0FBSlEsS0FBbEI7QUFNQSxTQUFLL0QsSUFBTCxDQUFVLFlBQVYsRUFBd0JILFNBQXhCO0FBQ0EsVUFBTSxLQUFLQyxvQkFBTCxDQUEwQixhQUExQixFQUF5Q0QsU0FBekMsQ0FBTjtBQUNIOztBQUVjLFFBQVR1RSxTQUFTLENBQUM1RSxHQUFELEVBQU0wRCxPQUFOLEVBQWVNLE1BQWYsRUFBdUJhLFVBQXZCLEVBQW1DO0FBSTlDLFVBQU14RSxTQUFTLEdBQUc7QUFDZEwsTUFBQUEsR0FEYztBQUVkMEQsTUFBQUEsT0FGYztBQUdkTSxNQUFBQSxNQUhjO0FBSWRPLE1BQUFBLElBQUksRUFBRU07QUFKUSxLQUFsQjtBQU1BLFNBQUtyRSxJQUFMLENBQVUsVUFBVixFQUFzQkgsU0FBdEI7QUFDQSxVQUFNLEtBQUtDLG9CQUFMLENBQTBCLFdBQTFCLEVBQXVDRCxTQUF2QyxDQUFOO0FBQ0g7O0FBRWUsUUFBVmlELFVBQVUsQ0FBQ3dCLElBQUQsRUFBT0MsS0FBUCxFQUFjMUIsR0FBZCxFQUFtQjJCLEdBQUcsR0FBRyxJQUF6QixFQUErQjtBQUFFdEIsSUFBQUEsT0FBRjtBQUFXTSxJQUFBQSxNQUFYO0FBQW1CaUIsSUFBQUE7QUFBbkIsTUFBOEIsRUFBN0QsRUFBaUU7QUFDN0UsVUFBTTVFLFNBQVMsR0FBRztBQUNkcUQsTUFBQUEsT0FEYztBQUVkTSxNQUFBQSxNQUZjO0FBR2RpQixNQUFBQSxNQUhjO0FBSWRGLE1BQUFBLEtBSmM7QUFLZDFCLE1BQUFBLEdBTGM7QUFNZHlCLE1BQUFBLElBTmM7QUFPZEUsTUFBQUE7QUFQYyxLQUFsQjtBQVNBLFNBQUt4RSxJQUFMLENBQVUsS0FBVixFQUFpQkgsU0FBakI7O0FBRUEsUUFBSSxDQUFDeUUsSUFBTCxFQUFXO0FBQ1B6RSxNQUFBQSxTQUFTLENBQUN5RSxJQUFWLEdBQWlCSSxJQUFJLENBQUNDLEdBQUwsRUFBakI7QUFDSDs7QUFFRCxVQUFNLEtBQUs3RSxvQkFBTCxDQUEwQixPQUExQixFQUFtQ0QsU0FBbkMsQ0FBTjtBQUNIOztBQU1ENEIsRUFBQUEsZ0JBQWdCLENBQUNwQixVQUFELEVBQWE7QUFDekIsUUFBSUEsVUFBVSxDQUFDMUMsTUFBWCxLQUFzQnlELGdCQUFPQyxNQUFqQyxFQUF5QztBQUNyQyxVQUFJaEIsVUFBVSxDQUFDaUIsT0FBZixFQUF3QjtBQUNwQixlQUFPakIsVUFBVSxDQUFDaUIsT0FBbEI7QUFDSDs7QUFDRCxXQUFLLElBQUkrQixXQUFULElBQXdCaEQsVUFBVSxDQUFDNkIsTUFBbkMsRUFBMkM7QUFDdkMsWUFBSW1CLFdBQVcsQ0FBQzFGLE1BQVosS0FBdUJ5RCxnQkFBT0MsTUFBbEMsRUFBMEM7QUFDdEM7QUFDSDs7QUFDRCxZQUFJZ0MsV0FBVyxDQUFDL0IsT0FBaEIsRUFBeUI7QUFDckIsaUJBQU8rQixXQUFXLENBQUMvQixPQUFuQjtBQUNIOztBQUNELGFBQUssSUFBSXNDLFVBQVQsSUFBdUJQLFdBQVcsQ0FBQ3VCLEtBQW5DLEVBQTBDO0FBQ3RDLGNBQUl2QixXQUFXLENBQUMxRixNQUFaLEtBQXVCeUQsZ0JBQU9DLE1BQWxDLEVBQTBDO0FBQ3RDO0FBQ0g7O0FBQ0QsY0FBSXVDLFVBQVUsQ0FBQ3RDLE9BQWYsRUFBd0I7QUFDcEIsbUJBQU9zQyxVQUFVLENBQUN0QyxPQUFsQjtBQUNIOztBQUNELGVBQUssSUFBSStDLFVBQVQsSUFBdUJULFVBQVUsQ0FBQ2lCLEtBQWxDLEVBQXlDO0FBQ3JDLGdCQUFJUixVQUFVLENBQUMxRyxNQUFYLEtBQXNCeUQsZ0JBQU9DLE1BQWpDLEVBQXlDO0FBQ3JDO0FBQ0g7O0FBQ0QsbUJBQU9nRCxVQUFVLENBQUMvQyxPQUFYLElBQXNCLElBQTdCO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBRURwQyxFQUFBQSxZQUFZLEdBQUc7QUFDWCxVQUFNRCxjQUFjLEdBQUcsRUFBdkI7QUFDQSxVQUFNNkYsZ0JBQWdCLEdBQUcsRUFBekI7O0FBQ0EsUUFBSSxDQUFDekgsS0FBSyxDQUFDQyxPQUFOLENBQWMsS0FBS0wsT0FBbkIsQ0FBRCxJQUFnQyxLQUFLQSxPQUFMLENBQWFNLE1BQWIsSUFBdUIsQ0FBM0QsRUFBOEQ7QUFDMUQsYUFBTyxLQUFQO0FBQ0g7O0FBQ0QsU0FBSyxJQUFJc0UsTUFBVCxJQUFtQixLQUFLNUUsT0FBeEIsRUFBaUM7QUFDN0IsVUFBSSxDQUFDNEUsTUFBTSxDQUFDN0UsT0FBUCxDQUFlK0gsWUFBaEIsSUFBZ0MsQ0FBQ2xELE1BQU0sQ0FBQzdFLE9BQVAsQ0FBZStILFlBQWYsQ0FBNEJDLFNBQWpFLEVBQTRFO0FBQ3hFRixRQUFBQSxnQkFBZ0IsQ0FBQ2hHLElBQWpCLENBQXNCK0MsTUFBdEI7QUFDQTtBQUNIOztBQUNELFlBQU1tRCxTQUFTLEdBQUduRCxNQUFNLENBQUM3RSxPQUFQLENBQWUrSCxZQUFmLENBQTRCQyxTQUE5QztBQUNBLFlBQU1DLFFBQVEsR0FBR3BELE1BQU0sQ0FBQzdFLE9BQVAsQ0FBZStILFlBQWYsQ0FBNEJFLFFBQTdDO0FBQ0EsVUFBSUMsYUFBYSxHQUFHakcsY0FBYyxDQUFDK0YsU0FBRCxDQUFsQzs7QUFDQSxVQUFJLENBQUNFLGFBQUwsRUFBb0I7QUFDaEJBLFFBQUFBLGFBQWEsR0FBR2pHLGNBQWMsQ0FBQytGLFNBQUQsQ0FBZCxHQUE0QixFQUN4QyxHQUFHbkQsTUFEcUM7QUFFeENLLFVBQUFBLE1BQU0sRUFBRTtBQUZnQyxTQUE1Qzs7QUFJQSxZQUFJK0MsUUFBSixFQUFjO0FBQ1ZDLFVBQUFBLGFBQWEsQ0FBQyxhQUFELENBQWIsR0FBK0IsRUFBL0I7QUFDSDtBQUNKLE9BUkQsTUFTSztBQUNEQSxRQUFBQSxhQUFhLENBQUMzRSxTQUFkLEdBQTBCNEUsSUFBSSxDQUFDQyxHQUFMLENBQVNGLGFBQWEsQ0FBQzNFLFNBQXZCLEVBQWtDc0IsTUFBTSxDQUFDdEIsU0FBekMsQ0FBMUI7QUFDQTJFLFFBQUFBLGFBQWEsQ0FBQ2pFLE9BQWQsR0FBd0JrRSxJQUFJLENBQUNFLEdBQUwsQ0FBU0gsYUFBYSxDQUFDakUsT0FBdkIsRUFBZ0NZLE1BQU0sQ0FBQ1osT0FBdkMsQ0FBeEI7QUFDQWlFLFFBQUFBLGFBQWEsQ0FBQ2hFLFFBQWQsR0FBeUJnRSxhQUFhLENBQUNqRSxPQUFkLEdBQXdCaUUsYUFBYSxDQUFDM0UsU0FBL0Q7QUFDSDs7QUFFRCxVQUFJLENBQUMwRSxRQUFMLEVBQWU7QUFDWEMsUUFBQUEsYUFBYSxDQUFDaEQsTUFBZCxHQUF1QixDQUNuQixHQUFHZ0QsYUFBYSxDQUFDaEQsTUFERSxFQUVuQixHQUFHTCxNQUFNLENBQUNLLE1BRlMsQ0FBdkI7QUFJSCxPQUxELE1BTUs7QUFDRCxhQUFLLE1BQU1vRCxrQkFBWCxJQUFpQ3pELE1BQU0sQ0FBQ0ssTUFBeEMsRUFBZ0Q7QUFDNUMsZ0JBQU1xRCxRQUFRLEdBQUksR0FBRU4sUUFBUyxJQUFHSyxrQkFBa0IsQ0FBQ3RDLFlBQWEsRUFBaEU7QUFDQSxnQkFBTXdDLGtCQUFrQixHQUFHTixhQUFhLENBQUNPLFdBQWQsQ0FBMEJGLFFBQTFCLENBQTNCOztBQUNBLGNBQUksQ0FBQ0Msa0JBQUwsRUFBeUI7QUFDckJOLFlBQUFBLGFBQWEsQ0FBQ08sV0FBZCxDQUEwQkYsUUFBMUIsSUFBc0MsRUFBRSxHQUFHRDtBQUFMLGFBQXRDO0FBQ0gsV0FGRCxNQUdLO0FBQ0RFLFlBQUFBLGtCQUFrQixDQUFDakYsU0FBbkIsR0FBK0I0RSxJQUFJLENBQUNDLEdBQUwsQ0FBU0ksa0JBQWtCLENBQUNqRixTQUE1QixFQUF1QytFLGtCQUFrQixDQUFDL0UsU0FBMUQsQ0FBL0I7QUFDQWlGLFlBQUFBLGtCQUFrQixDQUFDdkUsT0FBbkIsR0FBNkJrRSxJQUFJLENBQUNFLEdBQUwsQ0FBU0csa0JBQWtCLENBQUN2RSxPQUE1QixFQUFxQ3FFLGtCQUFrQixDQUFDckUsT0FBeEQsQ0FBN0I7QUFDQXVFLFlBQUFBLGtCQUFrQixDQUFDdEUsUUFBbkIsR0FBOEJzRSxrQkFBa0IsQ0FBQ3ZFLE9BQW5CLEdBQTZCdUUsa0JBQWtCLENBQUNqRixTQUE5RTtBQUNBaUYsWUFBQUEsa0JBQWtCLENBQUNaLEtBQW5CLEdBQTJCLENBQ3ZCLEdBQUdZLGtCQUFrQixDQUFDWixLQURDLEVBRXZCLEdBQUdVLGtCQUFrQixDQUFDVixLQUZDLENBQTNCOztBQUlBLGdCQUFJVSxrQkFBa0IsQ0FBQ1YsS0FBbkIsQ0FBeUJ6QyxJQUF6QixDQUE4QnVELENBQUMsSUFBSUEsQ0FBQyxDQUFDL0gsTUFBRixLQUFheUQsZ0JBQU9DLE1BQXZELENBQUosRUFBb0U7QUFDaEVtRSxjQUFBQSxrQkFBa0IsQ0FBQzdILE1BQW5CLEdBQTRCeUQsZ0JBQU9DLE1BQW5DO0FBQ0gsYUFGRCxNQUdLLElBQUlpRSxrQkFBa0IsQ0FBQ1YsS0FBbkIsQ0FBeUJ6QyxJQUF6QixDQUE4QnVELENBQUMsSUFBSUEsQ0FBQyxDQUFDL0gsTUFBRixLQUFheUQsZ0JBQU9pQixPQUF2RCxDQUFKLEVBQXFFO0FBQ3RFbUQsY0FBQUEsa0JBQWtCLENBQUM3SCxNQUFuQixHQUE0QnlELGdCQUFPaUIsT0FBbkM7QUFDSDtBQUNKO0FBQ0o7QUFDSjtBQUNKOztBQUVELFVBQU1zRCxrQkFBa0IsR0FBRzFILE1BQU0sQ0FBQzJILElBQVAsQ0FBWTNHLGNBQVosRUFBNEI0RyxHQUE1QixDQUN2Qk4sUUFBUSxJQUFJO0FBQ1IsWUFBTUwsYUFBYSxHQUFHakcsY0FBYyxDQUFDc0csUUFBRCxDQUFwQzs7QUFDQSxVQUFJLENBQUNMLGFBQWEsQ0FBQ08sV0FBbkIsRUFBZ0M7QUFDNUIsZUFBT1AsYUFBUDtBQUNIOztBQUNEQSxNQUFBQSxhQUFhLENBQUNoRCxNQUFkLEdBQXVCLENBQ25CLEdBQUdnRCxhQUFhLENBQUNoRCxNQURFLEVBRW5CLEdBQUdqRSxNQUFNLENBQUMySCxJQUFQLENBQVlWLGFBQWEsQ0FBQ08sV0FBMUIsRUFBdUNJLEdBQXZDLENBQTJDQyxhQUFhLElBQUlaLGFBQWEsQ0FBQ08sV0FBZCxDQUEwQkssYUFBMUIsQ0FBNUQsQ0FGZ0IsQ0FBdkI7QUFJQSxZQUFNQyxnQkFBZ0IsR0FBR2IsYUFBYSxDQUFDaEQsTUFBZCxDQUFxQnpFLElBQXJCLENBQTBCdUksQ0FBQyxJQUFJQSxDQUFDLENBQUNySSxNQUFGLEtBQWF5RCxnQkFBT0MsTUFBbkQsQ0FBekI7O0FBQ0EsVUFBSTBFLGdCQUFKLEVBQXNCO0FBQ2xCYixRQUFBQSxhQUFhLENBQUN2SCxNQUFkLEdBQXVCeUQsZ0JBQU9DLE1BQTlCO0FBQ0E2RCxRQUFBQSxhQUFhLENBQUM1RCxPQUFkLEdBQXdCeUUsZ0JBQWdCLENBQUN6RSxPQUFqQixJQUE0QjRELGFBQWEsQ0FBQzVELE9BQWxFO0FBQ0gsT0FIRCxNQUlLO0FBQ0QsY0FBTTJFLHFCQUFxQixHQUFHZixhQUFhLENBQUNoRCxNQUFkLENBQXFCekUsSUFBckIsQ0FBMEJ1SSxDQUFDLElBQUlBLENBQUMsQ0FBQ3JJLE1BQUYsS0FBYXlELGdCQUFPaUIsT0FBbkQsQ0FBOUI7O0FBQ0EsWUFBSTRELHFCQUFKLEVBQTJCO0FBQ3ZCZixVQUFBQSxhQUFhLENBQUN2SCxNQUFkLEdBQXVCeUQsZ0JBQU9pQixPQUE5QjtBQUNBNkMsVUFBQUEsYUFBYSxDQUFDNUQsT0FBZCxHQUF3QjJFLHFCQUFxQixDQUFDM0UsT0FBdEIsSUFBaUM0RCxhQUFhLENBQUM1RCxPQUF2RTtBQUNIO0FBQ0o7O0FBQ0QsYUFBTzRELGFBQWEsQ0FBQyxhQUFELENBQXBCO0FBQ0EsYUFBT0EsYUFBUDtBQUNILEtBeEJzQixDQUEzQjtBQTBCQSxRQUFJakksT0FBTyxHQUFHLENBQUMsR0FBRzBJLGtCQUFKLEVBQXdCLEdBQUdiLGdCQUEzQixDQUFkO0FBRUE3SCxJQUFBQSxPQUFPLEdBQUcsS0FBS2lKLDBCQUFMLENBQWdDakosT0FBaEMsQ0FBVjtBQUVBLFNBQUtrSixjQUFMLENBQW9CbEosT0FBcEI7QUFDQSxXQUFPQSxPQUFQO0FBQ0g7O0FBRURpSixFQUFBQSwwQkFBMEIsQ0FBQ2pKLE9BQUQsRUFBVTtBQUNoQyxXQUFPQSxPQUFPLENBQUM0SSxHQUFSLENBQWFoRSxNQUFELElBQVk7QUFDM0IsVUFDSUEsTUFBTSxJQUNOQSxNQUFNLENBQUNLLE1BRFAsSUFFQTdFLEtBQUssQ0FBQ0MsT0FBTixDQUFjdUUsTUFBTSxDQUFDSyxNQUFyQixDQUZBLElBR0FMLE1BQU0sQ0FBQ0ssTUFBUCxDQUFjM0UsTUFBZCxHQUF1QixDQUozQixFQUtFO0FBQ0UsY0FBTTZJLE1BQU0sR0FBR3ZFLE1BQU0sQ0FBQ0ssTUFBUCxDQUFjekUsSUFBZCxDQUFvQjBGLEtBQUQsSUFBV0EsS0FBSyxDQUFDeEYsTUFBTixLQUFpQnlELGdCQUFPQyxNQUF0RCxDQUFmOztBQUNBLFlBQUkrRSxNQUFKLEVBQVk7QUFDUnZFLFVBQUFBLE1BQU0sQ0FBQ2xFLE1BQVAsR0FBZ0J5RCxnQkFBT0MsTUFBdkI7QUFDSCxTQUZELE1BR0ssSUFBSVEsTUFBTSxDQUFDSyxNQUFQLENBQWN6RSxJQUFkLENBQW9CMEYsS0FBRCxJQUFXQSxLQUFLLENBQUN4RixNQUFOLEtBQWlCeUQsZ0JBQU9pQixPQUF0RCxDQUFKLEVBQW9FO0FBQ3JFUixVQUFBQSxNQUFNLENBQUNsRSxNQUFQLEdBQWdCeUQsZ0JBQU9pQixPQUF2QjtBQUNIO0FBQ0o7O0FBRUQsYUFBT1IsTUFBUDtBQUNILEtBakJNLENBQVA7QUFrQkg7O0FBRURzRSxFQUFBQSxjQUFjLENBQUNsSixPQUFELEVBQVU7QUFDcEIsVUFBTW9KLHdCQUF3QixHQUFHLEVBQWpDO0FBQ0FwSixJQUFBQSxPQUFPLENBQUM0SSxHQUFSLENBQWFoRSxNQUFELElBQVk7QUFDcEJBLE1BQUFBLE1BQU0sQ0FBQ0ssTUFBUCxDQUFjMkQsR0FBZCxDQUFtQjFDLEtBQUQsSUFBVztBQUN6QixZQUFJa0Qsd0JBQXdCLENBQUNDLFFBQXpCLENBQWtDbkQsS0FBSyxDQUFDSCxZQUF4QyxDQUFKLEVBQTJEO0FBQ3ZEckUsVUFBQUEsT0FBTyxDQUFDNEgsSUFBUixDQUFhLG9CQUFiLEVBQW1DcEQsS0FBSyxDQUFDSCxZQUF6QyxFQUF1RCxhQUF2RDtBQUNILFNBRkQsTUFFTztBQUNIcUQsVUFBQUEsd0JBQXdCLENBQUN2SCxJQUF6QixDQUE4QnFFLEtBQUssQ0FBQ0gsWUFBcEM7QUFDSDtBQUNKLE9BTkQ7QUFPSCxLQVJEO0FBU0g7O0FBRXlCLFFBQXBCbEQsb0JBQW9CLENBQUMwRyxRQUFELEVBQVczRyxTQUFYLEVBQXNCO0FBQzVDLFFBQUksQ0FBQ3hDLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUtPLFNBQW5CLENBQUQsSUFBa0MsS0FBS0EsU0FBTCxDQUFlTixNQUFmLElBQXlCLENBQS9ELEVBQWtFO0FBQzlELGFBQU8sS0FBUDtBQUNIOztBQUNELFNBQUssSUFBSVMsUUFBVCxJQUFxQixLQUFLSCxTQUExQixFQUFxQztBQUNqQyxVQUFJRyxRQUFRLENBQUN3SSxRQUFELENBQVosRUFBd0I7QUFDcEIsWUFBSTtBQUNBLGdCQUFNeEksUUFBUSxDQUFDd0ksUUFBRCxDQUFSLENBQW1CM0csU0FBbkIsQ0FBTjtBQUNILFNBRkQsQ0FHQSxPQUFPUixDQUFQLEVBQVU7QUFDTlYsVUFBQUEsT0FBTyxDQUFDNEgsSUFBUixDQUFjLG1DQUFrQ0MsUUFBUyxNQUFLbkgsQ0FBQyxDQUFDUixPQUFRLEVBQXhFO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7O0FBRWlDLFFBQTVCZ0YsNEJBQTRCLENBQUNELFVBQUQsRUFBYTtBQUMzQyxRQUFJLENBQUNBLFVBQUQsSUFBZSxDQUFDQSxVQUFVLENBQUM2QyxXQUEzQixJQUEwQyxDQUFDN0MsVUFBVSxDQUFDNkMsV0FBWCxDQUF1QmxKLE1BQXRFLEVBQThFO0FBQzFFO0FBQ0g7O0FBQ0QsVUFBTW1KLG1CQUFtQixHQUFHLEVBQTVCOztBQUNBLFNBQUssSUFBSUMsQ0FBQyxHQUFDLENBQVgsRUFBY0EsQ0FBQyxHQUFFL0MsVUFBVSxDQUFDNkMsV0FBWCxDQUF1QmxKLE1BQXhDLEVBQWdEb0osQ0FBQyxFQUFqRCxFQUFxRDtBQUNqRCxZQUFNQyxVQUFVLEdBQUdoRCxVQUFVLENBQUM2QyxXQUFYLENBQXVCRSxDQUF2QixDQUFuQjs7QUFDQSxVQUFJLENBQUNDLFVBQVUsQ0FBQ0MsSUFBaEIsRUFBc0I7QUFDbEI7QUFDSDs7QUFDRCxVQUFJO0FBQ0EsY0FBTUMsYUFBYSxHQUNmLE1BQU10RyxjQUFPdUcsYUFBUCxDQUFxQkgsVUFBVSxDQUFDSSxRQUFoQyxFQUEwQ0osVUFBVSxDQUFDQyxJQUFyRCxFQUEyRCxLQUFLN0osT0FBaEUsQ0FEVjs7QUFFQSxZQUFJLENBQUM4SixhQUFMLEVBQW9CO0FBQ2hCSixVQUFBQSxtQkFBbUIsQ0FBQzVILElBQXBCLENBQXlCOEgsVUFBekI7QUFDSCxTQUZELE1BR0s7QUFDREEsVUFBQUEsVUFBVSxDQUFDSyxRQUFYLEdBQXNCSCxhQUF0QjtBQUNBLGlCQUFPRixVQUFVLENBQUMsTUFBRCxDQUFqQjtBQUNIO0FBQ0osT0FWRCxDQVdBLE9BQU92SCxDQUFQLEVBQVU7QUFDTlYsUUFBQUEsT0FBTyxDQUFDNEgsSUFBUixDQUFhLGlDQUFiLEVBQWdEbEgsQ0FBQyxDQUFDUixPQUFsRDtBQUNBNkgsUUFBQUEsbUJBQW1CLENBQUM1SCxJQUFwQixDQUF5QjhILFVBQXpCO0FBQ0g7QUFDSjs7QUFFRCxTQUFLLElBQUlELENBQUMsR0FBQyxDQUFYLEVBQWNBLENBQUMsR0FBRUQsbUJBQW1CLENBQUNuSixNQUFyQyxFQUE2Q29KLENBQUMsRUFBOUMsRUFBa0Q7QUFDOUMsWUFBTU8sZ0JBQWdCLEdBQUd0RCxVQUFVLENBQUM2QyxXQUFYLENBQXVCVSxPQUF2QixDQUErQlQsbUJBQW1CLENBQUNDLENBQUQsQ0FBbEQsQ0FBekI7O0FBQ0EsVUFBSSxDQUFDTyxnQkFBRCxHQUFvQixDQUFDLENBQXpCLEVBQTRCO0FBQ3hCdEQsUUFBQUEsVUFBVSxDQUFDNkMsV0FBWCxDQUF1QlcsTUFBdkIsQ0FBOEJGLGdCQUE5QixFQUFnRCxDQUFoRDtBQUNIO0FBQ0o7QUFDSjs7QUF4aEJzRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogUmVwb3J0IGFnZ3JlZ2F0b3JcclxuICovXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgVGVzdFJlc3VsdCBmcm9tICcuLi9tb2RlbC90ZXN0LXJlc3VsdCc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5cclxuLy8gaW1wb3J0IGFsbCBidWlsdC1pbiByZXBvcnRlcnNcclxuaW1wb3J0IEpzb25SZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanNvbic7XHJcbmltcG9ydCBKVW5pdFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qdW5pdCc7XHJcbmltcG9ydCBIdG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWh0bWwnO1xyXG5pbXBvcnQgRXhjZWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItZXhjZWwnO1xyXG5pbXBvcnQgUGRmUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXBkZic7XHJcbmltcG9ydCBYbWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXIteG1sJztcclxuaW1wb3J0IFJlcG9ydFBvcnRhbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1ycCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyLFxyXG4gICAgcnA6IFJlcG9ydFBvcnRhbFJlcG9ydGVyLFxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgLy8gdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vIElmIHJlcG9ydGVyIFwiZW5hYmxlZFwiIHByb3BlcnR5IGlzIFwiZmFsc2VcIiB0aGVuIHNraXAgdGhlIHJlcG9ydGVyXHJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0ZXJPcHRzICYmIHR5cGVvZiByZXBvcnRlck9wdHMuZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nICYmICFyZXBvcnRlck9wdHMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcG9ydGVyIGhhcyBcImluaXRcIiBmdW5jdGlvbiwgdXNlIGl0IHRvIGluaXRpYWxpemUgdGhlIHJlcG9ydGVyXHJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0ZXIuaW5pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlcG9ydGVyLmluaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGluaXRpYWxpemUgXCIke3JlcG9ydGVyTmFtZX1cIiByZXBvcnRlcjogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGVycy5wdXNoKHJlcG9ydGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcG9ydFBhdGggPSBhd2FpdCByZXBvcnRlci5nZW5lcmF0ZShncm91cGVkUmVzdWx0cyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0UGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBZb3VyIHJlcG9ydCBpcyByZWFkeTogJHtyZXBvcnRQYXRofWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZXBvcnQgZ2VuZXJhdGlvbiBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uTGF1bmNoU3RhcnQob3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgb3B0aW9uc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25MYXVuY2hTdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25MYXVuY2hFbmQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByZXN1bHRzXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2xhdW5jaDplbmQnLCByZXN1bHRzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkxhdW5jaEVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25SdW5uZXJTdGFydChyaWQsIG9wdHMsIGNhcHMpIHtcclxuICAgICAgICBpZiAoIXJpZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmlkXCIgY2Fubm90IGJlIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnJpZCA9IHJpZDtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm5hbWUgPSBvcHRzLm5hbWUgfHwgREVGQVVMVF9URVNUX05BTUU7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuZW52aXJvbm1lbnQgPSBvcHRzLmVudlZhcnMgfHwge307XHJcbiAgICAgICAgdGVzdFJlc3VsdC5vcHRpb25zID0gb3B0cztcclxuICAgICAgICB0aGlzLnJlc3VsdHMucHVzaCh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgcHJvbWlzZSBmb3IgbGF0ZXIgdG8gYmUgcmVzb2x2ZWQgb24gcnVubmVyOmVuZCBldmVudFxyXG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFRlc3QgJHtyaWR9IGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblJ1bm5lclN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IHN0YXR1cyBiYXNlZCBvbiBzdWl0ZXMgc3RhdHVzZXNcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5zdGF0dXMgPSB0aGlzLl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcik7XHJcbiAgICAgICAgICAgIC8vIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uUnVubmVyRW5kJywgZXZlbnRBcmdzKTtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XHJcbiAgICAgICAgICAgIC8vIGNhbGxpbmcgbmV4dFRpY2soKSB3aWxsIGhlbHAgdXMgdG8gaW5zdXJlIHRoYXQgd2UgcmVzb2x2ZSB0aGUgcHJvbWlzZSBhZnRlciBlbWl0KCdydW5uZXI6ZW5kJykgaGFzIGNvbXBsZXRlZFxyXG4gICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXS5yZXNvbHZlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyh0ZXN0UmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgaWYgKGhhc0ZhaWxlZFN1aXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaGFzV2FybmluZ1N1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpO1xyXG4gICAgICAgIGlmIChoYXNXYXJuaW5nU3VpdGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuV0FSTklORztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWxsU3VpdGVzU2tpcHBlZCA9IHRlc3RSZXN1bHQuc3VpdGVzLmV2ZXJ5KHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5TS0lQUEVEKTtcclxuICAgICAgICBpZiAoYWxsU3VpdGVzU2tpcHBlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLlNLSVBQRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uSXRlcmF0aW9uU3RhcnQocmlkLCBpdGVyYXRpb24sIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke2l0ZXJhdGlvbn0gc3RhcnRlZC4uLmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25JdGVyYXRpb25FbmQocmlkLCByZXN1bHQsIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdD8uaXRlcmF0aW9uTnVtICYmIHJlc3VsdC5zdGF0dXM/LnRvVXBwZXJDYXNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3N0YXJ0fSBJdGVyYXRpb24gIyR7cmVzdWx0Lml0ZXJhdGlvbk51bX0gZW5kZWQgd2l0aCBzdGF0dXM6ICR7cmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VpdGVTdGFydChyaWQsIHN1aXRlSWQsIHN1aXRlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFN1aXRlIFwiJHtzdWl0ZS5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgbGV0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkOiBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBzdWl0ZTogc3VpdGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN1aXRlU3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU3VpdGVFbmQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlc3RSZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdWl0ZTplbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uU3VpdGVFbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlUmVmSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTpzdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25DYXNlU3RhcnQnLCBldmVudEFyZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FzZUVuZChyaWQsIHN1aXRlSWQsIHN1aXRlUmVmSWQsIGNhc2VJZCwgY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVRlc3RDYXNlVmlkZW9BdHRhY2htZW50KGNhc2VSZXN1bHQpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBzdWl0ZVJlZklkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogY2FzZVJlc3VsdCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCBldmVudEFyZ3MpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uQ2FzZUVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdGVwU3RhcnQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXApIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcC5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0JywgZXZlbnRBcmdzKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN0ZXBTdGFydCcsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TdGVwRW5kKHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBzdGVwUmVzdWx0KSB7XHJcbiAgICAgICAgLy9jb25zdCBzdGF0dXMgPSBzdGVwUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIC8vY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcFJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCBpbiAke2R1cmF0aW9ufXMgd2l0aCBzdGF0dXM6ICR7c3RhdHVzfS5gKTtcclxuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIGV2ZW50QXJncyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25TdGVwRW5kJywgZXZlbnRBcmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkxvZ0VudHJ5KHRpbWUsIGxldmVsLCBtc2csIHNyYyA9IG51bGwsIHsgc3VpdGVJZCwgY2FzZUlkLCBzdGVwSWQgfSA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHN0ZXBJZCxcclxuICAgICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgdGltZSxcclxuICAgICAgICAgICAgc3JjXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2xvZycsIGV2ZW50QXJncyk7XHJcblxyXG4gICAgICAgIGlmICghdGltZSkge1xyXG4gICAgICAgICAgICBldmVudEFyZ3MudGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkxvZycsIGV2ZW50QXJncyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBmYWlsdXJlIG9iamVjdCBpbiBvbmUgb2YgdGVzdCByZXN1bHQncyBlbnRpdGllcy4gXHJcbiAgICAgKiBAcGFyYW0ge1Rlc3RSZXN1bHR9IHRlc3RSZXN1bHQgXHJcbiAgICAgKi9cclxuICAgIF9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCkge1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHN1aXRlUmVzdWx0IG9mIHRlc3RSZXN1bHQuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWl0ZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZVJlc3VsdCBvZiBzdWl0ZVJlc3VsdC5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXNlUmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc2VSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3RlcFJlc3VsdCBvZiBjYXNlUmVzdWx0LnN0ZXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXBSZXN1bHQuZmFpbHVyZSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBncm91cFJlc3VsdHMoKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHMgPSB7fTtcclxuICAgICAgICBjb25zdCB1bmdyb3VwZWRSZXN1bHRzID0gW107XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVzdWx0cykgfHwgdGhpcy5yZXN1bHRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHRoaXMucmVzdWx0cykge1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdCB8fCAhcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnJlc3VsdEtleSkge1xyXG4gICAgICAgICAgICAgICAgdW5ncm91cGVkUmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRLZXkgPSByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5O1xyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZUtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5zdWl0ZUtleTtcclxuICAgICAgICAgICAgbGV0IGdyb3VwZWRSZXN1bHQgPSBncm91cGVkUmVzdWx0c1tyZXN1bHRLZXldO1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQgPSBncm91cGVkUmVzdWx0c1tyZXN1bHRLZXldID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ10gPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUsIHJlc3VsdC5zdGFydFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFJlc3VsdC5lbmRUaW1lLCByZXN1bHQuZW5kVGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFJlc3VsdC5lbmRUaW1lIC0gZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgZ3JvdXBpbmcgaXMgYnkgcmVzdWx0IG9ubHksIHRoZW4ganVzdCBhcHBlbmQgY3VycmVudCByZXN1bHQncyBzdWl0ZXMgdG8gdGhlIGdyb3VwJ3Mgc3VpdGVzXHJcbiAgICAgICAgICAgIGlmICghc3VpdGVLZXkpIHtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3VpdGVzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwZWRSZXN1bHQuc3VpdGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zdWl0ZXNcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRTdWl0ZVJlc3VsdCBvZiByZXN1bHQuc3VpdGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSBgJHtzdWl0ZUtleX0tJHtjdXJyZW50U3VpdGVSZXN1bHQuaXRlcmF0aW9uTnVtfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFN1aXRlUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtncm91cEtleV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cGVkU3VpdGVSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtncm91cEtleV0gPSB7IC4uLmN1cnJlbnRTdWl0ZVJlc3VsdCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSA9IE1hdGgubWluKGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGFydFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5zdGFydFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuZW5kVGltZSA9IE1hdGgubWF4KGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lLCBjdXJyZW50U3VpdGVSZXN1bHQuZW5kVGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5kdXJhdGlvbiA9IGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lIC0gZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmNhc2VzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFN1aXRlUmVzdWx0LmNhc2VzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFN1aXRlUmVzdWx0LmNhc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFN1aXRlUmVzdWx0LmNhc2VzLnNvbWUoYyA9PiBjLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29udmVydCBncm91cGVkIHJlc3VsdHMgaGFzaCB0byBhbiBhcnJheVxyXG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHRzTGlzdCA9IE9iamVjdC5rZXlzKGdyb3VwZWRSZXN1bHRzKS5tYXAoXHJcbiAgICAgICAgICAgIGdyb3VwS2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHQgPSBncm91cGVkUmVzdWx0c1tncm91cEtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRSZXN1bHQuX3N1aXRlc0hhc2gpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3VpdGVzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwZWRSZXN1bHQuc3VpdGVzLFxyXG4gICAgICAgICAgICAgICAgICAgIC4uLk9iamVjdC5rZXlzKGdyb3VwZWRSZXN1bHQuX3N1aXRlc0hhc2gpLm1hcChzdWl0ZUdyb3VwS2V5ID0+IGdyb3VwZWRSZXN1bHQuX3N1aXRlc0hhc2hbc3VpdGVHcm91cEtleV0pXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RGYWlsZWRTdWl0ZSA9IGdyb3VwZWRSZXN1bHQuc3VpdGVzLmZpbmQocyA9PiBzLnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RGYWlsZWRTdWl0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdEZhaWxlZFN1aXRlLmZhaWx1cmUgfHwgZ3JvdXBlZFJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RTdWl0ZVdpdGhXYXJuaW5nID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0U3VpdGVXaXRoV2FybmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdFN1aXRlV2l0aFdhcm5pbmcuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbLi4uZ3JvdXBlZFJlc3VsdHNMaXN0LCAuLi51bmdyb3VwZWRSZXN1bHRzXTtcclxuICAgICAgICAvLyBjaGFuZ2UgcmVzdWx0cyBzdGF0dXMgdG8gZmFpZGVkIGlmIGZhaWxlZCBzdWl0ZXMgYXJlIGZpbmRlZFxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0LnN1aXRlcykgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3VpdGVzLmZpbmQoKHN1aXRlKSA9PiBzdWl0ZS5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVJlc3VsdChyZXN1bHRzKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzID0gW107XHJcbiAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMuaW5jbHVkZXMoc3VpdGUuaXRlcmF0aW9uTnVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3VpdGUuaXRlcmF0aW9uTnVtJywgc3VpdGUuaXRlcmF0aW9uTnVtLCAnIG5vdCB1bmlxdWUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLnB1c2goc3VpdGUuaXRlcmF0aW9uTnVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2ludm9rZVJlcG9ydGVyc0hvb2soaG9va05hbWUsIGV2ZW50QXJncykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBpZiAocmVwb3J0ZXJbaG9va05hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlcG9ydGVyW2hvb2tOYW1lXShldmVudEFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBpbnZva2UgcmVwb3J0ZXIgaG9vayBcIiR7aG9va05hbWV9XCI6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zYXZlVGVzdENhc2VWaWRlb0F0dGFjaG1lbnQoY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGlmICghY2FzZVJlc3VsdCB8fCAhY2FzZVJlc3VsdC5hdHRhY2htZW50cyB8fCAhY2FzZVJlc3VsdC5hdHRhY2htZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhdHRhY2htZW50c1RvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzW2ldO1xyXG4gICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnQuX3VybCkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvRmlsZVBhdGggPVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG94dXRpbC5kb3dubG9hZFZpZGVvKGF0dGFjaG1lbnQuZmlsZU5hbWUsIGF0dGFjaG1lbnQuX3VybCwgdGhpcy5vcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmICghdmlkZW9GaWxlUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzVG9SZW1vdmUucHVzaChhdHRhY2htZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQuZmlsZVBhdGggPSB2aWRlb0ZpbGVQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhdHRhY2htZW50WydfdXJsJ107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGRvd25sb2FkIHZpZGVvIGZpbGU6ICcsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50c1RvUmVtb3ZlLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gcmVtb3ZlIHZpZGVvIGF0dGFjaG1lbnRzIHRoYXQgY291bGRuJ3QgYmUgZG93bmxvYWRlZFxyXG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgYXR0YWNobWVudHNUb1JlbW92ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbG1JbmRleFRvUmVtb3ZlID0gY2FzZVJlc3VsdC5hdHRhY2htZW50cy5pbmRleE9mKGF0dGFjaG1lbnRzVG9SZW1vdmVbaV0pO1xyXG4gICAgICAgICAgICBpZiAoIWVsbUluZGV4VG9SZW1vdmUgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZVJlc3VsdC5hdHRhY2htZW50cy5zcGxpY2UoZWxtSW5kZXhUb1JlbW92ZSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
|
|
607
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiZ2V0RXhpdENvZGUiLCJleGl0Q29kZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInRlc3RGYWlsZGVkIiwiZmluZCIsIml0ZW0iLCJzdGF0dXMiLCJpbml0IiwiX294aWRlIiwiZGVmYXVsdCIsIlJlcG9ydFBvcnRhbFJlcG9ydGVyIiwicnAiLCJyZXBvcnRlcnMiLCJnZW5lcmFsUmVwb3J0aW5nT3B0cyIsInJlcG9ydGluZyIsInJlcG9ydGVyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVwb3J0ZXJOYW1lIiwibmFtZSIsInJlcG9ydGVyT3B0cyIsInVuZGVmaW5lZCIsImVuYWJsZWQiLCJlcnIiLCJjb25zb2xlIiwibG9nIiwibWVzc2FnZSIsInB1c2giLCJnZXRSZXN1bHRzIiwiZ2VuZXJhdGVSZXBvcnRzIiwiZ3JvdXBlZFJlc3VsdHMiLCJncm91cFJlc3VsdHMiLCJyZXBvcnRQYXRoIiwiZ2VuZXJhdGUiLCJlIiwiZXJyb3IiLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25MYXVuY2hTdGFydCIsImV2ZW50QXJncyIsIl9pbnZva2VSZXBvcnRlcnNIb29rIiwib25MYXVuY2hFbmQiLCJlbWl0Iiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsIm9uUnVubmVyRW5kIiwiZmluYWxSZXN1bHQiLCJmYXRhbEVycm9yIiwieCIsImVuZFRpbWUiLCJkdXJhdGlvbiIsIl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXMiLCJTdGF0dXMiLCJGQUlMRUQiLCJmYWlsdXJlIiwiZXJyb3JIZWxwZXIiLCJnZXRGYWlsdXJlRnJvbUVycm9yIiwiX2dldEZpcnN0RmFpbHVyZSIsInR5cGUiLCJsb2NhdGlvbiIsInRvVXBwZXJDYXNlIiwicmVzdWx0IiwicHJvY2VzcyIsIm5leHRUaWNrIiwicmVzb2x2ZSIsImhhc0ZhaWxlZFN1aXRlcyIsInN1aXRlcyIsInNvbWUiLCJoYXNXYXJuaW5nU3VpdGVzIiwiV0FSTklORyIsImFsbFN1aXRlc1NraXBwZWQiLCJldmVyeSIsIlNLSVBQRUQiLCJQQVNTRUQiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsInN1aXRlUmVmSWQiLCJjYXNlSWQiLCJjYXNlRGVmIiwiY2FzZSIsIm9uQ2FzZUVuZCIsImNhc2VSZXN1bHQiLCJfc2F2ZVRlc3RDYXNlVmlkZW9BdHRhY2htZW50Iiwib25TdGVwU3RhcnQiLCJzdGVwIiwicm9vdFBhdGgiLCJmcmFtZXdvcmsiLCJmdWxsUGF0aCIsInBhdGgiLCJvblN0ZXBFbmQiLCJzdGVwUmVzdWx0IiwidGltZSIsImxldmVsIiwic3JjIiwic3RlcElkIiwiRGF0ZSIsIm5vdyIsImNhc2VzIiwic3RlcHMiLCJ1bmdyb3VwZWRSZXN1bHRzIiwiX2dyb3VwUmVzdWx0IiwicmVzdWx0S2V5Iiwic3VpdGVLZXkiLCJncm91cGVkUmVzdWx0IiwiTWF0aCIsIm1pbiIsIm1heCIsImN1cnJlbnRTdWl0ZVJlc3VsdCIsImdyb3VwS2V5IiwiZ3JvdXBlZFN1aXRlUmVzdWx0IiwiX3N1aXRlc0hhc2giLCJjIiwiZ3JvdXBlZFJlc3VsdHNMaXN0Iiwia2V5cyIsIm1hcCIsInN1aXRlR3JvdXBLZXkiLCJmaXJzdEZhaWxlZFN1aXRlIiwicyIsImZpcnN0U3VpdGVXaXRoV2FybmluZyIsInJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzIiwidmFsaWRhdGVSZXN1bHQiLCJmYWlsZWQiLCJ1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMiLCJpbmNsdWRlcyIsIndhcm4iLCJob29rTmFtZSIsImF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHNUb1JlbW92ZSIsImkiLCJhdHRhY2htZW50IiwiX3VybCIsInZpZGVvRmlsZVBhdGgiLCJkb3dubG9hZFZpZGVvIiwiZmlsZU5hbWUiLCJmaWxlUGF0aCIsImVsbUluZGV4VG9SZW1vdmUiLCJpbmRleE9mIiwic3BsaWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFEUTtBQUVkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUZPO0FBR2RDLEVBQUFBLElBQUksRUFBRUMscUJBSFE7QUFJZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFKTztBQUtkQyxFQUFBQSxHQUFHLEVBQUVDLG9CQUxTO0FBTWRDLEVBQUFBLEdBQUcsRUFBRUM7QUFOUyxDQUFsQjtBQVNBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFBTUMsaUJBQWlCLEdB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QUtqSyxPQUFoRSxDQURWOztBQUVBLFlBQUksQ0FBQ2tLLGFBQUwsRUFBb0I7QUFDaEJKLFVBQUFBLG1CQUFtQixDQUFDNUgsSUFBcEIsQ0FBeUI4SCxVQUF6QjtBQUNILFNBRkQsTUFHSztBQUNEQSxVQUFBQSxVQUFVLENBQUNLLFFBQVgsR0FBc0JILGFBQXRCO0FBQ0EsaUJBQU9GLFVBQVUsQ0FBQyxNQUFELENBQWpCO0FBQ0g7QUFDSixPQVZELENBV0EsT0FBT3ZILENBQVAsRUFBVTtBQUNOVixRQUFBQSxPQUFPLENBQUM0SCxJQUFSLENBQWEsaUNBQWIsRUFBZ0RsSCxDQUFDLENBQUNSLE9BQWxEO0FBQ0E2SCxRQUFBQSxtQkFBbUIsQ0FBQzVILElBQXBCLENBQXlCOEgsVUFBekI7QUFDSDtBQUNKOztBQUVELFNBQUssSUFBSUQsQ0FBQyxHQUFDLENBQVgsRUFBY0EsQ0FBQyxHQUFFRCxtQkFBbUIsQ0FBQ3ZKLE1BQXJDLEVBQTZDd0osQ0FBQyxFQUE5QyxFQUFrRDtBQUM5QyxZQUFNTyxnQkFBZ0IsR0FBR3RELFVBQVUsQ0FBQzZDLFdBQVgsQ0FBdUJVLE9BQXZCLENBQStCVCxtQkFBbUIsQ0FBQ0MsQ0FBRCxDQUFsRCxDQUF6Qjs7QUFDQSxVQUFJLENBQUNPLGdCQUFELEdBQW9CLENBQUMsQ0FBekIsRUFBNEI7QUFDeEJ0RCxRQUFBQSxVQUFVLENBQUM2QyxXQUFYLENBQXVCVyxNQUF2QixDQUE4QkYsZ0JBQTlCLEVBQWdELENBQWhEO0FBQ0g7QUFDSjtBQUNKOztBQTNoQnNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG4vKlxuICogUmVwb3J0IGFnZ3JlZ2F0b3JcbiAqL1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xuXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xuaW1wb3J0IEpzb25SZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanNvbic7XG5pbXBvcnQgSlVuaXRSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanVuaXQnO1xuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XG5pbXBvcnQgRXhjZWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItZXhjZWwnO1xuaW1wb3J0IFBkZlJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1wZGYnO1xuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xuXG5jb25zdCBSZXBvcnRlcnMgPSB7XG4gICAganNvbjogSnNvblJlcG9ydGVyLFxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxuICAgIGh0bWw6IEh0bWxSZXBvcnRlcixcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxuICAgIHhtbDogWG1sUmVwb3J0ZXIsXG59O1xuXG5jb25zdCBERUZBVUxUX1RFU1RfTkFNRSA9ICdPeHlnZW4gVGVzdCc7XG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRBZ2dyZWdhdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8vIHJlc3VsdHMgaGFzaCB0YWJsZSBiYXNlZCBvbiBydW5uZXIgaWQga2V5XG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICAvLyBhIGhhc2ggbGlzdCBvZiBydW5uZXJFbmQgZXZlbnQgcHJvbWlzZXMsIGtleWVkIGJ5IHJ1bm5lciBpZFxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzID0ge307XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0RXhpdENvZGUoKSB7XG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMucmVzdWx0cykgJiZcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdGVzdEZhaWxkZWQgPSB0aGlzLnJlc3VsdHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcblxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XG4gICAgICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBicm9rZW4gP1xuICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5fb3hpZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdDogUmVwb3J0UG9ydGFsUmVwb3J0ZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXJwJyk7XG4gICAgICAgICAgICBSZXBvcnRlcnMucnAgPSBSZXBvcnRQb3J0YWxSZXBvcnRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xuICAgICAgICBjb25zdCBnZW5lcmFsUmVwb3J0aW5nT3B0cyA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcgfHwge307XG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIGdlbmVyYWxSZXBvcnRpbmdPcHRzLnJlcG9ydGVycyB8fCBERUZBVUxUX1JFUE9SVEVSUykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXBvcnRlcnMgdGhhdCBkbyBub3QgaGF2ZSAnbmFtZScgcHJvcGVydHkgYXMgaXQncyBlc3NlbnRpYWwgdG8gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBSZXBvcnRlciBjbGFzc1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXBvcnRlck5hbWUgPSB0eXBlb2YgcmVwb3J0ZXIgPT09ICdzdHJpbmcnID8gcmVwb3J0ZXIgOiByZXBvcnRlci5uYW1lO1xuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHJlcG9ydGVyIFwiZW5hYmxlZFwiIHByb3BlcnR5IGlzIFwiZmFsc2VcIiB0aGVuIHNraXAgdGhlIHJlcG9ydGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydGVyT3B0cyAmJiB0eXBlb2YgcmVwb3J0ZXJPcHRzLmVuYWJsZWQgPT09ICdib29sZWFuJyAmJiAhcmVwb3J0ZXJPcHRzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyc1tyZXBvcnRlck5hbWVdKHRoaXMub3B0aW9ucywgcmVwb3J0ZXJPcHRzLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVwb3J0ZXIgaGFzIFwiaW5pdFwiIGZ1bmN0aW9uLCB1c2UgaXQgdG8gaW5pdGlhbGl6ZSB0aGUgcmVwb3J0ZXJcbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0ZXIuaW5pdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVwb3J0ZXIuaW5pdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBcIiR7cmVwb3J0ZXJOYW1lfVwiIHJlcG9ydGVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gocmVwb3J0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmVzdWx0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG5cbiAgICBhc3luYyBnZW5lcmF0ZVJlcG9ydHMoKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIHRoaXMucmVwb3J0ZXJzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcG9ydFBhdGggPSBhd2FpdCByZXBvcnRlci5nZW5lcmF0ZShncm91cGVkUmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcG9ydFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZXBvcnQgZ2VuZXJhdGlvbiBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XG4gICAgICAgIGlmICghcmlkIHx8ICF0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF07XG4gICAgfVxuXG4gICAgYXN5bmMgd2FpdEZvclJlc3VsdHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzICYmIHRoaXMucnVubmVyRW5kUHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkxhdW5jaFN0YXJ0KG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkxhdW5jaFN0YXJ0JywgZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkxhdW5jaEVuZCgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJlc3VsdHNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbWl0KCdsYXVuY2g6ZW5kJywgcmVzdWx0cyk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uTGF1bmNoRW5kJywgZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICBhc3luYyBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xuICAgICAgICBpZiAoIXJpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJpZFwiIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gbmV3IFRlc3RSZXN1bHQoKTtcbiAgICAgICAgdGVzdFJlc3VsdC5yaWQgPSByaWQ7XG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcbiAgICAgICAgdGVzdFJlc3VsdC5zdGFydFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gY2FwcztcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcbiAgICAgICAgdGVzdFJlc3VsdC5vcHRpb25zID0gb3B0cztcbiAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2godGVzdFJlc3VsdCk7XG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XG4gICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSA9IGRlZmVyKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgc3RhcnRlZC4uLmApO1xuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByaWQsXG4gICAgICAgICAgICBvcHRzLFxuICAgICAgICAgICAgY2Fwc1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIGV2ZW50QXJncyk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uUnVubmVyU3RhcnQnLCBldmVudEFyZ3MpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uUnVubmVyRW5kKHJpZCwgZmluYWxSZXN1bHQsIGZhdGFsRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmVuZFRpbWUgPSBveHV0aWwuZ2V0VGltZVN0YW1wKCk7XG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgdGVzdCBzdGF0dXMgYmFzZWQgb24gc3VpdGVzIHN0YXR1c2VzXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IHRoaXMuX2RldGVybWluZVRlc3RTdGF0dXNCeVN1aXRlcyh0ZXN0UmVzdWx0LCBmYXRhbEVycm9yKTtcbiAgICAgICAgICAgIC8vIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChmYXRhbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IGZhdGFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZmF0YWxFcnJvcikgOiBmYXRhbEVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gdGhpcy5fZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUgJiYgdGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZS50eXBlfWApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIGZpbmlzaGVkIHdpdGggc3RhdHVzOiAke3Rlc3RSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJpZCxcbiAgICAgICAgICAgIHJlc3VsdDogdGVzdFJlc3VsdCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbWl0KCdydW5uZXI6ZW5kJywgZXZlbnRBcmdzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5faW52b2tlUmVwb3J0ZXJzSG9vaygnb25SdW5uZXJFbmQnLCBldmVudEFyZ3MpO1xuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdKSB7XG4gICAgICAgICAgICAvLyBjYWxsaW5nIG5leHRUaWNrKCkgd2lsbCBoZWxwIHVzIHRvIGluc3VyZSB0aGF0IHdlIHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgZW1pdCgncnVubmVyOmVuZCcpIGhhcyBjb21wbGV0ZWRcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXS5yZXNvbHZlKHRlc3RSZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZGV0ZXJtaW5lVGVzdFN0YXR1c0J5U3VpdGVzKHRlc3RSZXN1bHQsIGZhdGFsRXJyb3IpIHtcbiAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFN1aXRlcyA9IHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XG4gICAgICAgIGlmIChoYXNGYWlsZWRTdWl0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc1dhcm5pbmdTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcbiAgICAgICAgaWYgKGhhc1dhcm5pbmdTdWl0ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuV0FSTklORztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGxTdWl0ZXNTa2lwcGVkID0gdGVzdFJlc3VsdC5zdWl0ZXMuZXZlcnkoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLlNLSVBQRUQpO1xuICAgICAgICBpZiAoYWxsU3VpdGVzU2tpcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TS0lQUEVEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdGF0dXMuUEFTU0VEO1xuICAgIH1cblxuICAgIGFzeW5jIG9uSXRlcmF0aW9uU3RhcnQocmlkLCBpdGVyYXRpb24sIHN0YXJ0KSB7XG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3N0YXJ0fSBJdGVyYXRpb24gIyR7aXRlcmF0aW9ufSBzdGFydGVkLi4uYDtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkl0ZXJhdGlvbkVuZChyaWQsIHJlc3VsdCwgc3RhcnQpIHtcbiAgICAgICAgaWYgKHJlc3VsdD8uaXRlcmF0aW9uTnVtICYmIHJlc3VsdC5zdGF0dXM/LnRvVXBwZXJDYXNlKSB7XG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke3Jlc3VsdC5pdGVyYXRpb25OdW19IGVuZGVkIHdpdGggc3RhdHVzOiAke3Jlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYDtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvblN1aXRlU3RhcnQocmlkLCBzdWl0ZUlkLCBzdWl0ZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcbiAgICAgICAgbGV0IGV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJpZCxcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXG4gICAgICAgICAgICBzdWl0ZTogc3VpdGUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6c3RhcnQnLCBldmVudEFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN1aXRlU3RhcnQnLCBldmVudEFyZ3MpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uU3VpdGVFbmQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlc3VsdCkge1xuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcbiAgICAgICAgaWYgKCF0ZXN0UmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGVzdFJlc3VsdC5zdWl0ZXMucHVzaChzdWl0ZVJlc3VsdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByaWQsXG4gICAgICAgICAgICBzdWl0ZUlkLFxuICAgICAgICAgICAgcmVzdWx0OiBzdWl0ZVJlc3VsdCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbWl0KCdzdWl0ZTplbmQnLCBldmVudEFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvblN1aXRlRW5kJywgZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkNhc2VTdGFydChyaWQsIHN1aXRlSWQsIHN1aXRlUmVmSWQsIGNhc2VJZCwgY2FzZURlZikge1xuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlRGVmLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcmlkLFxuICAgICAgICAgICAgc3VpdGVJZCxcbiAgICAgICAgICAgIHN1aXRlUmVmSWQsXG4gICAgICAgICAgICBjYXNlSWQsXG4gICAgICAgICAgICBjYXNlOiBjYXNlRGVmLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVtaXQoJ2Nhc2U6c3RhcnQnLCBldmVudEFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkNhc2VTdGFydCcsIGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25DYXNlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZWZJZCwgY2FzZUlkLCBjYXNlUmVzdWx0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX3NhdmVUZXN0Q2FzZVZpZGVvQXR0YWNobWVudChjYXNlUmVzdWx0KTtcbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcmlkLFxuICAgICAgICAgICAgc3VpdGVJZCxcbiAgICAgICAgICAgIHN1aXRlUmVmSWQsXG4gICAgICAgICAgICBjYXNlSWQsXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCBldmVudEFyZ3MpO1xuICAgICAgICBhd2FpdCB0aGlzLl9pbnZva2VSZXBvcnRlcnNIb29rKCdvbkNhc2VFbmQnLCBldmVudEFyZ3MpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uU3RlcFN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBzdGVwKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMucm9vdFBhdGgsIHN0ZXAubG9jYXRpb24pO1xuICAgICAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGZ1bGxQYXRoKyc6MSc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcmlkLFxuICAgICAgICAgICAgc3VpdGVJZCxcbiAgICAgICAgICAgIGNhc2VJZCxcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdCgnc3RlcDpzdGFydCcsIGV2ZW50QXJncyk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uU3RlcFN0YXJ0JywgZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICBhc3luYyBvblN0ZXBFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIHN0ZXBSZXN1bHQpIHtcbiAgICAgICAgLy9jb25zdCBzdGF0dXMgPSBzdGVwUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAvL2NvbnN0IGR1cmF0aW9uID0gc3RlcFJlc3VsdC5kdXJhdGlvbiA/IChzdGVwUmVzdWx0LmR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgyKSA6IDA7XG4gICAgICAgIC8vY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIGluICR7ZHVyYXRpb259cyB3aXRoIHN0YXR1czogJHtzdGF0dXN9LmApO1xuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByaWQsXG4gICAgICAgICAgICBzdWl0ZUlkLFxuICAgICAgICAgICAgY2FzZUlkLFxuICAgICAgICAgICAgc3RlcDogc3RlcFJlc3VsdCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIGV2ZW50QXJncyk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uU3RlcEVuZCcsIGV2ZW50QXJncyk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25Mb2dFbnRyeSh0aW1lLCBsZXZlbCwgbXNnLCBzcmMgPSBudWxsLCB7IHN1aXRlSWQsIGNhc2VJZCwgc3RlcElkIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBzdWl0ZUlkLFxuICAgICAgICAgICAgY2FzZUlkLFxuICAgICAgICAgICAgc3RlcElkLFxuICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICBtc2csXG4gICAgICAgICAgICB0aW1lLFxuICAgICAgICAgICAgc3JjXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywgZXZlbnRBcmdzKTtcblxuICAgICAgICBpZiAoIXRpbWUpIHtcbiAgICAgICAgICAgIGV2ZW50QXJncy50aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuX2ludm9rZVJlcG9ydGVyc0hvb2soJ29uTG9nJywgZXZlbnRBcmdzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBmYWlsdXJlIG9iamVjdCBpbiBvbmUgb2YgdGVzdCByZXN1bHQncyBlbnRpdGllcy4gXG4gICAgICogQHBhcmFtIHtUZXN0UmVzdWx0fSB0ZXN0UmVzdWx0IFxuICAgICAqL1xuICAgIF9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCkge1xuICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc3VsdC5mYWlsdXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuZmFpbHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGVSZXN1bHQuZmFpbHVyZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2FzZVJlc3VsdCBvZiBzdWl0ZVJlc3VsdC5jYXNlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5mYWlsdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXBSZXN1bHQgb2YgY2FzZVJlc3VsdC5zdGVwcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ3JvdXBSZXN1bHRzKCkge1xuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xuICAgICAgICBjb25zdCB1bmdyb3VwZWRSZXN1bHRzID0gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpIHx8IHRoaXMucmVzdWx0cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiB0aGlzLnJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0IHx8ICFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgdW5ncm91cGVkUmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHRLZXkgPSByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5O1xuICAgICAgICAgICAgY29uc3Qgc3VpdGVLZXkgPSByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuc3VpdGVLZXk7XG4gICAgICAgICAgICBsZXQgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV07XG4gICAgICAgICAgICBpZiAoIWdyb3VwZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbcmVzdWx0S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdWl0ZXM6IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ10gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN0YXJ0VGltZSA9IE1hdGgubWluKGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lLCByZXN1bHQuc3RhcnRUaW1lKTtcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmVuZFRpbWUgPSBNYXRoLm1heChncm91cGVkUmVzdWx0LmVuZFRpbWUsIHJlc3VsdC5lbmRUaW1lKTtcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFJlc3VsdC5lbmRUaW1lIC0gZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBncm91cGluZyBpcyBieSByZXN1bHQgb25seSwgdGhlbiBqdXN0IGFwcGVuZCBjdXJyZW50IHJlc3VsdCdzIHN1aXRlcyB0byB0aGUgZ3JvdXAncyBzdWl0ZXNcbiAgICAgICAgICAgIGlmICghc3VpdGVLZXkpIHtcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN1aXRlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5zdWl0ZXNcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50U3VpdGVSZXN1bHQgb2YgcmVzdWx0LnN1aXRlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3N1aXRlS2V5fS0ke2N1cnJlbnRTdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW19YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFN1aXRlUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtncm91cEtleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFN1aXRlUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuZW5kVGltZSA9IE1hdGgubWF4KGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lLCBjdXJyZW50U3VpdGVSZXN1bHQuZW5kVGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuZHVyYXRpb24gPSBncm91cGVkU3VpdGVSZXN1bHQuZW5kVGltZSAtIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGFydFRpbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFN1aXRlUmVzdWx0LmNhc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFN1aXRlUmVzdWx0LmNhc2VzLnNvbWUoYyA9PiBjLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnZlcnQgZ3JvdXBlZCByZXN1bHRzIGhhc2ggdG8gYW4gYXJyYXlcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHNMaXN0ID0gT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdHMpLm1hcChcbiAgICAgICAgICAgIGdyb3VwS2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbZ3JvdXBLZXldO1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwZWRSZXN1bHQuc3VpdGVzLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoKS5tYXAoc3VpdGVHcm91cEtleSA9PiBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW3N1aXRlR3JvdXBLZXldKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RGYWlsZWRTdWl0ZSA9IGdyb3VwZWRSZXN1bHQuc3VpdGVzLmZpbmQocyA9PiBzLnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0RmFpbGVkU3VpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdEZhaWxlZFN1aXRlLmZhaWx1cmUgfHwgZ3JvdXBlZFJlc3VsdC5mYWlsdXJlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RTdWl0ZVdpdGhXYXJuaW5nID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFN1aXRlV2l0aFdhcm5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdFN1aXRlV2l0aFdhcm5pbmcuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ107XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGxldCByZXN1bHRzID0gWy4uLmdyb3VwZWRSZXN1bHRzTGlzdCwgLi4udW5ncm91cGVkUmVzdWx0c107XG4gICAgICAgIC8vIGNoYW5nZSByZXN1bHRzIHN0YXR1cyB0byBmYWlkZWQgaWYgZmFpbGVkIHN1aXRlcyBhcmUgZmluZGVkXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpO1xuXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXN1bHQocmVzdWx0cyk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcbiAgICAgICAgICAgICAgICByZXN1bHQuc3VpdGVzICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuc3VpdGVzKSAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0LnN1aXRlcy5maW5kKChzdWl0ZSkgPT4gc3VpdGUuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3VpdGVzLmZpbmQoKHN1aXRlKSA9PiBzdWl0ZS5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVJlc3VsdChyZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcyA9IFtdO1xuICAgICAgICByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLmluY2x1ZGVzKHN1aXRlLml0ZXJhdGlvbk51bSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzdWl0ZS5pdGVyYXRpb25OdW0nLCBzdWl0ZS5pdGVyYXRpb25OdW0sICcgbm90IHVuaXF1ZScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcy5wdXNoKHN1aXRlLml0ZXJhdGlvbk51bSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIF9pbnZva2VSZXBvcnRlcnNIb29rKGhvb2tOYW1lLCBldmVudEFyZ3MpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMucmVwb3J0ZXJzKSB8fCB0aGlzLnJlcG9ydGVycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHJlcG9ydGVyIG9mIHRoaXMucmVwb3J0ZXJzKSB7XG4gICAgICAgICAgICBpZiAocmVwb3J0ZXJbaG9va05hbWVdKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVwb3J0ZXJbaG9va05hbWVdKGV2ZW50QXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGludm9rZSByZXBvcnRlciBob29rIFwiJHtob29rTmFtZX1cIjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3NhdmVUZXN0Q2FzZVZpZGVvQXR0YWNobWVudChjYXNlUmVzdWx0KSB7XG4gICAgICAgIGlmICghY2FzZVJlc3VsdCB8fCAhY2FzZVJlc3VsdC5hdHRhY2htZW50cyB8fCAhY2FzZVJlc3VsdC5hdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRhY2htZW50c1RvUmVtb3ZlID0gW107XG4gICAgICAgIGZvciAobGV0IGk9MDsgaTwgY2FzZVJlc3VsdC5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGNhc2VSZXN1bHQuYXR0YWNobWVudHNbaV07XG4gICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnQuX3VybCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlb0ZpbGVQYXRoID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgb3h1dGlsLmRvd25sb2FkVmlkZW8oYXR0YWNobWVudC5maWxlTmFtZSwgYXR0YWNobWVudC5fdXJsLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghdmlkZW9GaWxlUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50c1RvUmVtb3ZlLnB1c2goYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50LmZpbGVQYXRoID0gdmlkZW9GaWxlUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGF0dGFjaG1lbnRbJ191cmwnXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIGRvd25sb2FkIHZpZGVvIGZpbGU6ICcsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHNUb1JlbW92ZS5wdXNoKGF0dGFjaG1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSB2aWRlbyBhdHRhY2htZW50cyB0aGF0IGNvdWxkbid0IGJlIGRvd25sb2FkZWRcbiAgICAgICAgZm9yIChsZXQgaT0wOyBpPCBhdHRhY2htZW50c1RvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbG1JbmRleFRvUmVtb3ZlID0gY2FzZVJlc3VsdC5hdHRhY2htZW50cy5pbmRleE9mKGF0dGFjaG1lbnRzVG9SZW1vdmVbaV0pO1xuICAgICAgICAgICAgaWYgKCFlbG1JbmRleFRvUmVtb3ZlID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjYXNlUmVzdWx0LmF0dGFjaG1lbnRzLnNwbGljZShlbG1JbmRleFRvUmVtb3ZlLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0iXX0=
|
|
@@ -19,4 +19,4 @@ class ReporterBase {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
exports.default = ReporterBase;
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRlckJhc2UuanMiXSwibmFtZXMiOlsiUmVwb3J0ZXJCYXNlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiYWdncmVnYXRvciIsImdlbmVyYXRlIiwicmVzdWx0cyIsIkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZZSxNQUFNQSxZQUFOLENBQW1CO0FBQzlCQyxFQUFBQSxXQUFXLENBQUNDLE9BQUQsRUFBVUMsVUFBVixFQUFzQjtBQUM3QixTQUFLRCxPQUFMLEdBQWVBLE9BQWY7QUFDSDs7QUFDREUsRUFBQUEsUUFBUSxDQUFDQyxPQUFELEVBQVU7QUFDZCxVQUFNLElBQUlDLEtBQUosQ0FBVSx3Q0FBVixDQUFOO0FBQ0g7O0FBTjZCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqL1xuXG4vKlxuICogT3h5Z2VuIFJlcG9ydGVyIGFic3RyYWN0IGNsYXNzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlcG9ydGVyQmFzZSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgYWdncmVnYXRvcikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICBnZW5lcmF0ZShyZXN1bHRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgY2xhc3MsIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -133,4 +133,4 @@ class WebSocketReporter {
|
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
exports.default = WebSocketReporter;
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9XZWJTb2NrZXRSZXBvcnRlci5qcyJdLCJuYW1lcyI6WyJpbyIsIlNlcnZlciIsInNlcnZlQ2xpZW50IiwicGluZ0ludGVydmFsIiwicGluZ1RpbWVvdXQiLCJtYXhIdHRwQnVmZmVyU2l6ZSIsImNvb2tpZSIsImNvcnMiLCJvcmlnaW4iLCJ0cmFuc3BvcnRzIiwiV2ViU29ja2V0UmVwb3J0ZXIiLCJjb25zdHJ1Y3RvciIsImFnZ3JlZ2F0b3IiLCJfYWdncmVnYXRvciIsIl9ob29rQWdncmVnYXRvckV2ZW50cyIsInN0YXJ0QW5kV2FpdEZvckNsaWVudCIsInNlcnZlclBvcnQiLCJsaXN0ZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIl9oYW5kbGVTZXJ2ZXJFdmVudHMiLCJzdG9wIiwiX3NvY2tldCIsImNsb3NlIiwidW5kZWZpbmVkIiwicmVzb2x2ZVdhaXQiLCJfdGhpcyIsIm9uIiwic29ja2V0IiwiX2hhbmRsZVNvY2tldEV2ZW50cyIsInJlYXNvbiIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImUiLCJfaGFuZGxlUnVubmVyU3RhcnQiLCJfaGFuZGxlUnVubmVyRW5kIiwiX2hhbmRsZVN1aXRlU3RhcnQiLCJfaGFuZGxlU3VpdGVFbmQiLCJfaGFuZGxlQ2FzZVN0YXJ0IiwiX2hhbmRsZUNhc2VFbmQiLCJfaGFuZGxlTG9nIiwiZXZlbnQiLCJlbWl0IiwiX2hhbmRsZVN0ZXBTdGFydCIsIl9oYW5kbGVTdGVwRW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFRQTs7QUFFQSxNQUFNQSxFQUFFLEdBQUcsSUFBSUMsY0FBSixDQUFXO0FBQ2xCQyxFQUFBQSxXQUFXLEVBQUUsS0FESztBQUVsQkMsRUFBQUEsWUFBWSxFQUFFLEtBRkk7QUFHbEJDLEVBQUFBLFdBQVcsRUFBRSxLQUhLO0FBSWxCQyxFQUFBQSxpQkFBaUIsRUFBRSxNQUFNLElBQU4sR0FBYSxJQUpkO0FBS2xCQyxFQUFBQSxNQUFNLEVBQUUs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QUFjcUIsSUFBZCxDQUFtQixZQUFuQixFQUFpQ0QsS0FBakM7QUFDSDs7QUFDREwsRUFBQUEsaUJBQWlCLENBQUNLLEtBQUQsRUFBUTtBQUFBOztBQUNyQiwyQkFBS3BCLE9BQUwsa0VBQWNxQixJQUFkLENBQW1CLGFBQW5CLEVBQWtDRCxLQUFsQztBQUNIOztBQUNESixFQUFBQSxlQUFlLENBQUNJLEtBQUQsRUFBUTtBQUFBOztBQUNuQiwyQkFBS3BCLE9BQUwsa0VBQWNxQixJQUFkLENBQW1CLFdBQW5CLEVBQWdDRCxLQUFoQztBQUNIOztBQUNESCxFQUFBQSxnQkFBZ0IsQ0FBQ0csS0FBRCxFQUFRO0FBQUE7O0FBQ3BCLDJCQUFLcEIsT0FBTCxrRUFBY3FCLElBQWQsQ0FBbUIsWUFBbkIsRUFBaUNELEtBQWpDO0FBQ0g7O0FBQ0RGLEVBQUFBLGNBQWMsQ0FBQ0UsS0FBRCxFQUFRO0FBQUE7O0FBQ2xCLDJCQUFLcEIsT0FBTCxrRUFBY3FCLElBQWQsQ0FBbUIsVUFBbkIsRUFBK0JELEtBQS9CO0FBQ0g7O0FBQ0RFLEVBQUFBLGdCQUFnQixDQUFDRixLQUFELEVBQVE7QUFBQTs7QUFDcEIsMkJBQUtwQixPQUFMLGtFQUFjcUIsSUFBZCxDQUFtQixZQUFuQixFQUFpQ0QsS0FBakM7QUFDSDs7QUFDREcsRUFBQUEsY0FBYyxDQUFDSCxLQUFELEVBQVE7QUFBQTs7QUFDbEIsMkJBQUtwQixPQUFMLGtFQUFjcUIsSUFBZCxDQUFtQixVQUFuQixFQUErQkQsS0FBL0I7QUFDSDs7QUFDREQsRUFBQUEsVUFBVSxDQUFDQyxLQUFELEVBQVE7QUFBQTs7QUFDZCwyQkFBS3BCLE9BQUwsa0VBQWNxQixJQUFkLENBQW1CLEtBQW5CLEVBQTBCRCxLQUExQjtBQUNIOztBQW5Fa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICovXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdzb2NrZXQuaW8nO1xuXG5jb25zdCBpbyA9IG5ldyBTZXJ2ZXIoe1xuICAgIHNlcnZlQ2xpZW50OiBmYWxzZSxcbiAgICBwaW5nSW50ZXJ2YWw6IDEwMDAwLFxuICAgIHBpbmdUaW1lb3V0OiA2MDAwMCxcbiAgICBtYXhIdHRwQnVmZmVyU2l6ZTogMjU2ICogMTAyNCAqIDEwMjQsIC8vIDI1Nk1CXG4gICAgY29va2llOiB0cnVlLFxuICAgIGNvcnM6IHtcbiAgICAgICAgb3JpZ2luOiAnKicsXG4gICAgfSxcbiAgICB0cmFuc3BvcnRzOiBbJ3dlYnNvY2tldCddLFxufSk7XG4vKlxuICogV2ViU29ja2V0IFJlcG9ydGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlNvY2tldFJlcG9ydGVyIHtcbiAgICBjb25zdHJ1Y3RvcihhZ2dyZWdhdG9yKSB7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9yO1xuICAgICAgICB0aGlzLl9ob29rQWdncmVnYXRvckV2ZW50cygpO1xuICAgIH1cbiAgICBzdGFydEFuZFdhaXRGb3JDbGllbnQoc2VydmVyUG9ydCkge1xuICAgICAgICBpby5saXN0ZW4oc2VydmVyUG9ydCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTZXJ2ZXJFdmVudHMocmVzb2x2ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5fc29ja2V0KSB7XG4gICAgICAgICAgICBpby5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5fc29ja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9oYW5kbGVTZXJ2ZXJFdmVudHMocmVzb2x2ZVdhaXQpIHtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpby5vbignY29ubmVjdGlvbicsIChzb2NrZXQpID0+IHtcbiAgICAgICAgICAgIF90aGlzLl9oYW5kbGVTb2NrZXRFdmVudHMoc29ja2V0KTtcbiAgICAgICAgICAgIHJlc29sdmVXYWl0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfaGFuZGxlU29ja2V0RXZlbnRzKHNvY2tldCkge1xuICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQ7XG4gICAgICAgIHNvY2tldC5vbignZGlzY29ubmVjdCcsIChyZWFzb24pID0+IHtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBTb2NrZXQ6JywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9ob29rQWdncmVnYXRvckV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbigncnVubmVyOnN0YXJ0JywgZSA9PiB0aGlzLl9oYW5kbGVSdW5uZXJTdGFydChlKSk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3Iub24oJ3J1bm5lcjplbmQnLCBlID0+IHRoaXMuX2hhbmRsZVJ1bm5lckVuZChlKSk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3Iub24oJ3N1aXRlOnN0YXJ0JywgZSA9PiB0aGlzLl9oYW5kbGVTdWl0ZVN0YXJ0KGUpKTtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbignc3VpdGU6ZW5kJywgZSA9PiB0aGlzLl9oYW5kbGVTdWl0ZUVuZChlKSk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3Iub24oJ2Nhc2U6c3RhcnQnLCBlID0+IHRoaXMuX2hhbmRsZUNhc2VTdGFydChlKSk7XG4gICAgICAgIHRoaXMuX2FnZ3JlZ2F0b3Iub24oJ2Nhc2U6ZW5kJywgZSA9PiB0aGlzLl9oYW5kbGVDYXNlRW5kKGUpKTtcbiAgICAgICAgdGhpcy5fYWdncmVnYXRvci5vbignbG9nJywgZSA9PiB0aGlzLl9oYW5kbGVMb2coZSkpO1xuICAgIH1cbiAgICBfaGFuZGxlUnVubmVyU3RhcnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdydW5uZXI6c3RhcnQnLCBldmVudCk7XG4gICAgfVxuICAgIF9oYW5kbGVSdW5uZXJFbmQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdydW5uZXI6ZW5kJywgZXZlbnQpO1xuICAgIH1cbiAgICBfaGFuZGxlU3VpdGVTdGFydChldmVudCkge1xuICAgICAgICB0aGlzLl9zb2NrZXQ/LmVtaXQoJ3N1aXRlOnN0YXJ0JywgZXZlbnQpO1xuICAgIH1cbiAgICBfaGFuZGxlU3VpdGVFbmQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdzdWl0ZTplbmQnLCBldmVudCk7XG4gICAgfVxuICAgIF9oYW5kbGVDYXNlU3RhcnQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdjYXNlOnN0YXJ0JywgZXZlbnQpO1xuICAgIH1cbiAgICBfaGFuZGxlQ2FzZUVuZChldmVudCkge1xuICAgICAgICB0aGlzLl9zb2NrZXQ/LmVtaXQoJ2Nhc2U6ZW5kJywgZXZlbnQpO1xuICAgIH1cbiAgICBfaGFuZGxlU3RlcFN0YXJ0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3NvY2tldD8uZW1pdCgnc3RlcDpzdGFydCcsIGV2ZW50KTtcbiAgICB9XG4gICAgX2hhbmRsZVN0ZXBFbmQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fc29ja2V0Py5lbWl0KCdzdGVwOmVuZCcsIGV2ZW50KTtcbiAgICB9XG4gICAgX2hhbmRsZUxvZyhldmVudCkge1xuICAgICAgICB0aGlzLl9zb2NrZXQ/LmVtaXQoJ2xvZycsIGV2ZW50KTtcbiAgICB9XG59Il19
|
|
@@ -489,4 +489,4 @@ class WorkerProcess extends _events.EventEmitter {
|
|
|
489
489
|
}
|
|
490
490
|
|
|
491
491
|
exports.default = WorkerProcess;
|
|
492
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfZGVidWdnZXIiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0IiwiY29uc29sZSIsInRvU3RyaW5nIiwidHJpbSIsImUiLCJleGVjUmVzdWx0IiwiTk9ERV9QQVRIIiwiX2hvb2tDaGlsZFByb2NFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2luaXRpYWxpemVEZWJ1Z2dlciIsInN0b3BEZWJ1Z2dlciIsImNsb3NlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsInN0YXR1cyIsIl9wYXVzZWQiLCJkaXNhYmxlIiwicmVzdW1lVGVybWluYXRlIiwiaW52b2tlIiwiX3NlbmQiLCJ0eXBlIiwia2lsbCIsIl9yZXNldCIsImluaXRPeHlnZW4iLCJyaWQiLCJvcHRpb25zIiwiY2FwcyIsImJlZm9yZVRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImFmdGVyVGltZSIsImR1cmF0aW9uIiwic3RhcnRTZXNzaW9uIiwiZW5kU2Vzc2lvbiIsImRpc3Bvc2VNb2R1bGVzIiwiZGlzcG9zZSIsImRlYnVnZ2VyIiwiaXNSdW5uaW5nIiwiaXNJbml0aWFsaXplZCIsInJ1biIsInJ1bk9wdHMiLCJzdWJzY3JpYmUiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwiZXZlbnQiLCJtZXRob2QiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzaGlmdCIsImNhbGxJZCIsIm94dXRpbCIsImdlbmVyYXRlVW5pcXVlSWQiLCJwcm9taXNlIiwiaW52b2tlVGVzdEhvb2siLCJob29rTmFtZSIsImhvb2tBcmdzIiwibWVzc2FnZSIsInNlbmQiLCJfd2hlbk94eWdlbkRpc3Bvc2VkIiwiX3doZW5PeHlnZW5Jbml0aWFsaXplZCIsIl93aGVuTW9kdWxlc0Rpc3Bvc2VkIiwib24iLCJfaGFuZGxlQ2hpbGRNZXNzYWdlIiwiYmluZCIsIl9oYW5kbGVDaGlsZEVycm9yIiwiX2hhbmRsZUNoaWxkRXhpdCIsIl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QiLCJfaGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbiIsIl9oYW5kbGVDaGlsZFNpZ0ludCIsIm1zZyIsImhhc093blByb3BlcnR5IiwiZXJyb3IiLCJyZXR2YWwiLCJlbWl0IiwiX2hhbmRsZVdvcmtlckV2ZW50IiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJkZWJ1ZyIsImV4aXRDb2RlIiwic2lnbmFsIiwiRGVidWdnZXIiLCJ3aGVuRGVidWdnZXJSZWFkeSIsIl90aGlzIiwiY29udGludWUiLCJpc1Jlc29sdmVkIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwiaW5jbHVkZXMiLCJjb25uZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7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QUt0RixTQUFMLENBQWUyRixFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFVBQVN3QixjQUFULEVBQXlCO0FBQ2hELFdBQUtaLElBQUwsQ0FBVSxnQkFBVixFQUE0QlksY0FBNUI7QUFDSCxLQUZEOztBQUdBLFNBQUtuSCxTQUFMLENBQWUyRixFQUFmLENBQWtCLFlBQWxCLEVBQWdDLGdCQUFleUIsVUFBZixFQUEyQjtBQUV2RCxVQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQzlCLE9BQTdCLEVBQXNDO0FBQ2xDLFlBQUkwQixLQUFLLENBQUM3RyxpQkFBTixDQUF3QmtILFFBQXhCLENBQWlDRCxVQUFVLENBQUM5QixPQUE1QyxDQUFKLEVBQTBELENBRXpELENBRkQsTUFFTztBQUNIMEIsVUFBQUEsS0FBSyxDQUFDN0csaUJBQU4sQ0FBd0JpQixJQUF4QixDQUE2QmdHLFVBQVUsQ0FBQzlCLE9BQXhDOztBQUNBLGVBQUtpQixJQUFMLENBQVUscUJBQVYsRUFBaUNhLFVBQWpDO0FBQ0g7QUFDSjtBQUNKLEtBVkQ7O0FBWUEsUUFBSTtBQUNBM0ksTUFBQUEsR0FBRyxDQUFDc0MsSUFBSixDQUFVLGtDQUFpQyxLQUFLaEIsVUFBVyxLQUEzRDtBQUNBLFlBQU0sS0FBS0MsU0FBTCxDQUFlc0gsT0FBZixDQUF1QixLQUFLdkgsVUFBNUIsRUFBd0MsV0FBeEMsQ0FBTjtBQUNILEtBSEQsQ0FHRSxPQUFPOEIsQ0FBUCxFQUFVO0FBQ1JwRCxNQUFBQSxHQUFHLENBQUM0SCxLQUFKLENBQVUsa0NBQVYsRUFBOEN4RSxDQUE5QztBQUNBLFlBQU15RCxPQUFPLEdBQUcscUNBQXFDekQsQ0FBQyxDQUFDeUQsT0FBdkQ7QUFDQXlCLE1BQUFBLGlCQUFpQixDQUFDeEYsTUFBbEIsQ0FBeUIrRCxPQUF6QjtBQUNIOztBQUVELFdBQU95QixpQkFBaUIsQ0FBQzdCLE9BQXpCO0FBQ0g7O0FBcFptRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcmssIGV4ZWNTeW5jLCBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBzZXR1cCBsb2dnZXJcclxuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9saWIvbG9nZ2VyJztcclxuY29uc3QgbG9nID0gbG9nZ2VyKCdXb3JrZXJQcm9jZXNzJyk7XHJcblxyXG5pbXBvcnQgRGVidWdnZXIgZnJvbSAnLi4vbGliL2RlYnVnZ2VyJztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcblxyXG4vLyBzbm9vemUgZnVuY3Rpb24gLSBhc3luYyB3cmFwcGVyIGFyb3VuZCBzZXRUaW1lb3V0IGZ1bmN0aW9uXHJcbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xyXG5cclxuLyoqXHJcbiAqIFdvcmtlclByb2Nlc3MgcmVzcG9uc2libGUgZm9yIHNwYXduaW5nIGEgd29ya2VyIHByb2Nlc3MgdGhlIHRlc3QgaW5zdGFuY2UuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXb3JrZXJQcm9jZXNzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBpZCwgd29ya2VyUGF0aCwgZGVidWdNb2RlLCBkZWJ1Z1BvcnQsIG5hbWUgPSBudWxsLCBucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWUpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zdG9wcGVkQnlVc2VyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBkZWJ1Z01vZGU7XHJcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gZGVidWdQb3J0O1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93b3JrZXJQYXRoID0gd29ya2VyUGF0aDtcclxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG5wbUdSb290RXhlY3V0aW9uO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMgPSBbXTtcclxuICAgICAgICAvLyBob2xkIHRoZSByZW1vdGUgaW52b2NhdGlvbiBwcm9taXNlXHJcbiAgICAgICAgdGhpcy5fY2FsbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzID0ge307XHJcbiAgICB9XHJcbiAgICBhc3luYyBzdGFydCgpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHByb2Nlc3MuZW52LCB7XHJcbiAgICAgICAgICAgIE9YX1dPUktFUjogdHJ1ZSxcclxuICAgICAgICAgICAgREVCVUc6ICFpc05hTih0aGlzLl9kZWJ1Z1BvcnQpLFxyXG4gICAgICAgICAgICBOT19VUERBVEVfTk9USUZJRVI6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIHdvcmtlciBwcm9jZXNzICR7dGhpcy5fcGlkfS5gKTtcclxuICAgICAgICBsZXQgZm9ya09wdHMgPSB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcclxuICAgICAgICAgICAgZW52LFxyXG4gICAgICAgICAgICBleGVjQXJndjogW10sXHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgLy9zaWxlbnQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdQb3J0KSB7XHJcbiAgICAgICAgICAgIC8vIGFkZCAtLWluc3BlY3QtYnJrIGFyZ3VtZW50IGlmIGRlYnVnIHBvcnQgaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgIGZvcmtPcHRzLmV4ZWNBcmd2ID0gT2JqZWN0LmFzc2lnbihmb3JrT3B0cy5leGVjQXJndiwgWyctLWluc3BlY3QtYnJrPScgKyB0aGlzLl9kZWJ1Z1BvcnRdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHByaW50IG1vcmUgaW5mb3JtYXRpb24gZm9yIG5vZGVqcyBlcnJvcnNcclxuICAgICAgICBmb3JrT3B0cy5leGVjQXJndi5wdXNoKCctLXRyYWNlLXdhcm5pbmdzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoJ25wbSByb290IC1nJywge2N3ZDogcHJvY2Vzcy5jd2QoKX0sIGZ1bmN0aW9uIChlcnIsIHN0ZG91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGFyd2luIG5wbSByb290IGVycm9yOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoID0gc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjUmVzdWx0ID0gZXhlY1N5bmMoJ25wbSByb290IC1nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGVjUmVzdWx0ICYmIGV4ZWNSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggPSBleGVjUmVzdWx0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzLmVudlxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ya09wdHMuZW52Lk5PREVfUEFUSCA9IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbnBtIHJvb3QgZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvcmsgd29ya2VyXHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gZm9yayh0aGlzLl93b3JrZXJQYXRoLCBmb3JrT3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcclxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gZGVidWcgbW9kZSwgaW5pdGlhbGl6ZSBkZWJ1Z2dlciBhbmQgb25seSB0aGVuIHN0YXJ0IG1vZHVsZXMgJ2luaXQnXHJcblxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkUHJvYztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdGFydERlYnVnZ2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0b3BEZWJ1Z2dlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGVidWdnZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RvcChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgdGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlciAmJiB0aGlzLl9kZWJ1Z2dlci5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ0NBTkNFTEVEJyA9PT0gc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5yZXN1bWVUZXJtaW5hdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiAnZXhpdCcsXHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMua2lsbCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAga2lsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkUHJvYy5raWxsKCdTSUdJTlQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdE94eWdlbihyaWQsIG9wdGlvbnMsIGNhcHMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnaW5pdCcsIHJpZCwgb3B0aW9ucywgY2Fwcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhZnRlclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBhZnRlclRpbWUgLSBiZWZvcmVUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUgKyAnICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnV29ya2VyIGluaXRpYWxpemVkIGluICcgKyBkdXJhdGlvbiArICcgbXMnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RhcnRTZXNzaW9uKCkge1xyXG4gICAgICAgIGxldCBzdGFydCA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5fbmFtZSArICcgJztcclxuICAgICAgICB9XHJcbiAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnU2Vzc2lvbiBzdGFydGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5kU2Vzc2lvbihzdGF0dXMgPSBudWxsLCBkaXNwb3NlTW9kdWxlcyA9IHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2VuZFNlc3Npb24nLCBzdGF0dXMsIGRpc3Bvc2VNb2R1bGVzKTtcclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYWZ0ZXJUaW1lIC0gYmVmb3JlVGltZTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUgKyAnICc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnU2Vzc2lvbiBlbmRlZCBpbiAnICsgZHVyYXRpb24gKyAnIG1zJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faXNJbml0aWFsaXplZCAmJiB0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2Rpc3Bvc2UnLCBzdGF0dXMpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdleGl0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5raWxsKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVidWdnZXIgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWJ1Z2dlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSdW5uaW5nICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihydW5PcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52b2tlKCdydW4nLCBydW5PcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnROYW1lLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyc1tldmVudE5hbWVdID0gaGFuZGxlcjtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudE5hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgICAgIC8vIGlnbm9yZSBmaXJzdCBhcmd1bWVudCAtIGUuZy4gbWV0aG9kXHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsc1tjYWxsSWRdID0gZGVmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW52b2tlVGVzdEhvb2soaG9va05hbWUsIGhvb2tBcmdzKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2ludm9rZTpob29rJyxcclxuICAgICAgICAgICAgbWV0aG9kOiBob29rTmFtZSxcclxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgIGFyZ3M6IGhvb2tBcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc2VuZChtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Muc2VuZChtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5EaXNwb3NlZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fd2hlbk94eWdlbkluaXRpYWxpemVkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93aGVuTW9kdWxlc0Rpc3Bvc2VkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tDaGlsZFByb2NFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVDaGlsZE1lc3NhZ2UuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdlcnJvcicsIHRoaXMuX2hhbmRsZUNoaWxkRXJyb3IuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdleGl0JywgdGhpcy5faGFuZGxlQ2hpbGRFeGl0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignZGlzY29ubmVjdCcsIHRoaXMuX2hhbmRsZUNoaWxkRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdGhpcy5faGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ1NJR0lOVCcsIHRoaXMuX2hhbmRsZUNoaWxkU2lnSW50LmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZE1lc3NhZ2UobXNnKSB7XHJcbiAgICAgICAgaWYgKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlOnJlc3VsdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5jYWxsSWQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2NhbGxzLCBtc2cuY2FsbElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fY2FsbHNbbXNnLmNhbGxJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KG1zZy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUobXNnLnJldHZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcG9ydGVyJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAobXNnLm1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlcG9ydGVyJywgeyBwaWQ6IHRoaXMuX3BpZCwgbWV0aG9kOiBtc2cubWV0aG9kLCBhcmdzOiBtc2cuYXJncyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdldmVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV29ya2VyRXZlbnQobXNnLm5hbWUsIG1zZy5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBPYmplY3QuYXNzaWduKG1zZywgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZVdvcmtlckV2ZW50KG5hbWUsIGFyZ3MpIHtcclxuICAgICAgICBpZiAobmFtZSAmJiB0aGlzLl9ldmVudEhhbmRsZXJzICYmIHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB0aHJvd24gYnkgd29ya2VyIGV2ZW50IGhhbmRsZXIgXCIke25hbWV9OicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEVycm9yKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24oeyBlcnJvciA6IGVycm9yIH0sIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEV4aXQoZXhpdENvZGUsIHNpZ25hbCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBmaW5pc2hlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfS5gKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlLCBzaWduYWwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkRGlzY29ubmVjdCgpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZGlzY29ubmVjdGVkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiB1bmNhdWdodCBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGU6IDEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkU2lnSW50KCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSByZWNlaXZlZCBTSUdJTlQgc2lnbmFsLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pbml0aWFsaXplRGVidWdnZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBuZXcgRGVidWdnZXIodGhpcy5fcGlkKTtcclxuICAgICAgICBsZXQgd2hlbkRlYnVnZ2VyUmVhZHkgPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBoYW5kbGUgZGVidWdnZXIgZXZlbnRzXHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ3JlYWR5JywgZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgZmlyc3QgYnJlYWtwb2ludCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IHRoZSBkZWJ1Z2dlclxyXG4gICAgICAgICAgICBpZiAoX3RoaXMuX2RlYnVnZ2VyICYmIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX2RlYnVnZ2VyLmNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xyXG5cclxuICAgICAgICAgICAgbG9nLmVycm9yKCdEZWJ1Z2dlciBlcnJvciA6JywgZXJyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6ZXJyb3InLCBPYmplY3QuYXNzaWduKGVyciwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgICAgIC8vIHJlamVjdCB0aGUgcHJvbWlzZSBvbmx5IGlmIHdlIGdvdCBhbiBlcnJvciByaWdodCBhZnRlciBfZGVidWdnZXIuY29ubmVjdCgpIGNhbGwgYmVsb3cgLSB3ZSBuZWVkIHRoaXMgdG8gaW5kaWNhdGUgZGVidWdnZXIgaW5pdGlhbGl6YXRpb24gZXJyb3JcclxuICAgICAgICAgICAgaWYgKCF3aGVuRGVidWdnZXJSZWFkeS5pc1Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrJywgZnVuY3Rpb24oYnJlYWtwb2ludERhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWJ1Z2dlcjpicmVhaycsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWtFcnJvcicsIGFzeW5jIGZ1bmN0aW9uKGJyZWFrRXJyb3IpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChicmVha0Vycm9yICYmIGJyZWFrRXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9icmVha3BvaW50RXJyb3JzLmluY2x1ZGVzKGJyZWFrRXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMucHVzaChicmVha0Vycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWtFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKGBDb25uZWN0aW5nIHRvIGRlYnVnZ2VyIG9uIHBvcnQgJHt0aGlzLl9kZWJ1Z1BvcnR9Li4uYCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNvbm5lY3QodGhpcy5fZGVidWdQb3J0LCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0Nhbm5vdCBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJywgZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQ2Fubm90IGNvbm5lY3QgdG8gdGhlIGRlYnVnZ2VyOiAnICsgZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gd2hlbkRlYnVnZ2VyUmVhZHkucHJvbWlzZTtcclxuICAgIH1cclxufSJdfQ==
|
|
492
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfZGVidWdnZXIiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0IiwiY29uc29sZSIsInRvU3RyaW5nIiwidHJpbSIsImUiLCJleGVjUmVzdWx0IiwiTk9ERV9QQVRIIiwiX2hvb2tDaGlsZFByb2NFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2luaXRpYWxpemVEZWJ1Z2dlciIsInN0b3BEZWJ1Z2dlciIsImNsb3NlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsInN0YXR1cyIsIl9wYXVzZWQiLCJkaXNhYmxlIiwicmVzdW1lVGVybWluYXRlIiwiaW52b2tlIiwiX3NlbmQiLCJ0eXBlIiwia2lsbCIsIl9yZXNldCIsImluaXRPeHlnZW4iLCJyaWQiLCJvcHRpb25zIiwiY2FwcyIsImJlZm9yZVRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImFmdGVyVGltZSIsImR1cmF0aW9uIiwic3RhcnRTZXNzaW9uIiwiZW5kU2Vzc2lvbiIsImRpc3Bvc2VNb2R1bGVzIiwiZGlzcG9zZSIsImRlYnVnZ2VyIiwiaXNSdW5uaW5nIiwiaXNJbml0aWFsaXplZCIsInJ1biIsInJ1bk9wdHMiLCJzdWJzY3JpYmUiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwiZXZlbnQiLCJtZXRob2QiLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzaGlmdCIsImNhbGxJZCIsIm94dXRpbCIsImdlbmVyYXRlVW5pcXVlSWQiLCJwcm9taXNlIiwiaW52b2tlVGVzdEhvb2siLCJob29rTmFtZSIsImhvb2tBcmdzIiwibWVzc2FnZSIsInNlbmQiLCJfd2hlbk94eWdlbkRpc3Bvc2VkIiwiX3doZW5PeHlnZW5Jbml0aWFsaXplZCIsIl93aGVuTW9kdWxlc0Rpc3Bvc2VkIiwib24iLCJfaGFuZGxlQ2hpbGRNZXNzYWdlIiwiYmluZCIsIl9oYW5kbGVDaGlsZEVycm9yIiwiX2hhbmRsZUNoaWxkRXhpdCIsIl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QiLCJfaGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbiIsIl9oYW5kbGVDaGlsZFNpZ0ludCIsIm1zZyIsImhhc093blByb3BlcnR5IiwiZXJyb3IiLCJyZXR2YWwiLCJlbWl0IiwiX2hhbmRsZVdvcmtlckV2ZW50IiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJkZWJ1ZyIsImV4aXRDb2RlIiwic2lnbmFsIiwiRGVidWdnZXIiLCJ3aGVuRGVidWdnZXJSZWFkeSIsIl90aGlzIiwiY29udGludWUiLCJpc1Jlc29sdmVkIiwiYnJlYWtwb2ludERhdGEiLCJicmVha0Vycm9yIiwiaW5jbHVkZXMiLCJjb25uZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7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QUt0RixTQUFMLENBQWUyRixFQUFmLENBQWtCLE9BQWxCLEVBQTJCLFVBQVN3QixjQUFULEVBQXlCO0FBQ2hELFdBQUtaLElBQUwsQ0FBVSxnQkFBVixFQUE0QlksY0FBNUI7QUFDSCxLQUZEOztBQUdBLFNBQUtuSCxTQUFMLENBQWUyRixFQUFmLENBQWtCLFlBQWxCLEVBQWdDLGdCQUFleUIsVUFBZixFQUEyQjtBQUV2RCxVQUFJQSxVQUFVLElBQUlBLFVBQVUsQ0FBQzlCLE9BQTdCLEVBQXNDO0FBQ2xDLFlBQUkwQixLQUFLLENBQUM3RyxpQkFBTixDQUF3QmtILFFBQXhCLENBQWlDRCxVQUFVLENBQUM5QixPQUE1QyxDQUFKLEVBQTBELENBRXpELENBRkQsTUFFTztBQUNIMEIsVUFBQUEsS0FBSyxDQUFDN0csaUJBQU4sQ0FBd0JpQixJQUF4QixDQUE2QmdHLFVBQVUsQ0FBQzlCLE9BQXhDOztBQUNBLGVBQUtpQixJQUFMLENBQVUscUJBQVYsRUFBaUNhLFVBQWpDO0FBQ0g7QUFDSjtBQUNKLEtBVkQ7O0FBWUEsUUFBSTtBQUNBM0ksTUFBQUEsR0FBRyxDQUFDc0MsSUFBSixDQUFVLGtDQUFpQyxLQUFLaEIsVUFBVyxLQUEzRDtBQUNBLFlBQU0sS0FBS0MsU0FBTCxDQUFlc0gsT0FBZixDQUF1QixLQUFLdkgsVUFBNUIsRUFBd0MsV0FBeEMsQ0FBTjtBQUNILEtBSEQsQ0FHRSxPQUFPOEIsQ0FBUCxFQUFVO0FBQ1JwRCxNQUFBQSxHQUFHLENBQUM0SCxLQUFKLENBQVUsa0NBQVYsRUFBOEN4RSxDQUE5QztBQUNBLFlBQU15RCxPQUFPLEdBQUcscUNBQXFDekQsQ0FBQyxDQUFDeUQsT0FBdkQ7QUFDQXlCLE1BQUFBLGlCQUFpQixDQUFDeEYsTUFBbEIsQ0FBeUIrRCxPQUF6QjtBQUNIOztBQUVELFdBQU95QixpQkFBaUIsQ0FBQzdCLE9BQXpCO0FBQ0g7O0FBcFptRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcmssIGV4ZWNTeW5jLCBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcblxuLy8gc2V0dXAgbG9nZ2VyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xpYi9sb2dnZXInO1xuY29uc3QgbG9nID0gbG9nZ2VyKCdXb3JrZXJQcm9jZXNzJyk7XG5cbmltcG9ydCBEZWJ1Z2dlciBmcm9tICcuLi9saWIvZGVidWdnZXInO1xuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XG5cbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cbmNvbnN0IHNub296ZSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vKipcbiAqIFdvcmtlclByb2Nlc3MgcmVzcG9uc2libGUgZm9yIHNwYXduaW5nIGEgd29ya2VyIHByb2Nlc3MgdGhlIHRlc3QgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtlclByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKHBpZCwgd29ya2VyUGF0aCwgZGVidWdNb2RlLCBkZWJ1Z1BvcnQsIG5hbWUgPSBudWxsLCBucG1HUm9vdEV4ZWN1dGlvbiA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0b3BwZWRCeVVzZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLl9waWQgPSBwaWQ7XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IGRlYnVnTW9kZTtcbiAgICAgICAgdGhpcy5fZGVidWdQb3J0ID0gZGVidWdQb3J0O1xuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX3dvcmtlclBhdGggPSB3b3JrZXJQYXRoO1xuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG5wbUdSb290RXhlY3V0aW9uO1xuICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzID0gW107XG4gICAgICAgIC8vIGhvbGQgdGhlIHJlbW90ZSBpbnZvY2F0aW9uIHByb21pc2VcbiAgICAgICAgdGhpcy5fY2FsbHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVycyA9IHt9O1xuICAgIH1cbiAgICBhc3luYyBzdGFydCgpIHtcbiAgICAgICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbihwcm9jZXNzLmVudiwge1xuICAgICAgICAgICAgT1hfV09SS0VSOiB0cnVlLFxuICAgICAgICAgICAgREVCVUc6ICFpc05hTih0aGlzLl9kZWJ1Z1BvcnQpLFxuICAgICAgICAgICAgTk9fVVBEQVRFX05PVElGSUVSOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyB3b3JrZXIgcHJvY2VzcyAke3RoaXMuX3BpZH0uYCk7XG4gICAgICAgIGxldCBmb3JrT3B0cyA9IHtcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGVudixcbiAgICAgICAgICAgIGV4ZWNBcmd2OiBbXSxcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vc2lsZW50OiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5fZGVidWdQb3J0KSB7XG4gICAgICAgICAgICAvLyBhZGQgLS1pbnNwZWN0LWJyayBhcmd1bWVudCBpZiBkZWJ1ZyBwb3J0IGlzIHNwZWNpZmllZFxuICAgICAgICAgICAgZm9ya09wdHMuZXhlY0FyZ3YgPSBPYmplY3QuYXNzaWduKGZvcmtPcHRzLmV4ZWNBcmd2LCBbJy0taW5zcGVjdC1icms9JyArIHRoaXMuX2RlYnVnUG9ydF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJpbnQgbW9yZSBpbmZvcm1hdGlvbiBmb3Igbm9kZWpzIGVycm9yc1xuICAgICAgICBmb3JrT3B0cy5leGVjQXJndi5wdXNoKCctLXRyYWNlLXdhcm5pbmdzJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX25wbUdSb290RXhlY3V0aW9uKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBnbG9iYWxOcG1Nb2R1bGVzUGF0aDtcblxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjKCducG0gcm9vdCAtZycsIHtjd2Q6IHByb2Nlc3MuY3dkKCl9LCBmdW5jdGlvbiAoZXJyLCBzdGRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGFyd2luIG5wbSByb290IGVycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCA9IHN0ZG91dC50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBleGVjU3luYygnbnBtIHJvb3QgLWcnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhlY1Jlc3VsdCAmJiBleGVjUmVzdWx0LnRvU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCA9IGV4ZWNSZXN1bHQudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoICYmXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzICYmXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzLmVudlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cy5lbnYuTk9ERV9QQVRIID0gZ2xvYmFsTnBtTW9kdWxlc1BhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCducG0gcm9vdCBlcnJvcjonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZvcmsgd29ya2VyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IGZvcmsodGhpcy5fd29ya2VyUGF0aCwgZm9ya09wdHMpO1xuXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcbiAgICAgICAgLy8gaWYgd2UgYXJlIGluIGRlYnVnIG1vZGUsIGluaXRpYWxpemUgZGVidWdnZXIgYW5kIG9ubHkgdGhlbiBzdGFydCBtb2R1bGVzICdpbml0J1xuXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZFByb2M7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnREZWJ1Z2dlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBzdG9wRGVidWdnZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnZ2VyLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcChzdGF0dXMgPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyICYmIHRoaXMuX2RlYnVnZ2VyLl9wYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ0NBTkNFTEVEJyA9PT0gc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5yZXN1bWVUZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbmQoe1xuICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmtpbGwoKTtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICB9XG5cbiAgICBraWxsKCkge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Mua2lsbCgnU0lHSU5UJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0T3h5Z2VuKHJpZCwgb3B0aW9ucywgY2Fwcykge1xuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW52b2tlKCdpbml0JywgcmlkLCBvcHRpb25zLCBjYXBzKTtcblxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFmdGVyVGltZSAtIGJlZm9yZVRpbWU7XG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuX25hbWUpIHtcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2cuaW5mbyhzdGFydCArICdXb3JrZXIgaW5pdGlhbGl6ZWQgaW4gJyArIGR1cmF0aW9uICsgJyBtcycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc3RhcnRTZXNzaW9uKCkge1xuICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuX25hbWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5fbmFtZSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhzdGFydCArICdTZXNzaW9uIHN0YXJ0ZWQnKTtcbiAgICB9XG5cbiAgICBhc3luYyBlbmRTZXNzaW9uKHN0YXR1cyA9IG51bGwsIGRpc3Bvc2VNb2R1bGVzID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZW5kU2Vzc2lvbicsIHN0YXR1cywgZGlzcG9zZU1vZHVsZXMpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGFmdGVyVGltZSAtIGJlZm9yZVRpbWU7XG4gICAgICAgICAgICBsZXQgc3RhcnQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9uYW1lICsgJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oc3RhcnQgKyAnU2Vzc2lvbiBlbmRlZCBpbiAnICsgZHVyYXRpb24gKyAnIG1zJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGRlYnVnZ2VyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnZ2VyO1xuICAgIH1cblxuICAgIGdldCBpc1J1bm5pbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xuICAgIH1cblxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNJbml0aWFsaXplZDtcbiAgICB9XG5cbiAgICBhc3luYyBydW4ocnVuT3B0cykge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZva2UoJ3J1bicsIHJ1bk9wdHMpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50SGFuZGxlcnNbZXZlbnROYW1lXSA9IGhhbmRsZXI7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnROYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XG4gICAgICAgIGxldCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgLy8gaWdub3JlIGZpcnN0IGFyZ3VtZW50IC0gZS5nLiBtZXRob2RcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxJZCA9IG94dXRpbC5nZW5lcmF0ZVVuaXF1ZUlkKCk7XG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICBjYWxsSWQ6IGNhbGxJZCxcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxzW2NhbGxJZF0gPSBkZWZlcigpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGludm9rZVRlc3RIb29rKGhvb2tOYW1lLCBob29rQXJncykge1xuICAgICAgICBjb25zdCBjYWxsSWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgICAgICB0aGlzLl9zZW5kKHtcbiAgICAgICAgICAgIHR5cGU6ICdpbnZva2U6aG9vaycsXG4gICAgICAgICAgICBtZXRob2Q6IGhvb2tOYW1lLFxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXG4gICAgICAgICAgICBhcmdzOiBob29rQXJnc1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxsc1tjYWxsSWRdLnByb21pc2U7XG4gICAgfVxuXG4gICAgX3NlbmQobWVzc2FnZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkUHJvYykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5zZW5kKG1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2RlYnVnUG9ydCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5EaXNwb3NlZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5Jbml0aWFsaXplZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3doZW5Nb2R1bGVzRGlzcG9zZWQgPSBudWxsO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2hvb2tDaGlsZFByb2NFdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hpbGRQcm9jKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdtZXNzYWdlJywgdGhpcy5faGFuZGxlQ2hpbGRNZXNzYWdlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2Vycm9yJywgdGhpcy5faGFuZGxlQ2hpbGRFcnJvci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdleGl0JywgdGhpcy5faGFuZGxlQ2hpbGRFeGl0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzLl9oYW5kbGVDaGlsZERpc2Nvbm5lY3QuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCB0aGlzLl9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ1NJR0lOVCcsIHRoaXMuX2hhbmRsZUNoaWxkU2lnSW50LmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZE1lc3NhZ2UobXNnKSB7XG4gICAgICAgIGlmIChtc2cuZXZlbnQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAobXNnLmV2ZW50KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlOnJlc3VsdCc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cuY2FsbElkICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9jYWxscywgbXNnLmNhbGxJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jYWxsc1ttc2cuY2FsbElkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChtc2cuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKG1zZy5yZXR2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcG9ydGVyJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5tZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVwb3J0ZXInLCB7IHBpZDogdGhpcy5fcGlkLCBtZXRob2Q6IG1zZy5tZXRob2QsIGFyZ3M6IG1zZy5hcmdzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2V2ZW50JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV29ya2VyRXZlbnQobXNnLm5hbWUsIG1zZy5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KCdtZXNzYWdlJywgT2JqZWN0LmFzc2lnbihtc2csIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xuICAgIH1cblxuICAgIGFzeW5jIF9oYW5kbGVXb3JrZXJFdmVudChuYW1lLCBhcmdzKSB7XG4gICAgICAgIGlmIChuYW1lICYmIHRoaXMuX2V2ZW50SGFuZGxlcnMgJiYgdGhpcy5fZXZlbnRIYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ldmVudEhhbmRsZXJzW25hbWVdLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcignRXJyb3IgdGhyb3duIGJ5IHdvcmtlciBldmVudCBoYW5kbGVyIFwiJHtuYW1lfTonLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZEVycm9yKGVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSB0aHJvd24gYW4gZXJyb3I6ICR7ZXJyb3J9LmApO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNoaWxkRXhpdChleGl0Q29kZSwgc2lnbmFsKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBmaW5pc2hlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfS5gKTtcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGUsIHNpZ25hbCB9KTtcbiAgICB9XG5cbiAgICBfaGFuZGxlQ2hpbGREaXNjb25uZWN0KCkge1xuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZGlzY29ubmVjdGVkLmApO1xuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uKGVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSB0aHJvd24gYW4gdW5jYXVnaHQgZXJyb3I6ICR7ZXJyb3J9LmApO1xuICAgICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlOiAxIH0pO1xuICAgIH1cblxuICAgIF9oYW5kbGVDaGlsZFNpZ0ludCgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHJlY2VpdmVkIFNJR0lOVCBzaWduYWwuYCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2luaXRpYWxpemVEZWJ1Z2dlcigpIHtcbiAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBuZXcgRGVidWdnZXIodGhpcy5fcGlkKTtcbiAgICAgICAgbGV0IHdoZW5EZWJ1Z2dlclJlYWR5ID0gZGVmZXIoKTtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICAvLyBoYW5kbGUgZGVidWdnZXIgZXZlbnRzXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdyZWFkeScsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgLy8gcmVzdW1lIHRoZSBmaXJzdCBicmVha3BvaW50IHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgdGhlIGRlYnVnZ2VyXG4gICAgICAgICAgICBpZiAoX3RoaXMuX2RlYnVnZ2VyICYmIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG5cbiAgICAgICAgICAgIGxvZy5lcnJvcignRGVidWdnZXIgZXJyb3IgOicsIGVycik7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6ZXJyb3InLCBPYmplY3QuYXNzaWduKGVyciwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XG4gICAgICAgICAgICAvLyByZWplY3QgdGhlIHByb21pc2Ugb25seSBpZiB3ZSBnb3QgYW4gZXJyb3IgcmlnaHQgYWZ0ZXIgX2RlYnVnZ2VyLmNvbm5lY3QoKSBjYWxsIGJlbG93IC0gd2UgbmVlZCB0aGlzIHRvIGluZGljYXRlIGRlYnVnZ2VyIGluaXRpYWxpemF0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoIXdoZW5EZWJ1Z2dlclJlYWR5LmlzUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QoZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrJywgZnVuY3Rpb24oYnJlYWtwb2ludERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWsnLCBicmVha3BvaW50RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWtFcnJvcicsIGFzeW5jIGZ1bmN0aW9uKGJyZWFrRXJyb3IpIHtcblxuICAgICAgICAgICAgaWYgKGJyZWFrRXJyb3IgJiYgYnJlYWtFcnJvci5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9icmVha3BvaW50RXJyb3JzLmluY2x1ZGVzKGJyZWFrRXJyb3IubWVzc2FnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMucHVzaChicmVha0Vycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlYnVnZ2VyOmJyZWFrRXJyb3InLCBicmVha0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQ29ubmVjdGluZyB0byBkZWJ1Z2dlciBvbiBwb3J0ICR7dGhpcy5fZGVidWdQb3J0fS4uLmApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY29ubmVjdCh0aGlzLl9kZWJ1Z1BvcnQsICcxMjcuMC4wLjEnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nLmVycm9yKCdDYW5ub3QgY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcsIGUpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdDYW5ub3QgY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcgKyBlLm1lc3NhZ2U7XG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QobWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlbkRlYnVnZ2VyUmVhZHkucHJvbWlzZTtcbiAgICB9XG59Il19
|