testcafe 3.6.1 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const endpoint_utils_1 = require("endpoint-utils");
6
+ const endpoint_utils_1 = require("../../../../../utils/endpoint-utils");
7
7
  const create_temp_profile_1 = __importDefault(require("./create-temp-profile"));
8
8
  const is_docker_1 = __importDefault(require("is-docker"));
9
9
  const is_podman_1 = __importDefault(require("is-podman"));
@@ -28,4 +28,4 @@ class ChromeRuntimeInfo {
28
28
  }
29
29
  exports.default = ChromeRuntimeInfo;
30
30
  module.exports = exports.default;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2Nocm9tZS9ydW50aW1lLWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtREFBNkM7QUFDN0MsZ0ZBQXNEO0FBQ3RELDBEQUFpQztBQUNqQywwREFBaUM7QUFJakMsTUFBcUIsaUJBQWlCO0lBT2xDLFlBQXVCLE1BQWM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBWSxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBSSxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUEsbUJBQVEsR0FBRSxJQUFJLElBQUEsbUJBQVEsR0FBRSxDQUFDO0lBQ3BELENBQUM7SUFFUyxLQUFLLENBQUMsaUJBQWlCLENBQUUsYUFBcUIsRUFBRSxzQkFBK0I7UUFDckYsT0FBTyxNQUFNLElBQUEsNkJBQWlCLEVBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFFLGFBQXFCLEVBQUUsTUFBYyxFQUFFLHNCQUErQjtRQUM5RixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFdBQVcsQ0FBQyxjQUFjLEdBQUcsTUFBTSxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFNUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVc7WUFDdkQsV0FBVyxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUEsNEJBQVcsR0FBRSxDQUFDO1FBRTlDLE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSjtBQTdCRCxvQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRGcmVlUG9ydCB9IGZyb20gJ2VuZHBvaW50LXV0aWxzJztcbmltcG9ydCBjcmVhdGVUZW1wUHJvZmlsZSBmcm9tICcuL2NyZWF0ZS10ZW1wLXByb2ZpbGUnO1xuaW1wb3J0IGlzRG9ja2VyIGZyb20gJ2lzLWRvY2tlcic7XG5pbXBvcnQgaXNQb2RtYW4gZnJvbSAnaXMtcG9kbWFuJztcbmltcG9ydCBUZW1wRGlyZWN0b3J5IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzL3RlbXAtZGlyZWN0b3J5JztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENocm9tZVJ1bnRpbWVJbmZvIHtcbiAgICBwdWJsaWMgY29uZmlnOiBDb25maWc7XG4gICAgcHVibGljIHRlbXBQcm9maWxlRGlyOiBudWxsIHwgVGVtcERpcmVjdG9yeTtcbiAgICBwdWJsaWMgY2RwUG9ydDogbnVtYmVyO1xuICAgIHB1YmxpYyBpc0NvbnRhaW5lcml6ZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGJyb3dzZXJOYW1lPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yIChjb25maWc6IENvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyAgICAgICAgICA9IGNvbmZpZztcbiAgICAgICAgdGhpcy50ZW1wUHJvZmlsZURpciAgPSBudWxsO1xuICAgICAgICB0aGlzLmNkcFBvcnQgICAgICAgICA9IHRoaXMuY29uZmlnLmNkcFBvcnQ7XG4gICAgICAgIHRoaXMuaXNDb250YWluZXJpemVkID0gaXNEb2NrZXIoKSB8fCBpc1BvZG1hbigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVUZW1wUHJvZmlsZSAocHJveHlIb3N0TmFtZTogc3RyaW5nLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuKTogUHJvbWlzZTxUZW1wRGlyZWN0b3J5PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjcmVhdGVUZW1wUHJvZmlsZShwcm94eUhvc3ROYW1lLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGNyZWF0ZSAocHJveHlIb3N0TmFtZTogc3RyaW5nLCBjb25maWc6IENvbmZpZywgZGlzYWJsZU11bHRpcGxlV2luZG93czogYm9vbGVhbik6IFByb21pc2U8Q2hyb21lUnVudGltZUluZm8+IHtcbiAgICAgICAgY29uc3QgcnVudGltZUluZm8gPSBuZXcgdGhpcyhjb25maWcpO1xuXG4gICAgICAgIGlmICghcnVudGltZUluZm8uY29uZmlnLnVzZXJQcm9maWxlKVxuICAgICAgICAgICAgcnVudGltZUluZm8udGVtcFByb2ZpbGVEaXIgPSBhd2FpdCBydW50aW1lSW5mby5jcmVhdGVUZW1wUHJvZmlsZShwcm94eUhvc3ROYW1lLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKTtcblxuICAgICAgICBpZiAoIXJ1bnRpbWVJbmZvLmNkcFBvcnQgJiYgIXJ1bnRpbWVJbmZvLmNvbmZpZy51c2VyUHJvZmlsZSlcbiAgICAgICAgICAgIHJ1bnRpbWVJbmZvLmNkcFBvcnQgPSBhd2FpdCBnZXRGcmVlUG9ydCgpO1xuXG4gICAgICAgIHJldHVybiBydW50aW1lSW5mbztcbiAgICB9XG59XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2Nocm9tZS9ydW50aW1lLWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBa0U7QUFDbEUsZ0ZBQXNEO0FBQ3RELDBEQUFpQztBQUNqQywwREFBaUM7QUFJakMsTUFBcUIsaUJBQWlCO0lBT2xDLFlBQXVCLE1BQWM7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBWSxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBSSxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUEsbUJBQVEsR0FBRSxJQUFJLElBQUEsbUJBQVEsR0FBRSxDQUFDO0lBQ3BELENBQUM7SUFFUyxLQUFLLENBQUMsaUJBQWlCLENBQUUsYUFBcUIsRUFBRSxzQkFBK0I7UUFDckYsT0FBTyxNQUFNLElBQUEsNkJBQWlCLEVBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFFLGFBQXFCLEVBQUUsTUFBYyxFQUFFLHNCQUErQjtRQUM5RixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFdBQVcsQ0FBQyxjQUFjLEdBQUcsTUFBTSxXQUFXLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFNUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVc7WUFDdkQsV0FBVyxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUEsNEJBQVcsR0FBRSxDQUFDO1FBRTlDLE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSjtBQTdCRCxvQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRGcmVlUG9ydCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzL2VuZHBvaW50LXV0aWxzJztcbmltcG9ydCBjcmVhdGVUZW1wUHJvZmlsZSBmcm9tICcuL2NyZWF0ZS10ZW1wLXByb2ZpbGUnO1xuaW1wb3J0IGlzRG9ja2VyIGZyb20gJ2lzLWRvY2tlcic7XG5pbXBvcnQgaXNQb2RtYW4gZnJvbSAnaXMtcG9kbWFuJztcbmltcG9ydCBUZW1wRGlyZWN0b3J5IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzL3RlbXAtZGlyZWN0b3J5JztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENocm9tZVJ1bnRpbWVJbmZvIHtcbiAgICBwdWJsaWMgY29uZmlnOiBDb25maWc7XG4gICAgcHVibGljIHRlbXBQcm9maWxlRGlyOiBudWxsIHwgVGVtcERpcmVjdG9yeTtcbiAgICBwdWJsaWMgY2RwUG9ydDogbnVtYmVyO1xuICAgIHB1YmxpYyBpc0NvbnRhaW5lcml6ZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGJyb3dzZXJOYW1lPzogc3RyaW5nO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yIChjb25maWc6IENvbmZpZykge1xuICAgICAgICB0aGlzLmNvbmZpZyAgICAgICAgICA9IGNvbmZpZztcbiAgICAgICAgdGhpcy50ZW1wUHJvZmlsZURpciAgPSBudWxsO1xuICAgICAgICB0aGlzLmNkcFBvcnQgICAgICAgICA9IHRoaXMuY29uZmlnLmNkcFBvcnQ7XG4gICAgICAgIHRoaXMuaXNDb250YWluZXJpemVkID0gaXNEb2NrZXIoKSB8fCBpc1BvZG1hbigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVUZW1wUHJvZmlsZSAocHJveHlIb3N0TmFtZTogc3RyaW5nLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuKTogUHJvbWlzZTxUZW1wRGlyZWN0b3J5PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjcmVhdGVUZW1wUHJvZmlsZShwcm94eUhvc3ROYW1lLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGNyZWF0ZSAocHJveHlIb3N0TmFtZTogc3RyaW5nLCBjb25maWc6IENvbmZpZywgZGlzYWJsZU11bHRpcGxlV2luZG93czogYm9vbGVhbik6IFByb21pc2U8Q2hyb21lUnVudGltZUluZm8+IHtcbiAgICAgICAgY29uc3QgcnVudGltZUluZm8gPSBuZXcgdGhpcyhjb25maWcpO1xuXG4gICAgICAgIGlmICghcnVudGltZUluZm8uY29uZmlnLnVzZXJQcm9maWxlKVxuICAgICAgICAgICAgcnVudGltZUluZm8udGVtcFByb2ZpbGVEaXIgPSBhd2FpdCBydW50aW1lSW5mby5jcmVhdGVUZW1wUHJvZmlsZShwcm94eUhvc3ROYW1lLCBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKTtcblxuICAgICAgICBpZiAoIXJ1bnRpbWVJbmZvLmNkcFBvcnQgJiYgIXJ1bnRpbWVJbmZvLmNvbmZpZy51c2VyUHJvZmlsZSlcbiAgICAgICAgICAgIHJ1bnRpbWVJbmZvLmNkcFBvcnQgPSBhd2FpdCBnZXRGcmVlUG9ydCgpO1xuXG4gICAgICAgIHJldHVybiBydW50aW1lSW5mbztcbiAgICB9XG59XG4iXX0=
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const endpoint_utils_1 = require("endpoint-utils");
6
+ const endpoint_utils_1 = require("../../../../../utils/endpoint-utils");
7
7
  const create_temp_profile_1 = __importDefault(require("./create-temp-profile"));
8
8
  async function default_1(config) {
9
9
  const marionettePort = config.marionettePort || (!config.userProfile ? await (0, endpoint_utils_1.getFreePort)() : null);
@@ -14,4 +14,4 @@ async function default_1(config) {
14
14
  }
15
15
  exports.default = default_1;
16
16
  module.exports = exports.default;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2ZpcmVmb3gvcnVudGltZS1pbmZvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBQTZDO0FBQzdDLGdGQUFzRDtBQUd2QyxLQUFLLG9CQUFXLE1BQU07SUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLDRCQUFXLEdBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkcsTUFBTSxXQUFXLEdBQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFFbEQsV0FBVyxDQUFDLGNBQWMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBQSw2QkFBaUIsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9GLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBRWxDLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUM7QUFSRCw0QkFRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEZyZWVQb3J0IH0gZnJvbSAnZW5kcG9pbnQtdXRpbHMnO1xuaW1wb3J0IGNyZWF0ZVRlbXBQcm9maWxlIGZyb20gJy4vY3JlYXRlLXRlbXAtcHJvZmlsZSc7XG5cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIGNvbnN0IG1hcmlvbmV0dGVQb3J0ID0gY29uZmlnLm1hcmlvbmV0dGVQb3J0IHx8ICghY29uZmlnLnVzZXJQcm9maWxlID8gYXdhaXQgZ2V0RnJlZVBvcnQoKSA6IG51bGwpO1xuICAgIGNvbnN0IHJ1bnRpbWVJbmZvICAgID0geyBjb25maWcsIG1hcmlvbmV0dGVQb3J0IH07XG5cbiAgICBydW50aW1lSW5mby50ZW1wUHJvZmlsZURpciA9ICFjb25maWcudXNlclByb2ZpbGUgPyBhd2FpdCBjcmVhdGVUZW1wUHJvZmlsZShydW50aW1lSW5mbykgOiBudWxsO1xuICAgIHJ1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkID0gbnVsbDtcblxuICAgIHJldHVybiBydW50aW1lSW5mbztcbn1cbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2ZpcmVmb3gvcnVudGltZS1pbmZvLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0VBQWtFO0FBQ2xFLGdGQUFzRDtBQUd2QyxLQUFLLG9CQUFXLE1BQU07SUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLDRCQUFXLEdBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkcsTUFBTSxXQUFXLEdBQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFFbEQsV0FBVyxDQUFDLGNBQWMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBQSw2QkFBaUIsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9GLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBRWxDLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUM7QUFSRCw0QkFRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEZyZWVQb3J0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbHMvZW5kcG9pbnQtdXRpbHMnO1xuaW1wb3J0IGNyZWF0ZVRlbXBQcm9maWxlIGZyb20gJy4vY3JlYXRlLXRlbXAtcHJvZmlsZSc7XG5cblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIGNvbnN0IG1hcmlvbmV0dGVQb3J0ID0gY29uZmlnLm1hcmlvbmV0dGVQb3J0IHx8ICghY29uZmlnLnVzZXJQcm9maWxlID8gYXdhaXQgZ2V0RnJlZVBvcnQoKSA6IG51bGwpO1xuICAgIGNvbnN0IHJ1bnRpbWVJbmZvICAgID0geyBjb25maWcsIG1hcmlvbmV0dGVQb3J0IH07XG5cbiAgICBydW50aW1lSW5mby50ZW1wUHJvZmlsZURpciA9ICFjb25maWcudXNlclByb2ZpbGUgPyBhd2FpdCBjcmVhdGVUZW1wUHJvZmlsZShydW50aW1lSW5mbykgOiBudWxsO1xuICAgIHJ1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkID0gbnVsbDtcblxuICAgIHJldHVybiBydW50aW1lSW5mbztcbn1cbiJdfQ==
@@ -1,32 +1,33 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.getValidPort = exports.getValidHostname = void 0;
7
4
  const runtime_1 = require("../errors/runtime");
8
5
  const types_1 = require("../errors/types");
9
- const endpoint_utils_1 = __importDefault(require("endpoint-utils"));
6
+ const endpoint_utils_1 = require("../utils/endpoint-utils");
10
7
  async function getValidHostname(hostname) {
8
+ var _a;
11
9
  if (hostname) {
12
- const valid = await endpoint_utils_1.default.isMyHostname(hostname);
10
+ const valid = await (0, endpoint_utils_1.isMyHostname)(hostname);
13
11
  if (!valid)
14
12
  throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidHostname, hostname);
15
13
  }
16
- else
17
- hostname = endpoint_utils_1.default.getIPAddress();
14
+ else {
15
+ hostname = (_a = (0, endpoint_utils_1.getIPAddress)()) !== null && _a !== void 0 ? _a : '';
16
+ if (!hostname)
17
+ throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.invalidHostname, hostname);
18
+ }
18
19
  return hostname;
