testcafe 1.20.2-alpha.1 → 2.0.0-rc.3
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/lib/api/request-hooks/assert-type.js +2 -2
- package/lib/api/request-hooks/hook.js +2 -2
- package/lib/api/request-hooks/request-logger.js +2 -2
- package/lib/api/skip-js-errors/index.js +62 -0
- package/lib/api/structure/base-unit.js +2 -2
- package/lib/api/structure/fixture.js +13 -13
- package/lib/api/structure/test.js +18 -17
- package/lib/api/structure/testing-unit.js +26 -16
- package/lib/api/test-controller/assertion.js +5 -5
- package/lib/api/test-controller/execution-context.js +2 -2
- package/lib/api/test-controller/index.js +33 -30
- package/lib/api/test-controller/proxy.js +2 -2
- package/lib/api/test-page-url.js +4 -4
- package/lib/api/test-run-tracker.js +2 -2
- package/lib/api/wrap-test-function.js +3 -3
- package/lib/assertions/executor.js +4 -4
- package/lib/assertions/get-fn.js +3 -3
- package/lib/browser/connection/gateway.js +18 -18
- package/lib/browser/connection/get-hints.js +8 -8
- package/lib/browser/connection/index.js +11 -11
- package/lib/browser/connection/remotes-queue.js +4 -4
- package/lib/browser/provider/built-in/dedicated/base.js +6 -6
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +10 -10
- package/lib/browser/provider/built-in/dedicated/chrome/config.js +17 -17
- package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +4 -4
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -6
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +6 -6
- package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +4 -4
- package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +2 -2
- package/lib/browser/provider/built-in/dedicated/firefox/config.js +8 -8
- package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +3 -3
- package/lib/browser/provider/built-in/dedicated/firefox/index.js +5 -5
- package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +2 -2
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +7 -7
- package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +3 -3
- package/lib/browser/provider/built-in/path.js +2 -2
- package/lib/browser/provider/built-in/remote.js +3 -3
- package/lib/browser/provider/index.js +5 -5
- package/lib/browser/provider/plugin-host.js +5 -6
- package/lib/browser/provider/pool.js +4 -4
- package/lib/browser/provider/utils/argument-parsing.js +3 -3
- package/lib/browser/provider/utils/browser-starter.js +2 -2
- package/lib/cli/argument-parser/index.js +52 -41
- package/lib/cli/argument-parser/parse-utils.js +2 -2
- package/lib/cli/authentication-helper.js +3 -3
- package/lib/cli/cli.js +8 -8
- package/lib/cli/correct-browsers-and-sources.js +2 -2
- package/lib/cli/index.js +2 -2
- package/lib/cli/log.js +3 -3
- package/lib/cli/remotes-wizard.js +3 -3
- package/lib/client/automation/index.js +120 -34
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.js +321 -317
- package/lib/client/browser/service-worker.js +244 -290
- package/lib/client/core/deps/hammerhead.js +12 -4
- package/lib/client/core/index.js +145 -55
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/dom.js +33 -28
- package/lib/client/core/utils/position.js +18 -14
- package/lib/client/core/utils/style.js +8 -4
- package/lib/client/driver/command-executors/client-functions/selector-executor/filter.js +5 -5
- package/lib/client/driver/command-executors/client-functions/selector-executor/utils.js +3 -3
- package/lib/client/driver/deps/hammerhead.js +12 -4
- package/lib/client/driver/deps/testcafe-core.js +12 -4
- package/lib/client/driver/deps/testcafe-ui.js +12 -4
- package/lib/client/driver/index.js +654 -630
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/driver/status.js +2 -2
- package/lib/client/ui/index.js +10 -8
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client-functions/builder-symbol.js +1 -2
- package/lib/client-functions/client-function-builder.js +12 -12
- package/lib/client-functions/replicator.js +2 -2
- package/lib/client-functions/selector-api-execution-mode.js +2 -2
- package/lib/client-functions/selectors/add-api.js +48 -48
- package/lib/client-functions/selectors/selector-builder.js +17 -17
- package/lib/compiler/compile-client-function.js +6 -6
- package/lib/compiler/index.js +9 -9
- package/lib/compiler/test-file/api-based.js +8 -8
- package/lib/compiler/test-file/base.js +6 -6
- package/lib/compiler/test-file/exportble-lib-path.js +2 -2
- package/lib/compiler/test-file/formats/coffeescript/compiler.js +2 -2
- package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +2 -2
- package/lib/compiler/test-file/formats/es-next/compiler.js +4 -4
- package/lib/compiler/test-file/formats/es-next/get-test-list.js +4 -4
- package/lib/compiler/test-file/formats/raw.js +2 -2
- package/lib/compiler/test-file/formats/typescript/compiler.js +11 -11
- package/lib/compiler/test-file/formats/typescript/get-test-list.js +3 -3
- package/lib/compiler/test-file/test-file-parser-base.js +3 -3
- package/lib/configuration/configuration-base.js +15 -15
- package/lib/configuration/interfaces.js +1 -1
- package/lib/configuration/skip-js-errors-option-names.js +11 -0
- package/lib/configuration/testcafe-configuration.js +21 -16
- package/lib/configuration/types.js +1 -1
- package/lib/configuration/typescript-configuration.js +4 -4
- package/lib/custom-client-scripts/assert-type.js +2 -2
- package/lib/custom-client-scripts/client-script.js +6 -6
- package/lib/custom-client-scripts/get-code.js +2 -2
- package/lib/custom-client-scripts/routing.js +3 -3
- package/lib/custom-client-scripts/utils.js +3 -3
- package/lib/dashboard/connector.js +4 -4
- package/lib/dashboard/get-default-project-link.js +2 -2
- package/lib/dashboard/index.js +26 -26
- package/lib/errors/create-stack-filter.js +2 -2
- package/lib/errors/error-list.js +2 -2
- package/lib/errors/get-callsite.js +2 -2
- package/lib/errors/is-internal-stack-frame.js +5 -5
- package/lib/errors/process-test-fn-error.js +2 -2
- package/lib/errors/runtime/index.js +10 -10
- package/lib/errors/runtime/templates.js +5 -2
- package/lib/errors/runtime/type-assertions.js +6 -6
- package/lib/errors/stack-cleaning-hook.js +2 -2
- package/lib/errors/test-run/formattable-adapter.js +7 -7
- package/lib/errors/test-run/index.js +25 -5
- package/lib/errors/test-run/render-error-template/index.js +6 -6
- package/lib/errors/test-run/render-error-template/utils.js +2 -2
- package/lib/errors/test-run/templates.js +40 -31
- package/lib/errors/test-run/utils.js +7 -7
- package/lib/errors/types.js +5 -1
- package/lib/index.js +1 -1
- package/lib/live/file-watcher/index.js +2 -2
- package/lib/live/keyboard-observer.js +3 -3
- package/lib/live/test-run-controller.js +3 -3
- package/lib/live/test-run.js +3 -2
- package/lib/live/test-runner.js +2 -2
- package/lib/load-assets.js +2 -2
- package/lib/notifications/add-rendered-warning.js +4 -4
- package/lib/notifications/debug-logger.js +6 -6
- package/lib/notifications/deprecated.js +2 -2
- package/lib/notifications/information-message.js +4 -3
- package/lib/proxyless/resource-injector.js +4 -4
- package/lib/reporter/command/command-formatter.js +4 -4
- package/lib/reporter/index.js +10 -10
- package/lib/reporter/plugin-host.js +7 -7
- package/lib/role/index.js +8 -8
- package/lib/role/role.js +2 -2
- package/lib/runner/bootstrapper.js +20 -20
- package/lib/runner/browser-job.js +3 -3
- package/lib/runner/browser-set.js +12 -12
- package/lib/runner/fixture-hook-controller.js +5 -5
- package/lib/runner/index.js +43 -33
- package/lib/runner/task/index.js +10 -6
- package/lib/runner/test-run-hook-controller.js +5 -5
- package/lib/runner/tested-app.js +7 -7
- package/lib/screenshots/capturer.js +17 -17
- package/lib/screenshots/crop.js +8 -8
- package/lib/screenshots/index.js +6 -10
- package/lib/screenshots/utils.js +4 -4
- package/lib/services/compiler/host.js +8 -8
- package/lib/services/compiler/service.js +13 -13
- package/lib/services/compiler/test-run-proxy.js +8 -8
- package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +2 -2
- package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +2 -1
- package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +3 -3
- package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +2 -2
- package/lib/services/serialization/test-structure.js +4 -4
- package/lib/services/utils/ipc/interfaces.js +1 -3
- package/lib/services/utils/ipc/io.js +3 -3
- package/lib/services/utils/ipc/message.js +2 -2
- package/lib/services/utils/ipc/proxy.js +4 -4
- package/lib/services/utils/ipc/transport.js +2 -2
- package/lib/shared/errors/index.js +9 -2
- package/lib/shared/errors/selector-error-ctor-callback.js +7 -3
- package/lib/test-run/bookmark.js +1 -1
- package/lib/test-run/browser-manipulation-queue.js +3 -3
- package/lib/test-run/commands/actions.js +66 -46
- package/lib/test-run/commands/assertion.js +3 -3
- package/lib/test-run/commands/base.js +2 -2
- package/lib/test-run/commands/browser-manipulation.js +8 -8
- package/lib/test-run/commands/observation.js +4 -4
- package/lib/test-run/commands/options.js +27 -12
- package/lib/test-run/commands/type.js +2 -1
- package/lib/test-run/commands/utils.js +3 -2
- package/lib/test-run/commands/validations/argument.js +19 -10
- package/lib/test-run/commands/validations/factories.js +10 -2
- package/lib/test-run/commands/validations/initializers.js +4 -4
- package/lib/test-run/debug-log.js +4 -4
- package/lib/test-run/execute-js-expression/index.js +4 -4
- package/lib/test-run/index.js +48 -41
- package/lib/test-run/request/create-request-options.js +9 -9
- package/lib/test-run/request/process-response-data.js +2 -2
- package/lib/test-run/request/send.js +5 -5
- package/lib/testcafe.js +8 -4
- package/lib/utils/check-file-path.js +2 -2
- package/lib/utils/check-url.js +2 -2
- package/lib/utils/correct-file-path.js +4 -4
- package/lib/utils/delegated-api.js +1 -1
- package/lib/utils/detect-ffmpeg.js +3 -3
- package/lib/utils/diff/colors.js +2 -2
- package/lib/utils/diff/index.js +11 -7
- package/lib/utils/diff/util.js +5 -5
- package/lib/utils/diff.js +4 -4
- package/lib/utils/escape-user-agent.js +2 -2
- package/lib/utils/execute-fn-with-timeout.js +2 -2
- package/lib/utils/get-browser.js +2 -2
- package/lib/utils/get-filter-fn.js +4 -4
- package/lib/utils/get-options/base.js +2 -2
- package/lib/utils/get-options/compiler.js +2 -2
- package/lib/utils/get-options/dashboard.js +2 -2
- package/lib/utils/get-options/get-assertion-timeout.js +1 -1
- package/lib/utils/get-options/index.js +4 -2
- package/lib/utils/get-options/meta.js +2 -2
- package/lib/utils/get-options/quarantine.js +8 -6
- package/lib/utils/get-options/screenshot.js +2 -2
- package/lib/utils/get-options/skip-js-errors.js +35 -0
- package/lib/utils/get-options/ssl.js +6 -6
- package/lib/utils/get-options/video.js +2 -2
- package/lib/utils/is-password-input.js +1 -1
- package/lib/utils/log-entry.js +2 -2
- package/lib/utils/make-reg-exp.js +19 -6
- package/lib/utils/moment-loader.js +2 -2
- package/lib/utils/parse-file-list.js +7 -7
- package/lib/utils/path-pattern.js +4 -4
- package/lib/utils/prepare-reporters.js +2 -2
- package/lib/utils/prerender-callsite.js +6 -6
- package/lib/utils/process.js +7 -7
- package/lib/utils/promisified-functions.js +14 -14
- package/lib/utils/raw-command-callsite-record.js +2 -2
- package/lib/utils/resolve-path-relatively-cwd.js +2 -2
- package/lib/utils/string.js +3 -3
- package/lib/utils/temp-directory/cleanup-process/index.js +6 -6
- package/lib/utils/temp-directory/cleanup-process/worker.js +4 -4
- package/lib/utils/temp-directory/index.js +6 -6
- package/lib/utils/temp-directory/lockfile.js +2 -2
- package/lib/video-recorder/process.js +6 -6
- package/lib/video-recorder/recorder.js +9 -9
- package/lib/video-recorder/test-run-video-recorder.js +2 -2
- package/package.json +8 -7
- package/ts-defs/index.d.ts +46 -7
- package/ts-defs/selectors.d.ts +39 -0
- package/ts-defs/testcafe-scripts.d.ts +39 -0
|
@@ -39,14 +39,14 @@ class Assertion {
|
|
|
39
39
|
}
|
|
40
40
|
_checkForWarnings(testController, assertionCommand, callsite) {
|
|
41
41
|
testController.checkForExcessiveAwaits(callsite, assertionCommand);
|
|
42
|
-
if (types_1.isClientFunction(assertionCommand.actual)) {
|
|
43
|
-
add_rendered_warning_1.default(testController.warningLog, {
|
|
42
|
+
if ((0, types_1.isClientFunction)(assertionCommand.actual)) {
|
|
43
|
+
(0, add_rendered_warning_1.default)(testController.warningLog, {
|
|
44
44
|
message: warning_message_1.default.assertedClientFunctionInstance,
|
|
45
45
|
actionId: assertionCommand.actionId,
|
|
46
46
|
}, callsite);
|
|
47
47
|
}
|
|
48
|
-
else if (types_1.isSelector(assertionCommand.actual)) {
|
|
49
|
-
add_rendered_warning_1.default(testController.warningLog, {
|
|
48
|
+
else if ((0, types_1.isSelector)(assertionCommand.actual)) {
|
|
49
|
+
(0, add_rendered_warning_1.default)(testController.warningLog, {
|
|
50
50
|
message: warning_message_1.default.assertedSelectorInstance,
|
|
51
51
|
actionId: assertionCommand.actionId,
|
|
52
52
|
}, callsite);
|
|
@@ -104,4 +104,4 @@ class Assertion {
|
|
|
104
104
|
}
|
|
105
105
|
exports.default = Assertion;
|
|
106
106
|
module.exports = exports.default;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90ZXN0LWNvbnRyb2xsZXIvYXNzZXJ0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUVBa0IyQztBQUMzQyxvREFBd0U7QUFJeEUsd0RBQTRFO0FBQzVFLG9HQUFrRTtBQUNsRSwwRkFBa0U7QUFTbEUsTUFBcUIsU0FBUztJQUsxQixZQUFvQixNQUFlLEVBQUUsY0FBOEIsRUFBRSxRQUF3QjtRQUN6RixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFXLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFTLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRU0sSUFBSTtRQUNQLE1BQU0sSUFBSSwwQ0FBK0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGlCQUFpQixDQUFFLE9BQWdDLEVBQUUsYUFBNEI7UUFDckYsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUVwQyw2RUFBNkU7UUFDN0UsaUVBQWlFO1FBQ2pFLDRHQUE0RztRQUM1RyxrREFBa0Q7UUFDbEQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUEyQixDQUFDO1lBQ3BELE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ2pELGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUNqQyxNQUFNLEVBQVMsSUFBSSxDQUFDLE9BQU87WUFDM0IsUUFBUSxFQUFPLGFBQWEsQ0FBQyxRQUFRO1lBQ3JDLFNBQVMsRUFBTSxhQUFhLENBQUMsU0FBUztZQUN0QyxPQUFPLEVBQVEsT0FBTztZQUN0QixPQUFPLEVBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLEVBQUU7U0FDcEcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLGlCQUFpQixDQUFFLGNBQThCLEVBQUUsZ0JBQWtDLEVBQUUsUUFBd0I7UUFDbkgsY0FBYyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRW5FLElBQUksd0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDM0MsOEJBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO2dCQUNsQyxPQUFPLEVBQUcseUJBQWUsQ0FBQyw4QkFBOEI7Z0JBQ3hELFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO2FBQ3RDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDaEI7YUFDSSxJQUFJLGtCQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUMsOEJBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO2dCQUNsQyxPQUFPLEVBQUcseUJBQWUsQ0FBQyx3QkFBd0I7Z0JBQ2xELFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO2FBQ3RDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRU0sQ0FBQywrQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUMvRixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywrQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sQ0FBQyxrQ0FBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNsRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sQ0FBQyw4QkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxPQUFlLEVBQUUsSUFBc0I7UUFDM0UsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsOEJBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sQ0FBQyxpQ0FBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxPQUFlLEVBQUUsSUFBc0I7UUFDOUUsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUNBQXFCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sQ0FBQyxvQ0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNwRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQ0FBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU0sQ0FBQyx1Q0FBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUN2RyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx1Q0FBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU0sQ0FBQyxrQ0FBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNsRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sQ0FBQyxxQ0FBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNyRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQ0FBeUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRU0sQ0FBQyw4QkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUM5RixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sQ0FBQywrQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUMvRixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywrQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sQ0FBQyw4QkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUM5RixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sQ0FBQywrQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUMvRixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywrQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sQ0FBQyxrQ0FBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUM5Ryw4REFBOEQ7UUFDOUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0NBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVNLENBQUMscUNBQXlCLENBQUMsVUFBVSxDQUFDLENBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxPQUFlLEVBQUUsSUFBc0I7UUFDakgsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUNBQXlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVNLENBQUMsaUNBQXFCLENBQUMsVUFBVSxDQUFDLENBQUUsUUFBaUIsRUFBRSxPQUFlLEVBQUUsSUFBc0I7UUFDakcsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUNBQXFCLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVNLENBQUMsb0NBQXdCLENBQUMsVUFBVSxDQUFDLENBQUUsUUFBaUIsRUFBRSxPQUFlLEVBQUUsSUFBc0I7UUFDcEcsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0NBQXdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztDQUNKO0FBdkhELDRCQXVIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBDb250YWluc0Fzc2VydGlvbkNvbW1hbmQsXG4gICAgRXFsQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBHdEFzc2VydGlvbkNvbW1hbmQsXG4gICAgR3RlQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBMdEFzc2VydGlvbkNvbW1hbmQsXG4gICAgTHRlQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBNYXRjaEFzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90Q29udGFpbnNBc3NlcnRpb25Db21tYW5kLFxuICAgIE5vdEVxbEFzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90TWF0Y2hBc3NlcnRpb25Db21tYW5kLFxuICAgIE5vdE9rQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBOb3RUeXBlT2ZBc3NlcnRpb25Db21tYW5kLFxuICAgIE5vdFdpdGhpbkFzc2VydGlvbkNvbW1hbmQsXG4gICAgT2tBc3NlcnRpb25Db21tYW5kLFxuICAgIFR5cGVPZkFzc2VydGlvbkNvbW1hbmQsXG4gICAgV2l0aGluQXNzZXJ0aW9uQ29tbWFuZCxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYXNzZXJ0aW9uJztcbmltcG9ydCB7IEFzc2VydGlvbldpdGhvdXRNZXRob2RDYWxsRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvdGVzdC1ydW4nO1xuaW1wb3J0IFRlc3RDb250cm9sbGVyIGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgQ2FsbHNpdGVSZWNvcmQgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuaW1wb3J0IHsgQXNzZXJ0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29wdGlvbnMnO1xuaW1wb3J0IHsgaXNDbGllbnRGdW5jdGlvbiwgaXNTZWxlY3RvciB9IGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvdHlwZXMnO1xuaW1wb3J0IGFkZFdhcm5pbmcgZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9hZGQtcmVuZGVyZWQtd2FybmluZyc7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcblxuaW50ZXJmYWNlIEFzc2VydGlvbkFyZ3Mge1xuICAgIG9wdHM6IEFzc2VydGlvbk9wdGlvbnM7XG4gICAgbWVzc2FnZT86IHN0cmluZyB8IEFzc2VydGlvbk9wdGlvbnM7XG4gICAgZXhwZWN0ZWQ/OiB1bmtub3duO1xuICAgIGV4cGVjdGVkMj86IHVua25vd247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFzc2VydGlvbiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdENvbnRyb2xsZXI6IFRlc3RDb250cm9sbGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjdHVhbDogdW5rbm93bjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGFjdHVhbDogdW5rbm93biwgdGVzdENvbnRyb2xsZXI6IFRlc3RDb250cm9sbGVyLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpIHtcbiAgICAgICAgdGhpcy5fdGVzdENvbnRyb2xsZXIgPSB0ZXN0Q29udHJvbGxlcjtcbiAgICAgICAgdGhpcy5fYWN0dWFsICAgICAgICAgPSBhY3R1YWw7XG4gICAgICAgIHRoaXMuX2NhbGxzaXRlICAgICAgID0gY2FsbHNpdGU7XG4gICAgfVxuXG4gICAgcHVibGljIHRoZW4gKCk6IG5ldmVyIHtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbldpdGhvdXRNZXRob2RDYWxsRXJyb3IodGhpcy5fY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VucXVldWVBc3NlcnRpb24gKGNvbW1hbmQ6IHR5cGVvZiBBc3NlcnRpb25Db21tYW5kLCBhc3NlcnRpb25BcmdzOiBBc3NlcnRpb25BcmdzKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIGxldCBvcHRpb25zID0gYXNzZXJ0aW9uQXJncy5vcHRzIHx8IHt9O1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGFzc2VydGlvbkFyZ3MubWVzc2FnZTtcblxuICAgICAgICAvLyBOT1RFOiBBc3NlcnRpb24gb3B0aW9ucyBzaG91bGQgYmUgc3BlY2lmaWVkIGFmdGVyIHRoZSAnbWVzc2FnZScgcGFyYW1ldGVyLlxuICAgICAgICAvLyBhd2FpdCB0LmV4cGVjdCg0MikuZXFsKDQzLCAnd3JvbmcgdmFsdWUnLCB7IHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGVtcHR5IGFzc2VydGlvbiBtZXNzYWdlIHdlIGFsbG93aW5nIHRvIHNwZWNpZnkgYXNzZXJ0aW9uIG9wdGlvbiBpbiBwbGFjZSBvZiBhc3NlcnRpb24gbWVzc2FnZS5cbiAgICAgICAgLy8gYXdhaXQgdC5leHBlY3QoNDIpLmVxbCg0MywgeyB0aW1lb3V0OiAxMDAwMCB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGFzc2VydGlvbkFyZ3MubWVzc2FnZSBhcyBBc3NlcnRpb25PcHRpb25zO1xuICAgICAgICAgICAgbWVzc2FnZSA9IHZvaWQgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXN0Q29udHJvbGxlci5fZW5xdWV1ZUNvbW1hbmQoY29tbWFuZCwge1xuICAgICAgICAgICAgYXNzZXJ0aW9uVHlwZTogY29tbWFuZC5tZXRob2ROYW1lLFxuICAgICAgICAgICAgYWN0dWFsOiAgICAgICAgdGhpcy5fYWN0dWFsLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6ICAgICAgYXNzZXJ0aW9uQXJncy5leHBlY3RlZCxcbiAgICAgICAgICAgIGV4cGVjdGVkMjogICAgIGFzc2VydGlvbkFyZ3MuZXhwZWN0ZWQyLFxuICAgICAgICAgICAgbWVzc2FnZTogICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgIG9wdGlvbnM6ICAgICAgIHsgdGltZW91dDogb3B0aW9ucy50aW1lb3V0LCBhbGxvd1VuYXdhaXRlZFByb21pc2U6IG9wdGlvbnMuYWxsb3dVbmF3YWl0ZWRQcm9taXNlIH0sXG4gICAgICAgIH0sIHRoaXMuX2NoZWNrRm9yV2FybmluZ3MuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tGb3JXYXJuaW5ncyAodGVzdENvbnRyb2xsZXI6IFRlc3RDb250cm9sbGVyLCBhc3NlcnRpb25Db21tYW5kOiBBc3NlcnRpb25Db21tYW5kLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiB2b2lkIHtcbiAgICAgICAgdGVzdENvbnRyb2xsZXIuY2hlY2tGb3JFeGNlc3NpdmVBd2FpdHMoY2FsbHNpdGUsIGFzc2VydGlvbkNvbW1hbmQpO1xuXG4gICAgICAgIGlmIChpc0NsaWVudEZ1bmN0aW9uKGFzc2VydGlvbkNvbW1hbmQuYWN0dWFsKSkge1xuICAgICAgICAgICAgYWRkV2FybmluZyh0ZXN0Q29udHJvbGxlci53YXJuaW5nTG9nLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogIFdBUk5JTkdfTUVTU0FHRS5hc3NlcnRlZENsaWVudEZ1bmN0aW9uSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgYWN0aW9uSWQ6IGFzc2VydGlvbkNvbW1hbmQuYWN0aW9uSWQsXG4gICAgICAgICAgICB9LCBjYWxsc2l0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTZWxlY3Rvcihhc3NlcnRpb25Db21tYW5kLmFjdHVhbCkpIHtcbiAgICAgICAgICAgIGFkZFdhcm5pbmcodGVzdENvbnRyb2xsZXIud2FybmluZ0xvZywge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICBXQVJOSU5HX01FU1NBR0UuYXNzZXJ0ZWRTZWxlY3Rvckluc3RhbmNlLFxuICAgICAgICAgICAgICAgIGFjdGlvbklkOiBhc3NlcnRpb25Db21tYW5kLmFjdGlvbklkLFxuICAgICAgICAgICAgfSwgY2FsbHNpdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIFtFcWxBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKEVxbEFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtOb3RFcWxBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE5vdEVxbEFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtPa0Fzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihPa0Fzc2VydGlvbkNvbW1hbmQsIHsgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW05vdE9rQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAobWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE5vdE9rQXNzZXJ0aW9uQ29tbWFuZCwgeyBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbQ29udGFpbnNBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKENvbnRhaW5zQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW05vdENvbnRhaW5zQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihOb3RDb250YWluc0Fzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtUeXBlT2ZBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKFR5cGVPZkFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtOb3RUeXBlT2ZBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE5vdFR5cGVPZkFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtHdEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oR3RBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbR3RlQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihHdGVBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTHRBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKEx0QXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW0x0ZUFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTHRlQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW1dpdGhpbkFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKHN0YXJ0OiBudW1iZXIsIGZpbmlzaDogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgLy8gTk9URTogYHdpdGhpbmAgaXMgbm90IGF2YWlsYWJsZSBpbiBDaGFpIGBhc3NlcnRgIGludGVyZmFjZS5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oV2l0aGluQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZDogc3RhcnQsIGV4cGVjdGVkMjogZmluaXNoLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTm90V2l0aGluQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoc3RhcnQ6IG51bWJlciwgZmluaXNoOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihOb3RXaXRoaW5Bc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkOiBzdGFydCwgZXhwZWN0ZWQyOiBmaW5pc2gsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtNYXRjaEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTWF0Y2hBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTm90TWF0Y2hBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE5vdE1hdGNoQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG59XG4iXX0=
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS90ZXN0LWNvbnRyb2xsZXIvYXNzZXJ0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUVBa0IyQztBQUMzQyxvREFBd0U7QUFJeEUsd0RBQTRFO0FBQzVFLG9HQUFrRTtBQUNsRSwwRkFBa0U7QUFTbEUsTUFBcUIsU0FBUztJQUsxQixZQUFvQixNQUFlLEVBQUUsY0FBOEIsRUFBRSxRQUF3QjtRQUN6RixJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFXLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFTLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRU0sSUFBSTtRQUNQLE1BQU0sSUFBSSwwQ0FBK0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGlCQUFpQixDQUFFLE9BQWdDLEVBQUUsYUFBNEI7UUFDckYsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUVwQyw2RUFBNkU7UUFDN0UsaUVBQWlFO1FBQ2pFLDRHQUE0RztRQUM1RyxrREFBa0Q7UUFDbEQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDN0IsT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUEyQixDQUFDO1lBQ3BELE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ2pELGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUNqQyxNQUFNLEVBQVMsSUFBSSxDQUFDLE9BQU87WUFDM0IsUUFBUSxFQUFPLGFBQWEsQ0FBQyxRQUFRO1lBQ3JDLFNBQVMsRUFBTSxh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QUFFLElBQXNCO1FBQzlHLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRU0sQ0FBQyxxQ0FBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNqSCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQ0FBeUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU0sQ0FBQyxpQ0FBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNqRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQ0FBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sQ0FBQyxvQ0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBRSxRQUFpQixFQUFFLE9BQWUsRUFBRSxJQUFzQjtRQUNwRyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQ0FBd0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RixDQUFDO0NBQ0o7QUF2SEQsNEJBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBc3NlcnRpb25Db21tYW5kLFxuICAgIENvbnRhaW5zQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBFcWxBc3NlcnRpb25Db21tYW5kLFxuICAgIEd0QXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBHdGVBc3NlcnRpb25Db21tYW5kLFxuICAgIEx0QXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBMdGVBc3NlcnRpb25Db21tYW5kLFxuICAgIE1hdGNoQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBOb3RDb250YWluc0Fzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90RXFsQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBOb3RNYXRjaEFzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90T2tBc3NlcnRpb25Db21tYW5kLFxuICAgIE5vdFR5cGVPZkFzc2VydGlvbkNvbW1hbmQsXG4gICAgTm90V2l0aGluQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBPa0Fzc2VydGlvbkNvbW1hbmQsXG4gICAgVHlwZU9mQXNzZXJ0aW9uQ29tbWFuZCxcbiAgICBXaXRoaW5Bc3NlcnRpb25Db21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hc3NlcnRpb24nO1xuaW1wb3J0IHsgQXNzZXJ0aW9uV2l0aG91dE1ldGhvZENhbGxFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdENvbnRyb2xsZXIgZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBDYWxsc2l0ZVJlY29yZCB9IGZyb20gJ2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgeyBBc3NlcnRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBpc0NsaWVudEZ1bmN0aW9uLCBpc1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy90eXBlcyc7XG5pbXBvcnQgYWRkV2FybmluZyBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL2FkZC1yZW5kZXJlZC13YXJuaW5nJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0UgZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLW1lc3NhZ2UnO1xuXG5pbnRlcmZhY2UgQXNzZXJ0aW9uQXJncyB7XG4gICAgb3B0czogQXNzZXJ0aW9uT3B0aW9ucztcbiAgICBtZXNzYWdlPzogc3RyaW5nIHwgQXNzZXJ0aW9uT3B0aW9ucztcbiAgICBleHBlY3RlZD86IHVua25vd247XG4gICAgZXhwZWN0ZWQyPzogdW5rbm93bjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXNzZXJ0aW9uIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0Q29udHJvbGxlcjogVGVzdENvbnRyb2xsZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYWN0dWFsOiB1bmtub3duO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYWN0dWFsOiB1bmtub3duLCB0ZXN0Q29udHJvbGxlcjogVGVzdENvbnRyb2xsZXIsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCkge1xuICAgICAgICB0aGlzLl90ZXN0Q29udHJvbGxlciA9IHRlc3RDb250cm9sbGVyO1xuICAgICAgICB0aGlzLl9hY3R1YWwgICAgICAgICA9IGFjdHVhbDtcbiAgICAgICAgdGhpcy5fY2FsbHNpdGUgICAgICAgPSBjYWxsc2l0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGhlbiAoKTogbmV2ZXIge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uV2l0aG91dE1ldGhvZENhbGxFcnJvcih0aGlzLl9jYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5xdWV1ZUFzc2VydGlvbiAoY29tbWFuZDogdHlwZW9mIEFzc2VydGlvbkNvbW1hbmQsIGFzc2VydGlvbkFyZ3M6IEFzc2VydGlvbkFyZ3MpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBhc3NlcnRpb25BcmdzLm9wdHMgfHwge307XG4gICAgICAgIGxldCBtZXNzYWdlID0gYXNzZXJ0aW9uQXJncy5tZXNzYWdlO1xuXG4gICAgICAgIC8vIE5PVEU6IEFzc2VydGlvbiBvcHRpb25zIHNob3VsZCBiZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlICdtZXNzYWdlJyBwYXJhbWV0ZXIuXG4gICAgICAgIC8vIGF3YWl0IHQuZXhwZWN0KDQyKS5lcWwoNDMsICd3cm9uZyB2YWx1ZScsIHsgdGltZW91dDogMTAwMDAgfSk7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgZW1wdHkgYXNzZXJ0aW9uIG1lc3NhZ2Ugd2UgYWxsb3dpbmcgdG8gc3BlY2lmeSBhc3NlcnRpb24gb3B0aW9uIGluIHBsYWNlIG9mIGFzc2VydGlvbiBtZXNzYWdlLlxuICAgICAgICAvLyBhd2FpdCB0LmV4cGVjdCg0MikuZXFsKDQzLCB7IHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gYXNzZXJ0aW9uQXJncy5tZXNzYWdlIGFzIEFzc2VydGlvbk9wdGlvbnM7XG4gICAgICAgICAgICBtZXNzYWdlID0gdm9pZCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rlc3RDb250cm9sbGVyLl9lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCB7XG4gICAgICAgICAgICBhc3NlcnRpb25UeXBlOiBjb21tYW5kLm1ldGhvZE5hbWUsXG4gICAgICAgICAgICBhY3R1YWw6ICAgICAgICB0aGlzLl9hY3R1YWwsXG4gICAgICAgICAgICBleHBlY3RlZDogICAgICBhc3NlcnRpb25BcmdzLmV4cGVjdGVkLFxuICAgICAgICAgICAgZXhwZWN0ZWQyOiAgICAgYXNzZXJ0aW9uQXJncy5leHBlY3RlZDIsXG4gICAgICAgICAgICBtZXNzYWdlOiAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgb3B0aW9uczogICAgICAgeyB0aW1lb3V0OiBvcHRpb25zLnRpbWVvdXQsIGFsbG93VW5hd2FpdGVkUHJvbWlzZTogb3B0aW9ucy5hbGxvd1VuYXdhaXRlZFByb21pc2UgfSxcbiAgICAgICAgfSwgdGhpcy5fY2hlY2tGb3JXYXJuaW5ncy5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0Zvcldhcm5pbmdzICh0ZXN0Q29udHJvbGxlcjogVGVzdENvbnRyb2xsZXIsIGFzc2VydGlvbkNvbW1hbmQ6IEFzc2VydGlvbkNvbW1hbmQsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCk6IHZvaWQge1xuICAgICAgICB0ZXN0Q29udHJvbGxlci5jaGVja0ZvckV4Y2Vzc2l2ZUF3YWl0cyhjYWxsc2l0ZSwgYXNzZXJ0aW9uQ29tbWFuZCk7XG5cbiAgICAgICAgaWYgKGlzQ2xpZW50RnVuY3Rpb24oYXNzZXJ0aW9uQ29tbWFuZC5hY3R1YWwpKSB7XG4gICAgICAgICAgICBhZGRXYXJuaW5nKHRlc3RDb250cm9sbGVyLndhcm5pbmdMb2csIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAgV0FSTklOR19NRVNTQUdFLmFzc2VydGVkQ2xpZW50RnVuY3Rpb25JbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBhY3Rpb25JZDogYXNzZXJ0aW9uQ29tbWFuZC5hY3Rpb25JZCxcbiAgICAgICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1NlbGVjdG9yKGFzc2VydGlvbkNvbW1hbmQuYWN0dWFsKSkge1xuICAgICAgICAgICAgYWRkV2FybmluZyh0ZXN0Q29udHJvbGxlci53YXJuaW5nTG9nLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogIFdBUk5JTkdfTUVTU0FHRS5hc3NlcnRlZFNlbGVjdG9ySW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgYWN0aW9uSWQ6IGFzc2VydGlvbkNvbW1hbmQuYWN0aW9uSWQsXG4gICAgICAgICAgICB9LCBjYWxsc2l0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgW0VxbEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oRXFsQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW05vdEVxbEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTm90RXFsQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW09rQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAobWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE9rQXNzZXJ0aW9uQ29tbWFuZCwgeyBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTm90T2tBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTm90T2tBc3NlcnRpb25Db21tYW5kLCB7IG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtDb250YWluc0Fzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oQ29udGFpbnNBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTm90Q29udGFpbnNBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE5vdENvbnRhaW5zQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW1R5cGVPZkFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oVHlwZU9mQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW05vdFR5cGVPZkFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTm90VHlwZU9mQXNzZXJ0aW9uQ29tbWFuZCwgeyBleHBlY3RlZCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW0d0QXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihHdEFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtHdGVBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChleHBlY3RlZDogdW5rbm93biwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKEd0ZUFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtMdEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTHRBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbTHRlQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihMdGVBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBbV2l0aGluQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoc3RhcnQ6IG51bWJlciwgZmluaXNoOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICAvLyBOT1RFOiBgd2l0aGluYCBpcyBub3QgYXZhaWxhYmxlIGluIENoYWkgYGFzc2VydGAgaW50ZXJmYWNlLlxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihXaXRoaW5Bc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkOiBzdGFydCwgZXhwZWN0ZWQyOiBmaW5pc2gsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtOb3RXaXRoaW5Bc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWVdIChzdGFydDogbnVtYmVyLCBmaW5pc2g6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nLCBvcHRzOiBBc3NlcnRpb25PcHRpb25zKTogKCkgPT4gUHJvbWlzZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQXNzZXJ0aW9uKE5vdFdpdGhpbkFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQ6IHN0YXJ0LCBleHBlY3RlZDI6IGZpbmlzaCwgbWVzc2FnZSwgb3B0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgW01hdGNoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lXSAoZXhwZWN0ZWQ6IHVua25vd24sIG1lc3NhZ2U6IHN0cmluZywgb3B0czogQXNzZXJ0aW9uT3B0aW9ucyk6ICgpID0+IFByb21pc2U8dW5rbm93bj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUFzc2VydGlvbihNYXRjaEFzc2VydGlvbkNvbW1hbmQsIHsgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wdHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIFtOb3RNYXRjaEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZV0gKGV4cGVjdGVkOiB1bmtub3duLCBtZXNzYWdlOiBzdHJpbmcsIG9wdHM6IEFzc2VydGlvbk9wdGlvbnMpOiAoKSA9PiBQcm9taXNlPHVua25vd24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVBc3NlcnRpb24oTm90TWF0Y2hBc3NlcnRpb25Db21tYW5kLCB7IGV4cGVjdGVkLCBtZXNzYWdlLCBvcHRzIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -75,7 +75,7 @@ function createExecutionContext(testRun) {
|
|
|
75
75
|
[OPTIONS_KEY]: exports.DEFAULT_CONTEXT_OPTIONS,
|
|
76
76
|
userVariables: exportable_lib_1.default.userVariables,
|
|
77
77
|
};
|
|
78
|
-
return vm_1.createContext(new Proxy(replacers, {
|
|
78
|
+
return (0, vm_1.createContext)(new Proxy(replacers, {
|
|
79
79
|
get: (target, property) => {
|
|
80
80
|
if (replacers.hasOwnProperty(property))
|
|
81
81
|
return replacers[property];
|
|
@@ -86,4 +86,4 @@ function createExecutionContext(testRun) {
|
|
|
86
86
|
}));
|
|
87
87
|
}
|
|
88
88
|
exports.createExecutionContext = createExecutionContext;
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9leGVjdXRpb24tY29udGV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBbUM7QUFDbkMsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQUN4Qix1RUFBOEM7QUFDOUMsb0dBQWdFO0FBRWhFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV6QixRQUFBLHVCQUF1QixHQUFHO0lBQ25DLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsY0FBYyxFQUFPLEtBQUs7Q0FDN0IsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQUUsV0FBVztJQUNwQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsSUFBSSxTQUFTLEdBQUssY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1QyxPQUFPLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDOUIsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixTQUFTLEdBQUssY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4QyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtDQUFZLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLFFBQVE7SUFDNUIsZ0NBQWdDO0lBQ2hDLElBQUksZ0JBQU0sQ0FBQyxxQkFBcUI7UUFDNUIsT0FBTyxnQkFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWxELElBQUksZ0JBQU0sQ0FBQyxhQUFhO1FBQ3BCLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUMsTUFBTSxXQUFXLEdBQVksSUFBSSxnQkFB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LENBQUMsQ0FBQztZQUU1QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUE3QkQsd0RBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ZtJztcbmltcG9ydCBNb2R1bGUgZnJvbSAnbW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGV4cG9ydGFibGVMaWIgZnJvbSAnLi4vZXhwb3J0YWJsZS1saWInO1xuaW1wb3J0IE5PREVfTU9EVUxFUyBmcm9tICcuLi8uLi91dGlscy9ub2RlLW1vZHVsZXMtZm9sZGVyLW5hbWUnO1xuXG5jb25zdCBPUFRJT05TX0tFWSA9IFN5bWJvbCgnb3B0aW9ucycpO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05URVhUX09QVElPTlMgPSB7XG4gICAgc2tpcFZpc2liaWxpdHlDaGVjazogZmFsc2UsXG4gICAgY29sbGVjdGlvbk1vZGU6ICAgICAgZmFsc2UsXG59O1xuXG5mdW5jdGlvbiBnZXRNb2R1bGVCYXNlUGF0aHMgKGN1cnJlbnRQYXRoKSB7XG4gICAgY29uc3Qgbm9kZVBhdGhzID0gW107XG4gICAgbGV0IHBhcmVudERpciAgID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRQYXRoKTtcblxuICAgIHdoaWxlIChjdXJyZW50UGF0aCAhPT0gcGFyZW50RGlyKSB7XG4gICAgICAgIGN1cnJlbnRQYXRoID0gcGFyZW50RGlyO1xuICAgICAgICBwYXJlbnREaXIgICA9IHBhdGguZGlybmFtZShjdXJyZW50UGF0aCk7XG5cbiAgICAgICAgbm9kZVBhdGhzLnB1c2gocGF0aC5qb2luKGN1cnJlbnRQYXRoLCBOT0RFX01PRFVMRVMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZVBhdGhzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlIChmaWxlbmFtZSkge1xuICAgIC8vRGVwcmVjYXRlZCBzaW5jZTogTm9kZSB2MTIuMi4wXG4gICAgaWYgKE1vZHVsZS5jcmVhdGVSZXF1aXJlRnJvbVBhdGgpXG4gICAgICAgIHJldHVybiBNb2R1bGUuY3JlYXRlUmVxdWlyZUZyb21QYXRoKGZpbGVuYW1lKTtcblxuICAgIGlmIChNb2R1bGUuY3JlYXRlUmVxdWlyZSlcbiAgICAgICAgcmV0dXJuIE1vZHVsZS5jcmVhdGVSZXF1aXJlKGZpbGVuYW1lKTtcblxuICAgIGNvbnN0IGR1bW15TW9kdWxlICAgICAgICAgID0gbmV3IE1vZHVsZShmaWxlbmFtZSwgbW9kdWxlKTtcbiAgICBjb25zdCBsb2NhbE1vZHVsZXNQYXRocyAgICA9IGdldE1vZHVsZUJhc2VQYXRocyhmaWxlbmFtZSk7XG5cbiAgICBkdW1teU1vZHVsZS5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgIGR1bW15TW9kdWxlLnBhdGhzICAgID0gbG9jYWxNb2R1bGVzUGF0aHMuY29uY2F0KG1vZHVsZS5wYXRocyk7XG5cbiAgICByZXR1cm4gaWQgPT4gZHVtbXlNb2R1bGUucmVxdWlyZShpZCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yRGVmaW5pdGlvbiAodGVzdFJ1bikge1xuICAgIHJldHVybiAoZm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNraXBWaXNpYmlsaXR5Q2hlY2ssIGNvbGxlY3Rpb25Nb2RlIH0gPSB0ZXN0UnVuLmNvbnRyb2xsZXIuZ2V0RXhlY3V0aW9uQ29udGV4dCgpW09QVElPTlNfS0VZXTtcblxuICAgICAgICBpZiAoc2tpcFZpc2liaWxpdHlDaGVjaylcbiAgICAgICAgICAgIG9wdGlvbnMudmlzaWJpbGl0eUNoZWNrID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRlc3RSdW4gJiYgdGVzdFJ1bi5pZClcbiAgICAgICAgICAgIG9wdGlvbnMuYm91bmRUZXN0UnVuID0gdGVzdFJ1bjtcblxuICAgICAgICBpZiAoY29sbGVjdGlvbk1vZGUpXG4gICAgICAgICAgICBvcHRpb25zLmNvbGxlY3Rpb25Nb2RlID0gY29sbGVjdGlvbk1vZGU7XG5cbiAgICAgICAgcmV0dXJuIGV4cG9ydGFibGVMaWIuU2VsZWN0b3IoZm4sIG9wdGlvbnMpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsaWVudEZ1bmN0aW9uRGVmaW5pdGlvbiAodGVzdFJ1bikge1xuICAgIHJldHVybiAoZm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBpZiAodGVzdFJ1biAmJiB0ZXN0UnVuLmlkKVxuICAgICAgICAgICAgb3B0aW9ucy5ib3VuZFRlc3RSdW4gPSB0ZXN0UnVuO1xuXG4gICAgICAgIHJldHVybiBleHBvcnRhYmxlTGliLkNsaWVudEZ1bmN0aW9uKGZuLCBvcHRpb25zKTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udGV4dE9wdGlvbnMgKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBjb250ZXh0W09QVElPTlNfS0VZXSA9IG9wdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFeGVjdXRpb25Db250ZXh0ICh0ZXN0UnVuKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0ZXN0UnVuLnRlc3QudGVzdEZpbGUuZmlsZW5hbWU7XG5cbiAgICBjb25zdCByZXBsYWNlcnMgPSB7XG4gICAgICAgIHJlcXVpcmU6ICAgICAgICBjcmVhdGVSZXF1aXJlKGZpbGVuYW1lKSxcbiAgICAgICAgX19maWxlbmFtZTogICAgIGZpbGVuYW1lLFxuICAgICAgICBfX2Rpcm5hbWU6ICAgICAgcGF0aC5kaXJuYW1lKGZpbGVuYW1lKSxcbiAgICAgICAgdDogICAgICAgICAgICAgIHRlc3RSdW4uY29udHJvbGxlcixcbiAgICAgICAgU2VsZWN0b3I6ICAgICAgIGNyZWF0ZVNlbGVjdG9yRGVmaW5pdGlvbih0ZXN0UnVuKSxcbiAgICAgICAgQ2xpZW50RnVuY3Rpb246IGNyZWF0ZUNsaWVudEZ1bmN0aW9uRGVmaW5pdGlvbih0ZXN0UnVuKSxcbiAgICAgICAgUm9sZTogICAgICAgICAgIGV4cG9ydGFibGVMaWIuUm9sZSxcbiAgICAgICAgUmVxdWVzdExvZ2dlcjogIGV4cG9ydGFibGVMaWIuUmVxdWVzdExvZ2dlcixcbiAgICAgICAgUmVxdWVzdE1vY2s6ICAgIGV4cG9ydGFibGVMaWIuUmVxdWVzdE1vY2ssXG4gICAgICAgIFJlcXVlc3RIb29rOiAgICBleHBvcnRhYmxlTGliLlJlcXVlc3RIb29rLFxuICAgICAgICBbT1BUSU9OU19LRVldOiAgREVGQVVMVF9DT05URVhUX09QVElPTlMsXG4gICAgICAgIHVzZXJWYXJpYWJsZXM6ICBleHBvcnRhYmxlTGliLnVzZXJWYXJpYWJsZXMsXG4gICAgfTtcblxuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KG5ldyBQcm94eShyZXBsYWNlcnMsIHtcbiAgICAgICAgZ2V0OiAodGFyZ2V0LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcGxhY2Vycy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2Vyc1twcm9wZXJ0eV07XG5cbiAgICAgICAgICAgIGlmIChnbG9iYWwuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxbcHJvcGVydHldO1xuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHl9IGlzIG5vdCBkZWZpbmVkYCk7XG4gICAgICAgIH0sXG4gICAgfSkpO1xufVxuIl19
|
|
@@ -42,13 +42,13 @@ class TestController {
|
|
|
42
42
|
_addTestControllerToExecutionChain() {
|
|
43
43
|
this.executionChain._testController = this;
|
|
44
44
|
}
|
|
45
|
-
// NOTE:
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
// b)Promise chained by using one of the mixed-in controller methods
|
|
45
|
+
// NOTE: TestCafe executes actions and assertions asynchronously in the following cases:
|
|
46
|
+
// a) The `await` keyword that proceeds the method declaration triggers the `then` function of a Promise.
|
|
47
|
+
// b) The action is chained to another `awaited` method.
|
|
49
48
|
//
|
|
50
|
-
// In
|
|
51
|
-
//
|
|
49
|
+
// In order to track missing `await` statements, TestCafe exposes a special Promise to the user.
|
|
50
|
+
// When TestCafe detects a missing `await` statement, it compares the method's callsite to the call site of the exposed Promise.
|
|
51
|
+
// This workaround is necessary for situations like these:
|
|
52
52
|
//
|
|
53
53
|
// var t2 = t.click('#btn1'); // <-- stores new callsiteWithoutAwait
|
|
54
54
|
// await t2; // <-- callsiteWithoutAwait = null
|
|
@@ -62,7 +62,7 @@ class TestController {
|
|
|
62
62
|
markCallsiteAwaited();
|
|
63
63
|
return originalThen.apply(this, arguments);
|
|
64
64
|
};
|
|
65
|
-
delegated_api_1.delegateAPI(extendedPromise, TestController.API_LIST, {
|
|
65
|
+
(0, delegated_api_1.delegateAPI)(extendedPromise, TestController.API_LIST, {
|
|
66
66
|
handler: this,
|
|
67
67
|
proxyMethod: markCallsiteAwaited,
|
|
68
68
|
});
|
|
@@ -87,7 +87,7 @@ class TestController {
|
|
|
87
87
|
return this.executionChain;
|
|
88
88
|
}
|
|
89
89
|
_enqueueCommand(CmdCtor, cmdArgs, validateCommandFn) {
|
|
90
|
-
const callsite = get_callsite_1.getCallsiteForMethod(CmdCtor.methodName);
|
|
90
|
+
const callsite = (0, get_callsite_1.getCallsiteForMethod)(CmdCtor.methodName);
|
|
91
91
|
const command = this._createCommand(CmdCtor, cmdArgs, callsite);
|
|
92
92
|
if (typeof validateCommandFn === 'function')
|
|
93
93
|
validateCommandFn(this, command, callsite);
|
|
@@ -110,7 +110,7 @@ class TestController {
|
|
|
110
110
|
}
|
|
111
111
|
getExecutionContext() {
|
|
112
112
|
if (!this._executionContext)
|
|
113
|
-
this._executionContext = execution_context_1.createExecutionContext(this.testRun);
|
|
113
|
+
this._executionContext = (0, execution_context_1.createExecutionContext)(this.testRun);
|
|
114
114
|
return this._executionContext;
|
|
115
115
|
}
|
|
116
116
|
// API implementation
|
|
@@ -134,11 +134,11 @@ class TestController {
|
|
|
134
134
|
return this._enqueueCommand(actions_1.DispatchEventCommand, { selector, eventName, options, relatedTarget: options.relatedTarget });
|
|
135
135
|
}
|
|
136
136
|
_prepareCookieArguments(args, isSetCommand = false) {
|
|
137
|
-
const urlsArg = lodash_1.castArray(args[1]);
|
|
137
|
+
const urlsArg = (0, lodash_1.castArray)(args[1]);
|
|
138
138
|
const urls = Array.isArray(urlsArg) && typeof urlsArg[0] === 'string' ? urlsArg : [];
|
|
139
139
|
const cookiesArg = urls.length ? args[0] : args;
|
|
140
140
|
const cookies = [];
|
|
141
|
-
lodash_1.flattenDeep(lodash_1.castArray(cookiesArg)).forEach(cookie => {
|
|
141
|
+
(0, lodash_1.flattenDeep)((0, lodash_1.castArray)(cookiesArg)).forEach(cookie => {
|
|
142
142
|
if (isSetCommand && !cookie.name && typeof cookie === 'object')
|
|
143
143
|
Object.entries(cookie).forEach(([name, value]) => cookies.push({ name, value }));
|
|
144
144
|
else if (!isSetCommand && typeof cookie === 'string')
|
|
@@ -167,7 +167,7 @@ class TestController {
|
|
|
167
167
|
}
|
|
168
168
|
_createRequestFunction(bindOptions = {}) {
|
|
169
169
|
const controller = this;
|
|
170
|
-
const callsite = get_callsite_1.getCallsiteForMethod(actions_1.RequestCommand.methodName);
|
|
170
|
+
const callsite = (0, get_callsite_1.getCallsiteForMethod)(actions_1.RequestCommand.methodName);
|
|
171
171
|
if (!controller.testRun || controller.testRun instanceof test_run_proxy_1.default)
|
|
172
172
|
throw new runtime_1.RequestRuntimeError(callsite, types_2.RUNTIME_ERRORS.requestCannotResolveTestRun);
|
|
173
173
|
return function (...args) {
|
|
@@ -175,12 +175,12 @@ class TestController {
|
|
|
175
175
|
const command = controller._createCommand(actions_1.RequestCommand, cmdArgs, callsite);
|
|
176
176
|
const options = Object.assign(Object.assign({}, command.options), { url: command.url || command.options.url || '' });
|
|
177
177
|
const promise = re_executable_promise_1.default.fromFn(async () => {
|
|
178
|
-
return send_1.default(controller.testRun, options, callsite);
|
|
178
|
+
return (0, send_1.default)(controller.testRun, options, callsite);
|
|
179
179
|
});
|
|
180
180
|
actions_1.RequestCommand.resultGetters.forEach(getter => {
|
|
181
181
|
Object.defineProperty(promise, getter, {
|
|
182
182
|
get: () => re_executable_promise_1.default.fromFn(async () => {
|
|
183
|
-
const response = await send_1.default(controller.testRun, options, callsite);
|
|
183
|
+
const response = await (0, send_1.default)(controller.testRun, options, callsite);
|
|
184
184
|
return response[getter];
|
|
185
185
|
}),
|
|
186
186
|
});
|
|
@@ -219,7 +219,7 @@ class TestController {
|
|
|
219
219
|
return this._enqueueCommand(actions_1.DragToElementCommand, { selector, destinationSelector, options });
|
|
220
220
|
}
|
|
221
221
|
_getSelectorForScroll(args) {
|
|
222
|
-
const selector = typeof args[0] === 'string' || types_1.isSelector(args[0]) ? args[0] : null;
|
|
222
|
+
const selector = typeof args[0] === 'string' || (0, types_1.isSelector)(args[0]) ? args[0] : null;
|
|
223
223
|
if (selector)
|
|
224
224
|
args.shift();
|
|
225
225
|
else
|
|
@@ -361,8 +361,8 @@ class TestController {
|
|
|
361
361
|
return this._enqueueCommand(actions_1.SwitchToPreviousWindowCommand);
|
|
362
362
|
}
|
|
363
363
|
_eval$(fn, options) {
|
|
364
|
-
if (!lodash_1.isNil(options))
|
|
365
|
-
options = lodash_1.assign({}, options, { boundTestRun: this });
|
|
364
|
+
if (!(0, lodash_1.isNil)(options))
|
|
365
|
+
options = (0, lodash_1.assign)({}, options, { boundTestRun: this });
|
|
366
366
|
const builder = new client_function_builder_1.default(fn, options, { instantiation: 'eval', execution: 'eval' });
|
|
367
367
|
const clientFn = builder.getFunction();
|
|
368
368
|
return clientFn();
|
|
@@ -373,30 +373,30 @@ class TestController {
|
|
|
373
373
|
});
|
|
374
374
|
}
|
|
375
375
|
[delegatedAPI(actions_1.GetNativeDialogHistoryCommand.methodName)]() {
|
|
376
|
-
const callsite = get_callsite_1.getCallsiteForMethod(actions_1.GetNativeDialogHistoryCommand.methodName);
|
|
376
|
+
const callsite = (0, get_callsite_1.getCallsiteForMethod)(actions_1.GetNativeDialogHistoryCommand.methodName);
|
|
377
377
|
const command = this._createCommand(actions_1.GetNativeDialogHistoryCommand, {}, callsite);
|
|
378
378
|
return this.testRun.executeCommand(command, callsite);
|
|
379
379
|
}
|
|
380
380
|
[delegatedAPI(actions_1.GetBrowserConsoleMessagesCommand.methodName)]() {
|
|
381
|
-
const callsite = get_callsite_1.getCallsiteForMethod(actions_1.GetBrowserConsoleMessagesCommand.methodName);
|
|
381
|
+
const callsite = (0, get_callsite_1.getCallsiteForMethod)(actions_1.GetBrowserConsoleMessagesCommand.methodName);
|
|
382
382
|
const command = this._createCommand(actions_1.GetBrowserConsoleMessagesCommand, {}, callsite);
|
|
383
383
|
return this.testRun.executeCommand(command, callsite);
|
|
384
384
|
}
|
|
385
385
|
checkForExcessiveAwaits(checkedCallsite, { actionId }) {
|
|
386
386
|
const snapshotPropertyCallsites = this.testRun.observedCallsites.snapshotPropertyCallsites;
|
|
387
|
-
const callsiteId = callsite_1.getCallsiteId(checkedCallsite);
|
|
387
|
+
const callsiteId = (0, callsite_1.getCallsiteId)(checkedCallsite);
|
|
388
388
|
// NOTE: If there are unasserted callsites, we should add all of them to awaitedSnapshotWarnings.
|
|
389
389
|
// The warnings themselves are raised after the test run in wrap-test-function
|
|
390
390
|
if (snapshotPropertyCallsites[callsiteId] && !snapshotPropertyCallsites[callsiteId].checked) {
|
|
391
391
|
for (const propertyCallsite of snapshotPropertyCallsites[callsiteId].callsites)
|
|
392
|
-
this.testRun.observedCallsites.awaitedSnapshotWarnings.set(callsite_1.getCallsiteStackFrameString(propertyCallsite), { callsite: propertyCallsite, actionId });
|
|
392
|
+
this.testRun.observedCallsites.awaitedSnapshotWarnings.set((0, callsite_1.getCallsiteStackFrameString)(propertyCallsite), { callsite: propertyCallsite, actionId });
|
|
393
393
|
delete snapshotPropertyCallsites[callsiteId];
|
|
394
394
|
}
|
|
395
395
|
else
|
|
396
396
|
snapshotPropertyCallsites[callsiteId] = { callsites: [], checked: true };
|
|
397
397
|
}
|
|
398
398
|
[delegatedAPI(assertion_2.AssertionCommand.methodName)](actual) {
|
|
399
|
-
const callsite = get_callsite_1.getCallsiteForMethod(assertion_2.AssertionCommand.methodName);
|
|
399
|
+
const callsite = (0, get_callsite_1.getCallsiteForMethod)(assertion_2.AssertionCommand.methodName);
|
|
400
400
|
return new assertion_1.default(actual, this, callsite);
|
|
401
401
|
}
|
|
402
402
|
[delegatedAPI(observation_1.DebugCommand.methodName)]() {
|
|
@@ -410,23 +410,26 @@ class TestController {
|
|
|
410
410
|
}
|
|
411
411
|
[delegatedAPI(actions_1.SetPageLoadTimeoutCommand.methodName)](duration) {
|
|
412
412
|
return this._enqueueCommand(actions_1.SetPageLoadTimeoutCommand, { duration }, (testController, command) => {
|
|
413
|
-
add_rendered_warning_1.default(testController.warningLog, { message: deprecated_1.getDeprecationMessage(deprecated_1.DEPRECATED.setPageLoadTimeout), actionId: command.actionId });
|
|
413
|
+
(0, add_rendered_warning_1.default)(testController.warningLog, { message: (0, deprecated_1.getDeprecationMessage)(deprecated_1.DEPRECATED.setPageLoadTimeout), actionId: command.actionId });
|
|
414
414
|
});
|
|
415
415
|
}
|
|
416
416
|
[delegatedAPI(actions_1.UseRoleCommand.methodName)](role) {
|
|
417
417
|
return this._enqueueCommand(actions_1.UseRoleCommand, { role });
|
|
418
418
|
}
|
|
419
|
+
[delegatedAPI(actions_1.SkipJsErrorsCommand.methodName)](options) {
|
|
420
|
+
return this._enqueueCommand(actions_1.SkipJsErrorsCommand, { options });
|
|
421
|
+
}
|
|
419
422
|
_addRequestHooks$(...hooks) {
|
|
420
423
|
return this._enqueueTask('addRequestHooks', () => {
|
|
421
|
-
hooks = lodash_1.flattenDeep(hooks);
|
|
422
|
-
assert_type_1.default(hooks);
|
|
424
|
+
hooks = (0, lodash_1.flattenDeep)(hooks);
|
|
425
|
+
(0, assert_type_1.default)(hooks);
|
|
423
426
|
hooks.forEach(hook => this.testRun.addRequestHook(hook));
|
|
424
427
|
});
|
|
425
428
|
}
|
|
426
429
|
_removeRequestHooks$(...hooks) {
|
|
427
430
|
return this._enqueueTask('removeRequestHooks', () => {
|
|
428
|
-
hooks = lodash_1.flattenDeep(hooks);
|
|
429
|
-
assert_type_1.default(hooks);
|
|
431
|
+
hooks = (0, lodash_1.flattenDeep)(hooks);
|
|
432
|
+
(0, assert_type_1.default)(hooks);
|
|
430
433
|
hooks.forEach(hook => this.testRun.removeRequestHook(hook));
|
|
431
434
|
});
|
|
432
435
|
}
|
|
@@ -455,7 +458,7 @@ class TestController {
|
|
|
455
458
|
}
|
|
456
459
|
}
|
|
457
460
|
exports.default = TestController;
|
|
458
|
-
TestController.API_LIST = delegated_api_1.getDelegatedAPIList(TestController.prototype);
|
|
459
|
-
delegated_api_1.delegateAPI(TestController.prototype, TestController.API_LIST, { useCurrentCtxAsHandler: true });
|
|
461
|
+
TestController.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestController.prototype);
|
|
462
|
+
(0, delegated_api_1.delegateAPI)(TestController.prototype, TestController.API_LIST, { useCurrentCtxAsHandler: true });
|
|
460
463
|
module.exports = exports.default;
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBT2dCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQXNDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwrRUFBaUU7QUFDakUsMkRBQThFO0FBQzlFLHdEQUEwRDtBQUMxRCw0RkFBa0U7QUFFbEUsb0RBRytCO0FBRS9CLGlFQUFxRTtBQUNyRSxtREFBa0Y7QUFDbEYsOEZBQW9FO0FBQ3BFLHVFQUFzRDtBQUN0RCxrREFBMkQ7QUFDM0QsOENBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLGdCQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBRTVDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUVwQixTQUFTLFlBQVksQ0FBRSxVQUFVLEVBQUUsUUFBUSxHQUFHLEVBQUU7SUFDNUMsT0FBTyxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBcUIsY0FBYztJQUMvQixZQUFhLE9BQU87UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsT0FBTyxHQUFpQixPQUFPLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBVSxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLEdBQWMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVoRCxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0NBQWtDO1FBQzlCLElBQUksQ0FBQyxjQUFjLENB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QUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUFDLDhCQUE4QjtRQUNqQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsK0JBQStCO1FBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBRSxPQUFPO1FBQ2YsMERBQTBEO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFFakIsNENBQTRDO1FBQzVDLElBQUksT0FBTyxLQUFLLE9BQU87WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFFaEIsK0VBQStFO1FBQy9FLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVoQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLFlBQVksd0JBQVksQ0FBQztJQUNoRCxDQUFDO0NBQ0o7QUF0akJELGlDQXNqQkM7QUFFRCxjQUFjLENBQUMsUUFBUSxHQUFHLG1DQUFtQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV4RSwyQkFBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBGaXggaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvdGVzdGNhZmUvaXNzdWVzLzQxMzkgdG8gZ2V0IHJpZCBvZiBQaW5raWVcbmltcG9ydCBQcm9taXNlIGZyb20gJ3BpbmtpZSc7XG5pbXBvcnQge1xuICAgIGlkZW50aXR5LFxuICAgIGFzc2lnbixcbiAgICBpc05pbCBhcyBpc051bGxPclVuZGVmaW5lZCxcbiAgICBmbGF0dGVuRGVlcCxcbiAgICBub29wLFxuICAgIGNhc3RBcnJheSxcbn0gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgZ2V0Q2FsbHNpdGVGb3JNZXRob2QgfSBmcm9tICcuLi8uLi9lcnJvcnMvZ2V0LWNhbGxzaXRlJztcbmltcG9ydCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9jbGllbnQtZnVuY3Rpb24tYnVpbGRlcic7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCB7IGdldERlbGVnYXRlZEFQSUxpc3QsIGRlbGVnYXRlQVBJIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsZWdhdGVkLWFwaSc7XG5pbXBvcnQgYWRkV2FybmluZyBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL2FkZC1yZW5kZXJlZC13YXJuaW5nJztcbmltcG9ydCB7IGdldERlcHJlY2F0aW9uTWVzc2FnZSwgREVQUkVDQVRFRCB9IGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvZGVwcmVjYXRlZCc7XG5cbmltcG9ydCB7XG4gICAgQ2xpY2tDb21tYW5kLFxuICAgIFJpZ2h0Q2xpY2tDb21tYW5kLFxuICAgIERvdWJsZUNsaWNrQ29tbWFuZCxcbiAgICBIb3ZlckNvbW1hbmQsXG4gICAgRHJhZ0NvbW1hbmQsXG4gICAgRHJhZ1RvRWxlbWVudENvbW1hbmQsXG4gICAgVHlwZVRleHRDb21tYW5kLFxuICAgIFNlbGVjdFRleHRDb21tYW5kLFxuICAgIFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQsXG4gICAgU2VsZWN0RWRpdGFibGVDb250ZW50Q29tbWFuZCxcbiAgICBQcmVzc0tleUNvbW1hbmQsXG4gICAgTmF2aWdhdGVUb0NvbW1hbmQsXG4gICAgU2V0RmlsZXNUb1VwbG9hZENvbW1hbmQsXG4gICAgQ2xlYXJVcGxvYWRDb21tYW5kLFxuICAgIFN3aXRjaFRvSWZyYW1lQ29tbWFuZCxcbiAgICBTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLFxuICAgIE9wZW5XaW5kb3dDb21tYW5kLFxuICAgIENsb3NlV2luZG93Q29tbWFuZCxcbiAgICBHZXRDdXJyZW50V2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLFxuICAgIFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLFxuICAgIEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLFxuICAgIEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLFxuICAgIFNldFRlc3RTcGVlZENvbW1hbmQsXG4gICAgU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCxcbiAgICBTY3JvbGxDb21tYW5kLFxuICAgIFNjcm9sbEJ5Q29tbWFuZCxcbiAgICBTY3JvbGxJbnRvVmlld0NvbW1hbmQsXG4gICAgVXNlUm9sZUNvbW1hbmQsXG4gICAgRGlzcGF0Y2hFdmVudENvbW1hbmQsXG4gICAgR2V0Q29va2llc0NvbW1hbmQsXG4gICAgU2V0Q29va2llc0NvbW1hbmQsXG4gICAgRGVsZXRlQ29va2llc0NvbW1hbmQsXG4gICAgUmVxdWVzdENvbW1hbmQsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2FjdGlvbnMnO1xuXG5pbXBvcnQge1xuICAgIFRha2VTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLFxuICAgIFJlc2l6ZVdpbmRvd0NvbW1hbmQsXG4gICAgUmVzaXplV2luZG93VG9GaXREZXZpY2VDb21tYW5kLFxuICAgIE1heGltaXplV2luZG93Q29tbWFuZCxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYnJvd3Nlci1tYW5pcHVsYXRpb24nO1xuXG5pbXBvcnQgeyBXYWl0Q29tbWFuZCwgRGVidWdDb21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb2JzZXJ2YXRpb24nO1xuaW1wb3J0IGFzc2VydFJlcXVlc3RIb29rVHlwZSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2Fzc2VydC10eXBlJztcbmltcG9ydCB7IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQgYXMgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4vZXhlY3V0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNTZWxlY3RvciB9IGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvdHlwZXMnO1xuaW1wb3J0IFRlc3RSdW5Qcm94eSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21waWxlci90ZXN0LXJ1bi1wcm94eSc7XG5cbmltcG9ydCB7XG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzRGlzYWJsZWRFcnJvcixcbiAgICBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcixcbn0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuJztcblxuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUlkLCBnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9jYWxsc2l0ZSc7XG5pbXBvcnQgUmVFeGVjdXRhYmxlUHJvbWlzZSBmcm9tICcuLi8uLi91dGlscy9yZS1leGVjdXRhYmxlLXByb21pc2UnO1xuaW1wb3J0IHNlbmRSZXF1ZXN0IGZyb20gJy4uLy4uL3Rlc3QtcnVuL3JlcXVlc3Qvc2VuZCc7XG5pbXBvcnQgeyBSZXF1ZXN0UnVudGltZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuXG5jb25zdCBvcmlnaW5hbFRoZW4gPSBQcm9taXNlLnJlc29sdmUoKS50aGVuO1xuXG5sZXQgaW5EZWJ1ZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkZWxlZ2F0ZWRBUEkgKG1ldGhvZE5hbWUsIGFjY2Vzc29yID0gJycpIHtcbiAgICByZXR1cm4gYF8ke21ldGhvZE5hbWV9JCR7YWNjZXNzb3J9YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yICh0ZXN0UnVuKSB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1biAgICAgICAgICAgICAgID0gdGVzdFJ1bjtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiAgICAgICAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICAgICAgICAgPSB0ZXN0UnVuLndhcm5pbmdMb2c7XG5cbiAgICAgICAgdGhpcy5fYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluKCk7XG4gICAgfVxuXG4gICAgX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbiAoKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4uX3Rlc3RDb250cm9sbGVyID0gdGhpcztcbiAgICB9XG4gICAgLy8gTk9URTogd2UgdHJhY2sgbWlzc2luZyBgYXdhaXRzYCBieSBleHBvc2luZyBhIHNwZWNpYWwgY3VzdG9tIFByb21pc2UgdG8gdXNlciBjb2RlLlxuICAgIC8vIEFjdGlvbiBvciBhc3NlcnRpb24gaXMgYXdhaXRlZCBpZjpcbiAgICAvLyBhKXNvbWVvbmUgdXNlZCBgYXdhaXRgIHNvIFByb21pc2UncyBgdGhlbmAgZnVuY3Rpb24gZXhlY3V0ZWRcbiAgICAvLyBiKVByb21pc2UgY2hhaW5lZCBieSB1c2luZyBvbmUgb2YgdGhlIG1peGVkLWluIGNvbnRyb2xsZXIgbWV0aG9kc1xuICAgIC8vXG4gICAgLy8gSW4gYm90aCBzY2VuYXJpb3MsIHdlIGNoZWNrIHRoYXQgY2FsbHNpdGUgdGhhdCBwcm9kdWNlZCBQcm9taXNlIGlzIGVxdWFsIHRvIHRoZSBvbmVcbiAgICAvLyB0aGF0IGlzIGN1cnJlbnRseSBtaXNzaW5nIGF3YWl0LiBUaGlzIGlzIHJlcXVpcmVkIHRvIHdvcmthcm91bmQgc2NlbmFyaW9zIGxpa2UgdGhpczpcbiAgICAvL1xuICAgIC8vIHZhciB0MiA9IHQuY2xpY2soJyNidG4xJyk7IC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDI7ICAgICAgICAgICAgICAgICAgLy8gPC0tIGNhbGxzaXRlV2l0aG91dEF3YWl0ID0gbnVsbFxuICAgIC8vIHQuY2xpY2soJyNidG4yJyk7ICAgICAgICAgIC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDIuY2xpY2soJyNidG4zJyk7ICAgLy8gPC0tIHdpdGhvdXQgY2hlY2sgaXQgd2lsbCBzZXQgY2FsbHNpdGVXaXRob3V0QXdhaXQgPSBudWxsLCBzbyB3ZSB3aWxsIGxvc3QgdHJhY2tpbmdcbiAgICBfY3JlYXRlRXh0ZW5kZWRQcm9taXNlIChwcm9taXNlLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBleHRlbmRlZFByb21pc2UgICAgID0gcHJvbWlzZS50aGVuKGlkZW50aXR5KTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZWRDYWxsc2l0ZXMgICA9IHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcztcbiAgICAgICAgY29uc3QgbWFya0NhbGxzaXRlQXdhaXRlZCA9ICgpID0+IG9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5kZWxldGUoY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4dGVuZGVkUHJvbWlzZS50aGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbWFya0NhbGxzaXRlQXdhaXRlZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVsZWdhdGVBUEkoZXh0ZW5kZWRQcm9taXNlLCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwge1xuICAgICAgICAgICAgaGFuZGxlcjogICAgIHRoaXMsXG4gICAgICAgICAgICBwcm94eU1ldGhvZDogbWFya0NhbGxzaXRlQXdhaXRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZGVkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ21kQ3RvcihjbWRBcmdzLCB0aGlzLnRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZW5xdWV1ZVRhc2sgKGFwaU1ldGhvZE5hbWUsIGNyZWF0ZVRhc2tFeGVjdXRvciwgY2FsbHNpdGUpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgPSBjcmVhdGVUYXNrRXhlY3V0b3IoKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLnRoZW4gPSBvcmlnaW5hbFRoZW47XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gICAgICA9IHRoaXMuZXhlY3V0aW9uQ2hhaW4udGhlbihleGVjdXRvcik7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5hZGQoY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSB0aGlzLl9jcmVhdGVFeHRlbmRlZFByb21pc2UodGhpcy5leGVjdXRpb25DaGFpbiwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkNoYWluO1xuICAgIH1cblxuICAgIF9lbnF1ZXVlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgdmFsaWRhdGVDb21tYW5kRm4pIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChDbWRDdG9yLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGVDb21tYW5kRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hbmRGbih0aGlzLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKGNvbW1hbmQubWV0aG9kTmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQgKGFwaU1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCBhY3RpdmVXaW5kb3dJZCB9ID0gdGhpcy50ZXN0UnVuO1xuXG4gICAgICAgIGlmIChkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFhY3RpdmVXaW5kb3dJZClcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcihhcGlNZXRob2ROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRFeGVjdXRpb25Db250ZXh0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0KVxuICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQodGhpcy50ZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBBUEkgaW1wbGVtZW50YXRpb25cbiAgICAvLyBXZSBuZWVkIGltcGxlbWVudGF0aW9uIG1ldGhvZHMgdG8gb2J0YWluIGNvcnJlY3QgY2FsbHNpdGVzLiBJZiB3ZSB1c2UgcGxhaW4gQVBJXG4gICAgLy8gbWV0aG9kcyBpbiBjaGFpbmVkIHdyYXBwZXJzIHRoZW4gd2Ugd2lsbCBoYXZlIGNhbGxzaXRlIGZvciB0aGUgd3JhcHBlZCBtZXRob2RcbiAgICAvLyBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiBjaGFpbmVkIG1ldGhvZCBjYWxsc2l0ZSBpbiB1c2VyIGNvZGUuXG4gICAgX2N0eCRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmN0eDtcbiAgICB9XG5cbiAgICBfY3R4JHNldHRlciAodmFsKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1bi5jdHggPSB2YWw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5jdHg7XG4gICAgfVxuXG4gICAgX2ZpeHR1cmVDdHgkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5maXh0dXJlQ3R4O1xuICAgIH1cblxuICAgIF9icm93c2VyJGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uYnJvd3NlcjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERpc3BhdGNoRXZlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGV2ZW50TmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChEaXNwYXRjaEV2ZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZXZlbnROYW1lLCBvcHRpb25zLCByZWxhdGVkVGFyZ2V0OiBvcHRpb25zLnJlbGF0ZWRUYXJnZXQgfSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVDb29raWVBcmd1bWVudHMgKGFyZ3MsIGlzU2V0Q29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybHNBcmcgPSBjYXN0QXJyYXkoYXJnc1sxXSk7XG4gICAgICAgIGNvbnN0IHVybHMgICAgPSBBcnJheS5pc0FycmF5KHVybHNBcmcpICYmIHR5cGVvZiB1cmxzQXJnWzBdID09PSAnc3RyaW5nJyA/IHVybHNBcmcgOiBbXTtcblxuICAgICAgICBjb25zdCBjb29raWVzQXJnID0gdXJscy5sZW5ndGggPyBhcmdzWzBdIDogYXJncztcbiAgICAgICAgY29uc3QgY29va2llcyAgICA9IFtdO1xuXG4gICAgICAgIGZsYXR0ZW5EZWVwKGNhc3RBcnJheShjb29raWVzQXJnKSkuZm9yRWFjaChjb29raWUgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2V0Q29tbWFuZCAmJiAhY29va2llLm5hbWUgJiYgdHlwZW9mIGNvb2tpZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY29va2llKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiBjb29raWVzLnB1c2goeyBuYW1lLCB2YWx1ZSB9KSk7XG4gICAgICAgICAgICBlbHNlIGlmICghaXNTZXRDb21tYW5kICYmIHR5cGVvZiBjb29raWUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGNvb2tpZXMucHVzaCh7IG5hbWU6IGNvb2tpZSB9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjb29raWVzLnB1c2goY29va2llKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgdXJscywgY29va2llcyB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0Q29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChHZXRDb29raWVzQ29tbWFuZCwgdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzKSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyB1cmxzLCBjb29raWVzIH0gPSB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTZXRDb29raWVzQ29tbWFuZCwgeyBjb29raWVzLCB1cmw6IHVybHNbMF0gfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWxldGVDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKERlbGV0ZUNvb2tpZXNDb21tYW5kLCB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZVJlcXVlc3RBcmd1bWVudHMgKGJpbmRPcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFt1cmwsIG9wdGlvbnNdID0gdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnID8gW2FyZ3NbMF0udXJsLCBhcmdzWzBdXSA6IGFyZ3M7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIGJpbmRPcHRpb25zKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIChiaW5kT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzO1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKFJlcXVlc3RDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGlmICghY29udHJvbGxlci50ZXN0UnVuIHx8IGNvbnRyb2xsZXIudGVzdFJ1biBpbnN0YW5jZW9mIFRlc3RSdW5Qcm94eSlcbiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1ZXN0UnVudGltZUVycm9yKGNhbGxzaXRlLCBSVU5USU1FX0VSUk9SUy5yZXF1ZXN0Q2Fubm90UmVzb2x2ZVRlc3RSdW4pO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgY21kQXJncyAgPSBjb250cm9sbGVyLl9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyhiaW5kT3B0aW9ucywgLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kICA9IGNvbnRyb2xsZXIuX2NyZWF0ZUNvbW1hbmQoUmVxdWVzdENvbW1hbmQsIGNtZEFyZ3MsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb21tYW5kLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgdXJsOiBjb21tYW5kLnVybCB8fCBjb21tYW5kLm9wdGlvbnMudXJsIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IFJlRXhlY3V0YWJsZVByb21pc2UuZnJvbUZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VuZFJlcXVlc3QoY29udHJvbGxlci50ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUmVxdWVzdENvbW1hbmQucmVzdWx0R2V0dGVycy5mb3JFYWNoKGdldHRlciA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIGdldHRlciwge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IFJlRXhlY3V0YWJsZVByb21pc2UuZnJvbUZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZFJlcXVlc3QoY29udHJvbGxlci50ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZVtnZXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfZGVjb3JhdGVSZXF1ZXN0RnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIFJlcXVlc3RDb21tYW5kLmV4dGVuZGVkTWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG1ldGhvZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24oeyBtZXRob2QgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXF1ZXN0Q29tbWFuZC5tZXRob2ROYW1lLCAnZ2V0dGVyJyldICgpIHtcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzLl9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24oKTtcblxuICAgICAgICB0aGlzLl9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKENsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJpZ2h0Q2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFJpZ2h0Q2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRG91YmxlQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKERvdWJsZUNsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEhvdmVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChIb3ZlckNvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEcmFnQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBkcmFnT2Zmc2V0WCwgZHJhZ09mZnNldFksIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKERyYWdDb21tYW5kLCB7IHNlbGVjdG9yLCBkcmFnT2Zmc2V0WCwgZHJhZ09mZnNldFksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEcmFnVG9FbGVtZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChEcmFnVG9FbGVtZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZGVzdGluYXRpb25TZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBfZ2V0U2VsZWN0b3JGb3JTY3JvbGwgKGFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgaXNTZWxlY3RvcihhcmdzWzBdKSA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChzZWxlY3RvcilcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgLy8gTk9URTogaGVyZSB3ZSB1c2UgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCBmb3Igb2xkIFNhZmFyaSB2ZXJzaW9uc1xuICAgICAgICAgICAgLy8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgb24gTW9qYXZlIFNhZmFyaSAxMi4xLyBIaWdoIFNpZXJyYSBTYWZhcmkgMTEuMVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIF9nZXRQb3NpdGlvbiAoYXJncykge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbilcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcblxuICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLl9nZXRQb3NpdGlvbihhcmdzKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGxldCB4ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgeSAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIFsgcG9zaXRpb24sIG9wdGlvbnMgXSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIFsgeCwgeSwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU2Nyb2xsQ29tbWFuZCwgeyBzZWxlY3RvciwgeCwgeSwgcG9zaXRpb24sIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxCeUNvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5fZ2V0U2VsZWN0b3JGb3JTY3JvbGwoYXJncyk7XG5cbiAgICAgICAgY29uc3QgW2J5WCwgYnlZLCBvcHRpb25zXSA9IGFyZ3M7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNjcm9sbEJ5Q29tbWFuZCwgeyBzZWxlY3RvciwgYnlYLCBieVksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxJbnRvVmlld0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU2Nyb2xsSW50b1ZpZXdDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVHlwZVRleHRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFR5cGVUZXh0Q29tbWFuZCwgeyBzZWxlY3RvciwgdGV4dCwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdFRleHRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIHN0YXJ0UG9zLCBlbmRQb3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNlbGVjdFRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydExpbmUsIHN0YXJ0UG9zLCBlbmRMaW5lLCBlbmRQb3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQsIHtcbiAgICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRQb3MsXG4gICAgICAgICAgICBlbmRMaW5lLFxuICAgICAgICAgICAgZW5kUG9zLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc3RhcnRTZWxlY3RvciwgZW5kU2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQsIHtcbiAgICAgICAgICAgIHN0YXJ0U2VsZWN0b3IsXG4gICAgICAgICAgICBlbmRTZWxlY3RvcixcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUHJlc3NLZXlDb21tYW5kLm1ldGhvZE5hbWUpXSAoa2V5cywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoUHJlc3NLZXlDb21tYW5kLCB7IGtleXMsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShXYWl0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFdhaXRDb21tYW5kLCB7IHRpbWVvdXQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShOYXZpZ2F0ZVRvQ29tbWFuZC5tZXRob2ROYW1lKV0gKHVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoTmF2aWdhdGVUb0NvbW1hbmQsIHsgdXJsIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0RmlsZXNUb1VwbG9hZENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZmlsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLCB7IHNlbGVjdG9yLCBmaWxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsZWFyVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChDbGVhclVwbG9hZENvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlU2NyZWVuc2hvdENvbW1hbmQubWV0aG9kTmFtZSldIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBhdGg6IG9wdGlvbnMgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoVGFrZVNjcmVlbnNob3RDb21tYW5kLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb21tYW5kQXJncyA9IHsgc2VsZWN0b3IgfTtcblxuICAgICAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgICAgICAgY29tbWFuZEFyZ3MucGF0aCAgICA9IGFyZ3NbMF07XG4gICAgICAgICAgICBjb21tYW5kQXJncy5vcHRpb25zID0gYXJnc1sxXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICBjb21tYW5kQXJncy5vcHRpb25zID0gYXJnc1swXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgY29tbWFuZEFyZ3MucGF0aCA9IGFyZ3NbMF07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsIGNvbW1hbmRBcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dDb21tYW5kLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQubWV0aG9kTmFtZSldIChkZXZpY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZCwgeyBkZXZpY2UsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShNYXhpbWl6ZVdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKE1heGltaXplV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb0lmcmFtZUNvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9JZnJhbWVDb21tYW5kLCB7IHNlbGVjdG9yIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShPcGVuV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHVybCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChPcGVuV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQsIHsgdXJsIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2luZG93KSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkICAgICAgPSB3aW5kb3c/LmlkIHx8IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChDbG9zZVdpbmRvd0NvbW1hbmQsIHsgd2luZG93SWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoR2V0Q3VycmVudFdpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2luZG93U2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoU3dpdGNoVG9XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGxldCBjb21tYW5kO1xuICAgICAgICBsZXQgYXJncztcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvd1NlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb21tYW5kID0gU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQ7XG5cbiAgICAgICAgICAgIGFyZ3MgPSB7IGNoZWNrV2luZG93OiB3aW5kb3dTZWxlY3RvciB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29tbWFuZCA9IFN3aXRjaFRvV2luZG93Q29tbWFuZDtcblxuICAgICAgICAgICAgYXJncyA9IHsgd2luZG93SWQ6IHdpbmRvd1NlbGVjdG9yPy5pZCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKGNvbW1hbmQsIGFyZ3MpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb1ByZXZpb3VzV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgX2V2YWwkIChmbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnMpKVxuICAgICAgICAgICAgb3B0aW9ucyA9IGFzc2lnbih7fSwgb3B0aW9ucywgeyBib3VuZFRlc3RSdW46IHRoaXMgfSk7XG5cbiAgICAgICAgY29uc3QgYnVpbGRlciAgPSBuZXcgQ2xpZW50RnVuY3Rpb25CdWlsZGVyKGZuLCBvcHRpb25zLCB7IGluc3RhbnRpYXRpb246ICdldmFsJywgZXhlY3V0aW9uOiAnZXZhbCcgfSk7XG4gICAgICAgIGNvbnN0IGNsaWVudEZuID0gYnVpbGRlci5nZXRGdW5jdGlvbigpO1xuXG4gICAgICAgIHJldHVybiBjbGllbnRGbigpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQubWV0aG9kTmFtZSldIChmbiwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsIHtcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6IHsgZm4sIG9wdGlvbnMgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsIHt9LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsIHt9LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgY2hlY2tGb3JFeGNlc3NpdmVBd2FpdHMgKGNoZWNrZWRDYWxsc2l0ZSwgeyBhY3Rpb25JZCB9KSB7XG4gICAgICAgIGNvbnN0IHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXMgPSB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXMuc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlcztcbiAgICAgICAgY29uc3QgY2FsbHNpdGVJZCAgICAgICAgICAgICAgICA9IGdldENhbGxzaXRlSWQoY2hlY2tlZENhbGxzaXRlKTtcblxuICAgICAgICAvLyBOT1RFOiBJZiB0aGVyZSBhcmUgdW5hc3NlcnRlZCBjYWxsc2l0ZXMsIHdlIHNob3VsZCBhZGQgYWxsIG9mIHRoZW0gdG8gYXdhaXRlZFNuYXBzaG90V2FybmluZ3MuXG4gICAgICAgIC8vIFRoZSB3YXJuaW5ncyB0aGVtc2VsdmVzIGFyZSByYWlzZWQgYWZ0ZXIgdGhlIHRlc3QgcnVuIGluIHdyYXAtdGVzdC1mdW5jdGlvblxuICAgICAgICBpZiAoc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSAmJiAhc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXS5jaGVja2VkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5Q2FsbHNpdGUgb2Ygc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXS5jYWxsc2l0ZXMpXG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLnNldChnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcocHJvcGVydHlDYWxsc2l0ZSksIHsgY2FsbHNpdGU6IHByb3BlcnR5Q2FsbHNpdGUsIGFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzW2NhbGxzaXRlSWRdID0geyBjYWxsc2l0ZXM6IFtdLCBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWUpXSAoYWN0dWFsKSB7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbihhY3R1YWwsIHRoaXMsIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERlYnVnQ29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICAvLyBOT1RFOiBkbyBub3QgbmVlZCB0byBlbnF1ZXVlIHRoZSBEZWJ1ZyBjb21tYW5kIGlmIHdlIGFyZSBpbiBkZWJ1Z2dpbmcgbW9kZS5cbiAgICAgICAgLy8gVGhlIERlYnVnIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBieSBDRFAuXG4gICAgICAgIC8vIEFsc28sIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGVtcHR5IGZ1bmN0aW9uIHRvIHRoZSBleGVjdXRpb24gY2hhaW4gdG8gcHJlc2VydmUgaXQuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSgpID8gdGhpcy5fZW5xdWV1ZVRhc2soRGVidWdDb21tYW5kLm1ldGhvZE5hbWUsIG5vb3ApIDogdGhpcy5fZW5xdWV1ZUNvbW1hbmQoRGVidWdDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldFRlc3RTcGVlZENvbW1hbmQubWV0aG9kTmFtZSldIChzcGVlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU2V0VGVzdFNwZWVkQ29tbWFuZCwgeyBzcGVlZCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQubWV0aG9kTmFtZSldIChkdXJhdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCwgeyBkdXJhdGlvbiB9LCAodGVzdENvbnRyb2xsZXIsIGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgIGFkZFdhcm5pbmcodGVzdENvbnRyb2xsZXIud2FybmluZ0xvZywgeyBtZXNzYWdlOiBnZXREZXByZWNhdGlvbk1lc3NhZ2UoREVQUkVDQVRFRC5zZXRQYWdlTG9hZFRpbWVvdXQpLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShVc2VSb2xlQ29tbWFuZC5tZXRob2ROYW1lKV0gKHJvbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFVzZVJvbGVDb21tYW5kLCB7IHJvbGUgfSk7XG4gICAgfVxuXG4gICAgX2FkZFJlcXVlc3RIb29rcyQgKC4uLmhvb2tzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlVGFzaygnYWRkUmVxdWVzdEhvb2tzJywgKCkgPT4ge1xuICAgICAgICAgICAgaG9va3MgPSBmbGF0dGVuRGVlcChob29rcyk7XG5cbiAgICAgICAgICAgIGFzc2VydFJlcXVlc3RIb29rVHlwZShob29rcyk7XG5cbiAgICAgICAgICAgIGhvb2tzLmZvckVhY2goaG9vayA9PiB0aGlzLnRlc3RSdW4uYWRkUmVxdWVzdEhvb2soaG9vaykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlUmVxdWVzdEhvb2tzJCAoLi4uaG9va3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKCdyZW1vdmVSZXF1ZXN0SG9va3MnLCAoKSA9PiB7XG4gICAgICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICAgICAgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlKGhvb2tzKTtcblxuICAgICAgICAgICAgaG9va3MuZm9yRWFjaChob29rID0+IHRoaXMudGVzdFJ1bi5yZW1vdmVSZXF1ZXN0SG9vayhob29rKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBlbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMgKCkge1xuICAgICAgICBpbkRlYnVnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKSB7XG4gICAgICAgIGluRGVidWcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG91bGRTdG9wIChjb21tYW5kKSB7XG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBuZXZlciBzdG9wIGluIG5vdCBjb21wbGlsZXIgZGVidWdnaW5nIG1vZGVcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBhbHdheXMgc3RvcCBvbiBEZWJ1ZyBjb21tYW5kXG4gICAgICAgIGlmIChjb21tYW5kID09PSAnZGVidWcnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gTk9URTogc2hvdWxkIHN0b3Agb24gb3RoZXIgYWN0aW9ucyBhZnRlciB0aGUgYE5leHQgQWN0aW9uYCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAgICBpZiAoaW5EZWJ1Zykge1xuICAgICAgICAgICAgaW5EZWJ1ZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0NvbXBpbGVyU2VydmljZU1vZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuIGluc3RhbmNlb2YgVGVzdFJ1blByb3h5O1xuICAgIH1cbn1cblxuVGVzdENvbnRyb2xsZXIuQVBJX0xJU1QgPSBnZXREZWxlZ2F0ZWRBUElMaXN0KFRlc3RDb250cm9sbGVyLnByb3RvdHlwZSk7XG5cbmRlbGVnYXRlQVBJKFRlc3RDb250cm9sbGVyLnByb3RvdHlwZSwgVGVzdENvbnRyb2xsZXIuQVBJX0xJU1QsIHsgdXNlQ3VycmVudEN0eEFzSGFuZGxlcjogdHJ1ZSB9KTtcbiJdfQ==
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBT2dCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQXVDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwrRUFBaUU7QUFDakUsMkRBQThFO0FBQzlFLHdEQUEwRDtBQUMxRCw0RkFBa0U7QUFFbEUsb0RBRytCO0FBRS9CLGlFQUFxRTtBQUNyRSxtREFBa0Y7QUFDbEYsOEZBQW9FO0FBQ3BFLHVFQUFzRDtBQUN0RCxrREFBMkQ7QUFDM0QsOENBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLGdCQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBRTVDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUVwQixTQUFTLFlBQVksQ0FBRSxVQUFVLEVBQUUsUUFBUSxHQUFHLEVBQUU7SUFDNUMsT0FBTyxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBcUIsY0FBYztJQUMvQixZQUFhLE9BQU87UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsT0FBTyxHQUFVLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBRXpDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQ0FBa0M7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FB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InNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IEZpeCBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy90ZXN0Y2FmZS9pc3N1ZXMvNDEzOSB0byBnZXQgcmlkIG9mIFBpbmtpZVxuaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcbmltcG9ydCB7XG4gICAgaWRlbnRpdHksXG4gICAgYXNzaWduLFxuICAgIGlzTmlsIGFzIGlzTnVsbE9yVW5kZWZpbmVkLFxuICAgIGZsYXR0ZW5EZWVwLFxuICAgIG5vb3AsXG4gICAgY2FzdEFycmF5LFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUZvck1ldGhvZCB9IGZyb20gJy4uLy4uL2Vycm9ycy9nZXQtY2FsbHNpdGUnO1xuaW1wb3J0IENsaWVudEZ1bmN0aW9uQnVpbGRlciBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0RGVsZWdhdGVkQVBJTGlzdCwgZGVsZWdhdGVBUEkgfSBmcm9tICcuLi8uLi91dGlscy9kZWxlZ2F0ZWQtYXBpJztcbmltcG9ydCBhZGRXYXJuaW5nIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IHsgZ2V0RGVwcmVjYXRpb25NZXNzYWdlLCBERVBSRUNBVEVEIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9kZXByZWNhdGVkJztcblxuaW1wb3J0IHtcbiAgICBDbGlja0NvbW1hbmQsXG4gICAgUmlnaHRDbGlja0NvbW1hbmQsXG4gICAgRG91YmxlQ2xpY2tDb21tYW5kLFxuICAgIEhvdmVyQ29tbWFuZCxcbiAgICBEcmFnQ29tbWFuZCxcbiAgICBEcmFnVG9FbGVtZW50Q29tbWFuZCxcbiAgICBUeXBlVGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCxcbiAgICBTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLFxuICAgIFByZXNzS2V5Q29tbWFuZCxcbiAgICBOYXZpZ2F0ZVRvQ29tbWFuZCxcbiAgICBTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCxcbiAgICBDbGVhclVwbG9hZENvbW1hbmQsXG4gICAgU3dpdGNoVG9JZnJhbWVDb21tYW5kLFxuICAgIFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQsXG4gICAgT3BlbldpbmRvd0NvbW1hbmQsXG4gICAgQ2xvc2VXaW5kb3dDb21tYW5kLFxuICAgIEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvV2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCxcbiAgICBTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsXG4gICAgR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsXG4gICAgU2V0VGVzdFNwZWVkQ29tbWFuZCxcbiAgICBTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLFxuICAgIFNjcm9sbENvbW1hbmQsXG4gICAgU2Nyb2xsQnlDb21tYW5kLFxuICAgIFNjcm9sbEludG9WaWV3Q29tbWFuZCxcbiAgICBVc2VSb2xlQ29tbWFuZCxcbiAgICBEaXNwYXRjaEV2ZW50Q29tbWFuZCxcbiAgICBHZXRDb29raWVzQ29tbWFuZCxcbiAgICBTZXRDb29raWVzQ29tbWFuZCxcbiAgICBEZWxldGVDb29raWVzQ29tbWFuZCxcbiAgICBSZXF1ZXN0Q29tbWFuZCxcbiAgICBTa2lwSnNFcnJvcnNDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgICBUYWtlU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgVGFrZUVsZW1lbnRTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBSZXNpemVXaW5kb3dDb21tYW5kLFxuICAgIFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZCxcbiAgICBNYXhpbWl6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJztcblxuaW1wb3J0IHsgV2FpdENvbW1hbmQsIERlYnVnQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCBhc3NlcnRSZXF1ZXN0SG9va1R5cGUgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgeyBjcmVhdGVFeGVjdXRpb25Db250ZXh0IGFzIGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2V4ZWN1dGlvbi1jb250ZXh0JztcbmltcG9ydCB7IGlzU2VsZWN0b3IgfSBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL3R5cGVzJztcbmltcG9ydCBUZXN0UnVuUHJveHkgZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcGlsZXIvdGVzdC1ydW4tcHJveHknO1xuXG5pbXBvcnQge1xuICAgIE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IsXG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90QXZhaWxhYmxlSW5SZW1vdGVCcm93c2VyRXJyb3IsXG59IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5cbmltcG9ydCB7IEFzc2VydGlvbkNvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0Q2FsbHNpdGVJZCwgZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2FsbHNpdGUnO1xuaW1wb3J0IFJlRXhlY3V0YWJsZVByb21pc2UgZnJvbSAnLi4vLi4vdXRpbHMvcmUtZXhlY3V0YWJsZS1wcm9taXNlJztcbmltcG9ydCBzZW5kUmVxdWVzdCBmcm9tICcuLi8uLi90ZXN0LXJ1bi9yZXF1ZXN0L3NlbmQnO1xuaW1wb3J0IHsgUmVxdWVzdFJ1bnRpbWVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcblxuY29uc3Qgb3JpZ2luYWxUaGVuID0gUHJvbWlzZS5yZXNvbHZlKCkudGhlbjtcblxubGV0IGluRGVidWcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZGVsZWdhdGVkQVBJIChtZXRob2ROYW1lLCBhY2Nlc3NvciA9ICcnKSB7XG4gICAgcmV0dXJuIGBfJHttZXRob2ROYW1lfSQke2FjY2Vzc29yfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvciAodGVzdFJ1bikge1xuICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnRlc3RSdW4gICAgICAgID0gdGVzdFJ1bjtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgID0gdGVzdFJ1bi53YXJuaW5nTG9nO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuICAgIH1cblxuICAgIF9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4gKCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLl90ZXN0Q29udHJvbGxlciA9IHRoaXM7XG4gICAgfVxuXG4gICAgLy8gTk9URTogVGVzdENhZmUgZXhlY3V0ZXMgYWN0aW9ucyBhbmQgYXNzZXJ0aW9ucyBhc3luY2hyb25vdXNseSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgIC8vIGEpIFRoZSBgYXdhaXRgIGtleXdvcmQgdGhhdCBwcm9jZWVkcyB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uIHRyaWdnZXJzIHRoZSBgdGhlbmAgZnVuY3Rpb24gb2YgYSBQcm9taXNlLlxuICAgIC8vIGIpIFRoZSBhY3Rpb24gaXMgY2hhaW5lZCB0byBhbm90aGVyIGBhd2FpdGVkYCBtZXRob2QuXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byB0cmFjayBtaXNzaW5nIGBhd2FpdGAgc3RhdGVtZW50cywgVGVzdENhZmUgZXhwb3NlcyBhIHNwZWNpYWwgUHJvbWlzZSB0byB0aGUgdXNlci5cbiAgICAvLyBXaGVuIFRlc3RDYWZlIGRldGVjdHMgYSBtaXNzaW5nIGBhd2FpdGAgc3RhdGVtZW50LCBpdCBjb21wYXJlcyB0aGUgbWV0aG9kJ3MgY2FsbHNpdGUgdG8gdGhlIGNhbGwgc2l0ZSBvZiB0aGUgZXhwb3NlZCBQcm9taXNlLlxuICAgIC8vIFRoaXMgd29ya2Fyb3VuZCBpcyBuZWNlc3NhcnkgZm9yIHNpdHVhdGlvbnMgbGlrZSB0aGVzZTpcbiAgICAvL1xuICAgIC8vIHZhciB0MiA9IHQuY2xpY2soJyNidG4xJyk7IC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDI7ICAgICAgICAgICAgICAgICAgLy8gPC0tIGNhbGxzaXRlV2l0aG91dEF3YWl0ID0gbnVsbFxuICAgIC8vIHQuY2xpY2soJyNidG4yJyk7ICAgICAgICAgIC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDIuY2xpY2soJyNidG4zJyk7ICAgLy8gPC0tIHdpdGhvdXQgY2hlY2sgaXQgd2lsbCBzZXQgY2FsbHNpdGVXaXRob3V0QXdhaXQgPSBudWxsLCBzbyB3ZSB3aWxsIGxvc3QgdHJhY2tpbmdcbiAgICBfY3JlYXRlRXh0ZW5kZWRQcm9taXNlIChwcm9taXNlLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBleHRlbmRlZFByb21pc2UgICAgID0gcHJvbWlzZS50aGVuKGlkZW50aXR5KTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZWRDYWxsc2l0ZXMgICA9IHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcztcbiAgICAgICAgY29uc3QgbWFya0NhbGxzaXRlQXdhaXRlZCA9ICgpID0+IG9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5kZWxldGUoY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4dGVuZGVkUHJvbWlzZS50aGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbWFya0NhbGxzaXRlQXdhaXRlZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVsZWdhdGVBUEkoZXh0ZW5kZWRQcm9taXNlLCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwge1xuICAgICAgICAgICAgaGFuZGxlcjogICAgIHRoaXMsXG4gICAgICAgICAgICBwcm94eU1ldGhvZDogbWFya0NhbGxzaXRlQXdhaXRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZGVkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ21kQ3RvcihjbWRBcmdzLCB0aGlzLnRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZW5xdWV1ZVRhc2sgKGFwaU1ldGhvZE5hbWUsIGNyZWF0ZVRhc2tFeGVjdXRvciwgY2FsbHNpdGUpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgPSBjcmVhdGVUYXNrRXhlY3V0b3IoKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLnRoZW4gPSBvcmlnaW5hbFRoZW47XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gICAgICA9IHRoaXMuZXhlY3V0aW9uQ2hhaW4udGhlbihleGVjdXRvcik7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5hZGQoY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSB0aGlzLl9jcmVhdGVFeHRlbmRlZFByb21pc2UodGhpcy5leGVjdXRpb25DaGFpbiwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkNoYWluO1xuICAgIH1cblxuICAgIF9lbnF1ZXVlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgdmFsaWRhdGVDb21tYW5kRm4pIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChDbWRDdG9yLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGVDb21tYW5kRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hbmRGbih0aGlzLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKGNvbW1hbmQubWV0aG9kTmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQgKGFwaU1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCBhY3RpdmVXaW5kb3dJZCB9ID0gdGhpcy50ZXN0UnVuO1xuXG4gICAgICAgIGlmIChkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFhY3RpdmVXaW5kb3dJZClcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcihhcGlNZXRob2ROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRFeGVjdXRpb25Db250ZXh0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0KVxuICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQodGhpcy50ZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBBUEkgaW1wbGVtZW50YXRpb25cbiAgICAvLyBXZSBuZWVkIGltcGxlbWVudGF0aW9uIG1ldGhvZHMgdG8gb2J0YWluIGNvcnJlY3QgY2FsbHNpdGVzLiBJZiB3ZSB1c2UgcGxhaW4gQVBJXG4gICAgLy8gbWV0aG9kcyBpbiBjaGFpbmVkIHdyYXBwZXJzIHRoZW4gd2Ugd2lsbCBoYXZlIGNhbGxzaXRlIGZvciB0aGUgd3JhcHBlZCBtZXRob2RcbiAgICAvLyBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiBjaGFpbmVkIG1ldGhvZCBjYWxsc2l0ZSBpbiB1c2VyIGNvZGUuXG4gICAgX2N0eCRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmN0eDtcbiAgICB9XG5cbiAgICBfY3R4JHNldHRlciAodmFsKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1bi5jdHggPSB2YWw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5jdHg7XG4gICAgfVxuXG4gICAgX2ZpeHR1cmVDdHgkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5maXh0dXJlQ3R4O1xuICAgIH1cblxuICAgIF9icm93c2VyJGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uYnJvd3NlcjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERpc3BhdGNoRXZlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGV2ZW50TmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChEaXNwYXRjaEV2ZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZXZlbnROYW1lLCBvcHRpb25zLCByZWxhdGVkVGFyZ2V0OiBvcHRpb25zLnJlbGF0ZWRUYXJnZXQgfSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVDb29raWVBcmd1bWVudHMgKGFyZ3MsIGlzU2V0Q29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybHNBcmcgPSBjYXN0QXJyYXkoYXJnc1sxXSk7XG4gICAgICAgIGNvbnN0IHVybHMgICAgPSBBcnJheS5pc0FycmF5KHVybHNBcmcpICYmIHR5cGVvZiB1cmxzQXJnWzBdID09PSAnc3RyaW5nJyA/IHVybHNBcmcgOiBbXTtcblxuICAgICAgICBjb25zdCBjb29raWVzQXJnID0gdXJscy5sZW5ndGggPyBhcmdzWzBdIDogYXJncztcbiAgICAgICAgY29uc3QgY29va2llcyAgICA9IFtdO1xuXG4gICAgICAgIGZsYXR0ZW5EZWVwKGNhc3RBcnJheShjb29raWVzQXJnKSkuZm9yRWFjaChjb29raWUgPT4ge1xuICAgICAgICAgICAgaWYgKGlzU2V0Q29tbWFuZCAmJiAhY29va2llLm5hbWUgJiYgdHlwZW9mIGNvb2tpZSA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY29va2llKS5mb3JFYWNoKChbbmFtZSwgdmFsdWVdKSA9PiBjb29raWVzLnB1c2goeyBuYW1lLCB2YWx1ZSB9KSk7XG4gICAgICAgICAgICBlbHNlIGlmICghaXNTZXRDb21tYW5kICYmIHR5cGVvZiBjb29raWUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGNvb2tpZXMucHVzaCh7IG5hbWU6IGNvb2tpZSB9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjb29raWVzLnB1c2goY29va2llKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgdXJscywgY29va2llcyB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0Q29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChHZXRDb29raWVzQ29tbWFuZCwgdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzKSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyB1cmxzLCBjb29raWVzIH0gPSB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTZXRDb29raWVzQ29tbWFuZCwgeyBjb29raWVzLCB1cmw6IHVybHNbMF0gfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWxldGVDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKERlbGV0ZUNvb2tpZXNDb21tYW5kLCB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZVJlcXVlc3RBcmd1bWVudHMgKGJpbmRPcHRpb25zLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFt1cmwsIG9wdGlvbnNdID0gdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnID8gW2FyZ3NbMF0udXJsLCBhcmdzWzBdXSA6IGFyZ3M7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIGJpbmRPcHRpb25zKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfY3JlYXRlUmVxdWVzdEZ1bmN0aW9uIChiaW5kT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzO1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKFJlcXVlc3RDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGlmICghY29udHJvbGxlci50ZXN0UnVuIHx8IGNvbnRyb2xsZXIudGVzdFJ1biBpbnN0YW5jZW9mIFRlc3RSdW5Qcm94eSlcbiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1ZXN0UnVudGltZUVycm9yKGNhbGxzaXRlLCBSVU5USU1FX0VSUk9SUy5yZXF1ZXN0Q2Fubm90UmVzb2x2ZVRlc3RSdW4pO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgY21kQXJncyA9IGNvbnRyb2xsZXIuX3ByZXBhcmVSZXF1ZXN0QXJndW1lbnRzKGJpbmRPcHRpb25zLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBjb250cm9sbGVyLl9jcmVhdGVDb21tYW5kKFJlcXVlc3RDb21tYW5kLCBjbWRBcmdzLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgLi4uY29tbWFuZC5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHVybDogY29tbWFuZC51cmwgfHwgY29tbWFuZC5vcHRpb25zLnVybCB8fCAnJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBSZUV4ZWN1dGFibGVQcm9taXNlLmZyb21Gbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbmRSZXF1ZXN0KGNvbnRyb2xsZXIudGVzdFJ1biwgb3B0aW9ucywgY2FsbHNpdGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFJlcXVlc3RDb21tYW5kLnJlc3VsdEdldHRlcnMuZm9yRWFjaChnZXR0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9taXNlLCBnZXR0ZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiBSZUV4ZWN1dGFibGVQcm9taXNlLmZyb21Gbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlbmRSZXF1ZXN0KGNvbnRyb2xsZXIudGVzdFJ1biwgb3B0aW9ucywgY2FsbHNpdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VbZ2V0dGVyXTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2RlY29yYXRlUmVxdWVzdEZ1bmN0aW9uIChmbikge1xuICAgICAgICBSZXF1ZXN0Q29tbWFuZC5leHRlbmRlZE1ldGhvZHMuZm9yRWFjaChtZXRob2QgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCBtZXRob2QsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKHsgbWV0aG9kIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmVxdWVzdENvbW1hbmQubWV0aG9kTmFtZSwgJ2dldHRlcicpXSAoKSB7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5fY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fZGVjb3JhdGVSZXF1ZXN0RnVuY3Rpb24oZm4pO1xuXG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChDbGlja0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSaWdodENsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChSaWdodENsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERvdWJsZUNsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChEb3VibGVDbGlja0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShIb3ZlckNvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoSG92ZXJDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChEcmFnQ29tbWFuZCwgeyBzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ1RvRWxlbWVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZGVzdGluYXRpb25TZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoRHJhZ1RvRWxlbWVudENvbW1hbmQsIHsgc2VsZWN0b3IsIGRlc3RpbmF0aW9uU2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgX2dldFNlbGVjdG9yRm9yU2Nyb2xsIChhcmdzKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IGlzU2VsZWN0b3IoYXJnc1swXSkgPyBhcmdzWzBdIDogbnVsbDtcblxuICAgICAgICBpZiAoc2VsZWN0b3IpXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIC8vIE5PVEU6IGhlcmUgd2UgdXNlIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgZm9yIG9sZCBTYWZhcmkgdmVyc2lvbnNcbiAgICAgICAgICAgIC8vIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIG9uIE1vamF2ZSBTYWZhcmkgMTIuMS8gSGlnaCBTaWVycmEgU2FmYXJpIDExLjFcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9XG5cbiAgICBfZ2V0UG9zaXRpb24gKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgPyBhcmdzWzBdIDogbnVsbDtcblxuICAgICAgICBpZiAocG9zaXRpb24pXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5fZ2V0UG9zaXRpb24oYXJncyk7XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLl9nZXRTZWxlY3RvckZvclNjcm9sbChhcmdzKTtcblxuICAgICAgICBsZXQgeCAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgbGV0IHkgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIGxldCBvcHRpb25zID0gdm9pZCAwO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICBbIHBvc2l0aW9uLCBvcHRpb25zIF0gPSBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICBbIHgsIHksIG9wdGlvbnMgXSA9IGFyZ3M7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNjcm9sbENvbW1hbmQsIHsgc2VsZWN0b3IsIHgsIHksIHBvc2l0aW9uLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsQnlDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IFtieVgsIGJ5WSwgb3B0aW9uc10gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTY3JvbGxCeUNvbW1hbmQsIHsgc2VsZWN0b3IsIGJ5WCwgYnlZLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsSW50b1ZpZXdDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNjcm9sbEludG9WaWV3Q29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFR5cGVUZXh0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChUeXBlVGV4dENvbW1hbmQsIHsgc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RUZXh0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTZWxlY3RUZXh0Q29tbWFuZCwgeyBzZWxlY3Rvciwgc3RhcnRQb3MsIGVuZFBvcywgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgc3RhcnRMaW5lLCBzdGFydFBvcywgZW5kTGluZSwgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTZWxlY3RUZXh0QXJlYUNvbnRlbnRDb21tYW5kLCB7XG4gICAgICAgICAgICBzZWxlY3RvcixcbiAgICAgICAgICAgIHN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0UG9zLFxuICAgICAgICAgICAgZW5kTGluZSxcbiAgICAgICAgICAgIGVuZFBvcyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0RWRpdGFibGVDb250ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHN0YXJ0U2VsZWN0b3IsIGVuZFNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLCB7XG4gICAgICAgICAgICBzdGFydFNlbGVjdG9yLFxuICAgICAgICAgICAgZW5kU2VsZWN0b3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFByZXNzS2V5Q29tbWFuZC5tZXRob2ROYW1lKV0gKGtleXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFByZXNzS2V5Q29tbWFuZCwgeyBrZXlzLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoV2FpdENvbW1hbmQubWV0aG9kTmFtZSldICh0aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChXYWl0Q29tbWFuZCwgeyB0aW1lb3V0IH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoTmF2aWdhdGVUb0NvbW1hbmQubWV0aG9kTmFtZSldICh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKE5hdmlnYXRlVG9Db21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGZpbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciwgZmlsZVBhdGggfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGVhclVwbG9hZENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoQ2xlYXJVcGxvYWRDb21tYW5kLCB7IHNlbGVjdG9yIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVGFrZVNjcmVlbnNob3RDb21tYW5kLm1ldGhvZE5hbWUpXSAob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpXG4gICAgICAgICAgICBvcHRpb25zID0geyBwYXRoOiBvcHRpb25zIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFRha2VTY3JlZW5zaG90Q29tbWFuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEFyZ3MgPSB7IHNlbGVjdG9yIH07XG5cbiAgICAgICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggICAgPSBhcmdzWzBdO1xuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggPSBhcmdzWzBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLCBjb21tYW5kQXJncyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXNpemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoUmVzaXplV2luZG93Q29tbWFuZCwgeyB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmVzaXplV2luZG93VG9GaXREZXZpY2VDb21tYW5kLm1ldGhvZE5hbWUpXSAoZGV2aWNlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsIHsgZGV2aWNlLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoTWF4aW1pemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChNYXhpbWl6ZVdpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9JZnJhbWVDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFN3aXRjaFRvSWZyYW1lQ29tbWFuZCwgeyBzZWxlY3RvciB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh1cmwpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKE9wZW5XaW5kb3dDb21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHdpbmRvdykge1xuICAgICAgICBjb25zdCB3aW5kb3dJZCAgICAgID0gd2luZG93Py5pZCB8fCBudWxsO1xuXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoQ2xvc2VXaW5kb3dDb21tYW5kLCB7IHdpbmRvd0lkIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0Q3VycmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoR2V0Q3VycmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHdpbmRvd1NlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICBsZXQgY29tbWFuZDtcbiAgICAgICAgbGV0IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3dTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29tbWFuZCA9IFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyBjaGVja1dpbmRvdzogd2luZG93U2VsZWN0b3IgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQ7XG5cbiAgICAgICAgICAgIGFyZ3MgPSB7IHdpbmRvd0lkOiB3aW5kb3dTZWxlY3Rvcj8uaWQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCBhcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb1ByZXZpb3VzV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1ByZXZpb3VzV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIF9ldmFsJCAoZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChvcHRpb25zKSlcbiAgICAgICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIG9wdGlvbnMsIHsgYm91bmRUZXN0UnVuOiB0aGlzIH0pO1xuXG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgID0gbmV3IENsaWVudEZ1bmN0aW9uQnVpbGRlcihmbiwgb3B0aW9ucywgeyBpbnN0YW50aWF0aW9uOiAnZXZhbCcsIGV4ZWN1dGlvbjogJ2V2YWwnIH0pO1xuICAgICAgICBjb25zdCBjbGllbnRGbiA9IGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gY2xpZW50Rm4oKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLCB7XG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiB7IGZuLCBvcHRpb25zIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIGNoZWNrRm9yRXhjZXNzaXZlQXdhaXRzIChjaGVja2VkQ2FsbHNpdGUsIHsgYWN0aW9uSWQgfSkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLnNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlSWQgICAgICAgICAgICAgICAgPSBnZXRDYWxsc2l0ZUlkKGNoZWNrZWRDYWxsc2l0ZSk7XG5cbiAgICAgICAgLy8gTk9URTogSWYgdGhlcmUgYXJlIHVuYXNzZXJ0ZWQgY2FsbHNpdGVzLCB3ZSBzaG91bGQgYWRkIGFsbCBvZiB0aGVtIHRvIGF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLlxuICAgICAgICAvLyBUaGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcmFpc2VkIGFmdGVyIHRoZSB0ZXN0IHJ1biBpbiB3cmFwLXRlc3QtZnVuY3Rpb25cbiAgICAgICAgaWYgKHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0gJiYgIXNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2hlY2tlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eUNhbGxzaXRlIG9mIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2FsbHNpdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5hd2FpdGVkU25hcHNob3RXYXJuaW5ncy5zZXQoZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nKHByb3BlcnR5Q2FsbHNpdGUpLCB7IGNhbGxzaXRlOiBwcm9wZXJ0eUNhbGxzaXRlLCBhY3Rpb25JZCB9KTtcblxuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSA9IHsgY2FsbHNpdGVzOiBbXSwgY2hlY2tlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKV0gKGFjdHVhbCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oYWN0dWFsLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWJ1Z0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgLy8gTk9URTogZG8gbm90IG5lZWQgdG8gZW5xdWV1ZSB0aGUgRGVidWcgY29tbWFuZCBpZiB3ZSBhcmUgaW4gZGVidWdnaW5nIG1vZGUuXG4gICAgICAgIC8vIFRoZSBEZWJ1ZyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQ0RQLlxuICAgICAgICAvLyBBbHNvLCB3ZSBhcmUgZm9yY2VkIHRvIGFkZCBlbXB0eSBmdW5jdGlvbiB0byB0aGUgZXhlY3V0aW9uIGNoYWluIHRvIHByZXNlcnZlIGl0LlxuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbXBpbGVyU2VydmljZU1vZGUoKSA/IHRoaXMuX2VucXVldWVUYXNrKERlYnVnQ29tbWFuZC5tZXRob2ROYW1lLCBub29wKSA6IHRoaXMuX2VucXVldWVDb21tYW5kKERlYnVnQ29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRUZXN0U3BlZWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc3BlZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNldFRlc3RTcGVlZENvbW1hbmQsIHsgc3BlZWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLm1ldGhvZE5hbWUpXSAoZHVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQsIHsgZHVyYXRpb24gfSwgKHRlc3RDb250cm9sbGVyLCBjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICBhZGRXYXJuaW5nKHRlc3RDb250cm9sbGVyLndhcm5pbmdMb2csIHsgbWVzc2FnZTogZ2V0RGVwcmVjYXRpb25NZXNzYWdlKERFUFJFQ0FURUQuc2V0UGFnZUxvYWRUaW1lb3V0KSwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVXNlUm9sZUNvbW1hbmQubWV0aG9kTmFtZSldIChyb2xlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlQ29tbWFuZChVc2VSb2xlQ29tbWFuZCwgeyByb2xlIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2tpcEpzRXJyb3JzQ29tbWFuZC5tZXRob2ROYW1lKV0gKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVDb21tYW5kKFNraXBKc0Vycm9yc0NvbW1hbmQsIHsgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBfYWRkUmVxdWVzdEhvb2tzJCAoLi4uaG9va3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKCdhZGRSZXF1ZXN0SG9va3MnLCAoKSA9PiB7XG4gICAgICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICAgICAgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlKGhvb2tzKTtcblxuICAgICAgICAgICAgaG9va3MuZm9yRWFjaChob29rID0+IHRoaXMudGVzdFJ1bi5hZGRSZXF1ZXN0SG9vayhob29rKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9yZW1vdmVSZXF1ZXN0SG9va3MkICguLi5ob29rcykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZVRhc2soJ3JlbW92ZVJlcXVlc3RIb29rcycsICgpID0+IHtcbiAgICAgICAgICAgIGhvb2tzID0gZmxhdHRlbkRlZXAoaG9va3MpO1xuXG4gICAgICAgICAgICBhc3NlcnRSZXF1ZXN0SG9va1R5cGUoaG9va3MpO1xuXG4gICAgICAgICAgICBob29rcy5mb3JFYWNoKGhvb2sgPT4gdGhpcy50ZXN0UnVuLnJlbW92ZVJlcXVlc3RIb29rKGhvb2spKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGVuYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKSB7XG4gICAgICAgIGluRGVidWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlRGVidWdGb3JOb25EZWJ1Z0NvbW1hbmRzICgpIHtcbiAgICAgICAgaW5EZWJ1ZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNob3VsZFN0b3AgKGNvbW1hbmQpIHtcbiAgICAgICAgLy8gTk9URTogc2hvdWxkIG5ldmVyIHN0b3AgaW4gbm90IGNvbXBsaWxlciBkZWJ1Z2dpbmcgbW9kZVxuICAgICAgICBpZiAoIXRoaXMuaXNDb21waWxlclNlcnZpY2VNb2RlKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gTk9URTogc2hvdWxkIGFsd2F5cyBzdG9wIG9uIERlYnVnIGNvbW1hbmRcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICdkZWJ1ZycpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBOT1RFOiBzaG91bGQgc3RvcCBvbiBvdGhlciBhY3Rpb25zIGFmdGVyIHRoZSBgTmV4dCBBY3Rpb25gIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICAgIGlmIChpbkRlYnVnKSB7XG4gICAgICAgICAgICBpbkRlYnVnID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4gaW5zdGFuY2VvZiBUZXN0UnVuUHJveHk7XG4gICAgfVxuXG59XG5cblRlc3RDb250cm9sbGVyLkFQSV9MSVNUID0gZ2V0RGVsZWdhdGVkQVBJTGlzdChUZXN0Q29udHJvbGxlci5wcm90b3R5cGUpO1xuXG5kZWxlZ2F0ZUFQSShUZXN0Q29udHJvbGxlci5wcm90b3R5cGUsIFRlc3RDb250cm9sbGVyLkFQSV9MSVNULCB7IHVzZUN1cnJlbnRDdHhBc0hhbmRsZXI6IHRydWUgfSk7XG4iXX0=
|
|
@@ -9,7 +9,7 @@ const test_run_tracker_1 = __importDefault(require("../test-run-tracker"));
|
|
|
9
9
|
const runtime_1 = require("../../errors/runtime");
|
|
10
10
|
const types_1 = require("../../errors/types");
|
|
11
11
|
const testControllerProxy = Object.create(null);
|
|
12
|
-
delegated_api_1.delegateAPI(testControllerProxy, _1.default.API_LIST, {
|
|
12
|
+
(0, delegated_api_1.delegateAPI)(testControllerProxy, _1.default.API_LIST, {
|
|
13
13
|
getHandler(propName, accessor) {
|
|
14
14
|
const testRun = test_run_tracker_1.default.resolveContextTestRun();
|
|
15
15
|
if (!testRun) {
|
|
@@ -27,4 +27,4 @@ delegated_api_1.delegateAPI(testControllerProxy, _1.default.API_LIST, {
|
|
|
27
27
|
});
|
|
28
28
|
exports.default = testControllerProxy;
|
|
29
29
|
module.exports = exports.default;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9wcm94eS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBDQUFnQztBQUNoQyw2REFBd0Q7QUFDeEQsMkVBQWlEO0FBQ2pELGtEQUFnRDtBQUNoRCw4Q0FBb0Q7QUFFcEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRWhELElBQUEsMkJBQVcsRUFBQyxtQkFBbUIsRUFBRSxVQUFjLENBQUMsUUFBUSxFQUFFO0lBQ3RELFVBQVUsQ0FBRSxRQUFRLEVBQUUsUUFBUTtRQUMxQixNQUFNLE9BQU8sR0FBRywwQkFBYyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztZQUV4QixJQUFJLFFBQVEsS0FBSyxRQUFRO2dCQUNyQixZQUFZLEdBQUcsS0FBSyxDQUFDO2lCQUNwQixJQUFJLFFBQVEsS0FBSyxRQUFRO2dCQUMxQixZQUFZLEdBQUcsS0FBSyxDQUFDOztnQkFFckIsWUFBWSxHQUFHLFFBQVEsQ0FBQztZQUU1QixNQUFNLElBQUksa0JBQVEsQ0FBQyxZQUFZLEVBQUUsc0JBQWMsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1NBQzVGO1FBRUQsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzlCLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxrQkFBZSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXN0Q29udHJvbGxlciBmcm9tICcuLyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZUFQSSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGVnYXRlZC1hcGknO1xuaW1wb3J0IHRlc3RSdW5UcmFja2VyIGZyb20gJy4uL3Rlc3QtcnVuLXRyYWNrZXInO1xuaW1wb3J0IHsgQVBJRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5cbmNvbnN0IHRlc3RDb250cm9sbGVyUHJveHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5kZWxlZ2F0ZUFQSSh0ZXN0Q29udHJvbGxlclByb3h5LCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwge1xuICAgIGdldEhhbmRsZXIgKHByb3BOYW1lLCBhY2Nlc3Nvcikge1xuICAgICAgICBjb25zdCB0ZXN0UnVuID0gdGVzdFJ1blRyYWNrZXIucmVzb2x2ZUNvbnRleHRUZXN0UnVuKCk7XG5cbiAgICAgICAgaWYgKCF0ZXN0UnVuKSB7XG4gICAgICAgICAgICBsZXQgY2FsbHNpdGVOYW1lID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGFjY2Vzc29yID09PSAnZ2V0dGVyJylcbiAgICAgICAgICAgICAgICBjYWxsc2l0ZU5hbWUgPSAnZ2V0JztcbiAgICAgICAgICAgIGVsc2UgaWYgKGFjY2Vzc29yID09PSAnc2V0dGVyJylcbiAgICAgICAgICAgICAgICBjYWxsc2l0ZU5hbWUgPSAnc2V0JztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjYWxsc2l0ZU5hbWUgPSBwcm9wTmFtZTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKGNhbGxzaXRlTmFtZSwgUlVOVElNRV9FUlJPUlMudGVzdENvbnRyb2xsZXJQcm94eUNhbm5vdFJlc29sdmVUZXN0UnVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXN0UnVuLmNvbnRyb2xsZXI7XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB0ZXN0Q29udHJvbGxlclByb3h5O1xuIl19
|