testcafe 2.3.1-rc.2 → 2.4.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -1
- package/LICENSE +1 -1
- package/README.md +40 -46
- package/lib/api/test-controller/execution-context.js +4 -2
- package/lib/browser/connection/gateway.js +43 -1
- package/lib/browser/connection/index.js +24 -10
- package/lib/browser/connection/service-routes.js +3 -1
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +19 -5
- package/lib/browser/provider/index.js +4 -1
- package/lib/client/automation/deps/hammerhead.js +24 -0
- package/lib/client/automation/deps/testcafe-core.js +24 -0
- package/lib/client/automation/index.js +251 -54
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/automation/playback/press/get-key-info.js +44 -0
- package/lib/client/automation/playback/press/utils.js +142 -0
- package/lib/client/automation/utils/get-key-code.js +15 -0
- package/lib/client/automation/utils/get-key-identifier.js +14 -0
- package/lib/client/automation/utils/is-letter.js +7 -0
- package/lib/client/automation/utils/key-identifier-maps.js +93 -0
- package/lib/client/browser/idle-page/index.js +7 -2
- package/lib/client/core/index.js +46 -3
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/driver/index.js +45 -17
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/index.js.mustache +34 -30
- package/lib/client/ui/index.js +3230 -48
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +15 -0
- package/lib/client/ui/styles.css +183 -41
- package/lib/live/test-runner.js +4 -2
- package/lib/proxyless/api-base.js +3 -2
- package/lib/proxyless/client/event-descriptor.js +67 -0
- package/lib/proxyless/client/input.js +36 -0
- package/lib/proxyless/client/key-press/utils.js +31 -0
- package/lib/proxyless/client/types.js +1 -1
- package/lib/proxyless/client/utils.js +32 -2
- package/lib/proxyless/cookie-provider.js +31 -3
- package/lib/proxyless/errors.js +20 -0
- package/lib/proxyless/index.js +2 -10
- package/lib/proxyless/request-pipeline/index.js +32 -3
- package/lib/proxyless/resource-injector.js +5 -4
- package/lib/proxyless/types.js +3 -2
- package/lib/proxyless/utils/cdp.js +4 -3
- package/lib/reporter/index.js +2 -1
- package/lib/runner/bootstrapper.js +8 -1
- package/lib/runner/index.js +57 -44
- package/lib/shared/utils/is-file-protocol.js +2 -2
- package/lib/test-run/commands/actions.js +2 -2
- package/lib/test-run/cookies/base.js +4 -1
- package/lib/test-run/cookies/provider.js +9 -2
- package/lib/test-run/execute-js-expression/index.js +4 -2
- package/lib/test-run/index.js +17 -12
- package/lib/test-run/request/create-request-options.js +23 -12
- package/lib/test-run/request/send.js +2 -3
- package/lib/utils/check-is-vm.js +58 -0
- package/package.json +9 -6
- package/lib/proxyless/client/event-simulator.js +0 -40
|
@@ -78,7 +78,7 @@ function initSkipJsErrorsOptions(name, val, initOptions, validate = true) {
|
|
|
78
78
|
val = new options_1.SkipJsErrorsCallbackWithOptions(val, validate);
|
|
79
79
|
else if ((0, skip_js_errors_1.isSkipJsErrorsOptionsObject)(val))
|
|
80
80
|
val = new options_1.SkipJsErrorsOptions(val, validate);
|
|
81
|
-
return (0, skip_js_errors_1.prepareSkipJsErrorsOptions)(val, initOptions.testRun.
|
|
81
|
+
return (0, skip_js_errors_1.prepareSkipJsErrorsOptions)(val, initOptions.testRun.isProxyless());
|
|
82
82
|
}
|
|
83
83
|
// Commands
|
|
84
84
|
class DispatchEventCommand extends base_1.ActionCommandBase {
|
|
@@ -662,4 +662,4 @@ class RemoveRequestHooksCommand extends base_1.ActionCommandBase {
|
|
|
662
662
|
}
|
|
663
663
|
exports.RemoveRequestHooksCommand = RemoveRequestHooksCommand;
|
|
664
664
|
RemoveRequestHooksCommand.methodName = (0, lodash_1.camelCase)(type_1.default.removeRequestHooks);
|
|
665
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQix5R0FBZ0Y7QUFDaEYsNkdBQW1GO0FBQ25GLDJGQUEwRTtBQUMxRSxpQ0FBd0Q7QUFDeEQsdUNBYW1CO0FBRW5CLDZEQUlvQztBQUNwQyxvRUFBK0Q7QUFDL0QsbUNBQXlDO0FBRXpDLHFEQW1CZ0M7QUFFaEMsb0RBQWlGO0FBQ2pGLCtDQUE2RDtBQUM3RCxtQ0FBbUM7QUFDbkMsNkRBSWtDO0FBR2xDLGVBQWU7QUFDZixTQUFTLGlCQUFpQixDQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQy9ELE9BQU8sSUFBSSx1QkFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxRQUFRLEdBQUcsSUFBSTtJQUM5RCxPQUFPLElBQUksc0JBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsUUFBUSxHQUFHLElBQUk7SUFDOUQsT0FBTyxJQUFJLHNCQUFZLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQy9ELE9BQU8sSUFBSSx1QkFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsUUFB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O0lBQ3JFLENBQUM7SUFFRCx1QkFBdUI7UUFDbkIsT0FBTztZQUNILEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsK0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNoRSxDQUFDO0lBQ04sQ0FBQzs7QUFYTCw4REFZQztBQVhVLG9DQUFVLEdBQUcsSUFBQSxrQkFBUyxFQUFDLGNBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRZUEUgZnJvbSAnLi90eXBlJztcbmltcG9ydCBTZWxlY3RvckJ1aWxkZXIgZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvc2VsZWN0b3ItYnVpbGRlcic7XG5pbXBvcnQgQ2xpZW50RnVuY3Rpb25CdWlsZGVyIGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IGZ1bmN0aW9uQnVpbGRlclN5bWJvbCBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL2J1aWxkZXItc3ltYm9sJztcbmltcG9ydCB7IEFjdGlvbkNvbW1hbmRCYXNlLCBDb21tYW5kQmFzZSB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbk9wdGlvbnMsXG4gICAgQ2xpY2tPcHRpb25zLFxuICAgIE1vdXNlT3B0aW9ucyxcbiAgICBUeXBlT3B0aW9ucyxcbiAgICBQcmVzc09wdGlvbnMsXG4gICAgRHJhZ1RvRWxlbWVudE9wdGlvbnMsXG4gICAgT2Zmc2V0T3B0aW9ucyxcbiAgICBDb29raWVPcHRpb25zLFxuICAgIEdldFByb3h5VXJsT3B0aW9ucyxcbiAgICBSZXF1ZXN0T3B0aW9ucyxcbiAgICBTa2lwSnNFcnJvcnNPcHRpb25zLFxuICAgIFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnMsXG59IGZyb20gJy4vb3B0aW9ucyc7XG5cbmltcG9ydCB7XG4gICAgaW5pdFNlbGVjdG9yLFxuICAgIGluaXRUeXBlU2VsZWN0b3IsXG4gICAgaW5pdFVwbG9hZFNlbGVjdG9yLFxufSBmcm9tICcuL3ZhbGlkYXRpb25zL2luaXRpYWxpemVycyc7XG5pbXBvcnQgeyBleGVjdXRlSnNFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhlY3V0ZS1qcy1leHByZXNzaW9uJztcbmltcG9ydCB7IGlzSlNFeHByZXNzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmltcG9ydCB7XG4gICAgYWN0aW9uT3B0aW9ucyxcbiAgICBpbnRlZ2VyQXJndW1lbnQsXG4gICAgcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsXG4gICAgc3RyaW5nQXJndW1lbnQsXG4gICAgbm9uRW1wdHlTdHJpbmdBcmd1bWVudCxcbiAgICBudWxsYWJsZVN0cmluZ0FyZ3VtZW50LFxuICAgIHBhZ2VVcmxBcmd1bWVudCxcbiAgICBzdHJpbmdPclN0cmluZ0FycmF5QXJndW1lbnQsXG4gICAgc2V0U3BlZWRBcmd1bWVudCxcbiAgICBhY3Rpb25Sb2xlQXJndW1lbnQsXG4gICAgYm9vbGVhbkFyZ3VtZW50LFxuICAgIGZ1bmN0aW9uQXJndW1lbnQsXG4gICAgY29va2llc0FyZ3VtZW50LFxuICAgIHNldENvb2tpZXNBcmd1bWVudCxcbiAgICB1cmxzQXJndW1lbnQsXG4gICAgdXJsQXJndW1lbnQsXG4gICAgc2tpcEpzRXJyb3JPcHRpb25zLFxuICAgIHJlcXVlc3RIb29rc0FyZ3VtZW50LFxufSBmcm9tICcuL3ZhbGlkYXRpb25zL2FyZ3VtZW50JztcblxuaW1wb3J0IHsgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvZGVXcm9uZ1R5cGVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5pbXBvcnQgeyBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kIH0gZnJvbSAnLi9vYnNlcnZhdGlvbic7XG5pbXBvcnQgeyBjYW1lbENhc2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgICBwcmVwYXJlU2tpcEpzRXJyb3JzT3B0aW9ucyxcbiAgICBpc1NraXBKc0Vycm9yc09wdGlvbnNPYmplY3QsXG4gICAgaXNTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0LFxufSBmcm9tICcuLi8uLi9hcGkvc2tpcC1qcy1lcnJvcnMnO1xuXG5cbi8vIEluaXRpYWxpemVyc1xuZnVuY3Rpb24gaW5pdEFjdGlvbk9wdGlvbnMgKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIHJldHVybiBuZXcgQWN0aW9uT3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdENsaWNrT3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBDbGlja09wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXRNb3VzZU9wdGlvbnMgKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIHJldHVybiBuZXcgTW91c2VPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpbml0T2Zmc2V0T3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBPZmZzZXRPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpbml0VHlwZU9wdGlvbnMgKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIHJldHVybiBuZXcgVHlwZU9wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXREcmFnVG9FbGVtZW50T3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBEcmFnVG9FbGVtZW50T3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdFByZXNzT3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBQcmVzc09wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXREaWFsb2dIYW5kbGVyIChuYW1lLCB2YWwsIHsgc2tpcFZpc2liaWxpdHlDaGVjaywgdGVzdFJ1biB9KSB7XG4gICAgbGV0IGZuO1xuXG4gICAgaWYgKGlzSlNFeHByZXNzaW9uKHZhbCkpXG4gICAgICAgIGZuID0gZXhlY3V0ZUpzRXhwcmVzc2lvbih2YWwudmFsdWUsIHRlc3RSdW4sIHsgc2tpcFZpc2liaWxpdHlDaGVjayB9KTtcbiAgICBlbHNlXG4gICAgICAgIGZuID0gdmFsLmZuO1xuXG4gICAgaWYgKGZuID09PSBudWxsIHx8IGZuIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZClcbiAgICAgICAgcmV0dXJuIGZuO1xuXG4gICAgY29uc3Qgb3B0aW9ucyAgICAgID0gdmFsLm9wdGlvbnM7XG4gICAgY29uc3QgbWV0aG9kTmFtZSAgID0gJ3NldE5hdGl2ZURpYWxvZ0hhbmRsZXInO1xuICAgIGNvbnN0IGZ1bmN0aW9uVHlwZSA9IHR5cGVvZiBmbjtcblxuICAgIGxldCBidWlsZGVyID0gZm4gJiYgZm5bZnVuY3Rpb25CdWlsZGVyU3ltYm9sXTtcblxuICAgIGNvbnN0IGlzU2VsZWN0b3IgICAgICAgPSBidWlsZGVyIGluc3RhbmNlb2YgU2VsZWN0b3JCdWlsZGVyO1xuICAgIGNvbnN0IGlzQ2xpZW50RnVuY3Rpb24gPSBidWlsZGVyIGluc3RhbmNlb2YgQ2xpZW50RnVuY3Rpb25CdWlsZGVyO1xuXG4gICAgaWYgKGZ1bmN0aW9uVHlwZSAhPT0gJ2Z1bmN0aW9uJyB8fCBpc1NlbGVjdG9yKVxuICAgICAgICB0aHJvdyBuZXcgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvZGVXcm9uZ1R5cGVFcnJvcihpc1NlbGVjdG9yID8gJ1NlbGVjdG9yJyA6IGZ1bmN0aW9uVHlwZSk7XG5cbiAgICBpZiAoaXNDbGllbnRGdW5jdGlvbilcbiAgICAgICAgYnVpbGRlciA9IGZuLndpdGgob3B0aW9ucylbZnVuY3Rpb25CdWlsZGVyU3ltYm9sXTtcbiAgICBlbHNlXG4gICAgICAgIGJ1aWxkZXIgPSBuZXcgQ2xpZW50RnVuY3Rpb25CdWlsZGVyKGZuLCBvcHRpb25zLCB7IGluc3RhbnRpYXRpb246IG1ldGhvZE5hbWUsIGV4ZWN1dGlvbjogbWV0aG9kTmFtZSB9KTtcblxuICAgIHJldHVybiBidWlsZGVyLmdldENvbW1hbmQoKTtcbn1cblxuZnVuY3Rpb24gaW5pdENvb2tpZXNPcHRpb24gKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIHJldHVybiB2YWwubWFwKGNvb2tpZSA9PiBuZXcgQ29va2llT3B0aW9ucyhjb29raWUsIHZhbGlkYXRlKSk7XG59XG5cbmZ1bmN0aW9uIGluaXRSZXF1ZXN0T3B0aW9uIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3RPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpbml0R2V0UHJveHlVcmxPcHRpb25zIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IEdldFByb3h5VXJsT3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdFNraXBKc0Vycm9yc09wdGlvbnMgKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIGlmICh2YWwgPT09IHZvaWQgMClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAoaXNTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0KHZhbCkpXG4gICAgICAgIHZhbCA9IG5ldyBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xuXG4gICAgZWxzZSBpZiAoaXNTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KHZhbCkpXG4gICAgICAgIHZhbCA9IG5ldyBTa2lwSnNFcnJvcnNPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xuXG4gICAgcmV0dXJuIHByZXBhcmVTa2lwSnNFcnJvcnNPcHRpb25zKHZhbCwgaW5pdE9wdGlvbnMudGVzdFJ1bi5vcHRzLmV4cGVyaW1lbnRhbFByb3h5bGVzcyk7XG59XG5cbi8vIENvbW1hbmRzXG5leHBvcnQgY2xhc3MgRGlzcGF0Y2hFdmVudENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5kaXNwYXRjaEV2ZW50KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZGlzcGF0Y2hFdmVudCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2V2ZW50TmFtZScsIHR5cGU6IG5vbkVtcHR5U3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAncmVsYXRlZFRhcmdldCcsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xpY2tDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuY2xpY2spO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5jbGljaywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0Q2xpY2tPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJpZ2h0Q2xpY2tDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUucmlnaHRDbGljayk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnJpZ2h0Q2xpY2ssIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdENsaWNrT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRlRXhwcmVzc2lvbkNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5leGVjdXRlRXhwcmVzc2lvbiwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdleHByZXNzaW9uJywgdHlwZTogbm9uRW1wdHlTdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3Jlc3VsdFZhcmlhYmxlTmFtZScsIHR5cGU6IG5vbkVtcHR5U3RyaW5nQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGVBc3luY0V4cHJlc3Npb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZXhlY3V0ZUFzeW5jRXhwcmVzc2lvbiwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdleHByZXNzaW9uJywgdHlwZTogc3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG91YmxlQ2xpY2tDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZG91YmxlQ2xpY2spO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5kb3VibGVDbGljaywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0Q2xpY2tPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhvdmVyQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmhvdmVyKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuaG92ZXIsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdE1vdXNlT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlVGV4dENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS50eXBlVGV4dCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnR5cGVUZXh0LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFR5cGVTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3RleHQnLCB0eXBlOiBub25FbXB0eVN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRUeXBlT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEcmFnQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmRyYWcpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5kcmFnLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZHJhZ09mZnNldFgnLCB0eXBlOiBpbnRlZ2VyQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdkcmFnT2Zmc2V0WScsIHR5cGU6IGludGVnZXJBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0TW91c2VPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERyYWdUb0VsZW1lbnRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZHJhZ1RvRWxlbWVudCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmRyYWdUb0VsZW1lbnQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdkZXN0aW5hdGlvblNlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXREcmFnVG9FbGVtZW50T3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY3JvbGxDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2Nyb2xsKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2Nyb2xsLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3Bvc2l0aW9uJywgdHlwZTogbnVsbGFibGVTdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICd4JywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAneScsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0T2Zmc2V0T3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY3JvbGxCeUNvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zY3JvbGxCeSk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNjcm9sbEJ5LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2J5WCcsIHR5cGU6IGludGVnZXJBcmd1bWVudCwgZGVmYXVsdFZhbHVlOiAwIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdieVknLCB0eXBlOiBpbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogMCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRPZmZzZXRPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNjcm9sbEludG9WaWV3Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNjcm9sbEludG9WaWV3KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2Nyb2xsSW50b1ZpZXcsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdE9mZnNldE9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0VGV4dENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zZWxlY3RUZXh0KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2VsZWN0VGV4dCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3N0YXJ0UG9zJywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZW5kUG9zJywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRBY3Rpb25PcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zZWxlY3RFZGl0YWJsZUNvbnRlbnQpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zZWxlY3RFZGl0YWJsZUNvbnRlbnQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc3RhcnRTZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuZFNlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0QWN0aW9uT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RUZXh0QXJlYUNvbnRlbnRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2VsZWN0VGV4dEFyZWFDb250ZW50KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2VsZWN0VGV4dEFyZWFDb250ZW50LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnc3RhcnRMaW5lJywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnc3RhcnRQb3MnLCB0eXBlOiBwb3NpdGl2ZUludGVnZXJBcmd1bWVudCwgZGVmYXVsdFZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmRMaW5lJywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZW5kUG9zJywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRBY3Rpb25PcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByZXNzS2V5Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnByZXNzS2V5KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUucHJlc3NLZXksIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAna2V5cycsIHR5cGU6IG5vbkVtcHR5U3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdFByZXNzT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOYXZpZ2F0ZVRvQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLm5hdmlnYXRlVG8pO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5uYXZpZ2F0ZVRvLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3VybCcsIHR5cGU6IHBhZ2VVcmxBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3N0YXRlU25hcHNob3QnLCB0eXBlOiBudWxsYWJsZVN0cmluZ0FyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZvcmNlUmVsb2FkJywgdHlwZTogYm9vbGVhbkFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0RmlsZXNUb1VwbG9hZENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zZXRGaWxlc1RvVXBsb2FkKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2V0RmlsZXNUb1VwbG9hZCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRVcGxvYWRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZpbGVQYXRoJywgdHlwZTogc3RyaW5nT3JTdHJpbmdBcnJheUFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyVXBsb2FkQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmNsZWFyVXBsb2FkKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuY2xlYXJVcGxvYWQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0VXBsb2FkU2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3dpdGNoVG9JZnJhbWVDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc3dpdGNoVG9JZnJhbWUpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zd2l0Y2hUb0lmcmFtZSwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc3dpdGNoVG9NYWluV2luZG93KTtcblxuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50eXBlID0gVFlQRS5zd2l0Y2hUb01haW5XaW5kb3c7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlbldpbmRvd0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5vcGVuV2luZG93KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUub3BlbldpbmRvdywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICd1cmwnLCB0eXBlOiBwYWdlVXJsQXJndW1lbnQgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbG9zZVdpbmRvd0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5jbG9zZVdpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmNsb3NlV2luZG93LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3dpbmRvd0lkJywgdHlwZTogbnVsbGFibGVTdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEdldEN1cnJlbnRXaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZ2V0Q3VycmVudFdpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmdldEN1cnJlbnRXaW5kb3csIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q3VycmVudFdpbmRvd3NDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZ2V0Q3VycmVudFdpbmRvd3MpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5nZXRDdXJyZW50V2luZG93cywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zd2l0Y2hUb1dpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnN3aXRjaFRvV2luZG93LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3dpbmRvd0lkJywgdHlwZTogbm9uRW1wdHlTdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnN3aXRjaFRvV2luZG93KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZSwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdpZCcsIHR5cGU6IG5vbkVtcHR5U3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnY2hlY2tXaW5kb3cnLCB0eXBlOiBmdW5jdGlvbkFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnN3aXRjaFRvUGFyZW50V2luZG93KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc3dpdGNoVG9QYXJlbnRXaW5kb3csIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zd2l0Y2hUb1ByZXZpb3VzV2luZG93KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc3dpdGNoVG9QcmV2aW91c1dpbmRvdywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNldE5hdGl2ZURpYWxvZ0hhbmRsZXIpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zZXROYXRpdmVEaWFsb2dIYW5kbGVyLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2RpYWxvZ0hhbmRsZXInLCBpbml0OiBpbml0RGlhbG9nSGFuZGxlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbSAodmFsKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ0hhbmRsZXJTdHViID0ge1xuICAgICAgICAgICAgZGlhbG9nSGFuZGxlcjogeyBmbjogbnVsbCB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQoZGlhbG9nSGFuZGxlclN0dWIpO1xuXG4gICAgICAgIGNvbW1hbmQuZGlhbG9nSGFuZGxlciA9IHZhbC5kaWFsb2dIYW5kbGVyO1xuXG4gICAgICAgIHJldHVybiBjb21tYW5kO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZ2V0TmF0aXZlRGlhbG9nSGlzdG9yeSk7XG5cbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudHlwZSA9IFRZUEUuZ2V0TmF0aXZlRGlhbG9nSGlzdG9yeTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXMpO1xuXG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnR5cGUgPSBUWVBFLmdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0VGVzdFNwZWVkQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNldFRlc3RTcGVlZCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNldFRlc3RTcGVlZCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzcGVlZCcsIHR5cGU6IHNldFNwZWVkQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNldFBhZ2VMb2FkVGltZW91dCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNldFBhZ2VMb2FkVGltZW91dCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdkdXJhdGlvbicsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVzZVJvbGVDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUudXNlUm9sZSk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnVzZVJvbGUsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAncm9sZScsIHR5cGU6IGFjdGlvblJvbGVBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmcgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5jbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmcpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5jbG9zZUNoaWxkV2luZG93T25GaWxlRG93bmxvYWRpbmcsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVjb3JkZXJDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUucmVjb3JkZXIpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1bikge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUucmVjb3JkZXIpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3N1YnR5cGUnLCB0eXBlOiBub25FbXB0eVN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZm9yY2VFeGVjdXRpb25JblRvcFdpbmRvd09ubHknLCB0eXBlOiBib29sZWFuQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRDb29raWVzQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmdldENvb2tpZXMpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5nZXRDb29raWVzLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3VybHMnLCB0eXBlOiB1cmxzQXJndW1lbnQsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnY29va2llcycsIHR5cGU6IGNvb2tpZXNBcmd1bWVudCwgaW5pdDogaW5pdENvb2tpZXNPcHRpb24sIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldENvb2tpZXNDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2V0Q29va2llcyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNldENvb2tpZXMsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAndXJsJywgdHlwZTogdXJsc0FyZ3VtZW50LCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Nvb2tpZXMnLCB0eXBlOiBzZXRDb29raWVzQXJndW1lbnQsIGluaXQ6IGluaXRDb29raWVzT3B0aW9uLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZUNvb2tpZXNDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZGVsZXRlQ29va2llcyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmRlbGV0ZUNvb2tpZXMsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAndXJscycsIHR5cGU6IHVybHNBcmd1bWVudCwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdjb29raWVzJywgdHlwZTogY29va2llc0FyZ3VtZW50LCBpbml0OiBpbml0Q29va2llc09wdGlvbiwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5yZXF1ZXN0KTtcbiAgICBzdGF0aWMgZXh0ZW5kZWRNZXRob2RzID0gWydnZXQnLCAncG9zdCcsICdkZWxldGUnLCAncHV0JywgJ3BhdGNoJywgJ2hlYWQnXTtcbiAgICBzdGF0aWMgcmVzdWx0R2V0dGVycyA9IFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycycsICdib2R5J107XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnJlcXVlc3QsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAndXJsJywgdHlwZTogdXJsQXJndW1lbnQsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRSZXF1ZXN0T3B0aW9uLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXRQcm94eVVybENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5nZXRQcm94eVVybCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmdldFByb3h5VXJsLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3VybCcsIHR5cGU6IHVybEFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIGluaXQ6IGluaXRHZXRQcm94eVVybE9wdGlvbnMsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNraXBKc0Vycm9yc0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5za2lwSnNFcnJvcnMpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5za2lwSnNFcnJvcnMsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IHNraXBKc0Vycm9yT3B0aW9ucywgaW5pdDogaW5pdFNraXBKc0Vycm9yc09wdGlvbnMsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJ1bkN1c3RvbUFjdGlvbkNvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5ydW5DdXN0b21BY3Rpb24pO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5ydW5DdXN0b21BY3Rpb24sIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnZm4nLCB0eXBlOiBmdW5jdGlvbkFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6IHN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYXJncycsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5hZGRSZXF1ZXN0SG9va3MpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5hZGRSZXF1ZXN0SG9va3MsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnaG9va3MnLCB0eXBlOiByZXF1ZXN0SG9va3NBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUucmVtb3ZlUmVxdWVzdEhvb2tzKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUucmVtb3ZlUmVxdWVzdEhvb2tzLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2hvb2tzJywgdHlwZTogcmVxdWVzdEhvb2tzQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG4iXX0=
|
|
665
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQix5R0FBZ0Y7QUFDaEYsNkdBQW1GO0FBQ25GLDJGQUEwRTtBQUMxRSxpQ0FBd0Q7QUFDeEQsdUNBYW1CO0FBRW5CLDZEQUlvQztBQUNwQyxvRUFBK0Q7QUFDL0QsbUNBQXlDO0FBRXpDLHFEQW1CZ0M7QUFFaEMsb0RBQWlGO0FBQ2pGLCtDQUE2RDtBQUM3RCxtQ0FBbUM7QUFDbkMsNkRBSWtDO0FBR2xDLGVBQWU7QUFDZixTQUFTLGlCQUFpQixDQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQy9ELE9BQU8sSUFBSSx1QkFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxRQUFRLEdBQUcsSUFBSTtJQUM5RCxPQUFPLElBQUksc0JBQVksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsUUFBUSxHQUFHLElBQUk7SUFDOUQsT0FBTyxJQUFJLHNCQUFZLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQy9ELE9BQU8sSUFBSSx1QkFBYSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsUUFB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Q0FBQztJQUVELHVCQUF1QjtRQUNuQixPQUFPO1lBQ0gsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSwrQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1NBQ2hFLENBQUM7SUFDTixDQUFDOztBQVhMLDhEQVlDO0FBWFUsb0NBQVUsR0FBRyxJQUFBLGtCQUFTLEVBQUMsY0FBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVFlQRSBmcm9tICcuL3R5cGUnO1xuaW1wb3J0IFNlbGVjdG9yQnVpbGRlciBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL3NlbGVjdG9ycy9zZWxlY3Rvci1idWlsZGVyJztcbmltcG9ydCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9jbGllbnQtZnVuY3Rpb24tYnVpbGRlcic7XG5pbXBvcnQgZnVuY3Rpb25CdWlsZGVyU3ltYm9sIGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvYnVpbGRlci1zeW1ib2wnO1xuaW1wb3J0IHsgQWN0aW9uQ29tbWFuZEJhc2UsIENvbW1hbmRCYXNlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7XG4gICAgQWN0aW9uT3B0aW9ucyxcbiAgICBDbGlja09wdGlvbnMsXG4gICAgTW91c2VPcHRpb25zLFxuICAgIFR5cGVPcHRpb25zLFxuICAgIFByZXNzT3B0aW9ucyxcbiAgICBEcmFnVG9FbGVtZW50T3B0aW9ucyxcbiAgICBPZmZzZXRPcHRpb25zLFxuICAgIENvb2tpZU9wdGlvbnMsXG4gICAgR2V0UHJveHlVcmxPcHRpb25zLFxuICAgIFJlcXVlc3RPcHRpb25zLFxuICAgIFNraXBKc0Vycm9yc09wdGlvbnMsXG4gICAgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcblxuaW1wb3J0IHtcbiAgICBpbml0U2VsZWN0b3IsXG4gICAgaW5pdFR5cGVTZWxlY3RvcixcbiAgICBpbml0VXBsb2FkU2VsZWN0b3IsXG59IGZyb20gJy4vdmFsaWRhdGlvbnMvaW5pdGlhbGl6ZXJzJztcbmltcG9ydCB7IGV4ZWN1dGVKc0V4cHJlc3Npb24gfSBmcm9tICcuLi9leGVjdXRlLWpzLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgaXNKU0V4cHJlc3Npb24gfSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgICBhY3Rpb25PcHRpb25zLFxuICAgIGludGVnZXJBcmd1bWVudCxcbiAgICBwb3NpdGl2ZUludGVnZXJBcmd1bWVudCxcbiAgICBzdHJpbmdBcmd1bWVudCxcbiAgICBub25FbXB0eVN0cmluZ0FyZ3VtZW50LFxuICAgIG51bGxhYmxlU3RyaW5nQXJndW1lbnQsXG4gICAgcGFnZVVybEFyZ3VtZW50LFxuICAgIHN0cmluZ09yU3RyaW5nQXJyYXlBcmd1bWVudCxcbiAgICBzZXRTcGVlZEFyZ3VtZW50LFxuICAgIGFjdGlvblJvbGVBcmd1bWVudCxcbiAgICBib29sZWFuQXJndW1lbnQsXG4gICAgZnVuY3Rpb25Bcmd1bWVudCxcbiAgICBjb29raWVzQXJndW1lbnQsXG4gICAgc2V0Q29va2llc0FyZ3VtZW50LFxuICAgIHVybHNBcmd1bWVudCxcbiAgICB1cmxBcmd1bWVudCxcbiAgICBza2lwSnNFcnJvck9wdGlvbnMsXG4gICAgcmVxdWVzdEhvb2tzQXJndW1lbnQsXG59IGZyb20gJy4vdmFsaWRhdGlvbnMvYXJndW1lbnQnO1xuXG5pbXBvcnQgeyBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29kZVdyb25nVHlwZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuJztcbmltcG9ydCB7IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQgfSBmcm9tICcuL29ic2VydmF0aW9uJztcbmltcG9ydCB7IGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICAgIHByZXBhcmVTa2lwSnNFcnJvcnNPcHRpb25zLFxuICAgIGlzU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCxcbiAgICBpc1NraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QsXG59IGZyb20gJy4uLy4uL2FwaS9za2lwLWpzLWVycm9ycyc7XG5cblxuLy8gSW5pdGlhbGl6ZXJzXG5mdW5jdGlvbiBpbml0QWN0aW9uT3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBBY3Rpb25PcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpbml0Q2xpY2tPcHRpb25zIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IENsaWNrT3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdE1vdXNlT3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBNb3VzZU9wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXRPZmZzZXRPcHRpb25zIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IE9mZnNldE9wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXRUeXBlT3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlT3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdERyYWdUb0VsZW1lbnRPcHRpb25zIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IERyYWdUb0VsZW1lbnRPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpbml0UHJlc3NPcHRpb25zIChuYW1lLCB2YWwsIGluaXRPcHRpb25zLCB2YWxpZGF0ZSA9IHRydWUpIHtcbiAgICByZXR1cm4gbmV3IFByZXNzT3B0aW9ucyh2YWwsIHZhbGlkYXRlKTtcbn1cblxuZnVuY3Rpb24gaW5pdERpYWxvZ0hhbmRsZXIgKG5hbWUsIHZhbCwgeyBza2lwVmlzaWJpbGl0eUNoZWNrLCB0ZXN0UnVuIH0pIHtcbiAgICBsZXQgZm47XG5cbiAgICBpZiAoaXNKU0V4cHJlc3Npb24odmFsKSlcbiAgICAgICAgZm4gPSBleGVjdXRlSnNFeHByZXNzaW9uKHZhbC52YWx1ZSwgdGVzdFJ1biwgeyBza2lwVmlzaWJpbGl0eUNoZWNrIH0pO1xuICAgIGVsc2VcbiAgICAgICAgZm4gPSB2YWwuZm47XG5cbiAgICBpZiAoZm4gPT09IG51bGwgfHwgZm4gaW5zdGFuY2VvZiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kKVxuICAgICAgICByZXR1cm4gZm47XG5cbiAgICBjb25zdCBvcHRpb25zICAgICAgPSB2YWwub3B0aW9ucztcbiAgICBjb25zdCBtZXRob2ROYW1lICAgPSAnc2V0TmF0aXZlRGlhbG9nSGFuZGxlcic7XG4gICAgY29uc3QgZnVuY3Rpb25UeXBlID0gdHlwZW9mIGZuO1xuXG4gICAgbGV0IGJ1aWxkZXIgPSBmbiAmJiBmbltmdW5jdGlvbkJ1aWxkZXJTeW1ib2xdO1xuXG4gICAgY29uc3QgaXNTZWxlY3RvciAgICAgICA9IGJ1aWxkZXIgaW5zdGFuY2VvZiBTZWxlY3RvckJ1aWxkZXI7XG4gICAgY29uc3QgaXNDbGllbnRGdW5jdGlvbiA9IGJ1aWxkZXIgaW5zdGFuY2VvZiBDbGllbnRGdW5jdGlvbkJ1aWxkZXI7XG5cbiAgICBpZiAoZnVuY3Rpb25UeXBlICE9PSAnZnVuY3Rpb24nIHx8IGlzU2VsZWN0b3IpXG4gICAgICAgIHRocm93IG5ldyBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29kZVdyb25nVHlwZUVycm9yKGlzU2VsZWN0b3IgPyAnU2VsZWN0b3InIDogZnVuY3Rpb25UeXBlKTtcblxuICAgIGlmIChpc0NsaWVudEZ1bmN0aW9uKVxuICAgICAgICBidWlsZGVyID0gZm4ud2l0aChvcHRpb25zKVtmdW5jdGlvbkJ1aWxkZXJTeW1ib2xdO1xuICAgIGVsc2VcbiAgICAgICAgYnVpbGRlciA9IG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogbWV0aG9kTmFtZSwgZXhlY3V0aW9uOiBtZXRob2ROYW1lIH0pO1xuXG4gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0Q29tbWFuZCgpO1xufVxuXG5mdW5jdGlvbiBpbml0Q29va2llc09wdGlvbiAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgcmV0dXJuIHZhbC5tYXAoY29va2llID0+IG5ldyBDb29raWVPcHRpb25zKGNvb2tpZSwgdmFsaWRhdGUpKTtcbn1cblxuZnVuY3Rpb24gaW5pdFJlcXVlc3RPcHRpb24gKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdE9wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXRHZXRQcm94eVVybE9wdGlvbnMgKG5hbWUsIHZhbCwgaW5pdE9wdGlvbnMsIHZhbGlkYXRlID0gdHJ1ZSkge1xuICAgIHJldHVybiBuZXcgR2V0UHJveHlVcmxPcHRpb25zKHZhbCwgdmFsaWRhdGUpO1xufVxuXG5mdW5jdGlvbiBpbml0U2tpcEpzRXJyb3JzT3B0aW9ucyAobmFtZSwgdmFsLCBpbml0T3B0aW9ucywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgaWYgKHZhbCA9PT0gdm9pZCAwKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChpc1NraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QodmFsKSlcbiAgICAgICAgdmFsID0gbmV3IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG5cbiAgICBlbHNlIGlmIChpc1NraXBKc0Vycm9yc09wdGlvbnNPYmplY3QodmFsKSlcbiAgICAgICAgdmFsID0gbmV3IFNraXBKc0Vycm9yc09wdGlvbnModmFsLCB2YWxpZGF0ZSk7XG5cbiAgICByZXR1cm4gcHJlcGFyZVNraXBKc0Vycm9yc09wdGlvbnModmFsLCBpbml0T3B0aW9ucy50ZXN0UnVuLmlzUHJveHlsZXNzKCkpO1xufVxuXG4vLyBDb21tYW5kc1xuZXhwb3J0IGNsYXNzIERpc3BhdGNoRXZlbnRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZGlzcGF0Y2hFdmVudCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmRpc3BhdGNoRXZlbnQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdldmVudE5hbWUnLCB0eXBlOiBub25FbXB0eVN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3JlbGF0ZWRUYXJnZXQnLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsaWNrQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmNsaWNrKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuY2xpY2ssIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdENsaWNrT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSaWdodENsaWNrQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnJpZ2h0Q2xpY2spO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5yaWdodENsaWNrLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRDbGlja09wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhlY3V0ZUV4cHJlc3Npb25Db21tYW5kIGV4dGVuZHMgQ29tbWFuZEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZXhlY3V0ZUV4cHJlc3Npb24sIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnZXhwcmVzc2lvbicsIHR5cGU6IG5vbkVtcHR5U3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdyZXN1bHRWYXJpYWJsZU5hbWUnLCB0eXBlOiBub25FbXB0eVN0cmluZ0FyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRlQXN5bmNFeHByZXNzaW9uQ29tbWFuZCBleHRlbmRzIENvbW1hbmRCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmV4ZWN1dGVBc3luY0V4cHJlc3Npb24sIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnZXhwcmVzc2lvbicsIHR5cGU6IHN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvdWJsZUNsaWNrQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmRvdWJsZUNsaWNrKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZG91YmxlQ2xpY2ssIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdENsaWNrT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIb3ZlckNvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5ob3Zlcik7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmhvdmVyLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRNb3VzZU9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZVRleHRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUudHlwZVRleHQpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS50eXBlVGV4dCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRUeXBlU2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICd0ZXh0JywgdHlwZTogbm9uRW1wdHlTdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0VHlwZU9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRHJhZ0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5kcmFnKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZHJhZywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2RyYWdPZmZzZXRYJywgdHlwZTogaW50ZWdlckFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZHJhZ09mZnNldFknLCB0eXBlOiBpbnRlZ2VyQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdE1vdXNlT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEcmFnVG9FbGVtZW50Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmRyYWdUb0VsZW1lbnQpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5kcmFnVG9FbGVtZW50LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZGVzdGluYXRpb25TZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0RHJhZ1RvRWxlbWVudE9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2Nyb2xsQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNjcm9sbCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNjcm9sbCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdwb3NpdGlvbicsIHR5cGU6IG51bGxhYmxlU3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAneCcsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3knLCB0eXBlOiBwb3NpdGl2ZUludGVnZXJBcmd1bWVudCwgZGVmYXVsdFZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdE9mZnNldE9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2Nyb2xsQnlDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2Nyb2xsQnkpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zY3JvbGxCeSwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdieVgnLCB0eXBlOiBpbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogMCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnYnlZJywgdHlwZTogaW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IDAgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0T2Zmc2V0T3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTY3JvbGxJbnRvVmlld0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zY3JvbGxJbnRvVmlldyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNjcm9sbEludG9WaWV3LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRPZmZzZXRPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdFRleHRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2VsZWN0VGV4dCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNlbGVjdFRleHQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdzdGFydFBvcycsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuZFBvcycsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0QWN0aW9uT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2VsZWN0RWRpdGFibGVDb250ZW50KTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2VsZWN0RWRpdGFibGVDb250ZW50LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3N0YXJ0U2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmRTZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgZGVmYXVsdFZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdvcHRpb25zJywgdHlwZTogYWN0aW9uT3B0aW9ucywgaW5pdDogaW5pdEFjdGlvbk9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNlbGVjdFRleHRBcmVhQ29udGVudCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNlbGVjdFRleHRBcmVhQ29udGVudCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzZWxlY3RvcicsIGluaXQ6IGluaXRTZWxlY3RvciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3N0YXJ0TGluZScsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3N0YXJ0UG9zJywgdHlwZTogcG9zaXRpdmVJbnRlZ2VyQXJndW1lbnQsIGRlZmF1bHRWYWx1ZTogbnVsbCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZW5kTGluZScsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuZFBvcycsIHR5cGU6IHBvc2l0aXZlSW50ZWdlckFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IG51bGwgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0QWN0aW9uT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcmVzc0tleUNvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5wcmVzc0tleSk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnByZXNzS2V5LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2tleXMnLCB0eXBlOiBub25FbXB0eVN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnb3B0aW9ucycsIHR5cGU6IGFjdGlvbk9wdGlvbnMsIGluaXQ6IGluaXRQcmVzc09wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmF2aWdhdGVUb0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5uYXZpZ2F0ZVRvKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUubmF2aWdhdGVUbywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICd1cmwnLCB0eXBlOiBwYWdlVXJsQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdzdGF0ZVNuYXBzaG90JywgdHlwZTogbnVsbGFibGVTdHJpbmdBcmd1bWVudCwgZGVmYXVsdFZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdmb3JjZVJlbG9hZCcsIHR5cGU6IGJvb2xlYW5Bcmd1bWVudCwgZGVmYXVsdFZhbHVlOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEZpbGVzVG9VcGxvYWRDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2V0RmlsZXNUb1VwbG9hZCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnNldEZpbGVzVG9VcGxvYWQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0VXBsb2FkU2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdmaWxlUGF0aCcsIHR5cGU6IHN0cmluZ09yU3RyaW5nQXJyYXlBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhclVwbG9hZENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5jbGVhclVwbG9hZCk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLmNsZWFyVXBsb2FkLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3NlbGVjdG9yJywgaW5pdDogaW5pdFVwbG9hZFNlbGVjdG9yLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN3aXRjaFRvSWZyYW1lQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnN3aXRjaFRvSWZyYW1lKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc3dpdGNoVG9JZnJhbWUsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc2VsZWN0b3InLCBpbml0OiBpbml0U2VsZWN0b3IsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnN3aXRjaFRvTWFpbldpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudHlwZSA9IFRZUEUuc3dpdGNoVG9NYWluV2luZG93O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5XaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUub3BlbldpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLm9wZW5XaW5kb3csIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAndXJsJywgdHlwZTogcGFnZVVybEFyZ3VtZW50IH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvc2VXaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuY2xvc2VXaW5kb3cpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5jbG9zZVdpbmRvdywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICd3aW5kb3dJZCcsIHR5cGU6IG51bGxhYmxlU3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBHZXRDdXJyZW50V2luZG93Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmdldEN1cnJlbnRXaW5kb3cpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5nZXRDdXJyZW50V2luZG93LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldEN1cnJlbnRXaW5kb3dzQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmdldEN1cnJlbnRXaW5kb3dzKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZ2V0Q3VycmVudFdpbmRvd3MsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3dpdGNoVG9XaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc3dpdGNoVG9XaW5kb3cpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zd2l0Y2hUb1dpbmRvdywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICd3aW5kb3dJZCcsIHR5cGU6IG5vbkVtcHR5U3RyaW5nQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3dpdGNoVG9XaW5kb3dCeVByZWRpY2F0ZUNvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zd2l0Y2hUb1dpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGUsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnaWQnLCB0eXBlOiBub25FbXB0eVN0cmluZ0FyZ3VtZW50LCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2NoZWNrV2luZG93JywgdHlwZTogZnVuY3Rpb25Bcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zd2l0Y2hUb1BhcmVudFdpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnN3aXRjaFRvUGFyZW50V2luZG93LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc3dpdGNoVG9QcmV2aW91c1dpbmRvdyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnN3aXRjaFRvUHJldmlvdXNXaW5kb3csIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zZXROYXRpdmVEaWFsb2dIYW5kbGVyKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2V0TmF0aXZlRGlhbG9nSGFuZGxlciwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdkaWFsb2dIYW5kbGVyJywgaW5pdDogaW5pdERpYWxvZ0hhbmRsZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb20gKHZhbCkge1xuICAgICAgICBjb25zdCBkaWFsb2dIYW5kbGVyU3R1YiA9IHtcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6IHsgZm46IG51bGwgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kKGRpYWxvZ0hhbmRsZXJTdHViKTtcblxuICAgICAgICBjb21tYW5kLmRpYWxvZ0hhbmRsZXIgPSB2YWwuZGlhbG9nSGFuZGxlcjtcblxuICAgICAgICByZXR1cm4gY29tbWFuZDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmdldE5hdGl2ZURpYWxvZ0hpc3RvcnkpO1xuXG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnR5cGUgPSBUWVBFLmdldE5hdGl2ZURpYWxvZ0hpc3Rvcnk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5nZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzKTtcblxuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50eXBlID0gVFlQRS5nZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldFRlc3RTcGVlZENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zZXRUZXN0U3BlZWQpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zZXRUZXN0U3BlZWQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnc3BlZWQnLCB0eXBlOiBzZXRTcGVlZEFyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5zZXRQYWdlTG9hZFRpbWVvdXQpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zZXRQYWdlTG9hZFRpbWVvdXQsIHZhbGlkYXRlUHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgZ2V0QXNzaWduYWJsZVByb3BlcnRpZXMgKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBuYW1lOiAnZHVyYXRpb24nLCB0eXBlOiBwb3NpdGl2ZUludGVnZXJBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVc2VSb2xlQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnVzZVJvbGUpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS51c2VSb2xlLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3JvbGUnLCB0eXBlOiBhY3Rpb25Sb2xlQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvc2VDaGlsZFdpbmRvd09uRmlsZURvd25sb2FkaW5nIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuY2xvc2VDaGlsZFdpbmRvd09uRmlsZURvd25sb2FkaW5nKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuY2xvc2VDaGlsZFdpbmRvd09uRmlsZURvd25sb2FkaW5nLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlY29yZGVyQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnJlY29yZGVyKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4pIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnJlY29yZGVyKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdzdWJ0eXBlJywgdHlwZTogbm9uRW1wdHlTdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZvcmNlRXhlY3V0aW9uSW5Ub3BXaW5kb3dPbmx5JywgdHlwZTogYm9vbGVhbkFyZ3VtZW50LCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0Q29va2llc0NvbW1hbmQgZXh0ZW5kcyBBY3Rpb25Db21tYW5kQmFzZSB7XG4gICAgc3RhdGljIG1ldGhvZE5hbWUgPSBjYW1lbENhc2UoVFlQRS5nZXRDb29raWVzKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuZ2V0Q29va2llcywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICd1cmxzJywgdHlwZTogdXJsc0FyZ3VtZW50LCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2Nvb2tpZXMnLCB0eXBlOiBjb29raWVzQXJndW1lbnQsIGluaXQ6IGluaXRDb29raWVzT3B0aW9uLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRDb29raWVzQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnNldENvb2tpZXMpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5zZXRDb29raWVzLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3VybCcsIHR5cGU6IHVybHNBcmd1bWVudCwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdjb29raWVzJywgdHlwZTogc2V0Q29va2llc0FyZ3VtZW50LCBpbml0OiBpbml0Q29va2llc09wdGlvbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVDb29raWVzQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLmRlbGV0ZUNvb2tpZXMpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5kZWxldGVDb29raWVzLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3VybHMnLCB0eXBlOiB1cmxzQXJndW1lbnQsIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnY29va2llcycsIHR5cGU6IGNvb2tpZXNBcmd1bWVudCwgaW5pdDogaW5pdENvb2tpZXNPcHRpb24sIHJlcXVpcmVkOiBmYWxzZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUucmVxdWVzdCk7XG4gICAgc3RhdGljIGV4dGVuZGVkTWV0aG9kcyA9IFsnZ2V0JywgJ3Bvc3QnLCAnZGVsZXRlJywgJ3B1dCcsICdwYXRjaCcsICdoZWFkJ107XG4gICAgc3RhdGljIHJlc3VsdEdldHRlcnMgPSBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnLCAnYm9keSddO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5yZXF1ZXN0LCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ3VybCcsIHR5cGU6IHVybEFyZ3VtZW50LCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBhY3Rpb25PcHRpb25zLCBpbml0OiBpbml0UmVxdWVzdE9wdGlvbiwgcmVxdWlyZWQ6IGZhbHNlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0UHJveHlVcmxDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuZ2V0UHJveHlVcmwpO1xuXG4gICAgY29uc3RydWN0b3IgKG9iaiwgdGVzdFJ1biwgdmFsaWRhdGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHN1cGVyKG9iaiwgdGVzdFJ1biwgVFlQRS5nZXRQcm94eVVybCwgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICd1cmwnLCB0eXBlOiB1cmxBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCBpbml0OiBpbml0R2V0UHJveHlVcmxPcHRpb25zLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTa2lwSnNFcnJvcnNDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuc2tpcEpzRXJyb3JzKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuc2tpcEpzRXJyb3JzLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ29wdGlvbnMnLCB0eXBlOiBza2lwSnNFcnJvck9wdGlvbnMsIGluaXQ6IGluaXRTa2lwSnNFcnJvcnNPcHRpb25zLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSdW5DdXN0b21BY3Rpb25Db21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUucnVuQ3VzdG9tQWN0aW9uKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUucnVuQ3VzdG9tQWN0aW9uLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZuJywgdHlwZTogZnVuY3Rpb25Bcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiBzdHJpbmdBcmd1bWVudCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZ3MnLCByZXF1aXJlZDogZmFsc2UgfSxcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBZGRSZXF1ZXN0SG9va3NDb21tYW5kIGV4dGVuZHMgQWN0aW9uQ29tbWFuZEJhc2Uge1xuICAgIHN0YXRpYyBtZXRob2ROYW1lID0gY2FtZWxDYXNlKFRZUEUuYWRkUmVxdWVzdEhvb2tzKTtcblxuICAgIGNvbnN0cnVjdG9yIChvYmosIHRlc3RSdW4sIHZhbGlkYXRlUHJvcGVydGllcykge1xuICAgICAgICBzdXBlcihvYmosIHRlc3RSdW4sIFRZUEUuYWRkUmVxdWVzdEhvb2tzLCB2YWxpZGF0ZVByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGdldEFzc2lnbmFibGVQcm9wZXJ0aWVzICgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbmFtZTogJ2hvb2tzJywgdHlwZTogcmVxdWVzdEhvb2tzQXJndW1lbnQsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCBleHRlbmRzIEFjdGlvbkNvbW1hbmRCYXNlIHtcbiAgICBzdGF0aWMgbWV0aG9kTmFtZSA9IGNhbWVsQ2FzZShUWVBFLnJlbW92ZVJlcXVlc3RIb29rcyk7XG5cbiAgICBjb25zdHJ1Y3RvciAob2JqLCB0ZXN0UnVuLCB2YWxpZGF0ZVByb3BlcnRpZXMpIHtcbiAgICAgICAgc3VwZXIob2JqLCB0ZXN0UnVuLCBUWVBFLnJlbW92ZVJlcXVlc3RIb29rcywgdmFsaWRhdGVQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBnZXRBc3NpZ25hYmxlUHJvcGVydGllcyAoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdob29rcycsIHR5cGU6IHJlcXVlc3RIb29rc0FyZ3VtZW50LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuIl19
|
|
@@ -8,6 +8,9 @@ class CookieProviderBase {
|
|
|
8
8
|
async initialize() {
|
|
9
9
|
return Promise.resolve();
|
|
10
10
|
}
|
|
11
|
+
_isCookieOptionsArray(cookies) {
|
|
12
|
+
return cookies.every((cookie) => typeof cookie === 'object');
|
|
13
|
+
}
|
|
11
14
|
}
|
|
12
15
|
exports.CookieProviderBase = CookieProviderBase;
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0LXJ1bi9jb29raWVzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBYUEsTUFBYSxrQkFBa0I7SUFHM0IsWUFBYSxPQUFnQjtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDWixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRVMscUJBQXFCLENBQUUsT0FBc0M7UUFDbkUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBOEIsRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQztDQUNKO0FBZEQsZ0RBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeHRlcm5hbENvb2tpZXMgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCBUZXN0UnVuIGZyb20gJy4uLyc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi4vY29tbWFuZHMvb3B0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29va2llUHJvdmlkZXIge1xuICAgIGluaXRpYWxpemU6ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgc2V0Q29va2llczogKGNvb2tpZXM6IENvb2tpZU9wdGlvbnNbXSB8IHN0cmluZyB8IHN0cmluZ1tdLCB1cmw6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBnZXRDb29raWVzOiAoZXh0ZXJuYWxDb29raWVzOiBFeHRlcm5hbENvb2tpZXNbXSwgdXJsczogc3RyaW5nW10pID0+IFByb21pc2U8RXh0ZXJuYWxDb29raWVzW10+LFxuICAgIGdldENvb2tpZUhlYWRlcjogKHVybDogc3RyaW5nLCBob3N0bmFtZTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IG51bGw+XG5cbiAgICBkZWxldGVDb29raWVzIChjb29raWVzPzogQ29va2llT3B0aW9uc1tdLCB1cmxzPzogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgY2xhc3MgQ29va2llUHJvdmlkZXJCYXNlIHtcbiAgICBwcm90ZWN0ZWQgdGVzdFJ1bjogVGVzdFJ1bjtcblxuICAgIGNvbnN0cnVjdG9yICh0ZXN0UnVuOiBUZXN0UnVuKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1biA9IHRlc3RSdW47XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2lzQ29va2llT3B0aW9uc0FycmF5IChjb29raWVzOiBBcnJheTxzdHJpbmcgfCBDb29raWVPcHRpb25zPik6IGNvb2tpZXMgaXMgQ29va2llT3B0aW9uc1tdIHtcbiAgICAgICAgcmV0dXJuIGNvb2tpZXMuZXZlcnkoKGNvb2tpZTogc3RyaW5nIHwgQ29va2llT3B0aW9ucykgPT4gdHlwZW9mIGNvb2tpZSA9PT0gJ29iamVjdCcpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -2,19 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProxyCookieProvider = void 0;
|
|
4
4
|
const base_1 = require("./base");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
5
6
|
class ProxyCookieProvider extends base_1.CookieProviderBase {
|
|
6
7
|
async getCookies(externalCookies, urls) {
|
|
7
8
|
const session = this.testRun.session;
|
|
8
9
|
return session.cookies.getCookies(externalCookies, urls);
|
|
9
10
|
}
|
|
10
11
|
async setCookies(cookies, url) {
|
|
12
|
+
const cookiesArray = (0, lodash_1.castArray)(cookies);
|
|
11
13
|
const session = this.testRun.session;
|
|
12
|
-
|
|
14
|
+
if (this._isCookieOptionsArray(cookiesArray))
|
|
15
|
+
return session.cookies.setCookies(cookiesArray, url);
|
|
16
|
+
return session.cookies.copySyncCookies(cookiesArray.join(';'), url);
|
|
13
17
|
}
|
|
14
18
|
async deleteCookies(cookies, urls) {
|
|
15
19
|
const session = this.testRun.session;
|
|
16
20
|
return session.cookies.deleteCookies(cookies, urls);
|
|
17
21
|
}
|
|
22
|
+
async getCookieHeader(url, hostname) {
|
|
23
|
+
return this.testRun.session.cookies.getHeader({ url, hostname });
|
|
24
|
+
}
|
|
18
25
|
}
|
|
19
26
|
exports.ProxyCookieProvider = ProxyCookieProvider;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vY29va2llcy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpQ0FBNEQ7QUFDNUQsbUNBQW1DO0FBRW5DLE1BQWEsbUJBQW9CLFNBQVEseUJBQWtCO0lBQ3ZELEtBQUssQ0FBQyxVQUFVLENBQUUsZUFBa0MsRUFBRSxJQUFjO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRXJDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFFLE9BQTRDLEVBQUUsR0FBVztRQUN2RSxNQUFNLFlBQVksR0FBRyxJQUFBLGtCQUFTLEVBQXlCLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRTFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV6RCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUUsT0FBd0IsRUFBRSxJQUFjO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBRXJDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFFLEdBQVcsRUFBRSxRQUFnQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0o7QUExQkQsa0RBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXh0ZXJuYWxDb29raWVzIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBDb29raWVPcHRpb25zIH0gZnJvbSAnLi4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBDb29raWVQcm92aWRlciwgQ29va2llUHJvdmlkZXJCYXNlIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IGNhc3RBcnJheSB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjbGFzcyBQcm94eUNvb2tpZVByb3ZpZGVyIGV4dGVuZHMgQ29va2llUHJvdmlkZXJCYXNlIGltcGxlbWVudHMgQ29va2llUHJvdmlkZXIge1xuICAgIGFzeW5jIGdldENvb2tpZXMgKGV4dGVybmFsQ29va2llczogRXh0ZXJuYWxDb29raWVzW10sIHVybHM6IHN0cmluZ1tdKTogUHJvbWlzZTxFeHRlcm5hbENvb2tpZXNbXT4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy50ZXN0UnVuLnNlc3Npb247XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb24uY29va2llcy5nZXRDb29raWVzKGV4dGVybmFsQ29va2llcywgdXJscyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0Q29va2llcyAoY29va2llczogc3RyaW5nIHwgc3RyaW5nW10gfCBDb29raWVPcHRpb25zW10sIHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXNBcnJheSA9IGNhc3RBcnJheTxzdHJpbmcgfCBDb29raWVPcHRpb25zPihjb29raWVzKTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiAgICAgID0gdGhpcy50ZXN0UnVuLnNlc3Npb247XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29va2llT3B0aW9uc0FycmF5KGNvb2tpZXNBcnJheSkpXG4gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5jb29raWVzLnNldENvb2tpZXMoY29va2llc0FycmF5LCB1cmwpO1xuXG4gICAgICAgIHJldHVybiBzZXNzaW9uLmNvb2tpZXMuY29weVN5bmNDb29raWVzKGNvb2tpZXNBcnJheS5qb2luKCc7JyksIHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlQ29va2llcyAoY29va2llczogQ29va2llT3B0aW9uc1tdLCB1cmxzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy50ZXN0UnVuLnNlc3Npb247XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb24uY29va2llcy5kZWxldGVDb29raWVzKGNvb2tpZXMsIHVybHMpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvb2tpZUhlYWRlciAodXJsOiBzdHJpbmcsIGhvc3RuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5zZXNzaW9uLmNvb2tpZXMuZ2V0SGVhZGVyKHsgdXJsLCBob3N0bmFtZSB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -56,7 +56,9 @@ function isRuntimeError(err) {
|
|
|
56
56
|
err instanceof runtime_1.CompositeError;
|
|
57
57
|
}
|
|
58
58
|
function executeJsExpression(expression, testRun, options) {
|
|
59
|
-
const context =
|
|
59
|
+
const context = testRun.controller ?
|
|
60
|
+
getExecutionContext(testRun.controller, options) :
|
|
61
|
+
(0, execution_context_1.createExecutionContext)(testRun);
|
|
60
62
|
const errorOptions = createErrorFormattingOptions();
|
|
61
63
|
return (0, vm_1.runInContext)(expression, context, errorOptions);
|
|
62
64
|
}
|
|
@@ -83,4 +85,4 @@ async function executeAsyncJsExpression(expression, testRun, callsite, onBeforeR
|
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
exports.executeAsyncJsExpression = executeAsyncJsExpression;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdC1ydW4vZXhlY3V0ZS1qcy1leHByZXNzaW9uL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJCQUFrQztBQUVsQyxrREFLOEI7QUFFOUIsb0RBQXlHO0FBQ3pHLG1GQUlxRDtBQUVyRCwyQ0FJcUI7QUFFckIsa0ZBQXdEO0FBRXhELDJGQUEyRjtBQUMzRixTQUFTLFdBQVcsQ0FBRSxVQUFVLEVBQUUsU0FBUztJQUN2QyxPQUFPLG1CQUFtQiwwQkFBYyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUztRQUNyRSxVQUFVLEdBQUcsS0FBSztRQUNsQixLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUUsR0FBRztJQUM1QixJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUU7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFFZCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUVsQyxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLElBQUksRUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO1lBQ2xDLE1BQU0sRUFBRSxVQUFVLENBQUMsZUFBZSxFQUFFO1NBQ3ZDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNWO0lBRUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxD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USxDQUFDLENBQUM7O1lBRS9GLFdBQVcsR0FBRyxJQUFJLHNDQUEyQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUzRixJQUFJLG9CQUFvQjtZQUNwQixNQUFNLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sV0FBVyxDQUFDO0tBQ3JCO0FBQ0wsQ0FBQztBQXpCRCw0REF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBydW5JbkNvbnRleHQgfSBmcm9tICd2bSc7XG5cbmltcG9ydCB7XG4gICAgR2VuZXJhbEVycm9yLFxuICAgIFRlc3RDb21waWxhdGlvbkVycm9yLFxuICAgIEFQSUVycm9yLFxuICAgIENvbXBvc2l0ZUVycm9yLFxufSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5cbmltcG9ydCB7IFVuY2F1Z2h0RXJyb3JJbkN1c3RvbVNjcmlwdCwgVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQgfSBmcm9tICcuLi8uLi9lcnJvcnMvdGVzdC1ydW4nO1xuaW1wb3J0IHtcbiAgICBzZXRDb250ZXh0T3B0aW9ucyxcbiAgICBERUZBVUxUX0NPTlRFWFRfT1BUSU9OUyxcbiAgICBjcmVhdGVFeGVjdXRpb25Db250ZXh0LFxufSBmcm9tICcuLi8uLi9hcGkvdGVzdC1jb250cm9sbGVyL2V4ZWN1dGlvbi1jb250ZXh0JztcblxuaW1wb3J0IHtcbiAgICBFUlJPUl9MSU5FX0NPTFVNTl9SRUdFWFAsXG4gICAgRVJST1JfRklMRU5BTUUsXG4gICAgRVJST1JfTElORV9PRkZTRVQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IFRlc3RSdW5UcmFja2VyIGZyb20gJy4uLy4uL2FwaS90ZXN0LXJ1bi10cmFja2VyJztcblxuLy8gTk9URTogZG8gbm90IGJlYXV0aWZ5IHRoaXMgY29kZSBzaW5jZSBvZmZzZXRzIGZvciBlcnJvciBsaW5lcyBhbmQgY29sdW1ucyBhcmUgY29kZWQgaGVyZVxuZnVuY3Rpb24gd3JhcEluQXN5bmMgKGV4cHJlc3Npb24sIHRlc3RSdW5JZCkge1xuICAgIHJldHVybiBgKGFzeW5jIGZ1bmN0aW9uICR7VGVzdFJ1blRyYWNrZXIuZ2V0TWFya2VkRm5OYW1lKHRlc3RSdW5JZCl9ICgpIHtcXG5gICtcbiAgICAgICAgICAgZXhwcmVzc2lvbiArICc7XFxuJyArXG4gICAgICAgICAgICd9KTsnO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckxpbmVDb2x1bW4gKGVycikge1xuICAgIGlmIChlcnIuaXNUZXN0Q2FmZUVycm9yKSB7XG4gICAgICAgIGlmICghZXJyLmNhbGxzaXRlKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgICAgIGlmIChlcnIuY2FsbHNpdGUuaWQpXG4gICAgICAgICAgICByZXR1cm4geyBsaW5lOiAwLCBjb2x1bW46IDAgfTtcblxuICAgICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGVyci5jYWxsc2l0ZS5zdGFja0ZyYW1lcyB8fCBbXTtcbiAgICAgICAgY29uc3QgZnJhbWVJbmRleCAgPSBlcnIuY2FsbHNpdGUuY2FsbHNpdGVGcmFtZUlkeDtcbiAgICAgICAgY29uc3Qgc3RhY2tGcmFtZSAgPSBzdGFja0ZyYW1lc1tmcmFtZUluZGV4XTtcblxuICAgICAgICByZXR1cm4gc3RhY2tGcmFtZSA/IHtcbiAgICAgICAgICAgIGxpbmU6ICAgc3RhY2tGcmFtZS5nZXRMaW5lTnVtYmVyKCksXG4gICAgICAgICAgICBjb2x1bW46IHN0YWNrRnJhbWUuZ2V0Q29sdW1uTnVtYmVyKCksXG4gICAgICAgIH0gOiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBlcnIuc3RhY2sgJiYgZXJyLnN0YWNrLm1hdGNoKEVSUk9SX0xJTkVfQ09MVU1OX1JFR0VYUCk7XG5cbiAgICBpZiAoIXJlc3VsdClcbiAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgY29uc3QgbGluZSAgID0gcmVzdWx0WzFdID8gcGFyc2VJbnQocmVzdWx0WzFdLCAxMCkgOiB2b2lkIDA7XG4gICAgY29uc3QgY29sdW1uID0gcmVzdWx0WzJdID8gcGFyc2VJbnQocmVzdWx0WzJdLCAxMCkgOiB2b2lkIDA7XG5cbiAgICByZXR1cm4geyBsaW5lLCBjb2x1bW4gfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JGb3JtYXR0aW5nT3B0aW9ucyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZW5hbWU6ICAgRVJST1JfRklMRU5BTUUsXG4gICAgICAgIGxpbmVPZmZzZXQ6IEVSUk9SX0xJTkVfT0ZGU0VULFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEV4ZWN1dGlvbkNvbnRleHQgKHRlc3RDb250cm9sbGVyLCBvcHRpb25zID0gREVGQVVMVF9DT05URVhUX09QVElPTlMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGVzdENvbnRyb2xsZXIuZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuXG4gICAgLy8gVE9ETzogRmluZCBhIHdheSB0byBhdm9pZCB0aGlzIGFzc2lnbm1lbnRcbiAgICBzZXRDb250ZXh0T3B0aW9ucyhjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBpc1J1bnRpbWVFcnJvciAoZXJyKSB7XG4gICAgcmV0dXJuIGVyciBpbnN0YW5jZW9mIEdlbmVyYWxFcnJvciB8fFxuICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBUZXN0Q29tcGlsYXRpb25FcnJvciB8fFxuICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBBUElFcnJvciB8fFxuICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBDb21wb3NpdGVFcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVKc0V4cHJlc3Npb24gKGV4cHJlc3Npb24sIHRlc3RSdW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGVzdFJ1bi5jb250cm9sbGVyID9cbiAgICAgICAgZ2V0RXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuLmNvbnRyb2xsZXIsIG9wdGlvbnMpIDpcbiAgICAgICAgY3JlYXRlRXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuKTtcblxuICAgIGNvbnN0IGVycm9yT3B0aW9ucyA9IGNyZWF0ZUVycm9yRm9ybWF0dGluZ09wdGlvbnMoKTtcblxuICAgIHJldHVybiBydW5JbkNvbnRleHQoZXhwcmVzc2lvbiwgY29udGV4dCwgZXJyb3JPcHRpb25zKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVBc3luY0pzRXhwcmVzc2lvbiAoZXhwcmVzc2lvbiwgdGVzdFJ1biwgY2FsbHNpdGUsIG9uQmVmb3JlUmFpc2luZ0Vycm9yKSB7XG4gICAgaWYgKCFleHByZXNzaW9uIHx8ICFleHByZXNzaW9uLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3QgY29udGV4dCAgICAgICAgICAgPSBnZXRFeGVjdXRpb25Db250ZXh0KHRlc3RSdW4uY29udHJvbGxlcik7XG4gICAgY29uc3QgZXJyb3JPcHRpb25zICAgICAgPSBjcmVhdGVFcnJvckZvcm1hdHRpbmdPcHRpb25zKGV4cHJlc3Npb24pO1xuICAgIGNvbnN0IHdyYXBwZWRFeHByZXNzaW9uID0gd3JhcEluQXN5bmMoZXhwcmVzc2lvbiwgdGVzdFJ1bi5pZCk7XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuSW5Db250ZXh0KHdyYXBwZWRFeHByZXNzaW9uLCBjb250ZXh0LCBlcnJvck9wdGlvbnMpKCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjb2x1bW4gfSA9IGdldEVycm9yTGluZUNvbHVtbihlcnIpO1xuICAgICAgICBsZXQgcmVzdWx0RXJyb3IgICAgICAgID0gbnVsbDtcblxuICAgICAgICBpZiAoZXJyLmlzVGVzdENhZmVFcnJvciB8fCBpc1J1bnRpbWVFcnJvcihlcnIpKVxuICAgICAgICAgICAgcmVzdWx0RXJyb3IgPSBuZXcgVW5jYXVnaHRUZXN0Q2FmZUVycm9ySW5DdXN0b21TY3JpcHQoZXJyLCBleHByZXNzaW9uLCBsaW5lLCBjb2x1bW4sIGNhbGxzaXRlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0RXJyb3IgPSBuZXcgVW5jYXVnaHRFcnJvckluQ3VzdG9tU2NyaXB0KGVyciwgZXhwcmVzc2lvbiwgbGluZSwgY29sdW1uLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgaWYgKG9uQmVmb3JlUmFpc2luZ0Vycm9yKVxuICAgICAgICAgICAgYXdhaXQgb25CZWZvcmVSYWlzaW5nRXJyb3IocmVzdWx0RXJyb3IpO1xuXG4gICAgICAgIHRocm93IHJlc3VsdEVycm9yO1xuICAgIH1cbn1cbiJdfQ==
|