19
20
  }
20
21
  exports.getValidHostname = getValidHostname;
21
22
  async function getValidPort(port) {
22
23
  if (port) {
23
- const isFree = await endpoint_utils_1.default.isFreePort(port);
24
+ const isFree = await (0, endpoint_utils_1.isFreePort)(port);
24
25
  if (!isFree)
25
26
  throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.portIsNotFree, port);
26
27
  }
27
28
  else
28
- port = await endpoint_utils_1.default.getFreePort();
29
+ port = await (0, endpoint_utils_1.getFreePort)();
29
30
  return port;
30
31
  }
31
32
  exports.getValidPort = getValidPort;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELG9FQUEyQztBQUVwQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUUsUUFBZ0I7SUFDcEQsSUFBSSxRQUFRLEVBQUU7UUFDVixNQUFNLEtBQUssR0FBRyxNQUFNLHdCQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxLQUFLO1lBQ04sTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDeEU7O1FBRUcsUUFBUSxHQUFHLHdCQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFNUMsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQVhELDRDQVdDO0FBRU0sS0FBSyxVQUFVLFlBQVksQ0FBRSxJQUFZO0lBQzVDLElBQUksSUFBSSxFQUFFO1FBQ04sTUFBTSxNQUFNLEdBQUcsTUFBTSx3QkFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsTUFBTTtZQUNQLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ2xFOztRQUVHLElBQUksR0FBRyxNQUFNLHdCQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFN0MsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQVhELG9DQVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IGVuZHBvaW50VXRpbHMgZnJvbSAnZW5kcG9pbnQtdXRpbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VmFsaWRIb3N0bmFtZSAoaG9zdG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGhvc3RuYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gYXdhaXQgZW5kcG9pbnRVdGlscy5pc015SG9zdG5hbWUoaG9zdG5hbWUpO1xuXG4gICAgICAgIGlmICghdmFsaWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmludmFsaWRIb3N0bmFtZSwgaG9zdG5hbWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIGhvc3RuYW1lID0gZW5kcG9pbnRVdGlscy5nZXRJUEFkZHJlc3MoKTtcblxuICAgIHJldHVybiBob3N0bmFtZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZhbGlkUG9ydCAocG9ydDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocG9ydCkge1xuICAgICAgICBjb25zdCBpc0ZyZWUgPSBhd2FpdCBlbmRwb2ludFV0aWxzLmlzRnJlZVBvcnQocG9ydCk7XG5cbiAgICAgICAgaWYgKCFpc0ZyZWUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnBvcnRJc05vdEZyZWUsIHBvcnQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHBvcnQgPSBhd2FpdCBlbmRwb2ludFV0aWxzLmdldEZyZWVQb3J0KCk7XG5cbiAgICByZXR1cm4gcG9ydDtcbn1cbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlndXJhdGlvbi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELDREQUtpQztBQUUxQixLQUFLLFVBQVUsZ0JBQWdCLENBQUUsUUFBZ0I7O0lBQ3BELElBQUksUUFBUSxFQUFFO1FBQ1YsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDZCQUFZLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLEtBQUs7WUFDTixNQUFNLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUN4RTtTQUNJO1FBQ0QsUUFBUSxHQUFHLE1BQUEsSUFBQSw2QkFBWSxHQUFFLG1DQUFJLEVBQUUsQ0FBQztRQUVoQyxJQUFJLENBQUMsUUFBUTtZQUNULE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQWZELDRDQWVDO0FBRU0sS0FBSyxVQUFVLFlBQVksQ0FBRSxJQUFZO0lBQzVDLElBQUksSUFBSSxFQUFFO1FBQ04sTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLDJCQUFVLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLE1BQU07WUFDUCxNQUFNLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNsRTs7UUFFRyxJQUFJLEdBQUcsTUFBTSxJQUFBLDRCQUFXLEdBQUUsQ0FBQztJQUUvQixPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBWEQsb0NBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQge1xuICAgIGlzTXlIb3N0bmFtZSxcbiAgICBnZXRJUEFkZHJlc3MsXG4gICAgaXNGcmVlUG9ydCxcbiAgICBnZXRGcmVlUG9ydCxcbn0gZnJvbSAnLi4vdXRpbHMvZW5kcG9pbnQtdXRpbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VmFsaWRIb3N0bmFtZSAoaG9zdG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKGhvc3RuYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gYXdhaXQgaXNNeUhvc3RuYW1lKGhvc3RuYW1lKTtcblxuICAgICAgICBpZiAoIXZhbGlkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5pbnZhbGlkSG9zdG5hbWUsIGhvc3RuYW1lKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGhvc3RuYW1lID0gZ2V0SVBBZGRyZXNzKCkgPz8gJyc7XG5cbiAgICAgICAgaWYgKCFob3N0bmFtZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuaW52YWxpZEhvc3RuYW1lLCBob3N0bmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RuYW1lO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VmFsaWRQb3J0IChwb3J0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmIChwb3J0KSB7XG4gICAgICAgIGNvbnN0IGlzRnJlZSA9IGF3YWl0IGlzRnJlZVBvcnQocG9ydCk7XG5cbiAgICAgICAgaWYgKCFpc0ZyZWUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnBvcnRJc05vdEZyZWUsIHBvcnQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHBvcnQgPSBhd2FpdCBnZXRGcmVlUG9ydCgpO1xuXG4gICAgcmV0dXJuIHBvcnQ7XG59XG4iXX0=
@@ -232,10 +232,14 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
232
232
  await this._tryRespondToOtherRequest(event, sessionId);
233
233
  }
234
234
  _getUploadPostData(event) {
235
- if (!event.request.postData)
235
+ var _a;
236
+ if (!event.request.postDataEntries || !event.request.postDataEntries.length)
236
237
  return void 0;
237
238
  const contentTypeHeader = event.request.headers['Content-Type'];
238
- const postData = Buffer.from(event.request.postData, 'utf-8');
239
+ const dataBuffers = [];
240
+ for (const dataEntry of event.request.postDataEntries)
241
+ dataBuffers.push(Buffer.from((_a = dataEntry.bytes) !== null && _a !== void 0 ? _a : '', 'base64'));
242
+ const postData = Buffer.concat(dataBuffers);
239
243
  const bodyWithUploads = (0, testcafe_hammerhead_1.injectUpload)(contentTypeHeader, postData);
240
244
  return bodyWithUploads ? bodyWithUploads.toString('base64') : void 0;
241
245
  }
@@ -370,4 +374,4 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
370
374
  }
371
375
  exports.default = NativeAutomationRequestPipeline;
372
376
  module.exports = exports.default;
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFnQztBQVloQyxxRkFBdUY7QUFDdkYsNkVBQWlGO0FBQ2pGLDhDQUEwRTtBQUMxRSw0RUFBbUQ7QUFFbkQsc0NBS3NCO0FBRXRCLGlFQUF5QztBQVN6Qyw2REFJbUM7QUFFbkMsNkRBTzZCO0FBSTdCLDBFQUEwRDtBQUMxRCx5Q0FJb0I7QUFDcEIsMkRBQWtEO0FBQ2xELDJEQUF3RDtBQUN4RCx3RUFBOEM7QUFDOUMsa0VBQWdFO0FBQ2hFLHNDQUFzRTtBQUV0RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBb0IsQ0FBQztBQUM1RSxNQUFNLG9CQUFvQixHQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBb0IsQ0FBQztBQUU3RSxNQUFNLGlCQUFpQixHQUFHLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUV4RSxNQUFNLGdCQUFnQixHQUFHO0lBQ3JCLE1BQU0sRUFBUyxRQUFRO0lBQ3ZCLE1BQU0sRUFBUyxRQUFRO0lBQ3ZCLGFBQWEsRUFBRSxnQkFBZ0I7Q0FDbEMsQ0FBQztBQUVGLE1BQXFCLCtCQUFnQyxTQUFRLGtCQUF1QjtJQWVoRixZQUFvQixTQUFpQixFQUFFLFFBQWdCLEVBQUUsTUFBbUIsRUFBRSxZQUFxQixFQUFFLE9BQW9DO1FBQ3JJLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxjQUFjLEdBQWEsSUFBSSx5QkFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFrQixRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBYyxZQUFZLENBQUM7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QUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEYsT0FBTztZQUNILEdBQUcsRUFBSyxXQUFXO1lBQ25CLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixPQUFPO1NBQ1YsQ0FBQztJQUNOLENBQUM7SUFFTyx3QkFBd0IsQ0FBRSxLQUF3QyxFQUFFLE9BQVk7UUFDcEYsTUFBTSxpQkFBaUIsR0FBRztZQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztTQUMzQyxDQUFDO1FBRUYsSUFBSSxPQUFPO1lBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsdUNBQXVDLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFbkcsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRU8saUNBQWlDLENBQUUsT0FBaUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0o7QUFyZEQsa0RBcWRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVtb3ZlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBMb2FkaW5nRmFpbGVkRXZlbnQgPSBQcm90b2NvbC5OZXR3b3JrLkxvYWRpbmdGYWlsZWRFdmVudDtcbmltcG9ydCBDb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IFByb3RvY29sLkZldGNoLkNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuaW1wb3J0IEZyYW1lVHJlZSA9IFByb3RvY29sLlBhZ2UuRnJhbWVUcmVlO1xuaW1wb3J0IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCA9IFByb3RvY29sLkZldGNoLkZ1bGZpbGxSZXF1ZXN0UmVxdWVzdDtcbmltcG9ydCBSZXF1ZXN0UGF0dGVybiA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXR0ZXJuO1xuaW1wb3J0IENlcnRpZmljYXRlRXJyb3JFdmVudCA9IFByb3RvY29sLlNlY3VyaXR5LkNlcnRpZmljYXRlRXJyb3JFdmVudDtcbmltcG9ydCBIZWFkZXJFbnRyeSA9IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5O1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlcic7XG5pbXBvcnQgUmVzb3VyY2VJbmplY3RvciwgeyBSZXNvdXJjZUluamVjdG9yT3B0aW9ucyB9IGZyb20gJy4uL3Jlc291cmNlLWluamVjdG9yJztcbmltcG9ydCB7IGNvbnZlcnRUb0hlYWRlckVudHJpZXMsIGdldEhlYWRlckVudHJ5IH0gZnJvbSAnLi4vdXRpbHMvaGVhZGVycyc7XG5pbXBvcnQgaHR0cEhlYWRlcnMgZnJvbSAnLi4vLi4vdXRpbHMvaHR0cC1oZWFkZXJzJztcblxuaW1wb3J0IHtcbiAgICBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZSxcbiAgICBnZXRSZXF1ZXN0SWQsXG4gICAgaXNSZXF1ZXN0LFxuICAgIGlzVW5hdXRob3JpemVkLFxufSBmcm9tICcuLi91dGlscy9jZHAnO1xuXG5pbXBvcnQgRVJST1JfUk9VVEUgZnJvbSAnLi4vZXJyb3Itcm91dGUnO1xuXG5pbXBvcnQge1xuICAgIENvbnRpbnVlUmVxdWVzdEFyZ3MsXG4gICAgU2Vzc2lvbklkLFxuICAgIFNlc3Npb25TdG9yYWdlSW5mbyxcbiAgICBTcGVjaWFsU2VydmljZVJvdXRlcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge1xuICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcixcbiAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZU90aGVyUmVxdWVzdExvZ2dlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5cbmltcG9ydCB7XG4gICAgSW5jb21pbmdNZXNzYWdlTGlrZSxcbiAgICBpc1JlZGlyZWN0U3RhdHVzQ29kZSxcbiAgICBTUEVDSUFMX0JMQU5LX1BBR0UsXG4gICAgU3RvcmFnZXNTbmFwc2hvdCxcbiAgICBpbmplY3RVcGxvYWQsXG4gICAgY29udGVudFR5cGVVdGlscyxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvcGlwZWxpbmUtY29udGV4dCc7XG5pbXBvcnQgeyBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IGdldFNwZWNpYWxSZXF1ZXN0SGFuZGxlciBmcm9tICcuL3NwZWNpYWwtaGFuZGxlcnMnO1xuaW1wb3J0IHtcbiAgICBjb25uZWN0aW9uUmVzZXRHdWFyZCxcbiAgICBzYWZlQ29udGludWVSZXF1ZXN0LFxuICAgIHNhZmVDb250aW51ZVJlc3BvbnNlLFxufSBmcm9tICcuL3NhZmUtYXBpJztcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uQXBpQmFzZSBmcm9tICcuLi9hcGktYmFzZSc7XG5pbXBvcnQgeyByZXNlbmRBdXRoUmVxdWVzdCB9IGZyb20gJy4vcmVzZW5kQXV0aFJlcXVlc3QnO1xuaW1wb3J0IFRlc3RSdW5CcmlkZ2UgZnJvbSAnLi90ZXN0LXJ1bi1icmlkZ2UnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8gZnJvbSAnLi9jb250ZXh0LWluZm8nO1xuaW1wb3J0IHsgZmFpbGVkVG9GaW5kRE5TRXJyb3IsIHNzbENlcnRpZmljYXRlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5jb25zdCBBTExfUkVRVUVTVF9SRVNQT05TRVMgPSB7IHJlcXVlc3RTdGFnZTogJ1JlcXVlc3QnIH0gYXMgUmVxdWVzdFBhdHRlcm47XG5jb25zdCBBTExfUkVRVUVTVF9SRVFVRVNUUyAgPSB7IHJlcXVlc3RTdGFnZTogJ1Jlc3BvbnNlJyB9IGFzIFJlcXVlc3RQYXR0ZXJuO1xuXG5jb25zdCBBTExfUkVRVUVTVFNfREFUQSA9IFtBTExfUkVRVUVTVF9SRVFVRVNUUywgQUxMX1JFUVVFU1RfUkVTUE9OU0VTXTtcblxuY29uc3QgVEFSR0VUX0lORk9fVFlQRSA9IHtcbiAgICBpZnJhbWU6ICAgICAgICAnaWZyYW1lJyxcbiAgICB3b3JrZXI6ICAgICAgICAnd29ya2VyJyxcbiAgICBzZXJ2aWNlV29ya2VyOiAnc2VydmljZV93b3JrZXInLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RQaXBlbGluZSBleHRlbmRzIE5hdGl2ZUF1dG9tYXRpb25BcGlCYXNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF93aW5kb3dJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzTWFpbldpbmRvdzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRleHRJbmZvOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI6IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXI7XG4gICAgcHVibGljIHJlc3RvcmluZ1N0b3JhZ2VzOiBTdG9yYWdlc1NuYXBzaG90IHwgbnVsbDtcbiAgICBwdWJsaWMgY29udGV4dFN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlSW5mbyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzb3VyY2VJbmplY3RvcjogUmVzb3VyY2VJbmplY3RvcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zcGVjaWFsU2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXM7XG4gICAgcHJpdmF0ZSBfc3RvcHBlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9jdXJyZW50RnJhbWVUcmVlOiBGcmFtZVRyZWUgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZhaWxlZFJlcXVlc3RJZHM6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yOiBDZXJ0aWZpY2F0ZUVycm9yRXZlbnQgfCBudWxsO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChicm93c2VySWQ6IHN0cmluZywgd2luZG93SWQ6IHN0cmluZywgY2xpZW50OiBQcm90b2NvbEFwaSwgaXNNYWluV2luZG93OiBib29sZWFuLCBvcHRpb25zOiBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoYnJvd3NlcklkLCBjbGllbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3Rlc3RSdW5CcmlkZ2UgICAgICAgICAgID0gbmV3IFRlc3RSdW5CcmlkZ2UoYnJvd3NlcklkLCB3aW5kb3dJZCk7XG4gICAgICAgIHRoaXMuX3dpbmRvd0lkICAgICAgICAgICAgICAgID0gd2luZG93SWQ7XG4gICAgICAgIHRoaXMuX2lzTWFpbldpbmRvdyAgICAgICAgICAgID0gaXNNYWluV2luZG93O1xuICAgICAgICB0aGlzLl9jb250ZXh0SW5mbyAgICAgICAgICAgICA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKHRoaXMuX3Rlc3RSdW5CcmlkZ2UpO1xuICAgICAgICB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyAgICA9IHRoaXMuX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyID0gbmV3IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VJbmplY3RvciAgICAgICAgPSBuZXcgUmVzb3VyY2VJbmplY3Rvcih0aGlzLl90ZXN0UnVuQnJpZGdlKTtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCAgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuY29udGV4dFN0b3JhZ2UgICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbnNGb3JSZXNvdXJjZUluamVjdG9yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0T3B0aW9uc0ZvclJlc291cmNlSW5qZWN0b3IgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY3JlYXRlUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMgKCk6IFJlc291cmNlSW5qZWN0b3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwZWNpYWxTZXJ2aWNlUm91dGVzOiB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyxcbiAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZTogICAgICB0aGlzLm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzICgpOiBTcGVjaWFsU2VydmljZVJvdXRlcyB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRCcm93c2VyQ29ubmVjdGlvbigpO1xuICAgICAgICBjb25zdCBwcm94eSAgICAgICAgICAgICA9IGJyb3dzZXJDb25uZWN0aW9uLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JQYWdlMTogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGVycm9yUGFnZTI6ICAgICAgICAgIHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoRVJST1JfUk9VVEUsIHByb3h5LnNlcnZlcjJJbmZvLmRvbWFpbiksXG4gICAgICAgICAgICBpZGxlUGFnZTogICAgICAgICAgICBicm93c2VyQ29ubmVjdGlvbi5pZGxlVXJsLFxuICAgICAgICAgICAgb3BlbkZpbGVQcm90b2NvbFVybDogYnJvd3NlckNvbm5lY3Rpb24ub3BlbkZpbGVQcm90b2NvbFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeSAocGlwZWxpbmVDb250ZXh0OiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0LCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghcGlwZWxpbmVDb250ZXh0Lm1vY2suaGFzRXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0LmhhbmRsZU1vY2tFcnJvcih0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlcik7XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcignJXNcXG4lcycsIGV2ZW50Lm5ldHdvcmtJZCwgcGlwZWxpbmVDb250ZXh0Lm1vY2suZXJyb3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU1vY2tSZXNwb25zZSAobW9ja2VkUmVzcG9uc2U6IEluY29taW5nTWVzc2FnZUxpa2UsIHBpcGVsaW5lQ29udGV4dDogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2VCb2R5U3RyID0gKG1vY2tlZFJlc3BvbnNlLmdldEJvZHkoKSBhcyBCdWZmZXIpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgY29uc3QgZnVsZmlsbEluZm8gPSB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgbW9ja2VkUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogY29udmVydFRvSGVhZGVyRW50cmllcyhtb2NrZWRSZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgbW9ja2VkUmVzcG9uc2VCb2R5U3RyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwaXBlbGluZUNvbnRleHQucmVxT3B0cy5pc0FqYXhcbiAgICAgICAgICAgIHx8ICFOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lLl9pc1BhZ2UoZnVsZmlsbEluZm8ucmVzcG9uc2VIZWFkZXJzKSlcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc05vblByb3hpZWRDb250ZW50KGZ1bGZpbGxJbmZvLCB0aGlzLl9jbGllbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGdldEhlYWRlckVudHJ5KGV2ZW50LnJlc3BvbnNlSGVhZGVycywgaHR0cEhlYWRlcnMuY29udGVudFR5cGUpPy52YWx1ZTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzSFRNTFBhZ2VDb250ZW50KGZ1bGZpbGxJbmZvLCB7XG4gICAgICAgICAgICAgICAgaXNJZnJhbWU6ICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRleHRTdG9yYWdlOiB0aGlzLmNvbnRleHRTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHVzZXJTY3JpcHRzLFxuICAgICAgICAgICAgfSwgdGhpcy5fY2xpZW50LCBzZXNzaW9uSWQsIGNvbnRlbnRUeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoYHNlbnQgbW9ja2VkIHJlc3BvbnNlIGZvciB0aGUgJHtldmVudC5yZXF1ZXN0SWR9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGludWVSZXNwb25zZVJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIG1vZGlmaWVkOiBib29sZWFuKTogQ29udGludWVSZXNwb25zZVJlcXVlc3Qge1xuICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLFxuICAgICAgICB9IGFzIENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuXG4gICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VIZWFkZXJzID0gZXZlbnQucmVzcG9uc2VIZWFkZXJzO1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VDb2RlICAgID0gZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC5yZXNvdXJjZVR5cGUgPT09ICdEb2N1bWVudCdcbiAgICAgICAgICAgICYmICF0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRVc2VyU2NyaXB0cyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IHRoaXMuX2NvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQucHJlcGFyZUluamVjdGFibGVVc2VyU2NyaXB0cyhldmVudEZhY3RvcnksIHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0VXNlclNjcmlwdHMoKSk7XG5cbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29udGV4dC5pbmplY3RhYmxlVXNlclNjcmlwdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoaXNSZWRpcmVjdFN0YXR1c0NvZGUoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVzcG9uc2UodGhpcy5fY2xpZW50LCB7IHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkIH0sIHNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZ2V0SGVhZGVyRW50cnkoZXZlbnQucmVzcG9uc2VIZWFkZXJzLCBodHRwSGVhZGVycy5jb250ZW50VHlwZSk/LnZhbHVlO1xuICAgICAgICBjb25zdCByZXNvdXJjZUluZm8gPSBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLmdldERvY3VtZW50UmVzb3VyY2VJbmZvKGV2ZW50LCB0aGlzLl9jbGllbnQsIGNvbnRlbnRUeXBlKTtcblxuICAgICAgICBpZiAocmVzb3VyY2VJbmZvLmVycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnJlZGlyZWN0VG9FcnJvclBhZ2UodGhpcy5fY2xpZW50LCByZXNvdXJjZUluZm8uZXJyb3IsIGV2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGlmaWVkID0gYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXNwb25zZShldmVudCwgcmVzb3VyY2VJbmZvLmJvZHksIHRoaXMuX2NvbnRleHRJbmZvLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZWVkSW5qZWN0UmVzb3VyY2VzKGV2ZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZnVsZmlsbEluZm8gPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBldmVudC5yZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgKHJlc291cmNlSW5mby5ib2R5IGFzIEJ1ZmZlcikudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0gYXMgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBTdHJhbmdlIGJlaGF2aW9yIG9mIHRoZSBDRFAgQVBJOlxuICAgICAgICAgICAgLy8gaWYgd2UgcGFzcyB0aGUgZW1wdHkgXCJyZXNwb25zZVN0YXR1c1RleHRcIiB2YWx1ZSwgd2UgZ2V0IGFuIGVycm9yICdJbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHBocmFzZScuXG4gICAgICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VTdGF0dXNUZXh0ICE9PSAnJylcbiAgICAgICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZVBocmFzZSA9IGV2ZW50LnJlc3BvbnNlU3RhdHVzVGV4dDtcblxuICAgICAgICAgICAgaWYgKGlzVW5hdXRob3JpemVkKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXIpKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeUF1dGhvcml6ZVdpdGhIdHRwQmFzaWNBdXRoQ3JlZGVudGlhbHMoZXZlbnQsIGZ1bGZpbGxJbmZvKTtcblxuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0hUTUxQYWdlQ29udGVudChcbiAgICAgICAgICAgICAgICBmdWxmaWxsSW5mbyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzSWZyYW1lOiAgICAgICAgICB0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgICAgICAgIGV2ZW50LnJlcXVlc3QudXJsLFxuICAgICAgICAgICAgICAgICAgICByZXN0b3JpbmdTdG9yYWdlczogdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFN0b3JhZ2U6ICAgIHRoaXMuY29udGV4dFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJTY3JpcHRzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50LCBzZXNzaW9uSWQsIGNvbnRlbnRUeXBlKTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZUNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0KGV2ZW50LCBtb2RpZmllZCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlc3BvbnNlKHRoaXMuX2NsaWVudCwgY29udGludWVSZXNwb25zZVJlcXVlc3QsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfaXNQYWdlIChyZXNwb25zZUhlYWRlcnM6IEhlYWRlckVudHJ5W10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBnZXRIZWFkZXJFbnRyeShyZXNwb25zZUhlYWRlcnMsIGh0dHBIZWFkZXJzLmNvbnRlbnRUeXBlKT8udmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlVXRpbHMuaXNQYWdlKGNvbnRlbnRUeXBlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9uZWVkSW5qZWN0UmVzb3VyY2VzIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChldmVudC5yZXNvdXJjZVR5cGUgIT09ICdEb2N1bWVudCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUuX2lzUGFnZShldmVudC5yZXNwb25zZUhlYWRlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3RyeUF1dGhvcml6ZVdpdGhIdHRwQmFzaWNBdXRoQ3JlZGVudGlhbHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGZ1bGZpbGxJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLl90ZXN0UnVuLmdldEF1dGhDcmVkZW50aWFscygpO1xuXG4gICAgICAgIGlmICghY3JlZGVudGlhbHMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYXV0aFJlcXVlc3QgPSBhd2FpdCByZXNlbmRBdXRoUmVxdWVzdChldmVudC5yZXF1ZXN0LCBjcmVkZW50aWFscyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhdXRoUmVxdWVzdCAhPT0gJ3N0cmluZycgJiYgIWlzVW5hdXRob3JpemVkKGF1dGhSZXF1ZXN0LnN0YXR1cykpIHtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlQ29kZSAgICA9IGF1dGhSZXF1ZXN0LnN0YXR1cztcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLmJvZHkgICAgICAgICAgICA9IGF1dGhSZXF1ZXN0LmJvZHkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlUGhyYXNlICA9IGF1dGhSZXF1ZXN0LnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZUhlYWRlcnMgPSBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKGF1dGhSZXF1ZXN0LmhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXJyb3IgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBFcnJvciB7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvcilcbiAgICAgICAgICAgIHJldHVybiBzc2xDZXJ0aWZpY2F0ZUVycm9yKHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yLmVycm9yVHlwZSk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gPT09ICdOYW1lTm90UmVzb2x2ZWQnKVxuICAgICAgICAgICAgcmV0dXJuIGZhaWxlZFRvRmluZEROU0Vycm9yKGV2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3RyeVJlc3BvbmRUb090aGVyUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChldmVudC5yZXNwb25zZUVycm9yUmVhc29uICYmIHRoaXMuX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9jcmVhdGVFcnJvcihldmVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnJlZGlyZWN0VG9FcnJvclBhZ2UodGhpcy5fY2xpZW50LCBlcnJvciwgZXZlbnQucmVxdWVzdC51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmRUb090aGVyUmVxdWVzdChldmVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQubmV0d29ya0lkICYmIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMuaW5jbHVkZXMoZXZlbnQubmV0d29ya0lkKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLCBldmVudC5uZXR3b3JrSWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVPdGhlclJlcXVlc3RzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVPdGhlclJlcXVlc3RMb2dnZXIoJyVyJywgZXZlbnQpO1xuXG4gICAgICAgIGlmICghZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbiAmJiAoaXNSZXF1ZXN0KGV2ZW50KSB8fCBpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uaW5pdChldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVxdWVzdChldmVudCwgdGhpcy5fY29udGV4dEluZm8pO1xuXG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZUNvbnRleHQgPSB0aGlzLl9jb250ZXh0SW5mby5nZXRQaXBlbGluZUNvbnRleHQoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIGlmICghcGlwZWxpbmVDb250ZXh0IHx8ICFwaXBlbGluZUNvbnRleHQubW9jaylcbiAgICAgICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXF1ZXN0KHRoaXMuX2NsaWVudCwgZXZlbnQsIHNlc3Npb25JZCwgdGhpcy5fY3JlYXRlQ29udGludWVFdmVudEFyZ3MoZXZlbnQsIHBpcGVsaW5lQ29udGV4dD8ucmVxT3B0cykpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcignYmVnaW4gbW9ja2luZyByZXF1ZXN0ICVyJywgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2UgPSBhd2FpdCBwaXBlbGluZUNvbnRleHQuZ2V0TW9ja1Jlc3BvbnNlKCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeShwaXBlbGluZUNvbnRleHQsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlRXZlbnQgPSBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZShtb2NrZWRSZXNwb25zZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXNwb25zZShtb2NrZWRSZXNwb25zZUV2ZW50LCBtb2NrZWRSZXNwb25zZS5nZXRCb2R5KCksIHRoaXMuX2NvbnRleHRJbmZvLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTW9ja1Jlc3BvbnNlKG1vY2tlZFJlc3BvbnNlLCBwaXBlbGluZUNvbnRleHQsIGV2ZW50LCBzZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoJ2VuZCBtb2NraW5nIHJlcXVlc3QgJXInLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5UmVzcG9uZFRvT3RoZXJSZXF1ZXN0KGV2ZW50LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFVwbG9hZFBvc3REYXRhIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFldmVudC5yZXF1ZXN0LnBvc3REYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZUhlYWRlciA9IGV2ZW50LnJlcXVlc3QuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwb3N0RGF0YSAgICAgICAgICA9IEJ1ZmZlci5mcm9tKGV2ZW50LnJlcXVlc3QucG9zdERhdGEsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCBib2R5V2l0aFVwbG9hZHMgICA9IGluamVjdFVwbG9hZChjb250ZW50VHlwZUhlYWRlciwgcG9zdERhdGEpO1xuXG4gICAgICAgIHJldHVybiBib2R5V2l0aFVwbG9hZHMgPyBib2R5V2l0aFVwbG9hZHMudG9TdHJpbmcoJ2Jhc2U2NCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RvcEZyYW1lTmF2aWdhdGlvbiAoZXZlbnQ6IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnR5cGUgPT09ICdOYXZpZ2F0aW9uJ1xuICAgICAgICAgICAgJiYgIWV2ZW50LmZyYW1lLnBhcmVudElkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3VwZGF0ZUN1cnJlbnRGcmFtZVRyZWUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBEdWUgdG8gQ0RQIHJlc3RyaWN0aW9ucyAoaXQgaGFuZ3MpLCB3ZSBjYW4ndCBnZXQgdGhlIGZyYW1lIHRyZWVcbiAgICAgICAgLy8gcmlnaHQgYmVmb3JlIGluamVjdGluZyBzZXJ2aWNlIHNjcmlwdHMuXG4gICAgICAgIC8vIFNvLCB3ZSBhcmUgZm9yY2VkIHRyYWNraW5nIGZyYW1lcyB0cmVlLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9jbGllbnQuUGFnZS5nZXRGcmFtZVRyZWUoKTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVUcmVlID0gcmVzdWx0LmZyYW1lVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lmcmFtZSAoZnJhbWVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudEZyYW1lVHJlZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEZyYW1lVHJlZS5mcmFtZS5pZCAhPT0gZnJhbWVJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBXZSBhcmUgZm9yY2VkIHRvIGhhbmRsZSBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBhdCBvbmNlXG4gICAgICAgIC8vIGJlY2F1c2UgQ0RQIEFQSSBkb2VzIG5vdCBhbGxvdyBzcGVjaWZ5aW5nIHJlcXVlc3QgZmlsdGVyaW5nIGJlaGF2aW9yIGZvciBkaWZmZXJlbnQgaGFuZGxlcnMuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5lbmFibGUoe1xuICAgICAgICAgICAgcGF0dGVybnM6IEFMTF9SRVFVRVNUU19EQVRBLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuVGFyZ2V0LnNldEF1dG9BdHRhY2goe1xuICAgICAgICAgICAgYXV0b0F0dGFjaDogICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIHdhaXRGb3JEZWJ1Z2dlck9uU3RhcnQ6IHRydWUsXG4gICAgICAgICAgICBmbGF0dGVuOiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIGVuYWJsZSB0aGUgRmV0Y2ggZG9tYWluIGZvciBpZnJhbWUgdGFyZ2V0c1xuICAgICAgICAvLyB0byBpbnRlcmNlcHQgc29tZSByZXF1ZXN0cy4gV2UgbmVlZCB0byB1c2UgdGhlIGBzZXNzaW9uSWRgIG9wdGlvblxuICAgICAgICAvLyBpbiBjb250aW51ZVJlcXVlc3QvY29udGludWVSZXNwb25zZS9mdWxmaWxsUmVxdWVzdCBtZXRob2RzXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5UYXJnZXQub24oJ2F0dGFjaGVkVG9UYXJnZXQnLCBhc3luYyBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0lGcmFtZSAgICAgICAgPSBldmVudC50YXJnZXRJbmZvLnR5cGUgPT09IFRBUkdFVF9JTkZPX1RZUEUuaWZyYW1lO1xuICAgICAgICAgICAgY29uc3QgaXNXb3JrZXIgICAgICAgID0gZXZlbnQudGFyZ2V0SW5mby50eXBlID09PSBUQVJHRVRfSU5GT19UWVBFLndvcmtlcjtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VydmljZVdvcmtlciA9IGV2ZW50LnRhcmdldEluZm8udHlwZSA9PT0gVEFSR0VUX0lORk9fVFlQRS5zZXJ2aWNlV29ya2VyO1xuXG4gICAgICAgICAgICBpZiAoIWlzSUZyYW1lICYmICFpc1dvcmtlciAmJiAhaXNTZXJ2aWNlV29ya2VyKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuUnVudGltZS5ydW5JZldhaXRpbmdGb3JEZWJ1Z2dlcihldmVudC5zZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzSUZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmVuYWJsZSh7IHBhdHRlcm5zOiBBTExfUkVRVUVTVFNfREFUQSB9LCBldmVudC5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKGBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXNgLCBlcnIsIGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuX2NsaWVudC5GZXRjaC5vbigncmVxdWVzdFBhdXNlZCcsIGFzeW5jIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMub3B0aW9ucywgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMpO1xuXG4gICAgICAgICAgICBpZiAoc3BlY2lhbFJlcXVlc3RIYW5kbGVyKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5fY2xpZW50LCB0aGlzLl9pc01haW5XaW5kb3csIHRoaXMub3B0aW9ucywgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVPdGhlclJlcXVlc3RzKGV2ZW50LCBzZXNzaW9uSWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuUGFnZS5vbignZnJhbWVOYXZpZ2F0ZWQnLCBhc3luYyAoZXZlbnQ6IEZyYW1lTmF2aWdhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJWYnLCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdG9wRnJhbWVOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICAgICAgICAgIHx8IGV2ZW50LmZyYW1lLnVybCAhPT0gU1BFQ0lBTF9CTEFOS19QQUdFKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uaW5pdChldmVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJTY3JpcHRzID0gYXdhaXQgdGhpcy5fZ2V0VXNlclNjcmlwdHMoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NBYm91dEJsYW5rUGFnZShldmVudCwgdXNlclNjcmlwdHMsIHRoaXMuY29udGV4dFN0b3JhZ2UsIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5QYWdlLm9uKCdmcmFtZVN0YXJ0ZWRMb2FkaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlQ3VycmVudEZyYW1lVHJlZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuTmV0d29yay5vbignbG9hZGluZ0ZhaWxlZCcsIGFzeW5jIChldmVudDogTG9hZGluZ0ZhaWxlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoJyVsJywgZXZlbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLnB1c2goZXZlbnQucmVxdWVzdElkKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcXVlc3RJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGV2ZW50LnJlcXVlc3RJZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5QYWdlLnNldEJ5cGFzc0NTUCh7IGVuYWJsZWQ6IHRydWUgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlNlY3VyaXR5LmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5TZWN1cml0eS5vbignY2VydGlmaWNhdGVFcnJvcicsIGFzeW5jIChldmVudDogQ2VydGlmaWNhdGVFcnJvckV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvciA9IGV2ZW50O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRSZXF1ZXN0T3B0aW9uc01vZGlmaWVkQnlSZXF1ZXN0SG9vayAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCwgcmVxT3B0czogYW55KTogQ29udGludWVSZXF1ZXN0QXJncyB7XG4gICAgICAgIGlmICghcmVxT3B0cylcbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICBsZXQgbW9kaWZpZXJVcmw6IGFueSA9IHZvaWQgMDtcblxuICAgICAgICBpZiAocmVxT3B0cy5fY2hhbmdlZFVybFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtb2RpZmllclVybCA9IG5ldyBVUkwoZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZWRVcmxQcm9wZXJ0eSBvZiByZXFPcHRzLl9jaGFuZ2VkVXJsUHJvcGVydGllcylcbiAgICAgICAgICAgICAgICBtb2RpZmllclVybFtjaGFuZ2VkVXJsUHJvcGVydHkubmFtZV0gPSBjaGFuZ2VkVXJsUHJvcGVydHkudmFsdWU7XG5cbiAgICAgICAgICAgIG1vZGlmaWVyVXJsID0gbW9kaWZpZXJVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLl9mb3JtYXRIZWFkZXJzRm9yQ29udGludWVSZXNwb25zZShldmVudC5yZXF1ZXN0LmhlYWRlcnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlZEhlYWRlciBvZiByZXFPcHRzLl9jaGFuZ2VkSGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0SGVhZGVyID0gZ2V0SGVhZGVyRW50cnkoaGVhZGVycywgY2hhbmdlZEhlYWRlci5uYW1lKTtcblxuICAgICAgICAgICAgaWYgKHRhcmdldEhlYWRlcilcbiAgICAgICAgICAgICAgICB0YXJnZXRIZWFkZXIudmFsdWUgPSBjaGFuZ2VkSGVhZGVyLnZhbHVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGhlYWRlcnMucHVzaCh7IG5hbWU6IGNoYW5nZWRIZWFkZXIubmFtZSwgdmFsdWU6IGNoYW5nZWRIZWFkZXIudmFsdWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWRIZWFkZXIgb2YgcmVxT3B0cy5fcmVtb3ZlZEhlYWRlcnMpXG4gICAgICAgICAgICByZW1vdmUoaGVhZGVycywgaGVhZGVyID0+IGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHJlbW92ZWRIZWFkZXIubmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHVybDogICAgbW9kaWZpZXJVcmwsXG4gICAgICAgICAgICBtZXRob2Q6IHJlcU9wdHMubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVDb250aW51ZUV2ZW50QXJncyAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCwgcmVxT3B0czogYW55KTogQ29udGludWVSZXF1ZXN0QXJncyB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcG9zdERhdGE6IHRoaXMuX2dldFVwbG9hZFBvc3REYXRhKGV2ZW50KSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVxT3B0cylcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29udGludWVFdmVudEFyZ3MsIHRoaXMuX2dldFJlcXVlc3RPcHRpb25zTW9kaWZpZWRCeVJlcXVlc3RIb29rKGV2ZW50LCByZXFPcHRzKSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVlRXZlbnRBcmdzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvcm1hdEhlYWRlcnNGb3JDb250aW51ZVJlc3BvbnNlIChoZWFkZXJzOiBQcm90b2NvbC5OZXR3b3JrLkhlYWRlcnMpOiBQcm90b2NvbC5GZXRjaC5IZWFkZXJFbnRyeVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBoZWFkZXIgaW4gaGVhZGVycylcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgbmFtZTogaGVhZGVyLCB2YWx1ZTogaGVhZGVyc1toZWFkZXJdIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIl19
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFnQztBQVloQyxxRkFBdUY7QUFDdkYsNkVBQWlGO0FBQ2pGLDhDQUEwRTtBQUMxRSw0RUFBbUQ7QUFFbkQsc0NBS3NCO0FBRXRCLGlFQUF5QztBQVN6Qyw2REFJbUM7QUFFbkMsNkRBTzZCO0FBSTdCLDBFQUEwRDtBQUMxRCx5Q0FJb0I7QUFDcEIsMkRBQWtEO0FBQ2xELDJEQUF3RDtBQUN4RCx3RUFBOEM7QUFDOUMsa0VBQWdFO0FBQ2hFLHNDQUFzRTtBQUV0RSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBb0IsQ0FBQztBQUM1RSxNQUFNLG9CQUFvQixHQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBb0IsQ0FBQztBQUU3RSxNQUFNLGlCQUFpQixHQUFHLENBQUMsb0JBQW9CLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUV4RSxNQUFNLGdCQUFnQixHQUFHO0lBQ3JCLE1BQU0sRUFBUyxRQUFRO0lBQ3ZCLE1BQU0sRUFBUyxRQUFRO0lBQ3ZCLGFBQWEsRUFBRSxnQkFBZ0I7Q0FDbEMsQ0FBQztBQUVGLE1BQXFCLCtCQUFnQyxTQUFRLGtCQUF1QjtJQWVoRixZQUFvQixTQUFpQixFQUFFLFFBQWdCLEVBQUUsTUFBbUIsRUFBRSxZQUFxQixFQUFFLE9BQW9DO1FBQ3JJLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxjQUFjLEdBQWEsSUFBSSx5QkFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFrQixRQUFRLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsR0FBYyxZQUFZLENBQUM7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cm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IExvYWRpbmdGYWlsZWRFdmVudCA9IFByb3RvY29sLk5ldHdvcmsuTG9hZGluZ0ZhaWxlZEV2ZW50O1xuaW1wb3J0IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5pbXBvcnQgRnJhbWVUcmVlID0gUHJvdG9jb2wuUGFnZS5GcmFtZVRyZWU7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IFJlcXVlc3RQYXR0ZXJuID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdHRlcm47XG5pbXBvcnQgQ2VydGlmaWNhdGVFcnJvckV2ZW50ID0gUHJvdG9jb2wuU2VjdXJpdHkuQ2VydGlmaWNhdGVFcnJvckV2ZW50O1xuaW1wb3J0IEhlYWRlckVudHJ5ID0gUHJvdG9jb2wuRmV0Y2guSGVhZGVyRW50cnk7XG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlciBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2V2ZW50LXByb3ZpZGVyJztcbmltcG9ydCBSZXNvdXJjZUluamVjdG9yLCB7IFJlc291cmNlSW5qZWN0b3JPcHRpb25zIH0gZnJvbSAnLi4vcmVzb3VyY2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgY29udmVydFRvSGVhZGVyRW50cmllcywgZ2V0SGVhZGVyRW50cnkgfSBmcm9tICcuLi91dGlscy9oZWFkZXJzJztcbmltcG9ydCBodHRwSGVhZGVycyBmcm9tICcuLi8uLi91dGlscy9odHRwLWhlYWRlcnMnO1xuXG5pbXBvcnQge1xuICAgIGNyZWF0ZVJlcXVlc3RQYXVzZWRFdmVudEZvclJlc3BvbnNlLFxuICAgIGdldFJlcXVlc3RJZCxcbiAgICBpc1JlcXVlc3QsXG4gICAgaXNVbmF1dGhvcml6ZWQsXG59IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5cbmltcG9ydCBFUlJPUl9ST1VURSBmcm9tICcuLi9lcnJvci1yb3V0ZSc7XG5cbmltcG9ydCB7XG4gICAgQ29udGludWVSZXF1ZXN0QXJncyxcbiAgICBTZXNzaW9uSWQsXG4gICAgU2Vzc2lvblN0b3JhZ2VJbmZvLFxuICAgIFNwZWNpYWxTZXJ2aWNlUm91dGVzLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7XG4gICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIsXG4gICAgcmVxdWVzdFBpcGVsaW5lT3RoZXJSZXF1ZXN0TG9nZ2VyLFxufSBmcm9tICcuLi8uLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcblxuaW1wb3J0IHtcbiAgICBJbmNvbWluZ01lc3NhZ2VMaWtlLFxuICAgIGlzUmVkaXJlY3RTdGF0dXNDb2RlLFxuICAgIFNQRUNJQUxfQkxBTktfUEFHRSxcbiAgICBTdG9yYWdlc1NuYXBzaG90LFxuICAgIGluamVjdFVwbG9hZCxcbiAgICBjb250ZW50VHlwZVV0aWxzLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgZ2V0U3BlY2lhbFJlcXVlc3RIYW5kbGVyIGZyb20gJy4vc3BlY2lhbC1oYW5kbGVycyc7XG5pbXBvcnQge1xuICAgIGNvbm5lY3Rpb25SZXNldEd1YXJkLFxuICAgIHNhZmVDb250aW51ZVJlcXVlc3QsXG4gICAgc2FmZUNvbnRpbnVlUmVzcG9uc2UsXG59IGZyb20gJy4vc2FmZS1hcGknO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25BcGlCYXNlIGZyb20gJy4uL2FwaS1iYXNlJztcbmltcG9ydCB7IHJlc2VuZEF1dGhSZXF1ZXN0IH0gZnJvbSAnLi9yZXNlbmRBdXRoUmVxdWVzdCc7XG5pbXBvcnQgVGVzdFJ1bkJyaWRnZSBmcm9tICcuL3Rlc3QtcnVuLWJyaWRnZSc7XG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbyBmcm9tICcuL2NvbnRleHQtaW5mbyc7XG5pbXBvcnQgeyBmYWlsZWRUb0ZpbmRETlNFcnJvciwgc3NsQ2VydGlmaWNhdGVFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmNvbnN0IEFMTF9SRVFVRVNUX1JFU1BPTlNFUyA9IHsgcmVxdWVzdFN0YWdlOiAnUmVxdWVzdCcgfSBhcyBSZXF1ZXN0UGF0dGVybjtcbmNvbnN0IEFMTF9SRVFVRVNUX1JFUVVFU1RTICA9IHsgcmVxdWVzdFN0YWdlOiAnUmVzcG9uc2UnIH0gYXMgUmVxdWVzdFBhdHRlcm47XG5cbmNvbnN0IEFMTF9SRVFVRVNUU19EQVRBID0gW0FMTF9SRVFVRVNUX1JFUVVFU1RTLCBBTExfUkVRVUVTVF9SRVNQT05TRVNdO1xuXG5jb25zdCBUQVJHRVRfSU5GT19UWVBFID0ge1xuICAgIGlmcmFtZTogICAgICAgICdpZnJhbWUnLFxuICAgIHdvcmtlcjogICAgICAgICd3b3JrZXInLFxuICAgIHNlcnZpY2VXb3JrZXI6ICdzZXJ2aWNlX3dvcmtlcicsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lIGV4dGVuZHMgTmF0aXZlQXV0b21hdGlvbkFwaUJhc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3dpbmRvd0lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNNYWluV2luZG93OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlc3RSdW5CcmlkZ2U6IFRlc3RSdW5CcmlkZ2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm87XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjogTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjtcbiAgICBwdWJsaWMgcmVzdG9yaW5nU3RvcmFnZXM6IFN0b3JhZ2VzU25hcHNob3QgfCBudWxsO1xuICAgIHB1YmxpYyBjb250ZXh0U3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VJbmZvIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZUluamVjdG9yOiBSZXNvdXJjZUluamVjdG9yO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICBwcml2YXRlIF9zdG9wcGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2N1cnJlbnRGcmFtZVRyZWU6IEZyYW1lVHJlZSB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmFpbGVkUmVxdWVzdElkczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBfcGVuZGluZ0NlcnRpZmljYXRlRXJyb3I6IENlcnRpZmljYXRlRXJyb3JFdmVudCB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGJyb3dzZXJJZDogc3RyaW5nLCB3aW5kb3dJZDogc3RyaW5nLCBjbGllbnQ6IFByb3RvY29sQXBpLCBpc01haW5XaW5kb3c6IGJvb2xlYW4sIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucykge1xuICAgICAgICBzdXBlcihicm93c2VySWQsIGNsaWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fdGVzdFJ1bkJyaWRnZSAgICAgICAgICAgPSBuZXcgVGVzdFJ1bkJyaWRnZShicm93c2VySWQsIHdpbmRvd0lkKTtcbiAgICAgICAgdGhpcy5fd2luZG93SWQgICAgICAgICAgICAgICAgPSB3aW5kb3dJZDtcbiAgICAgICAgdGhpcy5faXNNYWluV2luZG93ICAgICAgICAgICAgPSBpc01haW5XaW5kb3c7XG4gICAgICAgIHRoaXMuX2NvbnRleHRJbmZvICAgICAgICAgICAgID0gbmV3IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8odGhpcy5fdGVzdFJ1bkJyaWRnZSk7XG4gICAgICAgIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzICAgID0gdGhpcy5fZ2V0U3BlY2lhbFNlcnZpY2VSb3V0ZXMoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgPSBuZXcgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlcigpO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZUluamVjdG9yICAgICAgICA9IG5ldyBSZXNvdXJjZUluamVjdG9yKHRoaXMuX3Rlc3RSdW5CcmlkZ2UpO1xuICAgICAgICB0aGlzLl9zdG9wcGVkICAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVUcmVlICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMgICAgICAgID0gW107XG4gICAgICAgIHRoaXMucmVzdG9yaW5nU3RvcmFnZXMgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb250ZXh0U3RvcmFnZSAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvciA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uc0ZvclJlc291cmNlSW5qZWN0b3IoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRPcHRpb25zRm9yUmVzb3VyY2VJbmplY3RvciAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9jcmVhdGVSZXNvdXJjZUluamVjdG9yT3B0aW9ucygpO1xuXG4gICAgICAgIHRoaXMuX3Jlc291cmNlSW5qZWN0b3Iuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVSZXNvdXJjZUluamVjdG9yT3B0aW9ucyAoKTogUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BlY2lhbFNlcnZpY2VSb3V0ZXM6IHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzLFxuICAgICAgICAgICAgZGV2ZWxvcG1lbnRNb2RlOiAgICAgIHRoaXMub3B0aW9ucy5kZXZlbG9wbWVudE1vZGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U3BlY2lhbFNlcnZpY2VSb3V0ZXMgKCk6IFNwZWNpYWxTZXJ2aWNlUm91dGVzIHtcbiAgICAgICAgY29uc3QgYnJvd3NlckNvbm5lY3Rpb24gPSB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEJyb3dzZXJDb25uZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHByb3h5ICAgICAgICAgICAgID0gYnJvd3NlckNvbm5lY3Rpb24uYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvclBhZ2UxOiAgICAgICAgICBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKEVSUk9SX1JPVVRFLCBwcm94eS5zZXJ2ZXIxSW5mby5kb21haW4pLFxuICAgICAgICAgICAgZXJyb3JQYWdlMjogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMkluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGlkbGVQYWdlOiAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uLmlkbGVVcmwsXG4gICAgICAgICAgICBvcGVuRmlsZVByb3RvY29sVXJsOiBicm93c2VyQ29ubmVjdGlvbi5vcGVuRmlsZVByb3RvY29sVXJsLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU1vY2tFcnJvcklmTmVjZXNzYXJ5IChwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFwaXBlbGluZUNvbnRleHQubW9jay5oYXNFcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQuaGFuZGxlTW9ja0Vycm9yKHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyKTtcblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKCclc1xcbiVzJywgZXZlbnQubmV0d29ya0lkLCBwaXBlbGluZUNvbnRleHQubW9jay5lcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTW9ja1Jlc3BvbnNlIChtb2NrZWRSZXNwb25zZTogSW5jb21pbmdNZXNzYWdlTGlrZSwgcGlwZWxpbmVDb250ZXh0OiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0LCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fc3RvcHBlZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUJvZHlTdHIgPSAobW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoKTtcblxuICAgICAgICBjb25zdCBmdWxmaWxsSW5mbyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBtb2NrZWRSZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKG1vY2tlZFJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICAgICAgYm9keTogICAgICAgICAgICBtb2NrZWRSZXNwb25zZUJvZHlTdHIsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBpcGVsaW5lQ29udGV4dC5yZXFPcHRzLmlzQWpheFxuICAgICAgICAgICAgfHwgIU5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUuX2lzUGFnZShmdWxmaWxsSW5mby5yZXNwb25zZUhlYWRlcnMpKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzTm9uUHJveGllZENvbnRlbnQoZnVsZmlsbEluZm8sIHRoaXMuX2NsaWVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyU2NyaXB0cyA9IGF3YWl0IHRoaXMuX2dldFVzZXJTY3JpcHRzKGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZ2V0SGVhZGVyRW50cnkoZXZlbnQucmVzcG9uc2VIZWFkZXJzLCBodHRwSGVhZGVycy5jb250ZW50VHlwZSk/LnZhbHVlO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NIVE1MUGFnZUNvbnRlbnQoZnVsZmlsbEluZm8sIHtcbiAgICAgICAgICAgICAgICBpc0lmcmFtZTogICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGV4dFN0b3JhZ2U6IHRoaXMuY29udGV4dFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgdXNlclNjcmlwdHMsXG4gICAgICAgICAgICB9LCB0aGlzLl9jbGllbnQsIHNlc3Npb25JZCwgY29udGVudFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcihgc2VudCBtb2NrZWQgcmVzcG9uc2UgZm9yIHRoZSAke2V2ZW50LnJlcXVlc3RJZH1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVDb250aW51ZVJlc3BvbnNlUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgbW9kaWZpZWQ6IGJvb2xlYW4pOiBDb250aW51ZVJlc3BvbnNlUmVxdWVzdCB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgIH0gYXMgQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5cbiAgICAgICAgaWYgKG1vZGlmaWVkKSB7XG4gICAgICAgICAgICBjb250aW51ZVJlc3BvbnNlUmVxdWVzdC5yZXNwb25zZUhlYWRlcnMgPSBldmVudC5yZXNwb25zZUhlYWRlcnM7XG4gICAgICAgICAgICBjb250aW51ZVJlc3BvbnNlUmVxdWVzdC5yZXNwb25zZUNvZGUgICAgPSBldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlVHlwZSA9PT0gJ0RvY3VtZW50J1xuICAgICAgICAgICAgJiYgIXRoaXMuX2lzSWZyYW1lKGV2ZW50LmZyYW1lSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldFVzZXJTY3JpcHRzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50IHwgRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgeyBwaXBlbGluZUNvbnRleHQsIGV2ZW50RmFjdG9yeSB9ID0gdGhpcy5fY29udGV4dEluZm8uZ2V0Q29udGV4dERhdGEoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5wcmVwYXJlSW5qZWN0YWJsZVVzZXJTY3JpcHRzKGV2ZW50RmFjdG9yeSwgdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRVc2VyU2NyaXB0cygpKTtcblxuICAgICAgICByZXR1cm4gcGlwZWxpbmVDb250ZXh0LmluamVjdGFibGVVc2VyU2NyaXB0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9yZXNwb25kVG9PdGhlclJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSBnZXRIZWFkZXJFbnRyeShldmVudC5yZXNwb25zZUhlYWRlcnMsIGh0dHBIZWFkZXJzLmNvbnRlbnRUeXBlKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IHJlc291cmNlSW5mbyA9IGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IuZ2V0RG9jdW1lbnRSZXNvdXJjZUluZm8oZXZlbnQsIHRoaXMuX2NsaWVudCwgY29udGVudFR5cGUpO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZUluZm8uZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucmVkaXJlY3RUb0Vycm9yUGFnZSh0aGlzLl9jbGllbnQsIHJlc291cmNlSW5mby5lcnJvciwgZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlc3BvbnNlKGV2ZW50LCByZXNvdXJjZUluZm8uYm9keSwgdGhpcy5fY29udGV4dEluZm8sIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX25lZWRJbmplY3RSZXNvdXJjZXMoZXZlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxmaWxsSW5mbyA9IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnM6IGV2ZW50LnJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZUNvZGU6ICAgIGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgYm9keTogICAgICAgICAgICAocmVzb3VyY2VJbmZvLmJvZHkgYXMgQnVmZmVyKS50b1N0cmluZygpLFxuICAgICAgICAgICAgfSBhcyBGdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IFN0cmFuZ2UgYmVoYXZpb3Igb2YgdGhlIENEUCBBUEk6XG4gICAgICAgICAgICAvLyBpZiB3ZSBwYXNzIHRoZSBlbXB0eSBcInJlc3BvbnNlU3RhdHVzVGV4dFwiIHZhbHVlLCB3ZSBnZXQgYW4gZXJyb3IgJ0ludmFsaWQgc3RhdHVzIGNvZGUgb3IgcGhyYXNlJy5cbiAgICAgICAgICAgIGlmIChldmVudC5yZXNwb25zZVN0YXR1c1RleHQgIT09ICcnKVxuICAgICAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlUGhyYXNlID0gZXZlbnQucmVzcG9uc2VTdGF0dXNUZXh0O1xuXG4gICAgICAgICAgICBpZiAoaXNVbmF1dGhvcml6ZWQoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcikpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5QXV0aG9yaXplV2l0aEh0dHBCYXNpY0F1dGhDcmVkZW50aWFscyhldmVudCwgZnVsZmlsbEluZm8pO1xuXG4gICAgICAgICAgICBjb25zdCB1c2VyU2NyaXB0cyA9IGF3YWl0IHRoaXMuX2dldFVzZXJTY3JpcHRzKGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzSFRNTFBhZ2VDb250ZW50KFxuICAgICAgICAgICAgICAgIGZ1bGZpbGxJbmZvLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaXNJZnJhbWU6ICAgICAgICAgIHRoaXMuX2lzSWZyYW1lKGV2ZW50LmZyYW1lSWQpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICAgICAgICAgICAgICAgZXZlbnQucmVxdWVzdC51cmwsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmluZ1N0b3JhZ2VzOiB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0U3RvcmFnZTogICAgdGhpcy5jb250ZXh0U3RvcmFnZSxcbiAgICAgICAgICAgICAgICAgICAgdXNlclNjcmlwdHMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnQsIHNlc3Npb25JZCwgY29udGVudFR5cGUpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuXG4gICAgICAgICAgICB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gdGhpcy5fY3JlYXRlQ29udGludWVSZXNwb25zZVJlcXVlc3QoZXZlbnQsIG1vZGlmaWVkKTtcblxuICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVzcG9uc2UodGhpcy5fY2xpZW50LCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9pc1BhZ2UgKHJlc3BvbnNlSGVhZGVyczogSGVhZGVyRW50cnlbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGdldEhlYWRlckVudHJ5KHJlc3BvbnNlSGVhZGVycywgaHR0cEhlYWRlcnMuY29udGVudFR5cGUpPy52YWx1ZTtcblxuICAgICAgICBpZiAoY29udGVudFR5cGUpXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFR5cGVVdGlscy5pc1BhZ2UoY29udGVudFR5cGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX25lZWRJbmplY3RSZXNvdXJjZXMgKGV2ZW50OiBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGV2ZW50LnJlc291cmNlVHlwZSAhPT0gJ0RvY3VtZW50JylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gTmF0aXZlQXV0b21hdGlvblJlcXVlc3RQaXBlbGluZS5faXNQYWdlKGV2ZW50LnJlc3BvbnNlSGVhZGVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJ5QXV0aG9yaXplV2l0aEh0dHBCYXNpY0F1dGhDcmVkZW50aWFscyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgZnVsZmlsbEluZm86IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IHRoaXMuX3Rlc3RSdW4uZ2V0QXV0aENyZWRlbnRpYWxzKCk7XG5cbiAgICAgICAgaWYgKCFjcmVkZW50aWFscylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBhdXRoUmVxdWVzdCA9IGF3YWl0IHJlc2VuZEF1dGhSZXF1ZXN0KGV2ZW50LnJlcXVlc3QsIGNyZWRlbnRpYWxzKTtcblxuICAgICAgICBpZiAodHlwZW9mIGF1dGhSZXF1ZXN0ICE9PSAnc3RyaW5nJyAmJiAhaXNVbmF1dGhvcml6ZWQoYXV0aFJlcXVlc3Quc3RhdHVzKSkge1xuICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VDb2RlICAgID0gYXV0aFJlcXVlc3Quc3RhdHVzO1xuICAgICAgICAgICAgZnVsZmlsbEluZm8uYm9keSAgICAgICAgICAgID0gYXV0aFJlcXVlc3QuYm9keS50b1N0cmluZygpO1xuICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VQaHJhc2UgID0gYXV0aFJlcXVlc3Quc3RhdHVzVGV4dDtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlSGVhZGVycyA9IGNvbnZlcnRUb0hlYWRlckVudHJpZXMoYXV0aFJlcXVlc3QuaGVhZGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVFcnJvciAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IEVycm9yIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yKVxuICAgICAgICAgICAgcmV0dXJuIHNzbENlcnRpZmljYXRlRXJyb3IodGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IuZXJyb3JUeXBlKTtcblxuICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbiA9PT0gJ05hbWVOb3RSZXNvbHZlZCcpXG4gICAgICAgICAgICByZXR1cm4gZmFpbGVkVG9GaW5kRE5TRXJyb3IoZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJ5UmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gJiYgdGhpcy5fc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX2NyZWF0ZUVycm9yKGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucmVkaXJlY3RUb0Vycm9yUGFnZSh0aGlzLl9jbGllbnQsIGVycm9yLCBldmVudC5yZXF1ZXN0LnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzcG9uZFRvT3RoZXJSZXF1ZXN0KGV2ZW50LCBzZXNzaW9uSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5uZXR3b3JrSWQgJiYgdGhpcy5fZmFpbGVkUmVxdWVzdElkcy5pbmNsdWRlcyhldmVudC5uZXR3b3JrSWQpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMsIGV2ZW50Lm5ldHdvcmtJZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU90aGVyUmVxdWVzdHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU90aGVyUmVxdWVzdExvZ2dlcignJXInLCBldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5yZXNwb25zZUVycm9yUmVhc29uICYmIChpc1JlcXVlc3QoZXZlbnQpIHx8IGlzUmVkaXJlY3RTdGF0dXNDb2RlKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSkpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5pbml0KGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXF1ZXN0KGV2ZW50LCB0aGlzLl9jb250ZXh0SW5mbyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IHRoaXMuX2NvbnRleHRJbmZvLmdldFBpcGVsaW5lQ29udGV4dChnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgaWYgKCFwaXBlbGluZUNvbnRleHQgfHwgIXBpcGVsaW5lQ29udGV4dC5tb2NrKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlcXVlc3QodGhpcy5fY2xpZW50LCBldmVudCwgc2Vzc2lvbklkLCB0aGlzLl9jcmVhdGVDb250aW51ZUV2ZW50QXJncyhldmVudCwgcGlwZWxpbmVDb250ZXh0Py5yZXFPcHRzKSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKCdiZWdpbiBtb2NraW5nIHJlcXVlc3QgJXInLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZSA9IGF3YWl0IHBpcGVsaW5lQ29udGV4dC5nZXRNb2NrUmVzcG9uc2UoKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU1vY2tFcnJvcklmTmVjZXNzYXJ5KHBpcGVsaW5lQ29udGV4dCwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2VFdmVudCA9IGNyZWF0ZVJlcXVlc3RQYXVzZWRFdmVudEZvclJlc3BvbnNlKG1vY2tlZFJlc3BvbnNlLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlc3BvbnNlKG1vY2tlZFJlc3BvbnNlRXZlbnQsIG1vY2tlZFJlc3BvbnNlLmdldEJvZHkoKSwgdGhpcy5fY29udGV4dEluZm8sIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVNb2NrUmVzcG9uc2UobW9ja2VkUmVzcG9uc2UsIHBpcGVsaW5lQ29udGV4dCwgZXZlbnQsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuXG4gICAgICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcignZW5kIG1vY2tpbmcgcmVxdWVzdCAlcicsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl90cnlSZXNwb25kVG9PdGhlclJlcXVlc3QoZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VXBsb2FkUG9zdERhdGEgKGV2ZW50OiBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWV2ZW50LnJlcXVlc3QucG9zdERhdGFFbnRyaWVzIHx8ICFldmVudC5yZXF1ZXN0LnBvc3REYXRhRW50cmllcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlSGVhZGVyID0gZXZlbnQucmVxdWVzdC5oZWFkZXJzWydDb250ZW50LVR5cGUnXSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGRhdGFCdWZmZXJzICAgICAgID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBkYXRhRW50cnkgb2YgZXZlbnQucmVxdWVzdC5wb3N0RGF0YUVudHJpZXMpXG4gICAgICAgICAgICBkYXRhQnVmZmVycy5wdXNoKEJ1ZmZlci5mcm9tKGRhdGFFbnRyeS5ieXRlcyA/PyAnJywgJ2Jhc2U2NCcpKTtcblxuICAgICAgICBjb25zdCBwb3N0RGF0YSAgICAgICAgPSBCdWZmZXIuY29uY2F0KGRhdGFCdWZmZXJzKTtcbiAgICAgICAgY29uc3QgYm9keVdpdGhVcGxvYWRzID0gaW5qZWN0VXBsb2FkKGNvbnRlbnRUeXBlSGVhZGVyLCBwb3N0RGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIGJvZHlXaXRoVXBsb2FkcyA/IGJvZHlXaXRoVXBsb2Fkcy50b1N0cmluZygnYmFzZTY0JykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9wRnJhbWVOYXZpZ2F0aW9uIChldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ05hdmlnYXRpb24nXG4gICAgICAgICAgICAmJiAhZXZlbnQuZnJhbWUucGFyZW50SWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlQ3VycmVudEZyYW1lVHJlZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIE5PVEU6IER1ZSB0byBDRFAgcmVzdHJpY3Rpb25zIChpdCBoYW5ncyksIHdlIGNhbid0IGdldCB0aGUgZnJhbWUgdHJlZVxuICAgICAgICAvLyByaWdodCBiZWZvcmUgaW5qZWN0aW5nIHNlcnZpY2Ugc2NyaXB0cy5cbiAgICAgICAgLy8gU28sIHdlIGFyZSBmb3JjZWQgdHJhY2tpbmcgZnJhbWVzIHRyZWUuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2NsaWVudC5QYWdlLmdldEZyYW1lVHJlZSgpO1xuXG4gICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUgPSByZXN1bHQuZnJhbWVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzSWZyYW1lIChmcmFtZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50RnJhbWVUcmVlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50RnJhbWVUcmVlLmZyYW1lLmlkICE9PSBmcmFtZUlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdGFydCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFyZSBmb3JjZWQgdG8gaGFuZGxlIGFsbCByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIGF0IG9uY2VcbiAgICAgICAgLy8gYmVjYXVzZSBDRFAgQVBJIGRvZXMgbm90IGFsbG93IHNwZWNpZnlpbmcgcmVxdWVzdCBmaWx0ZXJpbmcgYmVoYXZpb3IgZm9yIGRpZmZlcmVudCBoYW5kbGVycy5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmVuYWJsZSh7XG4gICAgICAgICAgICBwYXR0ZXJuczogQUxMX1JFUVVFU1RTX0RBVEEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5UYXJnZXQuc2V0QXV0b0F0dGFjaCh7XG4gICAgICAgICAgICBhdXRvQXR0YWNoOiAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgd2FpdEZvckRlYnVnZ2VyT25TdGFydDogdHJ1ZSxcbiAgICAgICAgICAgIGZsYXR0ZW46ICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gZW5hYmxlIHRoZSBGZXRjaCBkb21haW4gZm9yIGlmcmFtZSB0YXJnZXRzXG4gICAgICAgIC8vIHRvIGludGVyY2VwdCBzb21lIHJlcXVlc3RzLiBXZSBuZWVkIHRvIHVzZSB0aGUgYHNlc3Npb25JZGAgb3B0aW9uXG4gICAgICAgIC8vIGluIGNvbnRpbnVlUmVxdWVzdC9jb250aW51ZVJlc3BvbnNlL2Z1bGZpbGxSZXF1ZXN0IG1ldGhvZHNcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlRhcmdldC5vbignYXR0YWNoZWRUb1RhcmdldCcsIGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzSUZyYW1lICAgICAgICA9IGV2ZW50LnRhcmdldEluZm8udHlwZSA9PT0gVEFSR0VUX0lORk9fVFlQRS5pZnJhbWU7XG4gICAgICAgICAgICBjb25zdCBpc1dvcmtlciAgICAgICAgPSBldmVudC50YXJnZXRJbmZvLnR5cGUgPT09IFRBUkdFVF9JTkZPX1RZUEUud29ya2VyO1xuICAgICAgICAgICAgY29uc3QgaXNTZXJ2aWNlV29ya2VyID0gZXZlbnQudGFyZ2V0SW5mby50eXBlID09PSBUQVJHRVRfSU5GT19UWVBFLnNlcnZpY2VXb3JrZXI7XG5cbiAgICAgICAgICAgIGlmICghaXNJRnJhbWUgJiYgIWlzV29ya2VyICYmICFpc1NlcnZpY2VXb3JrZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uUmVzZXRHdWFyZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5SdW50aW1lLnJ1bklmV2FpdGluZ0ZvckRlYnVnZ2VyKGV2ZW50LnNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNJRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuRmV0Y2guZW5hYmxlKHsgcGF0dGVybnM6IEFMTF9SRVFVRVNUU19EQVRBIH0sIGV2ZW50LnNlc3Npb25JZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYFVuaGFuZGxlZCBlcnJvciAlcyBkdXJpbmcgcHJvY2Vzc2luZyAlc2AsIGVyciwgZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5fY2xpZW50LkZldGNoLm9uKCdyZXF1ZXN0UGF1c2VkJywgYXN5bmMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3RvcHBlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlciA9IGdldFNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5vcHRpb25zLCB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyk7XG5cbiAgICAgICAgICAgIGlmIChzcGVjaWFsUmVxdWVzdEhhbmRsZXIpXG4gICAgICAgICAgICAgICAgYXdhaXQgc3BlY2lhbFJlcXVlc3RIYW5kbGVyKGV2ZW50LCB0aGlzLl9jbGllbnQsIHRoaXMuX2lzTWFpbldpbmRvdywgdGhpcy5vcHRpb25zLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU90aGVyUmVxdWVzdHMoZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5QYWdlLm9uKCdmcmFtZU5hdmlnYXRlZCcsIGFzeW5jIChldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKCclZicsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90b3BGcmFtZU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgICAgICAgICAgfHwgZXZlbnQuZnJhbWUudXJsICE9PSBTUEVDSUFMX0JMQU5LX1BBR0UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5pbml0KGV2ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0Fib3V0QmxhbmtQYWdlKGV2ZW50LCB1c2VyU2NyaXB0cywgdGhpcy5jb250ZXh0U3RvcmFnZSwgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlBhZ2Uub24oJ2ZyYW1lU3RhcnRlZExvYWRpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl91cGRhdGVDdXJyZW50RnJhbWVUcmVlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5OZXR3b3JrLm9uKCdsb2FkaW5nRmFpbGVkJywgYXN5bmMgKGV2ZW50OiBMb2FkaW5nRmFpbGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJWwnLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMucHVzaChldmVudC5yZXF1ZXN0SWQpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQucmVxdWVzdElkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZXZlbnQucmVxdWVzdElkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlBhZ2Uuc2V0QnlwYXNzQ1NQKHsgZW5hYmxlZDogdHJ1ZSB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuU2VjdXJpdHkuZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlNlY3VyaXR5Lm9uKCdjZXJ0aWZpY2F0ZUVycm9yJywgYXN5bmMgKGV2ZW50OiBDZXJ0aWZpY2F0ZUVycm9yRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yID0gZXZlbnQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRpc3Bvc2UgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuRmV0Y2guZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlcXVlc3RPcHRpb25zTW9kaWZpZWRCeVJlcXVlc3RIb29rIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50LCByZXFPcHRzOiBhbnkpOiBDb250aW51ZVJlcXVlc3RBcmdzIHtcbiAgICAgICAgaWYgKCFyZXFPcHRzKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgICAgIGxldCBtb2RpZmllclVybDogYW55ID0gdm9pZCAwO1xuXG4gICAgICAgIGlmIChyZXFPcHRzLl9jaGFuZ2VkVXJsUHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyVXJsID0gbmV3IFVSTChldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbmdlZFVybFByb3BlcnR5IG9mIHJlcU9wdHMuX2NoYW5nZWRVcmxQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVXJsW2NoYW5nZWRVcmxQcm9wZXJ0eS5uYW1lXSA9IGNoYW5nZWRVcmxQcm9wZXJ0eS52YWx1ZTtcblxuICAgICAgICAgICAgbW9kaWZpZXJVcmwgPSBtb2RpZmllclVybC50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuX2Zvcm1hdEhlYWRlcnNGb3JDb250aW51ZVJlc3BvbnNlKGV2ZW50LnJlcXVlc3QuaGVhZGVycyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2VkSGVhZGVyIG9mIHJlcU9wdHMuX2NoYW5nZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRIZWFkZXIgPSBnZXRIZWFkZXJFbnRyeShoZWFkZXJzLCBjaGFuZ2VkSGVhZGVyLm5hbWUpO1xuXG4gICAgICAgICAgICBpZiAodGFyZ2V0SGVhZGVyKVxuICAgICAgICAgICAgICAgIHRhcmdldEhlYWRlci52YWx1ZSA9IGNoYW5nZWRIZWFkZXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKHsgbmFtZTogY2hhbmdlZEhlYWRlci5uYW1lLCB2YWx1ZTogY2hhbmdlZEhlYWRlci52YWx1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZEhlYWRlciBvZiByZXFPcHRzLl9yZW1vdmVkSGVhZGVycylcbiAgICAgICAgICAgIHJlbW92ZShoZWFkZXJzLCBoZWFkZXIgPT4gaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcmVtb3ZlZEhlYWRlci5uYW1lKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXJsOiAgICBtb2RpZmllclVybCxcbiAgICAgICAgICAgIG1ldGhvZDogcmVxT3B0cy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbnRpbnVlRXZlbnRBcmdzIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50LCByZXFPcHRzOiBhbnkpOiBDb250aW51ZVJlcXVlc3RBcmdzIHtcbiAgICAgICAgY29uc3QgY29udGludWVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBwb3N0RGF0YTogdGhpcy5fZ2V0VXBsb2FkUG9zdERhdGEoZXZlbnQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXFPcHRzKVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb250aW51ZUV2ZW50QXJncywgdGhpcy5fZ2V0UmVxdWVzdE9wdGlvbnNNb2RpZmllZEJ5UmVxdWVzdEhvb2soZXZlbnQsIHJlcU9wdHMpKTtcblxuICAgICAgICByZXR1cm4gY29udGludWVFdmVudEFyZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybWF0SGVhZGVyc0ZvckNvbnRpbnVlUmVzcG9uc2UgKGhlYWRlcnM6IFByb3RvY29sLk5ldHdvcmsuSGVhZGVycyk6IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5W10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiBoZWFkZXJzKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lOiBoZWFkZXIsIHZhbHVlOiBoZWFkZXJzW2hlYWRlcl0gfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=
@@ -66,10 +66,10 @@ class TestedApp {
66
66
  }
67
67
  async kill() {
68
68
  this._killed = true;
69
- const killPromise = new Promise(resolve => (0, tree_kill_1.default)(this._process.pid, 'SIGTERM', resolve));
69
+ const killPromise = new Promise(resolve => { var _a; return (0, tree_kill_1.default)((_a = this._process.pid) !== null && _a !== void 0 ? _a : 0, 'SIGTERM', resolve); });
70
70
  await killPromise;
71
71
  }
72
72
  }
73
73
  exports.default = TestedApp;
74
74
  module.exports = exports.default;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGVkLWFwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXIvdGVzdGVkLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLCtCQUFrRDtBQUNsRCxpQ0FBZ0Q7QUFDaEQsbUNBQThCO0FBQzlCLDBEQUE2QjtBQUM3QiwwREFBMkI7QUFDM0IsMkRBQW1DO0FBQ25DLCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFDakQsdUdBQTRFO0FBQzVFLGtEQUFnQztBQUVoQyxNQUFNLGVBQWUsR0FBRyxJQUFBLHFDQUF3QixFQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFeEUsTUFBTSxZQUFZLEdBQUcsQ0FBQztJQUNsQixJQUFJLG1CQUFFLENBQUMsR0FBRyxFQUFFO1FBQ1IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO2dCQUM1QixPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBR0wsTUFBcUIsU0FBUztJQVExQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQVksSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQWEsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQU8sSUFBQSxlQUFXLEVBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFPLElBQUEsZUFBVyxFQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFlBQVksR0FBUSxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUUsT0FBZTtRQUMvQixNQUFNLEdBQUcsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQVEsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFhLENBQUMsQ0FBQztRQUU1QyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRW5DLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFhLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsZUFBWSxFQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUUsSUFBSTtZQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QjtRQUNELE9BQU8sR0FBUSxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFDWixPQUFPO1lBRVgsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFekMsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM1RTtJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFFLE9BQWUsRUFBRSxTQUFpQjtRQUNsRCx3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJO2FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFBLGVBQUssRUFBQyxTQUFTLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVk7U0FDcEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFBLG1CQUFJLEVBQUUsSUFBSSxDQUFDLFFBQXlCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRTFHLE1BQU0sV0FBVyxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQWxFRCw0QkFrRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGRlbGltaXRlciBhcyBwYXRoRGVsaW1pdGVyIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjb21tYW5kIGFzIHNwYXduQ29tbWFuZCB9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGtpbGwgZnJvbSAndHJlZS1raWxsJztcbmltcG9ydCBPUyBmcm9tICdvcy1mYW1pbHknO1xuaW1wb3J0IGRlbGF5IGZyb20gJy4uL3V0aWxzL2RlbGF5JztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QgZnJvbSAnLi4vdXRpbHMvcmVzb2x2ZS1wYXRoLXJlbGF0aXZlbHktY3dkJztcbmltcG9ydCBkZWJ1Z0xvZ2dlciBmcm9tICdkZWJ1Zyc7XG5cbmNvbnN0IE1PRFVMRVNfQklOX0RJUiA9IHJlc29sdmVQYXRoUmVsYXRpdmVseUN3ZCgnLi9ub2RlX21vZHVsZXMvLmJpbicpO1xuXG5jb25zdCBFTlZfUEFUSF9LRVkgPSAoZnVuY3Rpb24gKCkge1xuICAgIGlmIChPUy53aW4pIHtcbiAgICAgICAgbGV0IHBhdGhLZXkgPSAnUGF0aCc7XG5cbiAgICAgICAgT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3BhdGgnKVxuICAgICAgICAgICAgICAgIHBhdGhLZXkgPSBrZXk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXRoS2V5O1xuICAgIH1cblxuICAgIHJldHVybiAnUEFUSCc7XG59KSgpO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RlZEFwcCB7XG4gICAgcHJpdmF0ZSBfa2lsbGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3Byb2Nlc3M6IG51bGwgfCBDaGlsZFByb2Nlc3M7XG4gICAgcHJpdmF0ZSBfc3Rkb3V0TG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIF9zdGRlcnJMb2dnZXI6IGRlYnVnLkRlYnVnZ2VyO1xuXG4gICAgcHVibGljIGVycm9yUHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKCkge1xuICAgICAgICB0aGlzLl9wcm9jZXNzICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fa2lsbGVkICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGRvdXRMb2dnZXIgICAgID0gZGVidWdMb2dnZXIoJ3Rlc3RjYWZlOnRlc3RlZC1hcHA6c3Rkb3V0Jyk7XG4gICAgICAgIHRoaXMuX3N0ZGVyckxvZ2dlciAgICAgPSBkZWJ1Z0xvZ2dlcigndGVzdGNhZmU6dGVzdGVkLWFwcDpzdGRlcnInKTtcblxuICAgICAgICB0aGlzLmVycm9yUHJvbWlzZSAgICAgID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ydW4gKGNvbW1hbmQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBlbnYgICAgICAgPSBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudik7XG4gICAgICAgIGNvbnN0IHBhdGggICAgICA9IGVudltFTlZfUEFUSF9LRVldIHx8ICcnO1xuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KHBhdGhEZWxpbWl0ZXIpO1xuXG4gICAgICAgIHBhdGhQYXJ0cy51bnNoaWZ0KE1PRFVMRVNfQklOX0RJUik7XG5cbiAgICAgICAgZW52W0VOVl9QQVRIX0tFWV0gPSBwYXRoUGFydHMuam9pbihwYXRoRGVsaW1pdGVyKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzID0gc3Bhd25Db21tYW5kKGNvbW1hbmQsIHsgc2hlbGw6IHRydWUsIGVudiB9KTtcblxuICAgICAgICBpZiAodGhpcy5fcHJvY2Vzcy5zdGRvdXQpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzLnN0ZG91dC5vbignZGF0YScsIGRhdGEgPT4gdGhpcy5fc3Rkb3V0TG9nZ2VyKFN0cmluZyhkYXRhKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzLnN0ZGVycilcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3Muc3RkZXJyLm9uKCdkYXRhJywgZGF0YSA9PiB0aGlzLl9zdGRlcnJMb2dnZXIoU3RyaW5nKGRhdGEpKSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Byb2Nlc3M7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fa2lsbGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyci5zdGFjayB8fCBTdHJpbmcoZXJyKTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy50ZXN0ZWRBcHBGYWlsZWRXaXRoRXJyb3IsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0IChjb21tYW5kOiBzdHJpbmcsIGluaXREZWxheTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vIE5PVEU6IFdlIHNob3VsZCBub3QgcmVzb2x2ZSBpdCBpZiBubyBlcnJvciB3YXMgdGhyb3duXG4gICAgICAgIHRoaXMuZXJyb3JQcm9taXNlID0gdGhpc1xuICAgICAgICAgICAgLl9ydW4oY29tbWFuZClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IG5ldyBQcm9taXNlKG5vb3ApKTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAgICAgZGVsYXkoaW5pdERlbGF5KSxcbiAgICAgICAgICAgIHRoaXMuZXJyb3JQcm9taXNlLFxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMga2lsbCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2tpbGxlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qga2lsbFByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGtpbGwoKHRoaXMuX3Byb2Nlc3MgYXMgQ2hpbGRQcm9jZXNzKS5waWQsICdTSUdURVJNJywgcmVzb2x2ZSkpO1xuXG4gICAgICAgIGF3YWl0IGtpbGxQcm9taXNlO1xuICAgIH1cbn1cbiJdfQ==
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGVkLWFwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXIvdGVzdGVkLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLCtCQUFrRDtBQUNsRCxpQ0FBZ0Q7QUFDaEQsbUNBQThCO0FBQzlCLDBEQUE2QjtBQUM3QiwwREFBMkI7QUFDM0IsMkRBQW1DO0FBQ25DLCtDQUFpRDtBQUNqRCwyQ0FBaUQ7QUFDakQsdUdBQTRFO0FBQzVFLGtEQUFnQztBQUVoQyxNQUFNLGVBQWUsR0FBRyxJQUFBLHFDQUF3QixFQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFeEUsTUFBTSxZQUFZLEdBQUcsQ0FBQztJQUNsQixJQUFJLG1CQUFFLENBQUMsR0FBRyxFQUFFO1FBQ1IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO2dCQUM1QixPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDO0FBR0wsTUFBcUIsU0FBUztJQVExQjtRQUNJLElBQUksQ0FBQyxRQUFRLEdBQVksSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQWEsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQU8sSUFBQSxlQUFXLEVBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFPLElBQUEsZUFBVyxFQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFlBQVksR0FBUSxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxJQUFJLENBQUUsT0FBZTtRQUMvQixNQUFNLEdBQUcsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQVEsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFhLENBQUMsQ0FBQztRQUU1QyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRW5DLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFhLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsZUFBWSxFQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTlFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUUsSUFBSTtZQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUN2QjtRQUNELE9BQU8sR0FBUSxFQUFFO1lBQ2IsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFDWixPQUFPO1lBRVgsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFekMsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM1RTtJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFFLE9BQWUsRUFBRSxTQUFpQjtRQUNsRCx3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJO2FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDYixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFBLGVBQUssRUFBQyxTQUFTLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVk7U0FDcEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBQyxPQUFBLElBQUEsbUJBQUksRUFBQyxNQUFDLElBQUksQ0FBQyxRQUF5QixDQUFDLEdBQUcsbUNBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQSxFQUFBLENBQUMsQ0FBQztRQUUvRyxNQUFNLFdBQVcsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFsRUQsNEJBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBkZWxpbWl0ZXIgYXMgcGF0aERlbGltaXRlciB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY29tbWFuZCBhcyBzcGF3bkNvbW1hbmQgfSBmcm9tICdleGVjYSc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBraWxsIGZyb20gJ3RyZWUta2lsbCc7XG5pbXBvcnQgT1MgZnJvbSAnb3MtZmFtaWx5JztcbmltcG9ydCBkZWxheSBmcm9tICcuLi91dGlscy9kZWxheSc7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgcmVzb2x2ZVBhdGhSZWxhdGl2ZWx5Q3dkIGZyb20gJy4uL3V0aWxzL3Jlc29sdmUtcGF0aC1yZWxhdGl2ZWx5LWN3ZCc7XG5pbXBvcnQgZGVidWdMb2dnZXIgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBNT0RVTEVTX0JJTl9ESVIgPSByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QoJy4vbm9kZV9tb2R1bGVzLy5iaW4nKTtcblxuY29uc3QgRU5WX1BBVEhfS0VZID0gKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoT1Mud2luKSB7XG4gICAgICAgIGxldCBwYXRoS2V5ID0gJ1BhdGgnO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdwYXRoJylcbiAgICAgICAgICAgICAgICBwYXRoS2V5ID0ga2V5O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcGF0aEtleTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ1BBVEgnO1xufSkoKTtcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0ZWRBcHAge1xuICAgIHByaXZhdGUgX2tpbGxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9wcm9jZXNzOiBudWxsIHwgQ2hpbGRQcm9jZXNzO1xuICAgIHByaXZhdGUgX3N0ZG91dExvZ2dlcjogZGVidWcuRGVidWdnZXI7XG4gICAgcHJpdmF0ZSBfc3RkZXJyTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcblxuICAgIHB1YmxpYyBlcnJvclByb21pc2U6IG51bGwgfCBQcm9taXNlPHZvaWQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgdGhpcy5fcHJvY2VzcyAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuX2tpbGxlZCAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3Rkb3V0TG9nZ2VyICAgICA9IGRlYnVnTG9nZ2VyKCd0ZXN0Y2FmZTp0ZXN0ZWQtYXBwOnN0ZG91dCcpO1xuICAgICAgICB0aGlzLl9zdGRlcnJMb2dnZXIgICAgID0gZGVidWdMb2dnZXIoJ3Rlc3RjYWZlOnRlc3RlZC1hcHA6c3RkZXJyJyk7XG5cbiAgICAgICAgdGhpcy5lcnJvclByb21pc2UgICAgICA9IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcnVuIChjb21tYW5kOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZW52ICAgICAgID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYpO1xuICAgICAgICBjb25zdCBwYXRoICAgICAgPSBlbnZbRU5WX1BBVEhfS0VZXSB8fCAnJztcbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gcGF0aC5zcGxpdChwYXRoRGVsaW1pdGVyKTtcblxuICAgICAgICBwYXRoUGFydHMudW5zaGlmdChNT0RVTEVTX0JJTl9ESVIpO1xuXG4gICAgICAgIGVudltFTlZfUEFUSF9LRVldID0gcGF0aFBhcnRzLmpvaW4ocGF0aERlbGltaXRlcik7XG5cbiAgICAgICAgdGhpcy5fcHJvY2VzcyA9IHNwYXduQ29tbWFuZChjb21tYW5kLCB7IHNoZWxsOiB0cnVlLCBlbnYgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3Byb2Nlc3Muc3Rkb3V0KVxuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzcy5zdGRvdXQub24oJ2RhdGEnLCBkYXRhID0+IHRoaXMuX3N0ZG91dExvZ2dlcihTdHJpbmcoZGF0YSkpKTtcblxuICAgICAgICBpZiAodGhpcy5fcHJvY2Vzcy5zdGRlcnIpXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzLnN0ZGVyci5vbignZGF0YScsIGRhdGEgPT4gdGhpcy5fc3RkZXJyTG9nZ2VyKFN0cmluZyhkYXRhKSkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wcm9jZXNzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2tpbGxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIuc3RhY2sgfHwgU3RyaW5nKGVycik7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMudGVzdGVkQXBwRmFpbGVkV2l0aEVycm9yLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdGFydCAoY29tbWFuZDogc3RyaW5nLCBpbml0RGVsYXk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBXZSBzaG91bGQgbm90IHJlc29sdmUgaXQgaWYgbm8gZXJyb3Igd2FzIHRocm93blxuICAgICAgICB0aGlzLmVycm9yUHJvbWlzZSA9IHRoaXNcbiAgICAgICAgICAgIC5fcnVuKGNvbW1hbmQpXG4gICAgICAgICAgICAudGhlbigoKSA9PiBuZXcgUHJvbWlzZShub29wKSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgICAgIGRlbGF5KGluaXREZWxheSksXG4gICAgICAgICAgICB0aGlzLmVycm9yUHJvbWlzZSxcbiAgICAgICAgXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGtpbGwgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9raWxsZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGtpbGxQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBraWxsKCh0aGlzLl9wcm9jZXNzIGFzIENoaWxkUHJvY2VzcykucGlkID8/IDAsICdTSUdURVJNJywgcmVzb2x2ZSkpO1xuXG4gICAgICAgIGF3YWl0IGtpbGxQcm9taXNlO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getIPAddress = exports.isMyHostname = exports.getFreePort = exports.isFreePort = void 0;
4
+ const net_1 = require("net");
5
+ const address_1 = require("address");
6
+ function createServerOnFreePort() {
7
+ return new Promise(resolve => {
8
+ const server = (0, net_1.createServer)();
9
+ server.once('listening', () => {
10
+ resolve(server);
11
+ });
12
+ server.listen(0);
13
+ });
14
+ }
15
+ function closeServers(servers) {
16
+ return Promise.all(servers.map((server) => {
17
+ return new Promise(resolve => {
18
+ server.once('close', resolve);
19
+ server.close();
20
+ });
21
+ }));
22
+ }
23
+ function checkAvailability(port, hostname) {
24
+ return new Promise(resolve => {
25
+ const server = (0, net_1.createServer)();
26
+ server.once('error', () => {
27
+ resolve(false);
28
+ });
29
+ server.once('listening', () => {
30
+ server.once('close', () => {
31
+ resolve(true);
32
+ });
33
+ server.close();
34
+ });
35
+ server.listen(port, hostname);
36
+ });
37
+ }
38
+ function isFreePort(port) {
39
+ return checkAvailability(port);
40
+ }
41
+ exports.isFreePort = isFreePort;
42
+ function getFreePort() {
43
+ return getFreePorts(1).then(ports => {
44
+ return ports[0];
45
+ });
46
+ }
47
+ exports.getFreePort = getFreePort;
48
+ function getFreePorts(count) {
49
+ const serverPromises = [];
50
+ let ports = [];
51
+ // NOTE: Sequentially collect listening
52
+ // servers to avoid interference.
53
+ for (let i = 0; i < count; i++)
54
+ serverPromises.push(createServerOnFreePort());
55
+ return Promise.all(serverPromises)
56
+ .then(servers => {
57
+ ports = servers.map((server) => {
58
+ return server.address().port;
59
+ });
60
+ return servers;
61
+ })
62
+ .then(closeServers)
63
+ .then(() => {
64
+ return ports;
65
+ });
66
+ }
67
+ function isMyHostname(hostname) {
68
+ return getFreePort()
69
+ .then(port => {
70
+ return checkAvailability(port, hostname);
71
+ });
72
+ }
73
+ exports.isMyHostname = isMyHostname;
74
+ function getIPAddress() {
75
+ return (0, address_1.ip)() || (0, address_1.ipv6)();
76
+ }
77
+ exports.getIPAddress = getIPAddress;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZW5kcG9pbnQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBSWE7QUFDYixxQ0FBbUM7QUFFbkMsU0FBUyxzQkFBc0I7SUFDM0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFZLEdBQUUsQ0FBQztRQUU5QixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBRSxPQUFpQjtJQUNwQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQzlDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFFLElBQVksRUFBRSxRQUFpQjtJQUN2RCxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVksR0FBRSxDQUFDO1FBRTlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUUsSUFBWTtJQUNwQyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFGRCxnQ0FFQztBQUVELFNBQWdCLFdBQVc7SUFDdkIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUpELGtDQUlDO0FBRUQsU0FBUyxZQUFZLENBQUUsS0FBYTtJQUNoQyxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDMUIsSUFBSSxLQUFLLEdBQWMsRUFBRSxDQUFDO0lBRTFCLHVDQUF1QztJQUN2QyxpQ0FBaUM7SUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUU7UUFDMUIsY0FBYyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFFbEQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztTQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDWixLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQ25DLE9BQVEsTUFBTSxDQUFDLE9BQU8sRUFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUUsUUFBZ0I7SUFDMUMsT0FBTyxXQUFXLEVBQUU7U0FDZixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDVCxPQUFPLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUM7QUFMRCxvQ0FLQztBQUVELFNBQWdCLFlBQVk7SUFDeEIsT0FBTyxJQUFBLFlBQUUsR0FBRSxJQUFJLElBQUEsY0FBSSxHQUFFLENBQUM7QUFDMUIsQ0FBQztBQUZELG9DQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZGRyZXNzSW5mbyxcbiAgICBjcmVhdGVTZXJ2ZXIsXG4gICAgU2VydmVyLFxufSBmcm9tICduZXQnO1xuaW1wb3J0IHsgaXAsIGlwdjYgfSBmcm9tICdhZGRyZXNzJztcblxuZnVuY3Rpb24gY3JlYXRlU2VydmVyT25GcmVlUG9ydCAoKTogUHJvbWlzZTxTZXJ2ZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuXG4gICAgICAgIHNlcnZlci5vbmNlKCdsaXN0ZW5pbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHNlcnZlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlci5saXN0ZW4oMCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlU2VydmVycyAoc2VydmVyczogU2VydmVyW10pOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChzZXJ2ZXJzLm1hcCgoc2VydmVyOiBTZXJ2ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgc2VydmVyLm9uY2UoJ2Nsb3NlJywgcmVzb2x2ZSk7XG4gICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfSkpO1xufVxuXG5mdW5jdGlvbiBjaGVja0F2YWlsYWJpbGl0eSAocG9ydDogbnVtYmVyLCBob3N0bmFtZT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG5cbiAgICAgICAgc2VydmVyLm9uY2UoJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlci5vbmNlKCdsaXN0ZW5pbmcnLCAoKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VydmVyLmxpc3Rlbihwb3J0LCBob3N0bmFtZSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZyZWVQb3J0IChwb3J0OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY2hlY2tBdmFpbGFiaWxpdHkocG9ydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcmVlUG9ydCAoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gZ2V0RnJlZVBvcnRzKDEpLnRoZW4ocG9ydHMgPT4ge1xuICAgICAgICByZXR1cm4gcG9ydHNbMF07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEZyZWVQb3J0cyAoY291bnQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCBzZXJ2ZXJQcm9taXNlcyA9IFtdO1xuICAgIGxldCBwb3J0czogbnVtYmVyW10gID0gW107XG5cbiAgICAvLyBOT1RFOiBTZXF1ZW50aWFsbHkgY29sbGVjdCBsaXN0ZW5pbmdcbiAgICAvLyBzZXJ2ZXJzIHRvIGF2b2lkIGludGVyZmVyZW5jZS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspXG4gICAgICAgIHNlcnZlclByb21pc2VzLnB1c2goY3JlYXRlU2VydmVyT25GcmVlUG9ydCgpKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChzZXJ2ZXJQcm9taXNlcylcbiAgICAgICAgLnRoZW4oc2VydmVycyA9PiB7XG4gICAgICAgICAgICBwb3J0cyA9IHNlcnZlcnMubWFwKChzZXJ2ZXI6IFNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoc2VydmVyLmFkZHJlc3MoKSBhcyBBZGRyZXNzSW5mbykucG9ydDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gc2VydmVycztcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oY2xvc2VTZXJ2ZXJzKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcG9ydHM7XG4gICAgICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNeUhvc3RuYW1lIChob3N0bmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGdldEZyZWVQb3J0KClcbiAgICAgICAgLnRoZW4ocG9ydCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2tBdmFpbGFiaWxpdHkocG9ydCwgaG9zdG5hbWUpO1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElQQWRkcmVzcyAoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gaXAoKSB8fCBpcHY2KCk7XG59XG4iXX0=
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "testcafe",
3
3
  "description": "Automated browser testing for the modern web development stack.",
4
4
  "license": "MIT",
5
- "version": "3.6.1",
5
+ "version": "3.6.2",
6
6
  "author": {
7
7
  "name": "Developer Express Inc.",
8
8
  "url": "https://www.devexpress.com/"
@@ -79,7 +79,8 @@
79
79
  "@babel/runtime": "^7.23.2",
80
80
  "@devexpress/bin-v8-flags-filter": "^1.3.0",
81
81
  "@devexpress/callsite-record": "^4.1.6",
82
- "@types/node": "^12.20.10",
82
+ "@types/node": "^20.14.5",
83
+ "address": "^2.0.2",
83
84
  "async-exit-hook": "^1.1.2",
84
85
  "babel-plugin-module-resolver": "5.0.0",
85
86
  "babel-plugin-syntax-trailing-function-commas": "^6.22.0",
@@ -98,7 +99,6 @@
98
99
  "elegant-spinner": "^1.0.1",
99
100
  "email-validator": "^2.0.4",
100
101
  "emittery": "^0.4.1",
101
- "endpoint-utils": "^1.0.2",
102
102
  "error-stack-parser": "^2.1.4",
103
103
  "execa": "^4.0.3",
104
104
  "get-os-info": "^1.0.2",