system-testing 1.0.79 → 1.0.83

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.
@@ -31,6 +31,9 @@ import Browser from "./browser.js";
31
31
  * @property {boolean | null} [visible] Whether to require elements to be visible (`true`) or hidden (`false`). Use `null` to disable visibility filtering.
32
32
  * @property {boolean} [useBaseSelector] Whether to scope by the base selector.
33
33
  */
34
+ /**
35
+ * @typedef {FindArgs & {withFallback?: boolean}} InteractArgs
36
+ */
34
37
  /**
35
38
  * @typedef {object} WaitForNoSelectorArgs
36
39
  * @property {boolean} [useBaseSelector] Whether to scope by the base selector.
@@ -361,7 +364,7 @@ class SystemTest extends Browser {
361
364
  /**
362
365
  * Interacts with an element by calling a method on it with the given arguments.
363
366
  * Retrying on ElementNotInteractableError, ElementClickInterceptedError, or StaleElementReferenceError.
364
- * @param {import("selenium-webdriver").WebElement|string|{selector: string} & FindArgs} elementOrIdentifier The element or a CSS selector to find the element.
367
+ * @param {import("selenium-webdriver").WebElement|string|{selector: string} & InteractArgs} elementOrIdentifier The element or a CSS selector to find the element.
365
368
  * @param {string} methodName The method name to call on the element.
366
369
  * @param {...any} args Arguments to pass to the method.
367
370
  * @returns {Promise<any>}
@@ -736,4 +739,4 @@ class SystemTest extends Browser {
736
739
  }
737
740
  SystemTest.rootPath = "/blank?systemTest=true";
738
741
  export default SystemTest;
739
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3lzdGVtLXRlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxNQUFNLE1BQU0sNkNBQTZDLENBQUE7QUFDaEUsT0FBTyxlQUFlLE1BQU0sb0VBQW9FLENBQUE7QUFDaEcsT0FBTyxzQkFBc0IsTUFBTSwrQkFBK0IsQ0FBQTtBQUNsRSxPQUFPLG9CQUFvQixNQUFNLDhCQUE4QixDQUFBO0FBQy9ELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFDaEMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLElBQUksQ0FBQTtBQUNsQyxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUE7QUFFbEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7O0dBR0c7QUFDSDs7O0dBR0c7QUFFSCxNQUFxQixVQUFXLFNBQVEsT0FBTztJQWdCN0M7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEVBQUU7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUE7SUFDOUIsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7UUFDN0QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLElBQUk7UUFDdEIsSUFBSSxJQUFJLFlBQVksS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUM5QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUNyRixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUV6QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRXpFLElBQUksVUFBVSxZQUFZLEtBQUssSUFBSSxPQUFPLFVBQVUsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQTtRQUNwRyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVE7WUFBRSxPQUFPLFVBQVUsQ0FBQTtRQUVyRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLElBQUk7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTlDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFBO1lBQzlELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQTtRQUNoRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDM0QsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSDs7Ozs7O09BTUc7SUFDSDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRO1FBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUNyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV2RSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7UUFDdkQsQ0FBQztRQUVELFVBQVUsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUNwRCxNQUFNLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxLQUFNLEVBQUUsWUFBWSxFQUFFLGdEQUFnRCxFQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDMUcsTUFBTSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUE7UUFDdEUsQ0FBQyxDQUFDLENBQUE7UUFFRixVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUV6QyxVQUFVLENBQUMsUUFBUSxDQUFDLGtDQUFrQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ2pFLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNwQyxVQUFVLENBQUMsUUFBUSxDQUFDLDBCQUEwQixRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQztZQUNILFVBQVUsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtZQUM3QyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7WUFDcEUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1lBRXRDLFVBQVUsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUN2QyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2xDLFVBQVUsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUMvQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFVBQVUsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDN0csTUFBTSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUE7WUFFakMsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksRUFBQyxJQUFJLEdBQUcsV0FBVyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsUUFBUSxHQUFHLFdBQVcsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUM7UUFDdFAsS0FBSyxDQUFDLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFySXhCLGlEQUFpRDtRQUNqRCxpQkFBWSxHQUFHLFNBQVMsQ0FBQTtRQUV4QixhQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ2hCLGNBQVMsR0FBRyxXQUFXLENBQUE7UUFDdkIsY0FBUyxHQUFHLElBQUksQ0FBQTtRQUNoQixrREFBa0Q7UUFDbEQsaUJBQVksR0FBRyxTQUFTLENBQUE7UUFDeEIsMENBQTBDO1FBQzFDLGlCQUFZLEdBQUcsU0FBUyxDQUFBO1FBQ3hCLDBDQUEwQztRQUMxQyxjQUFTLEdBQUcsU0FBUyxDQUFBO1FBc2xCckI7Ozs7V0FJRztRQUNILHNCQUFpQixHQUFHLEtBQUssRUFBRSxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtZQUN0QixJQUFJLE1BQU0sQ0FBQTtZQUVWLElBQUksSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUM1QixNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFakQsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMzQyxDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDeEIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtZQUN0RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDN0UsQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQyxDQUFBO1FBRUQ7Ozs7V0FJRztRQUNILDBCQUFxQixHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtZQUNaLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFBO1lBQzlCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUUvQixtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFFMUQsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFBO1lBRTlELElBQUksSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFBO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQTtnQkFDaEQsT0FBTyxJQUFJLENBQUMsbUNBQW1DLENBQUE7WUFDakQsQ0FBQztRQUNILENBQUMsQ0FBQTtRQUVELHNCQUFzQjtRQUN0QixxQkFBZ0IsR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7WUFDZCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQTtZQUVoQyxJQUFJLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxDQUFBO2dCQUNoRyxPQUFPLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQTtnQkFDL0MsT0FBTyxJQUFJLENBQUMsb0NBQW9DLENBQUE7WUFDbEQsQ0FBQztRQUNILENBQUMsQ0FBQTtRQXZoQkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUxQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDbEUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUE7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUE7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFckMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBRXBCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksc0JBQXNCLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtRQUNuRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFlBQVk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7UUFFMUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN2QixNQUFNLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsWUFBWSxFQUFFLDZDQUE2QyxFQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNsSixDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO0lBQ2xGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxLQUFLO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLGtFQUFrRSxDQUFDLENBQUE7UUFDakYsTUFBTSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSwrQ0FBK0MsRUFBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBQyxDQUFDLENBQUE7UUFDdEUsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLDREQUE0RCxDQUFDLENBQUE7UUFFM0U7OztXQUdHO1FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFVBQVUsS0FBSyxDQUFDLENBQUE7UUFFdEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFBO1FBQ2xELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUVqRSxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLG1EQUFtRCxtQkFBbUIsQ0FBQyxNQUFNLGFBQWEsQ0FBQyxDQUFBO1lBQ3pHLE9BQU8sbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzVELENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLHlGQUF5RixlQUFlLEVBQUUsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFdkksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQTtRQUM1RCxDQUFDO1FBRUQsSUFBSSxXQUFXLENBQUE7UUFDZixNQUFNLGVBQWUsR0FBRyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQTtZQUNuRCxDQUFDO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHdDQUF3QyxFQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzNJLFdBQVcsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQzt3QkFBRSxPQUFNO29CQUNqQyxlQUFlLEVBQUUsQ0FBQTtvQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFBO29CQUM3RCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQ2pCLENBQUMsQ0FBQTtnQkFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1lBQ2pELENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDTCxDQUFDO2dCQUFTLENBQUM7WUFDVCxlQUFlLEVBQUUsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDM0IsT0FBTyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSTtRQUNuQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUM1QixPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJO1FBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ2xDLE9BQU8sTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJO1FBQ3JELE9BQU8sTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUE7SUFDekYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDdkMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBRWpCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDckMsS0FBSyxHQUFHLElBQUksQ0FBQTtRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0YsU0FBUztZQUNYLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssQ0FBQTtZQUNiLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUN6QyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUN4QixNQUFNLDJCQUEyQixHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsRUFBRSxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQ25ILE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFBO1FBRW5DLEtBQUssTUFBTSwwQkFBMEIsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sMEJBQTBCLENBQUMsT0FBTyxFQUFFLENBQUE7WUFFdkQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFFRCxPQUFPLHdCQUF3QixDQUFBO0lBQ2pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNwRSxNQUFNLEVBQUMsT0FBTyxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBQyxHQUFHLElBQUksQ0FBQTtRQUUxQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN6RSxDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sK0JBQStCLEdBQUcsRUFBRSxDQUFBO1FBQzFDLElBQUksK0JBQStCLENBQUE7UUFDbkMsSUFBSSw2QkFBNkIsQ0FBQTtRQUVqQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN2QixNQUFNLDJCQUEyQixHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1lBRXBILEtBQUssTUFBTSwwQkFBMEIsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO2dCQUNyRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLGtDQUFrQyxFQUFFLDBCQUEwQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxDQUFBO2dCQUV4TCxJQUFJLENBQUMsK0JBQStCLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztvQkFDbkUsK0JBQStCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUE7Z0JBQzNELENBQUM7Z0JBRUQsSUFBSSxtQkFBbUIsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO29CQUN2RCwrQkFBK0IsR0FBRywwQkFBMEIsQ0FBQTtvQkFDNUQsNkJBQTZCLEdBQUcsTUFBTSwwQkFBMEIsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7b0JBQzNGLE9BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QiwyQkFBMkIsd0JBQXdCLCtCQUErQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUksQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLCtCQUErQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQy9DLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxPQUFPLENBQUMsQ0FBQSxDQUFDLG1DQUFtQztZQUNqRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7WUFFRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvREFBb0QsNkJBQTZCLElBQUksRUFBRSxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFBO1FBQy9JLENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLEtBQUssQ0FBQywyQkFBMkI7UUFDL0IsTUFBTSwyQkFBMkIsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMscUNBQXFDLEVBQUUsRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUVuSCxLQUFLLE1BQU0sMEJBQTBCLElBQUksMkJBQTJCLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUVELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFDQUFxQyxFQUFFLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7SUFDL0YsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRXBDOzs7T0FHRztJQUNILEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUM3QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixLQUFLLFFBQVEsQ0FBQTtRQUU5RCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFBO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUN4QyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQzlELENBQUM7YUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUE7WUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFFM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUNyRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztnQkFDbkQsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7YUFDaEMsQ0FBQyxDQUFBO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtZQUM1QyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFDLENBQUMsQ0FBQTtZQUNoRixJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUE7UUFDMUYsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDaEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUUvQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRXZDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDMUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFFekMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLDJFQUEyRTtZQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUE7WUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ25DLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixRQUFRLEVBQUUsQ0FBQyxDQUFBO1lBRTlDLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLG1DQUFtQyxDQUFDLENBQUE7Z0JBQ2xELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtnQkFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO2dCQUVoRCxJQUFJLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLENBQUE7Z0JBQy9DLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtnQkFDMUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFBO2dCQUNuRixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzRUFBc0UsQ0FBQyxDQUFBO2dCQUNyRixNQUFNLEtBQUssQ0FBQTtZQUNiLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLCtDQUErQyxDQUFDLENBQUE7Z0JBQzlELE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtnQkFDMUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO1lBQzlELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsc0VBQXNFLENBQUMsQ0FBQTtnQkFDckYsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsd0VBQXdFLENBQUMsQ0FBQTtnQkFDdkYsTUFBTSxLQUFLLENBQUE7WUFDYixDQUFDO1FBQ0gsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLG1EQUFtRCxDQUFDLENBQUE7UUFDbEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQ3ZDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO1FBRTNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO1lBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsOERBQThELENBQUMsQ0FBQTtZQUNwRixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUE7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQTtRQUU5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFDNUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUFFLE9BQU07WUFDakQsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzdDLENBQUMsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSxlQUFlLEVBQUUsQ0FBQztZQUM3QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN6QyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3pCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO1FBRTNELElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFFcEQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxzQkFBc0I7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSx1REFBdUQsRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMzSSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDWixPQUFPLEVBQUUsQ0FBQTtvQkFDVCxPQUFNO2dCQUNSLENBQUM7Z0JBRUQsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLE1BQU0sQ0FBQTtnQkFDakQsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLE9BQU8sQ0FBQTtZQUNyRCxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQTtZQUMvQyxPQUFPLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQTtZQUNoRCxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7WUFFdEIsSUFBSSxJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDbkcsT0FBTyxJQUFJLENBQUMsbUNBQW1DLENBQUE7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDLG9DQUFvQyxDQUFBO1lBQ2xELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLFFBQVE7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQTtJQUNwQyxDQUFDO0lBaUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxJQUFJO1FBQ2QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTTtRQUV4QyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFekQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLFNBQVMsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDdkUsQ0FBQztRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDMUIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ2YsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDaEIsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQTtRQUMxRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDakMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsTUFBTSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxtQ0FBbUMsRUFBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUN0SixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1FBRWpCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFBO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDMUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQTtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQTtRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFBO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUE7UUFDakMsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLFNBQVMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsb0NBQW9DLEdBQUcsU0FBUyxDQUFBO1FBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUMsQ0FBQyxDQUFBO1FBQ25GLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXZDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNyQixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLGtCQUFrQjtRQUN4RCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU07UUFFaEIsTUFBTSxPQUFPLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsS0FBSyxFQUFFLEVBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0ksSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFBO1lBQ25CLE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQztvQkFDSCxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ3BCLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLDRCQUE0QjtnQkFDOUIsQ0FBQztZQUNILENBQUMsQ0FBQTtZQUNELE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUMvQixJQUFJLE9BQU87b0JBQUUsT0FBTTtnQkFDbkIsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDZixDQUFDLENBQUE7WUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUN4QyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ25ELElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDdEMsQ0FBQztZQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxLQUFLO29CQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7O29CQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDdEIsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQzs7QUFyd0JNLG1CQUFRLEdBQUcsd0JBQXdCLEFBQTNCLENBQTJCO2VBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBTZXJ2ZXIgZnJvbSBcInNjb3VuZHJlbC1yZW1vdGUtZXZhbC9idWlsZC9zZXJ2ZXIvaW5kZXguanNcIlxuaW1wb3J0IFNlcnZlcldlYlNvY2tldCBmcm9tIFwic2NvdW5kcmVsLXJlbW90ZS1ldmFsL2J1aWxkL3NlcnZlci9jb25uZWN0aW9ucy93ZWItc29ja2V0L2luZGV4LmpzXCJcbmltcG9ydCBTeXN0ZW1UZXN0Q29tbXVuaWNhdG9yIGZyb20gXCIuL3N5c3RlbS10ZXN0LWNvbW11bmljYXRvci5qc1wiXG5pbXBvcnQgU3lzdGVtVGVzdEh0dHBTZXJ2ZXIgZnJvbSBcIi4vc3lzdGVtLXRlc3QtaHR0cC1zZXJ2ZXIuanNcIlxuaW1wb3J0IHt3YWl0Rm9yfSBmcm9tIFwiYXdhaXRlcnlcIlxuaW1wb3J0IHRpbWVvdXQgZnJvbSBcImF3YWl0ZXJ5L2J1aWxkL3RpbWVvdXQuanNcIlxuaW1wb3J0IHtXZWJTb2NrZXRTZXJ2ZXJ9IGZyb20gXCJ3c1wiXG5pbXBvcnQgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTeXN0ZW1UZXN0QXJnc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtob3N0XSBIb3N0bmFtZSBmb3IgdGhlIGFwcCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvcnRdIFBvcnQgZm9yIHRoZSBhcHAgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtodHRwSG9zdF0gSG9zdG5hbWUgZm9yIHRoZSBzdGF0aWMgSFRUUCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2h0dHBQb3J0XSBQb3J0IGZvciB0aGUgc3RhdGljIEhUVFAgc2VydmVyLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtodHRwQ29ubmVjdEhvc3RdIEhvc3RuYW1lIHVzZWQgYnkgdGhlIGRyaXZlciB0byByZWFjaCB0aGUgSFRUUCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkZWJ1Z10gRW5hYmxlIGRlYnVnIGxvZ2dpbmcuXG4gKiBAcHJvcGVydHkgeyhlcnJvcjogYW55KSA9PiBib29sZWFufSBbZXJyb3JGaWx0ZXJdIEZpbHRlciBmb3IgYnJvd3NlciBlcnJvcnMgKHJldHVybiBmYWxzZSB0byBpZ25vcmUpLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbdXJsQXJnc10gUXVlcnkgcGFyYW1zIGFwcGVuZGVkIHRvIHRoZSByb290IHBhdGguXG4gKiBAcHJvcGVydHkge1N5c3RlbVRlc3REcml2ZXJDb25maWd9IFtkcml2ZXJdIERyaXZlciBjb25maWd1cmF0aW9uLlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5c3RlbVRlc3REcml2ZXJDb25maWdcbiAqIEBwcm9wZXJ0eSB7XCJzZWxlbml1bVwifFwiYXBwaXVtXCJ9IFt0eXBlXSBEcml2ZXIgaW1wbGVtZW50YXRpb24gdG8gdXNlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb3B0aW9uc10gRHJpdmVyLXNwZWNpZmljIG9wdGlvbnMuXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmluZEFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbdGltZW91dF0gT3ZlcnJpZGUgdGltZW91dCBmb3IgbG9va3VwLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbH0gW3Zpc2libGVdIFdoZXRoZXIgdG8gcmVxdWlyZSBlbGVtZW50cyB0byBiZSB2aXNpYmxlIChgdHJ1ZWApIG9yIGhpZGRlbiAoYGZhbHNlYCkuIFVzZSBgbnVsbGAgdG8gZGlzYWJsZSB2aXNpYmlsaXR5IGZpbHRlcmluZy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZUJhc2VTZWxlY3Rvcl0gV2hldGhlciB0byBzY29wZSBieSB0aGUgYmFzZSBzZWxlY3Rvci5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBXYWl0Rm9yTm9TZWxlY3RvckFyZ3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3VzZUJhc2VTZWxlY3Rvcl0gV2hldGhlciB0byBzY29wZSBieSB0aGUgYmFzZSBzZWxlY3Rvci5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25NZXNzYWdlQXJnc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzbWlzc10gV2hldGhlciB0byBkaXNtaXNzIHRoZSBub3RpZmljYXRpb24gYWZ0ZXIgaXQgYXBwZWFycy5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeXN0ZW1UZXN0IGV4dGVuZHMgQnJvd3NlciB7XG4gIHN0YXRpYyByb290UGF0aCA9IFwiL2JsYW5rP3N5c3RlbVRlc3Q9dHJ1ZVwiXG5cbiAgLyoqIEB0eXBlIHtTeXN0ZW1UZXN0Q29tbXVuaWNhdG9yIHwgdW5kZWZpbmVkfSAqL1xuICBjb21tdW5pY2F0b3IgPSB1bmRlZmluZWRcblxuICBfc3RhcnRlZCA9IGZhbHNlXG4gIF9odHRwSG9zdCA9IFwibG9jYWxob3N0XCJcbiAgX2h0dHBQb3J0ID0gMTk4NFxuICAvKiogQHR5cGUgeyhlcnJvcjogYW55KSA9PiBib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBfZXJyb3JGaWx0ZXIgPSB1bmRlZmluZWRcbiAgLyoqIEB0eXBlIHtXZWJTb2NrZXRTZXJ2ZXIgfCB1bmRlZmluZWR9ICovXG4gIHNjb3VuZHJlbFdzcyA9IHVuZGVmaW5lZFxuICAvKiogQHR5cGUge1dlYlNvY2tldFNlcnZlciB8IHVuZGVmaW5lZH0gKi9cbiAgY2xpZW50V3NzID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc3lzdGVtIHRlc3QgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTeXN0ZW1UZXN0QXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtTeXN0ZW1UZXN0fVxuICAgKi9cbiAgc3RhdGljIGN1cnJlbnQoYXJncyA9IHt9KSB7XG4gICAgaWYgKCFnbG9iYWxUaGlzLnN5c3RlbVRlc3QpIHtcbiAgICAgIGdsb2JhbFRoaXMuc3lzdGVtVGVzdCA9IG5ldyBTeXN0ZW1UZXN0KGFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuc3lzdGVtVGVzdFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtTeXN0ZW1UZXN0Q29tbXVuaWNhdG9yfSAqL1xuICBnZXRDb21tdW5pY2F0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmNvbW11bmljYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tbXVuaWNhdG9yIGhhc24ndCBiZWVuIGluaXRpYWxpemVkIHlldFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbW11bmljYXRvclxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGFuIGVycm9yIG1lc3NhZ2UgaWYgcG9zc2libGUgZnJvbSB0aGUgcGF5bG9hZCBzZW50IGZyb20gdGhlIGJyb3dzZXIuXG4gICAqIEBwYXJhbSB7e21lc3NhZ2U/OiBzdHJpbmcsIHZhbHVlPzogYW55W119IHwgRXJyb3J9IGRhdGFcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGV4dHJhY3RFcnJvck1lc3NhZ2UoZGF0YSkge1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiBkYXRhLm1lc3NhZ2VcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGRhdGEubWVzc2FnZVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGRhdGFcblxuICAgIGNvbnN0IGZpcnN0VmFsdWUgPSBBcnJheS5pc0FycmF5KGRhdGE/LnZhbHVlKSA/IGRhdGEudmFsdWVbMF0gOiB1bmRlZmluZWRcblxuICAgIGlmIChmaXJzdFZhbHVlIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZW9mIGZpcnN0VmFsdWUubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0VmFsdWUubWVzc2FnZVxuICAgIGlmICh0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGZpcnN0VmFsdWVcblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgYnJvd3NlciBlcnJvciBzaG91bGQgYmUgaWdub3JlZCBiYXNlZCBvbiBidWlsdC1pbiBydWxlcyBhbmQgYW4gb3B0aW9uYWwgZXJyb3IgZmlsdGVyLlxuICAgKiBAcGFyYW0ge3ttZXNzYWdlPzogc3RyaW5nLCB2YWx1ZT86IGFueVtdfX0gZGF0YVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNob3VsZElnbm9yZUVycm9yKGRhdGEpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5leHRyYWN0RXJyb3JNZXNzYWdlKGRhdGEpXG5cbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiTWluaWZpZWQgUmVhY3QgZXJyb3IgIzQxOFwiKSkgcmV0dXJuIHRydWVcbiAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiTWluaWZpZWQgUmVhY3QgZXJyb3IgIzQxOVwiKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXJyb3JGaWx0ZXIgJiYgdGhpcy5fZXJyb3JGaWx0ZXIoZGF0YSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeXN0ZW0gdGVzdFxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtmdW5jdGlvbihTeXN0ZW1UZXN0KTogUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICAvKipcbiAgICogUnVucyBhIHN5c3RlbSB0ZXN0XG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge1N5c3RlbVRlc3RBcmdzfSBhcmdzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oU3lzdGVtVGVzdCk6IFByb21pc2U8dm9pZD59IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeXN0ZW0gdGVzdFxuICAgKiBAcGFyYW0ge1N5c3RlbVRlc3RBcmdzIHwgZnVuY3Rpb24oU3lzdGVtVGVzdCk6IFByb21pc2U8dm9pZD59IFthcmdzXVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFN5c3RlbVRlc3QpOiBQcm9taXNlPHZvaWQ+fSBbY2FsbGJhY2tdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJ1bihhcmdzLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHJlc29sdmVkQ2FsbGJhY2sgPSB0eXBlb2YgYXJncyA9PT0gXCJmdW5jdGlvblwiID8gYXJncyA6IGNhbGxiYWNrXG4gICAgY29uc3Qgc3lzdGVtVGVzdCA9IHRoaXMuY3VycmVudCh0eXBlb2YgYXJncyA9PT0gXCJmdW5jdGlvblwiID8ge30gOiBhcmdzKVxuXG4gICAgaWYgKCFyZXNvbHZlZENhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeXN0ZW1UZXN0LnJ1biByZXF1aXJlcyBhIGNhbGxiYWNrXCIpXG4gICAgfVxuXG4gICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhcIlJ1biBzdGFydGVkIC0gc2VuZCBpbml0aWFsaXplXCIpXG4gICAgYXdhaXQgdGltZW91dCh7dGltZW91dDogMTBfMDAwLCBlcnJvck1lc3NhZ2U6IFwiU2VuZGluZyBpbnRpYWxpemUgdG8gdXNlU3lzdGVtVGVzdCgpIHRpbWVkIG91dFwifSwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgc3lzdGVtVGVzdC5nZXRDb21tdW5pY2F0b3IoKS5zZW5kQ29tbWFuZCh7dHlwZTogXCJpbml0aWFsaXplXCJ9KVxuICAgIH0pXG5cbiAgICBzeXN0ZW1UZXN0LmRlYnVnTG9nKFwiZ2V0Um9vdFBhdGhcIilcbiAgICBjb25zdCByb290UGF0aCA9IHN5c3RlbVRlc3QuZ2V0Um9vdFBhdGgoKVxuXG4gICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhgVmlzaXQgcm9vdFBhdGggd2l0aCBkaXNtaXNzVG86ICR7cm9vdFBhdGh9YClcbiAgICBhd2FpdCBzeXN0ZW1UZXN0LmRpc21pc3NUbyhyb290UGF0aClcbiAgICBzeXN0ZW1UZXN0LmRlYnVnTG9nKGBEaXNtaXNzZWQgdG8gcm9vdCBwYXRoICR7cm9vdFBhdGh9YClcblxuICAgIHRyeSB7XG4gICAgICBzeXN0ZW1UZXN0LmRlYnVnTG9nKFwiZmluZEJ5VGVzdElEIGJsYW5rVGV4dFwiKVxuICAgICAgYXdhaXQgc3lzdGVtVGVzdC5maW5kQnlUZXN0SUQoXCJibGFua1RleHRcIiwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuICAgICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhcIkZvdW5kIGJsYW5rVGV4dFwiKVxuXG4gICAgICBzeXN0ZW1UZXN0LmRlYnVnTG9nKFwicmVzb2x2ZWRDYWxsYmFja1wiKVxuICAgICAgYXdhaXQgcmVzb2x2ZWRDYWxsYmFjayhzeXN0ZW1UZXN0KVxuICAgICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhcIlJ1biBjYWxsYmFjayBjb21wbGV0ZWRcIilcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhgUnVuIGVycm9yIGNhdWdodCwgdGFraW5nIHNjcmVlbnNob3Q6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcn1gKVxuICAgICAgYXdhaXQgc3lzdGVtVGVzdC50YWtlU2NyZWVuc2hvdCgpXG5cbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU3lzdGVtVGVzdCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1N5c3RlbVRlc3RBcmdzfSBbYXJnc11cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtob3N0ID0gXCJsb2NhbGhvc3RcIiwgcG9ydCA9IDgwODEsIGh0dHBIb3N0ID0gXCJsb2NhbGhvc3RcIiwgaHR0cFBvcnQgPSAxOTg0LCBodHRwQ29ubmVjdEhvc3QsIGRlYnVnID0gZmFsc2UsIGVycm9yRmlsdGVyLCB1cmxBcmdzLCBkcml2ZXIsIC4uLnJlc3RBcmdzfSA9IHtob3N0OiBcImxvY2FsaG9zdFwiLCBwb3J0OiA4MDgxLCBodHRwSG9zdDogXCJsb2NhbGhvc3RcIiwgaHR0cFBvcnQ6IDE5ODQsIGRlYnVnOiBmYWxzZX0pIHtcbiAgICBzdXBlcih7ZGVidWcsIGRyaXZlcn0pXG5cbiAgICBjb25zdCByZXN0QXJnc0tleXMgPSBPYmplY3Qua2V5cyhyZXN0QXJncylcblxuICAgIGlmIChyZXN0QXJnc0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFyZ3VtZW50czogJHtyZXN0QXJnc0tleXMuam9pbihcIiwgXCIpfWApXG4gICAgfVxuXG4gICAgdGhpcy5faG9zdCA9IGhvc3RcbiAgICB0aGlzLl9wb3J0ID0gcG9ydFxuICAgIHRoaXMuX2h0dHBIb3N0ID0gaHR0cEhvc3RcbiAgICB0aGlzLl9odHRwUG9ydCA9IGh0dHBQb3J0XG4gICAgdGhpcy5faHR0cENvbm5lY3RIb3N0ID0gaHR0cENvbm5lY3RIb3N0XG4gICAgdGhpcy5fZGVidWcgPSBkZWJ1Z1xuICAgIHRoaXMuX2Vycm9yRmlsdGVyID0gZXJyb3JGaWx0ZXJcbiAgICB0aGlzLl91cmxBcmdzID0gdXJsQXJnc1xuICAgIHRoaXMuX3Jvb3RQYXRoID0gdGhpcy5idWlsZFJvb3RQYXRoKClcblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgb2JqZWN0Pn0gKi9cbiAgICB0aGlzLl9yZXNwb25zZXMgPSB7fVxuXG4gICAgdGhpcy5fc2VuZENvdW50ID0gMFxuICAgIHRoaXMuc3RhcnRTY291bmRyZWwoKVxuICAgIHRoaXMuY29tbXVuaWNhdG9yID0gbmV3IFN5c3RlbVRlc3RDb21tdW5pY2F0b3Ioe29uQ29tbWFuZDogdGhpcy5vbkNvbW1hbmRSZWNlaXZlZH0pXG4gICAgdGhpcy5zZXRDb21tdW5pY2F0b3IodGhpcy5jb21tdW5pY2F0b3IpXG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIFNjb3VuZHJlbCBzZXJ2ZXIgd2hpY2ggdGhlIGJyb3dzZXIgY29ubmVjdHMgdG8gZm9yIHJlbW90ZSBldmFsdWF0aW9uIGluIHRoZSBicm93c2VyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhcnRTY291bmRyZWwoKSB7XG4gICAgaWYgKHRoaXMuc2NvdW5kcmVsV3NzKSB0aHJvdyBuZXcgRXJyb3IoXCJTY291bmRyZWwgc2VydmVyIGFscmVhZHkgc3RhcnRlZFwiKVxuXG4gICAgdGhpcy5zY291bmRyZWxXc3MgPSBuZXcgV2ViU29ja2V0U2VydmVyKHtwb3J0OiA4MDkwfSlcbiAgICB0aGlzLnNlcnZlcldlYlNvY2tldCA9IG5ldyBTZXJ2ZXJXZWJTb2NrZXQodGhpcy5zY291bmRyZWxXc3MpXG4gICAgdGhpcy5zZXJ2ZXIgPSBuZXcgU2VydmVyKHRoaXMuc2VydmVyV2ViU29ja2V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc3RvcFNjb3VuZHJlbCgpIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXI/LmNsb3NlKSB7XG4gICAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiB0aGlzLmdldFRpbWVvdXRzKCksIGVycm9yTWVzc2FnZTogXCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIFNjb3VuZHJlbCB0byBzdG9wXCJ9LCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNlcnZlci5jbG9zZSgpKVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNsb3NlV2ViU29ja2V0U2VydmVyKHRoaXMuc2NvdW5kcmVsV3NzLCBcIlNjb3VuZHJlbCBXZWJTb2NrZXQgc2VydmVyXCIpXG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSBTY291bmRyZWwgY2xpZW50IChicm93c2VyKSB0byBjb25uZWN0IGFuZCByZXR1cm5zIGl0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RpbWVvdXRNc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2NvdW5kcmVsLXJlbW90ZS1ldmFsL2J1aWxkL2NsaWVudC9pbmRleC5qc1wiKS5kZWZhdWx0Pn1cbiAgICovXG4gIGFzeW5jIGdldFNjb3VuZHJlbENsaWVudCh0aW1lb3V0TXMgPSAxMDAwMCkge1xuICAgIGlmICghdGhpcy5zZXJ2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3VuZHJlbCBzZXJ2ZXIgaXMgbm90IHN0YXJ0ZWRcIilcbiAgICB9XG5cbiAgICB0aGlzLmRlYnVnTG9nKFwiZ2V0U2NvdW5kcmVsQ2xpZW50OiB3YWl0aW5nIGZvciBicm93c2VyIFNjb3VuZHJlbCBpbml0aWFsaXphdGlvblwiKVxuICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRpbWVvdXRNcywgZXJyb3JNZXNzYWdlOiBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBTY291bmRyZWwgdG8gaW5pdGlhbGl6ZVwifSwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5nZXRDb21tdW5pY2F0b3IoKS5zZW5kQ29tbWFuZCh7dHlwZTogXCJ3YWl0Rm9yU2NvdW5kcmVsXCJ9KVxuICAgIH0pXG4gICAgdGhpcy5kZWJ1Z0xvZyhcImdldFNjb3VuZHJlbENsaWVudDogYnJvd3NlciByZXBvcnRlZCBTY291bmRyZWwgaW5pdGlhbGl6ZWRcIilcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7YW55fSBjbGllbnRcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBpc09wZW5DbGllbnQgPSAoY2xpZW50KSA9PiBjbGllbnQ/LmJhY2tlbmQ/LndzPy5yZWFkeVN0YXRlID09PSAxXG5cbiAgICBjb25zdCBleGlzdGluZ0NsaWVudHMgPSB0aGlzLnNlcnZlci5nZXRDbGllbnRzPy4oKVxuICAgIGNvbnN0IG9wZW5FeGlzdGluZ0NsaWVudHMgPSBleGlzdGluZ0NsaWVudHM/LmZpbHRlcihpc09wZW5DbGllbnQpXG5cbiAgICBpZiAob3BlbkV4aXN0aW5nQ2xpZW50cyAmJiBvcGVuRXhpc3RpbmdDbGllbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVidWdMb2coYGdldFNjb3VuZHJlbENsaWVudDogdXNpbmcgZXhpc3Rpbmcgb3BlbiBjbGllbnQgKCR7b3BlbkV4aXN0aW5nQ2xpZW50cy5sZW5ndGh9IGF2YWlsYWJsZSlgKVxuICAgICAgcmV0dXJuIG9wZW5FeGlzdGluZ0NsaWVudHNbb3BlbkV4aXN0aW5nQ2xpZW50cy5sZW5ndGggLSAxXVxuICAgIH1cbiAgICB0aGlzLmRlYnVnTG9nKGBnZXRTY291bmRyZWxDbGllbnQ6IG5vIG9wZW4gY2FjaGVkIGNsaWVudHMsIHdhaXRpbmcgZm9yIG5ldyBjb25uZWN0aW9uIChjYWNoZWQgdG90YWw6ICR7ZXhpc3RpbmdDbGllbnRzPy5sZW5ndGggPz8gMH0pYClcblxuICAgIGlmICghdGhpcy5zZXJ2ZXIuZXZlbnRzPy5vbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NvdW5kcmVsIHNlcnZlciBldmVudHMgYXJlIHVuYXZhaWxhYmxlXCIpXG4gICAgfVxuXG4gICAgbGV0IG9uTmV3Q2xpZW50XG4gICAgY29uc3QgY2xlYW51cExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgaWYgKG9uTmV3Q2xpZW50KSB7XG4gICAgICAgIHRoaXMuc2VydmVyPy5ldmVudHMub2ZmKFwibmV3Q2xpZW50XCIsIG9uTmV3Q2xpZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGltZW91dCh7dGltZW91dDogdGltZW91dE1zLCBlcnJvck1lc3NhZ2U6IFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFNjb3VuZHJlbCBjbGllbnRcIn0sIGFzeW5jICgpID0+IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIG9uTmV3Q2xpZW50ID0gKGNsaWVudCkgPT4ge1xuICAgICAgICAgIGlmICghaXNPcGVuQ2xpZW50KGNsaWVudCkpIHJldHVyblxuICAgICAgICAgIGNsZWFudXBMaXN0ZW5lcigpXG4gICAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcImdldFNjb3VuZHJlbENsaWVudDogcmVjZWl2ZWQgbmV3IG9wZW4gY2xpZW50XCIpXG4gICAgICAgICAgcmVzb2x2ZShjbGllbnQpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlcnZlci5ldmVudHMub24oXCJuZXdDbGllbnRcIiwgb25OZXdDbGllbnQpXG4gICAgICB9KSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYW51cExpc3RlbmVyKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYWxsIGVsZW1lbnRzIGJ5IENTUyBzZWxlY3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50W10+fVxuICAgKi9cbiAgYXN5bmMgYWxsKHNlbGVjdG9yLCBhcmdzID0ge30pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXREcml2ZXJBZGFwdGVyKCkuYWxsKHNlbGVjdG9yLCBhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyBhbiBlbGVtZW50IHRoYXQgaGFzIGNoaWxkcmVuIHdoaWNoIGZpbGxzIG91dCB0aGUgZWxlbWVudCBhbmQgd291bGQgb3RoZXJ3aXNlIGhhdmUgY2F1c2VkIGEgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ3xpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudH0gZWxlbWVudE9ySWRlbnRpZmllclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIC8qKlxuICAgKiBDbGlja3MgYW4gZWxlbWVudCwgYWxsb3dpbmcgc2VsZWN0b3IgYXJncyB3aGVuIHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudH0gZWxlbWVudE9ySWRlbnRpZmllclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjbGljayhlbGVtZW50T3JJZGVudGlmaWVyLCBhcmdzKSB7XG4gICAgYXdhaXQgdGhpcy5nZXREcml2ZXJBZGFwdGVyKCkuY2xpY2soZWxlbWVudE9ySWRlbnRpZmllciwgYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIHNpbmdsZSBlbGVtZW50IGJ5IENTUyBzZWxlY3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIGZpbmQoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERyaXZlckFkYXB0ZXIoKS5maW5kKHNlbGVjdG9yLCBhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgdGVzdCBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVzdElEXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kQnlUZXN0SUQodGVzdElELCBhcmdzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RHJpdmVyQWRhcHRlcigpLmZpbmRCeVRlc3RJRCh0ZXN0SUQsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBzaW5nbGUgZWxlbWVudCBieSBDU1Mgc2VsZWN0b3Igd2l0aG91dCB3YWl0aW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnQ+fVxuICAgKi9cbiAgYXN5bmMgZmluZE5vV2FpdChzZWxlY3RvciwgYXJncyA9IHt9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RHJpdmVyQWRhcHRlcigpLmZpbmROb1dhaXQoc2VsZWN0b3IsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogSW50ZXJhY3RzIHdpdGggYW4gZWxlbWVudCBieSBjYWxsaW5nIGEgbWV0aG9kIG9uIGl0IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy5cbiAgICogUmV0cnlpbmcgb24gRWxlbWVudE5vdEludGVyYWN0YWJsZUVycm9yLCBFbGVtZW50Q2xpY2tJbnRlcmNlcHRlZEVycm9yLCBvciBTdGFsZUVsZW1lbnRSZWZlcmVuY2VFcnJvci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudHxzdHJpbmd8e3NlbGVjdG9yOiBzdHJpbmd9ICYgRmluZEFyZ3N9IGVsZW1lbnRPcklkZW50aWZpZXIgVGhlIGVsZW1lbnQgb3IgYSBDU1Mgc2VsZWN0b3IgdG8gZmluZCB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG1ldGhvZCBuYW1lIHRvIGNhbGwgb24gdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGFueT59XG4gICAqL1xuICBhc3luYyBpbnRlcmFjdChlbGVtZW50T3JJZGVudGlmaWVyLCBtZXRob2ROYW1lLCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RHJpdmVyQWRhcHRlcigpLmludGVyYWN0KGVsZW1lbnRPcklkZW50aWZpZXIsIG1ldGhvZE5hbWUsIC4uLmFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogRXhwZWN0cyBubyBlbGVtZW50IHRvIGJlIGZvdW5kIGJ5IENTUyBzZWxlY3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZXhwZWN0Tm9FbGVtZW50KHNlbGVjdG9yLCBhcmdzID0ge30pIHtcbiAgICBsZXQgZm91bmQgPSBmYWxzZVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZmluZE5vV2FpdChzZWxlY3RvciwgYXJncylcbiAgICAgIGZvdW5kID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLnN0YXJ0c1dpdGgoXCJFbGVtZW50IGNvdWxkbid0IGJlIGZvdW5kIGFmdGVyIFwiKSkge1xuICAgICAgICAvLyBJZ25vcmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG5vdCB0byBmaW5kOiAke3NlbGVjdG9yfWApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge1dhaXRGb3JOb1NlbGVjdG9yQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgd2FpdEZvck5vU2VsZWN0b3Ioc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyQWRhcHRlcigpLndhaXRGb3JOb1NlbGVjdG9yKHNlbGVjdG9yLCBhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgbm90aWZpY2F0aW9uIG1lc3NhZ2VzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ1tdPn1cbiAgICovXG4gIGFzeW5jIG5vdGlmaWNhdGlvbk1lc3NhZ2VzKCkge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50cyA9IGF3YWl0IHRoaXMuYWxsKFwiW2RhdGEtY2xhc3M9J25vdGlmaWNhdGlvbi1tZXNzYWdlJ11cIiwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2VUZXh0cyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50IG9mIG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50cykge1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50LmdldFRleHQoKVxuXG4gICAgICBub3RpZmljYXRpb25NZXNzYWdlVGV4dHMucHVzaCh0ZXh0KVxuICAgIH1cblxuICAgIHJldHVybiBub3RpZmljYXRpb25NZXNzYWdlVGV4dHNcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBlY3RzIGEgbm90aWZpY2F0aW9uIG1lc3NhZ2UgdG8gYXBwZWFyIGFuZCB3YWl0cyBmb3IgaXQgaWYgbmVjZXNzYXJ5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWROb3RpZmljYXRpb25NZXNzYWdlXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9uTWVzc2FnZUFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGV4cGVjdE5vdGlmaWNhdGlvbk1lc3NhZ2UoZXhwZWN0ZWROb3RpZmljYXRpb25NZXNzYWdlLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7ZGlzbWlzcyA9IHRydWUsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIGlmIChPYmplY3Qua2V5cyhyZXN0QXJncykubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFyZ3M6ICR7T2JqZWN0LmtleXMocmVzdEFyZ3MpLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgY29uc3QgYWxsRGV0ZWN0ZWROb3RpZmljYXRpb25NZXNzYWdlcyA9IFtdXG4gICAgbGV0IGZvdW5kTm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRcbiAgICBsZXQgZm91bmROb3RpZmljYXRpb25NZXNzYWdlQ291bnRcblxuICAgIGF3YWl0IHdhaXRGb3IoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRzID0gYXdhaXQgdGhpcy5hbGwoXCJbZGF0YS10ZXN0aWQ9J25vdGlmaWNhdGlvbi1tZXNzYWdlJ11cIiwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuXG4gICAgICBmb3IgKGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50IG9mIG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50cykge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25NZXNzYWdlID0gKGF3YWl0IHRoaXMuZ2V0RHJpdmVyKCkuZXhlY3V0ZVNjcmlwdChcInJldHVybiBhcmd1bWVudHNbMF0udGV4dENvbnRlbnQ7XCIsIG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50KSk/LnRyaW0oKSB8fCBhd2FpdCBub3RpZmljYXRpb25NZXNzYWdlRWxlbWVudC5nZXRUZXh0KClcblxuICAgICAgICBpZiAoIWFsbERldGVjdGVkTm90aWZpY2F0aW9uTWVzc2FnZXMuaW5jbHVkZXMobm90aWZpY2F0aW9uTWVzc2FnZSkpIHtcbiAgICAgICAgICBhbGxEZXRlY3RlZE5vdGlmaWNhdGlvbk1lc3NhZ2VzLnB1c2gobm90aWZpY2F0aW9uTWVzc2FnZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub3RpZmljYXRpb25NZXNzYWdlID09IGV4cGVjdGVkTm90aWZpY2F0aW9uTWVzc2FnZSkge1xuICAgICAgICAgIGZvdW5kTm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQgPSBub3RpZmljYXRpb25NZXNzYWdlRWxlbWVudFxuICAgICAgICAgIGZvdW5kTm90aWZpY2F0aW9uTWVzc2FnZUNvdW50ID0gYXdhaXQgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jb3VudFwiKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm90aWZpY2F0aW9uIG1lc3NhZ2UgJHtleHBlY3RlZE5vdGlmaWNhdGlvbk1lc3NhZ2V9IHdhc24ndCBpbmNsdWRlZCBpbjogJHthbGxEZXRlY3RlZE5vdGlmaWNhdGlvbk1lc3NhZ2VzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH0pXG5cbiAgICBpZiAoZm91bmROb3RpZmljYXRpb25NZXNzYWdlRWxlbWVudCAmJiBkaXNtaXNzKSB7XG4gICAgICBhd2FpdCB0aGlzLmludGVyYWN0KGZvdW5kTm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQsIFwiY2xpY2tcIikgLy8gRGlzbWlzcyB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAgICAgIGlmICghZm91bmROb3RpZmljYXRpb25NZXNzYWdlQ291bnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2UgdG8gaGF2ZSBhIGRhdGEtY291bnRcIilcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yTm9TZWxlY3RvcihgW2RhdGEtdGVzdGlkPSdub3RpZmljYXRpb24tbWVzc2FnZSddW2RhdGEtY291bnQ9JyR7Zm91bmROb3RpZmljYXRpb25NZXNzYWdlQ291bnR9J11gLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAqL1xuICBhc3luYyBkaXNtaXNzTm90aWZpY2F0aW9uTWVzc2FnZXMoKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRzID0gYXdhaXQgdGhpcy5hbGwoXCJbZGF0YS1jbGFzcz0nbm90aWZpY2F0aW9uLW1lc3NhZ2UnXVwiLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG5cbiAgICBmb3IgKGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50IG9mIG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50cykge1xuICAgICAgYXdhaXQgdGhpcy5pbnRlcmFjdChub3RpZmljYXRpb25NZXNzYWdlRWxlbWVudCwgXCJjbGlja1wiKVxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMud2FpdEZvck5vU2VsZWN0b3IoXCJbZGF0YS1jbGFzcz0nbm90aWZpY2F0aW9uLW1lc3NhZ2UnXVwiLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN5c3RlbSB0ZXN0IGhhcyBiZWVuIHN0YXJ0ZWRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1N0YXJ0ZWQoKSB7IHJldHVybiB0aGlzLl9zdGFydGVkIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBzeXN0ZW0gdGVzdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0YXJ0KCkge1xuICAgIHRoaXMuZGVidWdMb2coXCJTdGFydCBjYWxsZWRcIilcbiAgICBjb25zdCBpc05hdGl2ZUhvc3QgPSBwcm9jZXNzLmVudi5TWVNURU1fVEVTVF9IT1NUID09PSBcIm5hdGl2ZVwiXG5cbiAgICBpZiAoaXNOYXRpdmVIb3N0KSB7XG4gICAgICB0aGlzLmN1cnJlbnRVcmwgPSBcIm5hdGl2ZTovL1wiXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiVXNpbmcgbmF0aXZlIGFwcCBob3N0XCIpXG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5TWVNURU1fVEVTVF9IT1NUID09IFwiZXhwby1kZXYtc2VydmVyXCIpIHtcbiAgICAgIHRoaXMuY3VycmVudFVybCA9IGBodHRwOi8vJHt0aGlzLl9ob3N0fToke3RoaXMuX3BvcnR9YFxuICAgICAgdGhpcy5kZWJ1Z0xvZyhgVXNpbmcgZXhwby1kZXYtc2VydmVyIGF0ICR7dGhpcy5jdXJyZW50VXJsfWApXG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5TWVNURU1fVEVTVF9IT1NUID09IFwiZGlzdFwiKSB7XG4gICAgICBjb25zdCBjb25uZWN0SG9zdCA9IHRoaXMuX2h0dHBDb25uZWN0SG9zdCA/PyB0aGlzLl9odHRwSG9zdFxuICAgICAgdGhpcy5jdXJyZW50VXJsID0gYGh0dHA6Ly8ke2Nvbm5lY3RIb3N0fToke3RoaXMuX2h0dHBQb3J0fWBcblxuICAgICAgdGhpcy5kZWJ1Z0xvZyhgU3Bhd25pbmcgSFRUUCBzZXJ2ZXIgZm9yIGRpc3Qgb24gJHt0aGlzLl9odHRwSG9zdH06JHt0aGlzLl9odHRwUG9ydH1gKVxuICAgICAgdGhpcy5zeXN0ZW1UZXN0SHR0cFNlcnZlciA9IG5ldyBTeXN0ZW1UZXN0SHR0cFNlcnZlcih7XG4gICAgICAgIGhvc3Q6IHRoaXMuX2h0dHBIb3N0LFxuICAgICAgICBwb3J0OiB0aGlzLl9odHRwUG9ydCxcbiAgICAgICAgZGVidWc6IHRoaXMuX2RlYnVnLFxuICAgICAgICBvbkVycm9yOiB0aGlzLm9uSHR0cFNlcnZlckVycm9yXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiU3RhcnRpbmcgSFRUUCBzZXJ2ZXJcIilcbiAgICAgIGF3YWl0IHRoaXMuc3lzdGVtVGVzdEh0dHBTZXJ2ZXIuc3RhcnQoKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkNoZWNraW5nIEhUVFAgc2VydmVyIGhlYWx0aFwiKVxuICAgICAgYXdhaXQgdGhpcy5zeXN0ZW1UZXN0SHR0cFNlcnZlci5hc3NlcnRSZWFjaGFibGUoe3RpbWVvdXRNczogdGhpcy5nZXRUaW1lb3V0cygpfSlcbiAgICAgIHRoaXMuZGVidWdMb2coXCJIVFRQIHNlcnZlciBzdGFydGVkXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSBzZXQgU1lTVEVNX1RFU1RfSE9TVCB0byAnZXhwby1kZXYtc2VydmVyJywgJ2Rpc3QnLCBvciAnbmF0aXZlJ1wiKVxuICAgIH1cblxuICAgIHRoaXMuZHJpdmVyQWRhcHRlci5zZXRCYXNlVXJsKHRoaXMuY3VycmVudFVybClcbiAgICB0aGlzLmRlYnVnTG9nKFwiU3RhcnRpbmcgZHJpdmVyXCIpXG4gICAgYXdhaXQgdGhpcy5kcml2ZXJBZGFwdGVyLnN0YXJ0KClcbiAgICB0aGlzLmRlYnVnTG9nKFwiRHJpdmVyIHN0YXJ0ZWRcIilcblxuICAgIGF3YWl0IHRoaXMuc2V0VGltZW91dHMoMTAwMDApXG4gICAgdGhpcy5kZWJ1Z0xvZyhcIlRpbWVvdXRzIHNldCBvbiBkcml2ZXJcIilcblxuICAgIC8vIFdlYiBzb2NrZXQgc2VydmVyIHRvIGNvbW11bmljYXRlIHdpdGggYnJvd3NlclxuICAgIHRoaXMuZGVidWdMb2coXCJTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyXCIpXG4gICAgYXdhaXQgdGhpcy5zdGFydFdlYlNvY2tldFNlcnZlcigpXG4gICAgdGhpcy5kZWJ1Z0xvZyhcIldlYlNvY2tldCBzZXJ2ZXIgc3RhcnRlZFwiKVxuXG4gICAgaWYgKCFpc05hdGl2ZUhvc3QpIHtcbiAgICAgIC8vIFZpc2l0IHRoZSByb290IHBhZ2UgYW5kIHdhaXQgZm9yIEV4cG8gdG8gYmUgbG9hZGVkIGFuZCB0aGUgYXBwIHRvIGFwcGVhclxuICAgICAgdGhpcy5kZWJ1Z0xvZyhcIlZpc2l0aW5nIHJvb3QgcGF0aFwiKVxuICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLmdldFJvb3RQYXRoKClcbiAgICAgIGF3YWl0IHRoaXMuZHJpdmVyVmlzaXQocm9vdFBhdGgpXG4gICAgICB0aGlzLmRlYnVnTG9nKGBWaXNpdGVkIHJvb3QgcGF0aCAke3Jvb3RQYXRofWApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJGaW5kaW5nIHJvb3QgZWxlbWVudCBib2R5ID4gI3Jvb3RcIilcbiAgICAgICAgYXdhaXQgdGhpcy5maW5kKFwiYm9keSA+ICNyb290XCIsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlfSlcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkZvdW5kIHJvb3QgZWxlbWVudCBib2R5ID4gI3Jvb3RcIilcblxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiRmluZGluZyBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50XCIpXG4gICAgICAgIGF3YWl0IHRoaXMuZmluZEJ5VGVzdElEKFwic3lzdGVtVGVzdGluZ0NvbXBvbmVudFwiLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZSwgdGltZW91dDogMzAwMDAsIHZpc2libGU6IHRydWV9KVxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiRm91bmQgc3lzdGVtVGVzdGluZ0NvbXBvbmVudFwiKVxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiRm91bmQgcm9vdCBhbmQgc3lzdGVtVGVzdGluZ0NvbXBvbmVudFwiKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkVycm9yIHdoaWxlIGZpbmRpbmcgcm9vdC9zeXN0ZW1UZXN0aW5nQ29tcG9uZW50LCB0YWtpbmcgc2NyZWVuc2hvdFwiKVxuICAgICAgICBhd2FpdCB0aGlzLnRha2VTY3JlZW5zaG90KClcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIlNjcmVlbnNob3QgY2FwdHVyZWQgYWZ0ZXIgcm9vdC9zeXN0ZW1UZXN0aW5nQ29tcG9uZW50IGxvb2t1cCBmYWlsdXJlXCIpXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJGaW5kaW5nIHN5c3RlbVRlc3RpbmdDb21wb25lbnQgZm9yIG5hdGl2ZSBhcHBcIilcbiAgICAgICAgYXdhaXQgdGhpcy5maW5kQnlUZXN0SUQoXCJzeXN0ZW1UZXN0aW5nQ29tcG9uZW50XCIsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlLCB0aW1lb3V0OiAzMDAwMCwgdmlzaWJsZTogdHJ1ZX0pXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJGb3VuZCBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50IGZvciBuYXRpdmUgYXBwXCIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiRXJyb3Igd2hpbGUgZmluZGluZyBuYXRpdmUgc3lzdGVtVGVzdGluZ0NvbXBvbmVudCwgdGFraW5nIHNjcmVlbnNob3RcIilcbiAgICAgICAgYXdhaXQgdGhpcy50YWtlU2NyZWVuc2hvdCgpXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJTY3JlZW5zaG90IGNhcHR1cmVkIGFmdGVyIG5hdGl2ZSBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50IGxvb2t1cCBmYWlsdXJlXCIpXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2FpdCBmb3IgY2xpZW50IHRvIGNvbm5lY3RcbiAgICB0aGlzLmRlYnVnTG9nKFwiV2FpdGluZyBmb3IgY2xpZW50IFdlYlNvY2tldCBjb25uZWN0aW9uIChvcGVuaW5nKVwiKVxuICAgIHRoaXMuZGVidWdMb2coYFdTIHN0YXRlOiAke3RoaXMud3M/LnJlYWR5U3RhdGUgPz8gXCJub25lXCJ9YClcbiAgICB0aGlzLmRlYnVnTG9nKFwid2FpdEZvckNsaWVudFdlYlNvY2tldFwiKVxuICAgIGF3YWl0IHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldCgpXG4gICAgdGhpcy5kZWJ1Z0xvZyhcIkNsaWVudCBXZWJTb2NrZXQgY29ubmVjdGVkXCIpXG5cbiAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZVxuICAgIHRoaXMuZGVidWdMb2coXCJNYXJrZWQgc3lzdGVtIHRlc3QgYXMgc3RhcnRlZFwiKVxuICAgIGlmICghaXNOYXRpdmVIb3N0KSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKFwiU2V0dGluZyBiYXNlIHNlbGVjdG9yIHRvIGZvY3VzZWQgc3lzdGVtVGVzdGluZ0NvbXBvbmVudFwiKVxuICAgICAgdGhpcy5zZXRCYXNlU2VsZWN0b3IoXCJbZGF0YS10ZXN0aWQ9J3N5c3RlbVRlc3RpbmdDb21wb25lbnQnXVtkYXRhLWZvY3Vzc2VkPSd0cnVlJ11cIilcbiAgICAgIHRoaXMuZGVidWdMb2coXCJCYXNlIHNlbGVjdG9yIHNldFwiKVxuICAgIH1cbiAgICB0aGlzLmRlYnVnTG9nKFwiU3RhcnQgY29tcGxldGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldFJvb3RQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9yb290UGF0aCA/PyBTeXN0ZW1UZXN0LnJvb3RQYXRoXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGJ1aWxkUm9vdFBhdGgoKSB7XG4gICAgaWYgKCF0aGlzLl91cmxBcmdzKSByZXR1cm4gU3lzdGVtVGVzdC5yb290UGF0aFxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChTeXN0ZW1UZXN0LnJvb3RQYXRoLCBcImh0dHA6Ly9sb2NhbGhvc3RcIilcbiAgICBjb25zdCBhcHBlbmRQYXJhbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuXG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIFN0cmluZyh2YWx1ZSkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VybEFyZ3MgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuX3VybEFyZ3MpIHtcbiAgICAgICAgYXBwZW5kUGFyYW0oa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fdXJsQXJncykpIHtcbiAgICAgICAgYXBwZW5kUGFyYW0oa2V5LCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByb290UGF0aCA9ICBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofSR7dXJsLmhhc2h9YFxuXG4gICAgdGhpcy5kZWJ1Z0xvZyhgYnVpbGRSb290UGF0aCByb290UGF0aDogJHtyb290UGF0aH1gKVxuXG4gICAgcmV0dXJuIHJvb3RQYXRoXG4gIH1cblxuICAvKipcbiAgICogV2FpdHMgZm9yIHRoZSBjbGllbnQgd2ViIHNvY2tldCB0byBjb25uZWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckNsaWVudFdlYlNvY2tldCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGltZW91dCh7dGltZW91dDogMzAwMDAsIGVycm9yTWVzc2FnZTogXCJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGNsaWVudCBXZWJTb2NrZXQgY29ubmVjdGlvblwifSwgKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBpZiAodGhpcy53cykge1xuICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdCA9IHJlamVjdFxuICAgICAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICAgIH0pKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWxldGUgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdFxuICAgICAgZGVsZXRlIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZXNvbHZlXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIHdlYiBzb2NrZXQgc2VydmVyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhcnRXZWJTb2NrZXRTZXJ2ZXIoKSB7XG4gICAgdGhpcy5jbGllbnRXc3MgPSBuZXcgV2ViU29ja2V0U2VydmVyKHtwb3J0OiAxOTg1fSlcbiAgICB0aGlzLmNsaWVudFdzcy5vbihcImNvbm5lY3Rpb25cIiwgdGhpcy5vbldlYlNvY2tldENvbm5lY3Rpb24pXG4gICAgdGhpcy5jbGllbnRXc3Mub24oXCJjbG9zZVwiLCB0aGlzLm9uV2ViU29ja2V0Q2xvc2UpXG4gICAgdGhpcy5jbGllbnRXc3Mub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMuZGVidWdFcnJvcihlcnJvcilcblxuICAgICAgaWYgKHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZWplY3QpIHtcbiAgICAgICAgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0XG4gICAgICAgIGRlbGV0ZSB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVzb2x2ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgb24gY29tbWFuZCBjYWxsYmFja1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHt0eXBlOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT59KTogUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkNvbW1hbmQoY2FsbGJhY2spIHtcbiAgICB0aGlzLl9vbkNvbW1hbmRDYWxsYmFjayA9IGNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIGNvbW1hbmQgcmVjZWl2ZWQgZnJvbSB0aGUgYnJvd3NlclxuICAgKiBAcGFyYW0ge3tkYXRhOiB7bWVzc2FnZTogc3RyaW5nLCBiYWNrdHJhY2U/OiBzdHJpbmcsIHR5cGU6IHN0cmluZywgdmFsdWU6IGFueVtdfX19IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIG9uQ29tbWFuZFJlY2VpdmVkID0gYXN5bmMgKHtkYXRhfSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhLnR5cGVcbiAgICBsZXQgcmVzdWx0XG5cbiAgICBpZiAodHlwZSA9PSBcImNvbnNvbGUuZXJyb3JcIikge1xuICAgICAgY29uc3Qgc2hvd01lc3NhZ2UgPSAhdGhpcy5zaG91bGRJZ25vcmVFcnJvcihkYXRhKVxuXG4gICAgICBpZiAoc2hvd01lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkJyb3dzZXIgZXJyb3JcIiwgLi4uZGF0YS52YWx1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJjb25zb2xlLmxvZ1wiKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkJyb3dzZXIgbG9nXCIsIC4uLmRhdGEudmFsdWUpXG4gICAgfSBlbHNlIGlmICh0eXBlID09IFwiZXJyb3JcIiB8fCBkYXRhLnR5cGUgPT0gXCJ1bmhhbmRsZWRyZWplY3Rpb25cIikge1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihkYXRhKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fb25Db21tYW5kQ2FsbGJhY2spIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX29uQ29tbWFuZENhbGxiYWNrKHtkYXRhLCB0eXBlfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgb25XZWJTb2NrZXRDbGllbnRNZXNzYWdlIHVua25vd24gZGF0YSAodHlwZSAke3R5cGV9KWAsIGRhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgYSBuZXcgd2ViIHNvY2tldCBjb25uZWN0aW9uXG4gICAqIEBwYXJhbSB7V2ViU29ja2V0fSB3c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIG9uV2ViU29ja2V0Q29ubmVjdGlvbiA9IGFzeW5jICh3cykgPT4ge1xuICAgIHRoaXMud3MgPSB3c1xuICAgIHRoaXMuZ2V0Q29tbXVuaWNhdG9yKCkud3MgPSB3c1xuICAgIHRoaXMuZ2V0Q29tbXVuaWNhdG9yKCkub25PcGVuKClcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB0aGlzLndzLm9uKFwiZXJyb3JcIiwgZGlnZyh0aGlzLCBcImNvbW11bmljYXRvclwiLCBcIm9uRXJyb3JcIikpXG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdGhpcy53cy5vbihcIm1lc3NhZ2VcIiwgZGlnZyh0aGlzLCBcImNvbW11bmljYXRvclwiLCBcIm9uTWVzc2FnZVwiKSlcblxuICAgIGlmICh0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVzb2x2ZSkge1xuICAgICAgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlc29sdmUoKVxuICAgICAgZGVsZXRlIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZXNvbHZlXG4gICAgICBkZWxldGUgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdFxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgb25XZWJTb2NrZXRDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLndzID0gbnVsbFxuICAgIHRoaXMuZ2V0Q29tbXVuaWNhdG9yKCkud3MgPSBudWxsXG5cbiAgICBpZiAodGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdCkge1xuICAgICAgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdChuZXcgRXJyb3IoXCJDbGllbnQgd2Vic29ja2V0IGNsb3NlZCBiZWZvcmUgY29ubmVjdGluZ1wiKSlcbiAgICAgIGRlbGV0ZSB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0XG4gICAgICBkZWxldGUgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlc29sdmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhbiBlcnJvciByZXBvcnRlZCBmcm9tIHRoZSBicm93c2VyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhLm1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhLmJhY2t0cmFjZV1cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBoYW5kbGVFcnJvcihkYXRhKSB7XG4gICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlRXJyb3IoZGF0YSkpIHJldHVyblxuXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYEJyb3dzZXIgZXJyb3I6ICR7ZGF0YS5tZXNzYWdlfWApXG5cbiAgICBpZiAoZGF0YS5iYWNrdHJhY2UpIHtcbiAgICAgIGVycm9yLnN0YWNrID0gYCR7ZXJyb3IubWVzc2FnZX1cXG4ke2RhdGEuYmFja3RyYWNlfVxcblxcbiR7ZXJyb3Iuc3RhY2t9YFxuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgdGhlIHN5c3RlbSB0ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc3RvcCgpIHtcbiAgICBhd2FpdCB0aGlzLnN0b3BTY291bmRyZWwoKVxuICAgIGlmICh0aGlzLndzKSB7XG4gICAgICB0aGlzLndzLmNsb3NlKClcbiAgICAgIHRoaXMud3MgPSBudWxsXG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2xvc2VXZWJTb2NrZXRTZXJ2ZXIodGhpcy5jbGllbnRXc3MsIFwiY2xpZW50IFdlYlNvY2tldCBzZXJ2ZXJcIilcbiAgICBpZiAodGhpcy5kcml2ZXJBZGFwdGVyKSB7XG4gICAgICBhd2FpdCB0aGlzLmRyaXZlckFkYXB0ZXIuc3RvcCgpXG4gICAgfVxuICAgIGlmICh0aGlzLnN5c3RlbVRlc3RIdHRwU2VydmVyKSB7XG4gICAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiB0aGlzLmdldFRpbWVvdXRzKCksIGVycm9yTWVzc2FnZTogXCJ0aW1lb3V0IHdoaWxlIGNsb3NpbmcgSFRUUCBzZXJ2ZXJcIn0sIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc3lzdGVtVGVzdEh0dHBTZXJ2ZXIuY2xvc2UoKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRnVsbHkgdGVhcnMgZG93biBhbmQgcmVzdGFydHMgdGhlIHN5c3RlbSB0ZXN0IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHJlaW5pdGlhbGl6ZSgpIHtcbiAgICBhd2FpdCB0aGlzLnN0b3AoKVxuXG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlXG4gICAgdGhpcy5fYmFzZVNlbGVjdG9yID0gdW5kZWZpbmVkXG4gICAgdGhpcy5jdXJyZW50VXJsID0gdW5kZWZpbmVkXG4gICAgdGhpcy5kcml2ZXIgPSB1bmRlZmluZWRcbiAgICB0aGlzLmRyaXZlckFkYXB0ZXIgPSB0aGlzLmNyZWF0ZURyaXZlcih0aGlzLl9kcml2ZXJDb25maWcpXG4gICAgdGhpcy53cyA9IG51bGxcbiAgICB0aGlzLmNsaWVudFdzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuc2NvdW5kcmVsV3NzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5zZXJ2ZXIgPSB1bmRlZmluZWRcbiAgICB0aGlzLnNlcnZlcldlYlNvY2tldCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuc3lzdGVtVGVzdEh0dHBTZXJ2ZXIgPSB1bmRlZmluZWRcbiAgICB0aGlzLl9odHRwU2VydmVyRXJyb3IgPSB1bmRlZmluZWRcbiAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlc29sdmUgPSB1bmRlZmluZWRcbiAgICB0aGlzLmNvbW11bmljYXRvciA9IG5ldyBTeXN0ZW1UZXN0Q29tbXVuaWNhdG9yKHtvbkNvbW1hbmQ6IHRoaXMub25Db21tYW5kUmVjZWl2ZWR9KVxuICAgIHRoaXMuc2V0Q29tbXVuaWNhdG9yKHRoaXMuY29tbXVuaWNhdG9yKVxuXG4gICAgdGhpcy5zdGFydFNjb3VuZHJlbCgpXG4gICAgYXdhaXQgdGhpcy5zdGFydCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtXZWJTb2NrZXRTZXJ2ZXIgfCB1bmRlZmluZWR9IHdzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xhYmVsXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGNsb3NlV2ViU29ja2V0U2VydmVyKHdzcywgbGFiZWwgPSBcIldlYlNvY2tldCBzZXJ2ZXJcIikge1xuICAgIGlmICghd3NzKSByZXR1cm5cblxuICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRoaXMuZ2V0VGltZW91dHMoKSwgZXJyb3JNZXNzYWdlOiBgdGltZW91dCB3aGlsZSBjbG9zaW5nICR7bGFiZWx9YH0sIGFzeW5jICgpID0+IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2VcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZUNsaWVudCA9IChjbGllbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGllbnQudGVybWluYXRlKClcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JlIHRlcm1pbmF0aW9uIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBzZXR0bGUgPSAoY2FsbGJhY2ssIGFyZykgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuXG4gICAgICAgIHNldHRsZWQgPSB0cnVlXG4gICAgICAgIGNhbGxiYWNrKGFyZylcbiAgICAgIH1cblxuICAgICAgd3NzLm9uY2UoXCJjbG9zZVwiLCAoKSA9PiBzZXR0bGUocmVzb2x2ZSkpXG4gICAgICB3c3Mub25jZShcImVycm9yXCIsIChlcnJvcikgPT4gc2V0dGxlKHJlamVjdCwgZXJyb3IpKVxuICAgICAgaWYgKHdzcy5jbGllbnRzICYmIHdzcy5jbGllbnRzLnNpemUgPiAwKSB7XG4gICAgICAgIHdzcy5jbGllbnRzLmZvckVhY2godGVybWluYXRlQ2xpZW50KVxuICAgICAgfVxuICAgICAgd3NzLmNsb3NlKChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHNldHRsZShyZWplY3QsIGVycm9yKVxuICAgICAgICBlbHNlIHNldHRsZShyZXNvbHZlKVxuICAgICAgfSlcbiAgICB9KSlcbiAgfVxufVxuIl19
742
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3lzdGVtLXRlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxNQUFNLE1BQU0sNkNBQTZDLENBQUE7QUFDaEUsT0FBTyxlQUFlLE1BQU0sb0VBQW9FLENBQUE7QUFDaEcsT0FBTyxzQkFBc0IsTUFBTSwrQkFBK0IsQ0FBQTtBQUNsRSxPQUFPLG9CQUFvQixNQUFNLDhCQUE4QixDQUFBO0FBQy9ELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFDaEMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLENBQUE7QUFDL0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLElBQUksQ0FBQTtBQUNsQyxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUE7QUFFbEM7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7OztHQUlHO0FBQ0g7Ozs7O0dBS0c7QUFDSDs7R0FFRztBQUNIOzs7R0FHRztBQUNIOzs7R0FHRztBQUVILE1BQXFCLFVBQVcsU0FBUSxPQUFPO0lBZ0I3Qzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRTtRQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUMsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDLFVBQVUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQTtRQUM3RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxD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QUFDLENBQUE7WUFDbkQsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUN0QyxDQUFDO1lBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNsQixJQUFJLEtBQUs7b0JBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTs7b0JBQzNCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN0QixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDOztBQXJ3Qk0sbUJBQVEsR0FBRyx3QkFBd0IsQUFBM0IsQ0FBMkI7ZUFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFNlcnZlciBmcm9tIFwic2NvdW5kcmVsLXJlbW90ZS1ldmFsL2J1aWxkL3NlcnZlci9pbmRleC5qc1wiXG5pbXBvcnQgU2VydmVyV2ViU29ja2V0IGZyb20gXCJzY291bmRyZWwtcmVtb3RlLWV2YWwvYnVpbGQvc2VydmVyL2Nvbm5lY3Rpb25zL3dlYi1zb2NrZXQvaW5kZXguanNcIlxuaW1wb3J0IFN5c3RlbVRlc3RDb21tdW5pY2F0b3IgZnJvbSBcIi4vc3lzdGVtLXRlc3QtY29tbXVuaWNhdG9yLmpzXCJcbmltcG9ydCBTeXN0ZW1UZXN0SHR0cFNlcnZlciBmcm9tIFwiLi9zeXN0ZW0tdGVzdC1odHRwLXNlcnZlci5qc1wiXG5pbXBvcnQge3dhaXRGb3J9IGZyb20gXCJhd2FpdGVyeVwiXG5pbXBvcnQgdGltZW91dCBmcm9tIFwiYXdhaXRlcnkvYnVpbGQvdGltZW91dC5qc1wiXG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSBcIndzXCJcbmltcG9ydCBCcm93c2VyIGZyb20gXCIuL2Jyb3dzZXIuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5c3RlbVRlc3RBcmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2hvc3RdIEhvc3RuYW1lIGZvciB0aGUgYXBwIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcG9ydF0gUG9ydCBmb3IgdGhlIGFwcCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2h0dHBIb3N0XSBIb3N0bmFtZSBmb3IgdGhlIHN0YXRpYyBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbaHR0cFBvcnRdIFBvcnQgZm9yIHRoZSBzdGF0aWMgSFRUUCBzZXJ2ZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2h0dHBDb25uZWN0SG9zdF0gSG9zdG5hbWUgdXNlZCBieSB0aGUgZHJpdmVyIHRvIHJlYWNoIHRoZSBIVFRQIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RlYnVnXSBFbmFibGUgZGVidWcgbG9nZ2luZy5cbiAqIEBwcm9wZXJ0eSB7KGVycm9yOiBhbnkpID0+IGJvb2xlYW59IFtlcnJvckZpbHRlcl0gRmlsdGVyIGZvciBicm93c2VyIGVycm9ycyAocmV0dXJuIGZhbHNlIHRvIGlnbm9yZSkuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFt1cmxBcmdzXSBRdWVyeSBwYXJhbXMgYXBwZW5kZWQgdG8gdGhlIHJvb3QgcGF0aC5cbiAqIEBwcm9wZXJ0eSB7U3lzdGVtVGVzdERyaXZlckNvbmZpZ30gW2RyaXZlcl0gRHJpdmVyIGNvbmZpZ3VyYXRpb24uXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3lzdGVtVGVzdERyaXZlckNvbmZpZ1xuICogQHByb3BlcnR5IHtcInNlbGVuaXVtXCJ8XCJhcHBpdW1cIn0gW3R5cGVdIERyaXZlciBpbXBsZW1lbnRhdGlvbiB0byB1c2UuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IFtvcHRpb25zXSBEcml2ZXItc3BlY2lmaWMgb3B0aW9ucy5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGaW5kQXJnc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0XSBPdmVycmlkZSB0aW1lb3V0IGZvciBsb29rdXAuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBudWxsfSBbdmlzaWJsZV0gV2hldGhlciB0byByZXF1aXJlIGVsZW1lbnRzIHRvIGJlIHZpc2libGUgKGB0cnVlYCkgb3IgaGlkZGVuIChgZmFsc2VgKS4gVXNlIGBudWxsYCB0byBkaXNhYmxlIHZpc2liaWxpdHkgZmlsdGVyaW5nLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlQmFzZVNlbGVjdG9yXSBXaGV0aGVyIHRvIHNjb3BlIGJ5IHRoZSBiYXNlIHNlbGVjdG9yLlxuICovXG4vKipcbiAqIEB0eXBlZGVmIHtGaW5kQXJncyAmIHt3aXRoRmFsbGJhY2s/OiBib29sZWFufX0gSW50ZXJhY3RBcmdzXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gV2FpdEZvck5vU2VsZWN0b3JBcmdzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFt1c2VCYXNlU2VsZWN0b3JdIFdoZXRoZXIgdG8gc2NvcGUgYnkgdGhlIGJhc2Ugc2VsZWN0b3IuXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTm90aWZpY2F0aW9uTWVzc2FnZUFyZ3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Rpc21pc3NdIFdoZXRoZXIgdG8gZGlzbWlzcyB0aGUgbm90aWZpY2F0aW9uIGFmdGVyIGl0IGFwcGVhcnMuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtVGVzdCBleHRlbmRzIEJyb3dzZXIge1xuICBzdGF0aWMgcm9vdFBhdGggPSBcIi9ibGFuaz9zeXN0ZW1UZXN0PXRydWVcIlxuXG4gIC8qKiBAdHlwZSB7U3lzdGVtVGVzdENvbW11bmljYXRvciB8IHVuZGVmaW5lZH0gKi9cbiAgY29tbXVuaWNhdG9yID0gdW5kZWZpbmVkXG5cbiAgX3N0YXJ0ZWQgPSBmYWxzZVxuICBfaHR0cEhvc3QgPSBcImxvY2FsaG9zdFwiXG4gIF9odHRwUG9ydCA9IDE5ODRcbiAgLyoqIEB0eXBlIHsoZXJyb3I6IGFueSkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZH0gKi9cbiAgX2Vycm9yRmlsdGVyID0gdW5kZWZpbmVkXG4gIC8qKiBAdHlwZSB7V2ViU29ja2V0U2VydmVyIHwgdW5kZWZpbmVkfSAqL1xuICBzY291bmRyZWxXc3MgPSB1bmRlZmluZWRcbiAgLyoqIEB0eXBlIHtXZWJTb2NrZXRTZXJ2ZXIgfCB1bmRlZmluZWR9ICovXG4gIGNsaWVudFdzcyA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHN5c3RlbSB0ZXN0IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7U3lzdGVtVGVzdEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7U3lzdGVtVGVzdH1cbiAgICovXG4gIHN0YXRpYyBjdXJyZW50KGFyZ3MgPSB7fSkge1xuICAgIGlmICghZ2xvYmFsVGhpcy5zeXN0ZW1UZXN0KSB7XG4gICAgICBnbG9iYWxUaGlzLnN5c3RlbVRlc3QgPSBuZXcgU3lzdGVtVGVzdChhcmdzKVxuICAgIH1cblxuICAgIHJldHVybiBnbG9iYWxUaGlzLnN5c3RlbVRlc3RcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7U3lzdGVtVGVzdENvbW11bmljYXRvcn0gKi9cbiAgZ2V0Q29tbXVuaWNhdG9yKCkge1xuICAgIGlmICghdGhpcy5jb21tdW5pY2F0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW11bmljYXRvciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZCB5ZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21tdW5pY2F0b3JcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhbiBlcnJvciBtZXNzYWdlIGlmIHBvc3NpYmxlIGZyb20gdGhlIHBheWxvYWQgc2VudCBmcm9tIHRoZSBicm93c2VyLlxuICAgKiBAcGFyYW0ge3ttZXNzYWdlPzogc3RyaW5nLCB2YWx1ZT86IGFueVtdfSB8IEVycm9yfSBkYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqL1xuICBleHRyYWN0RXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gZGF0YS5tZXNzYWdlXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHJldHVybiBkYXRhLm1lc3NhZ2VcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHJldHVybiBkYXRhXG5cbiAgICBjb25zdCBmaXJzdFZhbHVlID0gQXJyYXkuaXNBcnJheShkYXRhPy52YWx1ZSkgPyBkYXRhLnZhbHVlWzBdIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoZmlyc3RWYWx1ZSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGVvZiBmaXJzdFZhbHVlLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdFZhbHVlLm1lc3NhZ2VcbiAgICBpZiAodHlwZW9mIGZpcnN0VmFsdWUgPT09IFwic3RyaW5nXCIpIHJldHVybiBmaXJzdFZhbHVlXG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGJyb3dzZXIgZXJyb3Igc2hvdWxkIGJlIGlnbm9yZWQgYmFzZWQgb24gYnVpbHQtaW4gcnVsZXMgYW5kIGFuIG9wdGlvbmFsIGVycm9yIGZpbHRlci5cbiAgICogQHBhcmFtIHt7bWVzc2FnZT86IHN0cmluZywgdmFsdWU/OiBhbnlbXX19IGRhdGFcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzaG91bGRJZ25vcmVFcnJvcihkYXRhKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZXh0cmFjdEVycm9yTWVzc2FnZShkYXRhKVxuXG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhcIk1pbmlmaWVkIFJlYWN0IGVycm9yICM0MThcIikpIHJldHVybiB0cnVlXG4gICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhcIk1pbmlmaWVkIFJlYWN0IGVycm9yICM0MTlcIikpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2Vycm9yRmlsdGVyICYmIHRoaXMuX2Vycm9yRmlsdGVyKGRhdGEpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgc3lzdGVtIHRlc3RcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oU3lzdGVtVGVzdCk6IFByb21pc2U8dm9pZD59IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeXN0ZW0gdGVzdFxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtTeXN0ZW1UZXN0QXJnc30gYXJnc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFN5c3RlbVRlc3QpOiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIC8qKlxuICAgKiBSdW5zIGEgc3lzdGVtIHRlc3RcbiAgICogQHBhcmFtIHtTeXN0ZW1UZXN0QXJncyB8IGZ1bmN0aW9uKFN5c3RlbVRlc3QpOiBQcm9taXNlPHZvaWQ+fSBbYXJnc11cbiAgICogQHBhcmFtIHtmdW5jdGlvbihTeXN0ZW1UZXN0KTogUHJvbWlzZTx2b2lkPn0gW2NhbGxiYWNrXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyBydW4oYXJncywgY2FsbGJhY2spIHtcbiAgICBjb25zdCByZXNvbHZlZENhbGxiYWNrID0gdHlwZW9mIGFyZ3MgPT09IFwiZnVuY3Rpb25cIiA/IGFyZ3MgOiBjYWxsYmFja1xuICAgIGNvbnN0IHN5c3RlbVRlc3QgPSB0aGlzLmN1cnJlbnQodHlwZW9mIGFyZ3MgPT09IFwiZnVuY3Rpb25cIiA/IHt9IDogYXJncylcblxuICAgIGlmICghcmVzb2x2ZWRDYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3lzdGVtVGVzdC5ydW4gcmVxdWlyZXMgYSBjYWxsYmFja1wiKVxuICAgIH1cblxuICAgIHN5c3RlbVRlc3QuZGVidWdMb2coXCJSdW4gc3RhcnRlZCAtIHNlbmQgaW5pdGlhbGl6ZVwiKVxuICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IDEwXzAwMCwgZXJyb3JNZXNzYWdlOiBcIlNlbmRpbmcgaW50aWFsaXplIHRvIHVzZVN5c3RlbVRlc3QoKSB0aW1lZCBvdXRcIn0sIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHN5c3RlbVRlc3QuZ2V0Q29tbXVuaWNhdG9yKCkuc2VuZENvbW1hbmQoe3R5cGU6IFwiaW5pdGlhbGl6ZVwifSlcbiAgICB9KVxuXG4gICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhcImdldFJvb3RQYXRoXCIpXG4gICAgY29uc3Qgcm9vdFBhdGggPSBzeXN0ZW1UZXN0LmdldFJvb3RQYXRoKClcblxuICAgIHN5c3RlbVRlc3QuZGVidWdMb2coYFZpc2l0IHJvb3RQYXRoIHdpdGggZGlzbWlzc1RvOiAke3Jvb3RQYXRofWApXG4gICAgYXdhaXQgc3lzdGVtVGVzdC5kaXNtaXNzVG8ocm9vdFBhdGgpXG4gICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhgRGlzbWlzc2VkIHRvIHJvb3QgcGF0aCAke3Jvb3RQYXRofWApXG5cbiAgICB0cnkge1xuICAgICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhcImZpbmRCeVRlc3RJRCBibGFua1RleHRcIilcbiAgICAgIGF3YWl0IHN5c3RlbVRlc3QuZmluZEJ5VGVzdElEKFwiYmxhbmtUZXh0XCIsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlfSlcbiAgICAgIHN5c3RlbVRlc3QuZGVidWdMb2coXCJGb3VuZCBibGFua1RleHRcIilcblxuICAgICAgc3lzdGVtVGVzdC5kZWJ1Z0xvZyhcInJlc29sdmVkQ2FsbGJhY2tcIilcbiAgICAgIGF3YWl0IHJlc29sdmVkQ2FsbGJhY2soc3lzdGVtVGVzdClcbiAgICAgIHN5c3RlbVRlc3QuZGVidWdMb2coXCJSdW4gY2FsbGJhY2sgY29tcGxldGVkXCIpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHN5c3RlbVRlc3QuZGVidWdMb2coYFJ1biBlcnJvciBjYXVnaHQsIHRha2luZyBzY3JlZW5zaG90OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9YClcbiAgICAgIGF3YWl0IHN5c3RlbVRlc3QudGFrZVNjcmVlbnNob3QoKVxuXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFN5c3RlbVRlc3QgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtTeXN0ZW1UZXN0QXJnc30gW2FyZ3NdXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7aG9zdCA9IFwibG9jYWxob3N0XCIsIHBvcnQgPSA4MDgxLCBodHRwSG9zdCA9IFwibG9jYWxob3N0XCIsIGh0dHBQb3J0ID0gMTk4NCwgaHR0cENvbm5lY3RIb3N0LCBkZWJ1ZyA9IGZhbHNlLCBlcnJvckZpbHRlciwgdXJsQXJncywgZHJpdmVyLCAuLi5yZXN0QXJnc30gPSB7aG9zdDogXCJsb2NhbGhvc3RcIiwgcG9ydDogODA4MSwgaHR0cEhvc3Q6IFwibG9jYWxob3N0XCIsIGh0dHBQb3J0OiAxOTg0LCBkZWJ1ZzogZmFsc2V9KSB7XG4gICAgc3VwZXIoe2RlYnVnLCBkcml2ZXJ9KVxuXG4gICAgY29uc3QgcmVzdEFyZ3NLZXlzID0gT2JqZWN0LmtleXMocmVzdEFyZ3MpXG5cbiAgICBpZiAocmVzdEFyZ3NLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhcmd1bWVudHM6ICR7cmVzdEFyZ3NLZXlzLmpvaW4oXCIsIFwiKX1gKVxuICAgIH1cblxuICAgIHRoaXMuX2hvc3QgPSBob3N0XG4gICAgdGhpcy5fcG9ydCA9IHBvcnRcbiAgICB0aGlzLl9odHRwSG9zdCA9IGh0dHBIb3N0XG4gICAgdGhpcy5faHR0cFBvcnQgPSBodHRwUG9ydFxuICAgIHRoaXMuX2h0dHBDb25uZWN0SG9zdCA9IGh0dHBDb25uZWN0SG9zdFxuICAgIHRoaXMuX2RlYnVnID0gZGVidWdcbiAgICB0aGlzLl9lcnJvckZpbHRlciA9IGVycm9yRmlsdGVyXG4gICAgdGhpcy5fdXJsQXJncyA9IHVybEFyZ3NcbiAgICB0aGlzLl9yb290UGF0aCA9IHRoaXMuYnVpbGRSb290UGF0aCgpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxudW1iZXIsIG9iamVjdD59ICovXG4gICAgdGhpcy5fcmVzcG9uc2VzID0ge31cblxuICAgIHRoaXMuX3NlbmRDb3VudCA9IDBcbiAgICB0aGlzLnN0YXJ0U2NvdW5kcmVsKClcbiAgICB0aGlzLmNvbW11bmljYXRvciA9IG5ldyBTeXN0ZW1UZXN0Q29tbXVuaWNhdG9yKHtvbkNvbW1hbmQ6IHRoaXMub25Db21tYW5kUmVjZWl2ZWR9KVxuICAgIHRoaXMuc2V0Q29tbXVuaWNhdG9yKHRoaXMuY29tbXVuaWNhdG9yKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBTY291bmRyZWwgc2VydmVyIHdoaWNoIHRoZSBicm93c2VyIGNvbm5lY3RzIHRvIGZvciByZW1vdGUgZXZhbHVhdGlvbiBpbiB0aGUgYnJvd3NlclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXJ0U2NvdW5kcmVsKCkge1xuICAgIGlmICh0aGlzLnNjb3VuZHJlbFdzcykgdGhyb3cgbmV3IEVycm9yKFwiU2NvdW5kcmVsIHNlcnZlciBhbHJlYWR5IHN0YXJ0ZWRcIilcblxuICAgIHRoaXMuc2NvdW5kcmVsV3NzID0gbmV3IFdlYlNvY2tldFNlcnZlcih7cG9ydDogODA5MH0pXG4gICAgdGhpcy5zZXJ2ZXJXZWJTb2NrZXQgPSBuZXcgU2VydmVyV2ViU29ja2V0KHRoaXMuc2NvdW5kcmVsV3NzKVxuICAgIHRoaXMuc2VydmVyID0gbmV3IFNlcnZlcih0aGlzLnNlcnZlcldlYlNvY2tldClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHN0b3BTY291bmRyZWwoKSB7XG4gICAgaWYgKHRoaXMuc2VydmVyPy5jbG9zZSkge1xuICAgICAgYXdhaXQgdGltZW91dCh7dGltZW91dDogdGhpcy5nZXRUaW1lb3V0cygpLCBlcnJvck1lc3NhZ2U6IFwidGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBTY291bmRyZWwgdG8gc3RvcFwifSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zZXJ2ZXIuY2xvc2UoKSlcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jbG9zZVdlYlNvY2tldFNlcnZlcih0aGlzLnNjb3VuZHJlbFdzcywgXCJTY291bmRyZWwgV2ViU29ja2V0IHNlcnZlclwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXRzIGZvciB0aGUgU2NvdW5kcmVsIGNsaWVudCAoYnJvd3NlcikgdG8gY29ubmVjdCBhbmQgcmV0dXJucyBpdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0TXNdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNjb3VuZHJlbC1yZW1vdGUtZXZhbC9idWlsZC9jbGllbnQvaW5kZXguanNcIikuZGVmYXVsdD59XG4gICAqL1xuICBhc3luYyBnZXRTY291bmRyZWxDbGllbnQodGltZW91dE1zID0gMTAwMDApIHtcbiAgICBpZiAoIXRoaXMuc2VydmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTY291bmRyZWwgc2VydmVyIGlzIG5vdCBzdGFydGVkXCIpXG4gICAgfVxuXG4gICAgdGhpcy5kZWJ1Z0xvZyhcImdldFNjb3VuZHJlbENsaWVudDogd2FpdGluZyBmb3IgYnJvd3NlciBTY291bmRyZWwgaW5pdGlhbGl6YXRpb25cIilcbiAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiB0aW1lb3V0TXMsIGVycm9yTWVzc2FnZTogXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgU2NvdW5kcmVsIHRvIGluaXRpYWxpemVcIn0sIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q29tbXVuaWNhdG9yKCkuc2VuZENvbW1hbmQoe3R5cGU6IFwid2FpdEZvclNjb3VuZHJlbFwifSlcbiAgICB9KVxuICAgIHRoaXMuZGVidWdMb2coXCJnZXRTY291bmRyZWxDbGllbnQ6IGJyb3dzZXIgcmVwb3J0ZWQgU2NvdW5kcmVsIGluaXRpYWxpemVkXCIpXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge2FueX0gY2xpZW50XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgaXNPcGVuQ2xpZW50ID0gKGNsaWVudCkgPT4gY2xpZW50Py5iYWNrZW5kPy53cz8ucmVhZHlTdGF0ZSA9PT0gMVxuXG4gICAgY29uc3QgZXhpc3RpbmdDbGllbnRzID0gdGhpcy5zZXJ2ZXIuZ2V0Q2xpZW50cz8uKClcbiAgICBjb25zdCBvcGVuRXhpc3RpbmdDbGllbnRzID0gZXhpc3RpbmdDbGllbnRzPy5maWx0ZXIoaXNPcGVuQ2xpZW50KVxuXG4gICAgaWYgKG9wZW5FeGlzdGluZ0NsaWVudHMgJiYgb3BlbkV4aXN0aW5nQ2xpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRlYnVnTG9nKGBnZXRTY291bmRyZWxDbGllbnQ6IHVzaW5nIGV4aXN0aW5nIG9wZW4gY2xpZW50ICgke29wZW5FeGlzdGluZ0NsaWVudHMubGVuZ3RofSBhdmFpbGFibGUpYClcbiAgICAgIHJldHVybiBvcGVuRXhpc3RpbmdDbGllbnRzW29wZW5FeGlzdGluZ0NsaWVudHMubGVuZ3RoIC0gMV1cbiAgICB9XG4gICAgdGhpcy5kZWJ1Z0xvZyhgZ2V0U2NvdW5kcmVsQ2xpZW50OiBubyBvcGVuIGNhY2hlZCBjbGllbnRzLCB3YWl0aW5nIGZvciBuZXcgY29ubmVjdGlvbiAoY2FjaGVkIHRvdGFsOiAke2V4aXN0aW5nQ2xpZW50cz8ubGVuZ3RoID8/IDB9KWApXG5cbiAgICBpZiAoIXRoaXMuc2VydmVyLmV2ZW50cz8ub24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjb3VuZHJlbCBzZXJ2ZXIgZXZlbnRzIGFyZSB1bmF2YWlsYWJsZVwiKVxuICAgIH1cblxuICAgIGxldCBvbk5ld0NsaWVudFxuICAgIGNvbnN0IGNsZWFudXBMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGlmIChvbk5ld0NsaWVudCkge1xuICAgICAgICB0aGlzLnNlcnZlcj8uZXZlbnRzLm9mZihcIm5ld0NsaWVudFwiLCBvbk5ld0NsaWVudClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRpbWVvdXRNcywgZXJyb3JNZXNzYWdlOiBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBTY291bmRyZWwgY2xpZW50XCJ9LCBhc3luYyAoKSA9PiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBvbk5ld0NsaWVudCA9IChjbGllbnQpID0+IHtcbiAgICAgICAgICBpZiAoIWlzT3BlbkNsaWVudChjbGllbnQpKSByZXR1cm5cbiAgICAgICAgICBjbGVhbnVwTGlzdGVuZXIoKVxuICAgICAgICAgIHRoaXMuZGVidWdMb2coXCJnZXRTY291bmRyZWxDbGllbnQ6IHJlY2VpdmVkIG5ldyBvcGVuIGNsaWVudFwiKVxuICAgICAgICAgIHJlc29sdmUoY2xpZW50KVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXIuZXZlbnRzLm9uKFwibmV3Q2xpZW50XCIsIG9uTmV3Q2xpZW50KVxuICAgICAgfSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsZWFudXBMaXN0ZW5lcigpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFsbCBlbGVtZW50cyBieSBDU1Mgc2VsZWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudFtdPn1cbiAgICovXG4gIGFzeW5jIGFsbChzZWxlY3RvciwgYXJncyA9IHt9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RHJpdmVyQWRhcHRlcigpLmFsbChzZWxlY3RvciwgYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGlja3MgYW4gZWxlbWVudCB0aGF0IGhhcyBjaGlsZHJlbiB3aGljaCBmaWxscyBvdXQgdGhlIGVsZW1lbnQgYW5kIHdvdWxkIG90aGVyd2lzZSBoYXZlIGNhdXNlZCBhIEVsZW1lbnRDbGlja0ludGVyY2VwdGVkRXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRPcklkZW50aWZpZXJcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICAvKipcbiAgICogQ2xpY2tzIGFuIGVsZW1lbnQsIGFsbG93aW5nIHNlbGVjdG9yIGFyZ3Mgd2hlbiB1c2luZyBhIENTUyBzZWxlY3Rvci5cbiAgICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR9IGVsZW1lbnRPcklkZW50aWZpZXJcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgY2xpY2soZWxlbWVudE9ySWRlbnRpZmllciwgYXJncykge1xuICAgIGF3YWl0IHRoaXMuZ2V0RHJpdmVyQWRhcHRlcigpLmNsaWNrKGVsZW1lbnRPcklkZW50aWZpZXIsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBzaW5nbGUgZWxlbWVudCBieSBDU1Mgc2VsZWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7RmluZEFyZ3N9IFthcmdzXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJzZWxlbml1bS13ZWJkcml2ZXJcIikuV2ViRWxlbWVudD59XG4gICAqL1xuICBhc3luYyBmaW5kKHNlbGVjdG9yLCBhcmdzID0ge30pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXREcml2ZXJBZGFwdGVyKCkuZmluZChzZWxlY3RvciwgYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIHNpbmdsZSBlbGVtZW50IGJ5IHRlc3QgSURcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlc3RJRFxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnQ+fVxuICAgKi9cbiAgYXN5bmMgZmluZEJ5VGVzdElEKHRlc3RJRCwgYXJncykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERyaXZlckFkYXB0ZXIoKS5maW5kQnlUZXN0SUQodGVzdElELCBhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgc2luZ2xlIGVsZW1lbnQgYnkgQ1NTIHNlbGVjdG9yIHdpdGhvdXQgd2FpdGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHBhcmFtIHtGaW5kQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcInNlbGVuaXVtLXdlYmRyaXZlclwiKS5XZWJFbGVtZW50Pn1cbiAgICovXG4gIGFzeW5jIGZpbmROb1dhaXQoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERyaXZlckFkYXB0ZXIoKS5maW5kTm9XYWl0KHNlbGVjdG9yLCBhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVyYWN0cyB3aXRoIGFuIGVsZW1lbnQgYnkgY2FsbGluZyBhIG1ldGhvZCBvbiBpdCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuXG4gICAqIFJldHJ5aW5nIG9uIEVsZW1lbnROb3RJbnRlcmFjdGFibGVFcnJvciwgRWxlbWVudENsaWNrSW50ZXJjZXB0ZWRFcnJvciwgb3IgU3RhbGVFbGVtZW50UmVmZXJlbmNlRXJyb3IuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwic2VsZW5pdW0td2ViZHJpdmVyXCIpLldlYkVsZW1lbnR8c3RyaW5nfHtzZWxlY3Rvcjogc3RyaW5nfSAmIEludGVyYWN0QXJnc30gZWxlbWVudE9ySWRlbnRpZmllciBUaGUgZWxlbWVudCBvciBhIENTUyBzZWxlY3RvciB0byBmaW5kIHRoZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbWV0aG9kIG5hbWUgdG8gY2FsbCBvbiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn1cbiAgICovXG4gIGFzeW5jIGludGVyYWN0KGVsZW1lbnRPcklkZW50aWZpZXIsIG1ldGhvZE5hbWUsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXREcml2ZXJBZGFwdGVyKCkuaW50ZXJhY3QoZWxlbWVudE9ySWRlbnRpZmllciwgbWV0aG9kTmFtZSwgLi4uYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBlY3RzIG5vIGVsZW1lbnQgdG8gYmUgZm91bmQgYnkgQ1NTIHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge0ZpbmRBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBleHBlY3ROb0VsZW1lbnQoc2VsZWN0b3IsIGFyZ3MgPSB7fSkge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5maW5kTm9XYWl0KHNlbGVjdG9yLCBhcmdzKVxuICAgICAgZm91bmQgPSB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2Uuc3RhcnRzV2l0aChcIkVsZW1lbnQgY291bGRuJ3QgYmUgZm91bmQgYWZ0ZXIgXCIpKSB7XG4gICAgICAgIC8vIElnbm9yZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbm90IHRvIGZpbmQ6ICR7c2VsZWN0b3J9YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7V2FpdEZvck5vU2VsZWN0b3JBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3YWl0Rm9yTm9TZWxlY3RvcihzZWxlY3RvciwgYXJncyA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5nZXREcml2ZXJBZGFwdGVyKCkud2FpdEZvck5vU2VsZWN0b3Ioc2VsZWN0b3IsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBub3RpZmljYXRpb24gbWVzc2FnZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMgbm90aWZpY2F0aW9uTWVzc2FnZXMoKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRzID0gYXdhaXQgdGhpcy5hbGwoXCJbZGF0YS1jbGFzcz0nbm90aWZpY2F0aW9uLW1lc3NhZ2UnXVwiLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG4gICAgY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZVRleHRzID0gW11cblxuICAgIGZvciAoY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQgb2Ygbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRzKSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQuZ2V0VGV4dCgpXG5cbiAgICAgIG5vdGlmaWNhdGlvbk1lc3NhZ2VUZXh0cy5wdXNoKHRleHQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvbk1lc3NhZ2VUZXh0c1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGVjdHMgYSBub3RpZmljYXRpb24gbWVzc2FnZSB0byBhcHBlYXIgYW5kIHdhaXRzIGZvciBpdCBpZiBuZWNlc3NhcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZE5vdGlmaWNhdGlvbk1lc3NhZ2VcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25NZXNzYWdlQXJnc30gW2FyZ3NdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZXhwZWN0Tm90aWZpY2F0aW9uTWVzc2FnZShleHBlY3RlZE5vdGlmaWNhdGlvbk1lc3NhZ2UsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHtkaXNtaXNzID0gdHJ1ZSwgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKHJlc3RBcmdzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJnczogJHtPYmplY3Qua2V5cyhyZXN0QXJncykuam9pbihcIiwgXCIpfWApXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICBjb25zdCBhbGxEZXRlY3RlZE5vdGlmaWNhdGlvbk1lc3NhZ2VzID0gW11cbiAgICBsZXQgZm91bmROb3RpZmljYXRpb25NZXNzYWdlRWxlbWVudFxuICAgIGxldCBmb3VuZE5vdGlmaWNhdGlvbk1lc3NhZ2VDb3VudFxuXG4gICAgYXdhaXQgd2FpdEZvcihhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25NZXNzYWdlRWxlbWVudHMgPSBhd2FpdCB0aGlzLmFsbChcIltkYXRhLXRlc3RpZD0nbm90aWZpY2F0aW9uLW1lc3NhZ2UnXVwiLCB7dXNlQmFzZVNlbGVjdG9yOiBmYWxzZX0pXG5cbiAgICAgIGZvciAoY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQgb2Ygbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRzKSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbk1lc3NhZ2UgPSAoYXdhaXQgdGhpcy5nZXREcml2ZXIoKS5leGVjdXRlU2NyaXB0KFwicmV0dXJuIGFyZ3VtZW50c1swXS50ZXh0Q29udGVudDtcIiwgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQpKT8udHJpbSgpIHx8IGF3YWl0IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50LmdldFRleHQoKVxuXG4gICAgICAgIGlmICghYWxsRGV0ZWN0ZWROb3RpZmljYXRpb25NZXNzYWdlcy5pbmNsdWRlcyhub3RpZmljYXRpb25NZXNzYWdlKSkge1xuICAgICAgICAgIGFsbERldGVjdGVkTm90aWZpY2F0aW9uTWVzc2FnZXMucHVzaChub3RpZmljYXRpb25NZXNzYWdlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vdGlmaWNhdGlvbk1lc3NhZ2UgPT0gZXhwZWN0ZWROb3RpZmljYXRpb25NZXNzYWdlKSB7XG4gICAgICAgICAgZm91bmROb3RpZmljYXRpb25NZXNzYWdlRWxlbWVudCA9IG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50XG4gICAgICAgICAgZm91bmROb3RpZmljYXRpb25NZXNzYWdlQ291bnQgPSBhd2FpdCBub3RpZmljYXRpb25NZXNzYWdlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNvdW50XCIpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3RpZmljYXRpb24gbWVzc2FnZSAke2V4cGVjdGVkTm90aWZpY2F0aW9uTWVzc2FnZX0gd2Fzbid0IGluY2x1ZGVkIGluOiAke2FsbERldGVjdGVkTm90aWZpY2F0aW9uTWVzc2FnZXMuam9pbihcIiwgXCIpfWApXG4gICAgfSlcblxuICAgIGlmIChmb3VuZE5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50ICYmIGRpc21pc3MpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW50ZXJhY3QoZm91bmROb3RpZmljYXRpb25NZXNzYWdlRWxlbWVudCwgXCJjbGlja1wiKSAvLyBEaXNtaXNzIHRoZSBub3RpZmljYXRpb24gbWVzc2FnZVxuICAgICAgaWYgKCFmb3VuZE5vdGlmaWNhdGlvbk1lc3NhZ2VDb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub3RpZmljYXRpb24gbWVzc2FnZSB0byBoYXZlIGEgZGF0YS1jb3VudFwiKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JOb1NlbGVjdG9yKGBbZGF0YS10ZXN0aWQ9J25vdGlmaWNhdGlvbi1tZXNzYWdlJ11bZGF0YS1jb3VudD0nJHtmb3VuZE5vdGlmaWNhdGlvbk1lc3NhZ2VDb3VudH0nXWAsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlfSlcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGFzeW5jIGRpc21pc3NOb3RpZmljYXRpb25NZXNzYWdlcygpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb25NZXNzYWdlRWxlbWVudHMgPSBhd2FpdCB0aGlzLmFsbChcIltkYXRhLWNsYXNzPSdub3RpZmljYXRpb24tbWVzc2FnZSddXCIsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlfSlcblxuICAgIGZvciAoY29uc3Qgbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnQgb2Ygbm90aWZpY2F0aW9uTWVzc2FnZUVsZW1lbnRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmludGVyYWN0KG5vdGlmaWNhdGlvbk1lc3NhZ2VFbGVtZW50LCBcImNsaWNrXCIpXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTm9TZWxlY3RvcihcIltkYXRhLWNsYXNzPSdub3RpZmljYXRpb24tbWVzc2FnZSddXCIsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgc3lzdGVtIHRlc3QgaGFzIGJlZW4gc3RhcnRlZFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU3RhcnRlZCgpIHsgcmV0dXJuIHRoaXMuX3N0YXJ0ZWQgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIHN5c3RlbSB0ZXN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgc3RhcnQoKSB7XG4gICAgdGhpcy5kZWJ1Z0xvZyhcIlN0YXJ0IGNhbGxlZFwiKVxuICAgIGNvbnN0IGlzTmF0aXZlSG9zdCA9IHByb2Nlc3MuZW52LlNZU1RFTV9URVNUX0hPU1QgPT09IFwibmF0aXZlXCJcblxuICAgIGlmIChpc05hdGl2ZUhvc3QpIHtcbiAgICAgIHRoaXMuY3VycmVudFVybCA9IFwibmF0aXZlOi8vXCJcbiAgICAgIHRoaXMuZGVidWdMb2coXCJVc2luZyBuYXRpdmUgYXBwIGhvc3RcIilcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LlNZU1RFTV9URVNUX0hPU1QgPT0gXCJleHBvLWRldi1zZXJ2ZXJcIikge1xuICAgICAgdGhpcy5jdXJyZW50VXJsID0gYGh0dHA6Ly8ke3RoaXMuX2hvc3R9OiR7dGhpcy5fcG9ydH1gXG4gICAgICB0aGlzLmRlYnVnTG9nKGBVc2luZyBleHBvLWRldi1zZXJ2ZXIgYXQgJHt0aGlzLmN1cnJlbnRVcmx9YClcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LlNZU1RFTV9URVNUX0hPU1QgPT0gXCJkaXN0XCIpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3RIb3N0ID0gdGhpcy5faHR0cENvbm5lY3RIb3N0ID8/IHRoaXMuX2h0dHBIb3N0XG4gICAgICB0aGlzLmN1cnJlbnRVcmwgPSBgaHR0cDovLyR7Y29ubmVjdEhvc3R9OiR7dGhpcy5faHR0cFBvcnR9YFxuXG4gICAgICB0aGlzLmRlYnVnTG9nKGBTcGF3bmluZyBIVFRQIHNlcnZlciBmb3IgZGlzdCBvbiAke3RoaXMuX2h0dHBIb3N0fToke3RoaXMuX2h0dHBQb3J0fWApXG4gICAgICB0aGlzLnN5c3RlbVRlc3RIdHRwU2VydmVyID0gbmV3IFN5c3RlbVRlc3RIdHRwU2VydmVyKHtcbiAgICAgICAgaG9zdDogdGhpcy5faHR0cEhvc3QsXG4gICAgICAgIHBvcnQ6IHRoaXMuX2h0dHBQb3J0LFxuICAgICAgICBkZWJ1ZzogdGhpcy5fZGVidWcsXG4gICAgICAgIG9uRXJyb3I6IHRoaXMub25IdHRwU2VydmVyRXJyb3JcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuZGVidWdMb2coXCJTdGFydGluZyBIVFRQIHNlcnZlclwiKVxuICAgICAgYXdhaXQgdGhpcy5zeXN0ZW1UZXN0SHR0cFNlcnZlci5zdGFydCgpXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiQ2hlY2tpbmcgSFRUUCBzZXJ2ZXIgaGVhbHRoXCIpXG4gICAgICBhd2FpdCB0aGlzLnN5c3RlbVRlc3RIdHRwU2VydmVyLmFzc2VydFJlYWNoYWJsZSh7dGltZW91dE1zOiB0aGlzLmdldFRpbWVvdXRzKCl9KVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkhUVFAgc2VydmVyIHN0YXJ0ZWRcIilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHNldCBTWVNURU1fVEVTVF9IT1NUIHRvICdleHBvLWRldi1zZXJ2ZXInLCAnZGlzdCcsIG9yICduYXRpdmUnXCIpXG4gICAgfVxuXG4gICAgdGhpcy5kcml2ZXJBZGFwdGVyLnNldEJhc2VVcmwodGhpcy5jdXJyZW50VXJsKVxuICAgIHRoaXMuZGVidWdMb2coXCJTdGFydGluZyBkcml2ZXJcIilcbiAgICBhd2FpdCB0aGlzLmRyaXZlckFkYXB0ZXIuc3RhcnQoKVxuICAgIHRoaXMuZGVidWdMb2coXCJEcml2ZXIgc3RhcnRlZFwiKVxuXG4gICAgYXdhaXQgdGhpcy5zZXRUaW1lb3V0cygxMDAwMClcbiAgICB0aGlzLmRlYnVnTG9nKFwiVGltZW91dHMgc2V0IG9uIGRyaXZlclwiKVxuXG4gICAgLy8gV2ViIHNvY2tldCBzZXJ2ZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBicm93c2VyXG4gICAgdGhpcy5kZWJ1Z0xvZyhcIlN0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXJcIilcbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2ViU29ja2V0U2VydmVyKClcbiAgICB0aGlzLmRlYnVnTG9nKFwiV2ViU29ja2V0IHNlcnZlciBzdGFydGVkXCIpXG5cbiAgICBpZiAoIWlzTmF0aXZlSG9zdCkge1xuICAgICAgLy8gVmlzaXQgdGhlIHJvb3QgcGFnZSBhbmQgd2FpdCBmb3IgRXhwbyB0byBiZSBsb2FkZWQgYW5kIHRoZSBhcHAgdG8gYXBwZWFyXG4gICAgICB0aGlzLmRlYnVnTG9nKFwiVmlzaXRpbmcgcm9vdCBwYXRoXCIpXG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMuZ2V0Um9vdFBhdGgoKVxuICAgICAgYXdhaXQgdGhpcy5kcml2ZXJWaXNpdChyb290UGF0aClcbiAgICAgIHRoaXMuZGVidWdMb2coYFZpc2l0ZWQgcm9vdCBwYXRoICR7cm9vdFBhdGh9YClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkZpbmRpbmcgcm9vdCBlbGVtZW50IGJvZHkgPiAjcm9vdFwiKVxuICAgICAgICBhd2FpdCB0aGlzLmZpbmQoXCJib2R5ID4gI3Jvb3RcIiwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2V9KVxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiRm91bmQgcm9vdCBlbGVtZW50IGJvZHkgPiAjcm9vdFwiKVxuXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJGaW5kaW5nIHN5c3RlbVRlc3RpbmdDb21wb25lbnRcIilcbiAgICAgICAgYXdhaXQgdGhpcy5maW5kQnlUZXN0SUQoXCJzeXN0ZW1UZXN0aW5nQ29tcG9uZW50XCIsIHt1c2VCYXNlU2VsZWN0b3I6IGZhbHNlLCB0aW1lb3V0OiAzMDAwMCwgdmlzaWJsZTogdHJ1ZX0pXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJGb3VuZCBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50XCIpXG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJGb3VuZCByb290IGFuZCBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50XCIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiRXJyb3Igd2hpbGUgZmluZGluZyByb290L3N5c3RlbVRlc3RpbmdDb21wb25lbnQsIHRha2luZyBzY3JlZW5zaG90XCIpXG4gICAgICAgIGF3YWl0IHRoaXMudGFrZVNjcmVlbnNob3QoKVxuICAgICAgICB0aGlzLmRlYnVnTG9nKFwiU2NyZWVuc2hvdCBjYXB0dXJlZCBhZnRlciByb290L3N5c3RlbVRlc3RpbmdDb21wb25lbnQgbG9va3VwIGZhaWx1cmVcIilcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkZpbmRpbmcgc3lzdGVtVGVzdGluZ0NvbXBvbmVudCBmb3IgbmF0aXZlIGFwcFwiKVxuICAgICAgICBhd2FpdCB0aGlzLmZpbmRCeVRlc3RJRChcInN5c3RlbVRlc3RpbmdDb21wb25lbnRcIiwge3VzZUJhc2VTZWxlY3RvcjogZmFsc2UsIHRpbWVvdXQ6IDMwMDAwLCB2aXNpYmxlOiB0cnVlfSlcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkZvdW5kIHN5c3RlbVRlc3RpbmdDb21wb25lbnQgZm9yIG5hdGl2ZSBhcHBcIilcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZGVidWdMb2coXCJFcnJvciB3aGlsZSBmaW5kaW5nIG5hdGl2ZSBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50LCB0YWtpbmcgc2NyZWVuc2hvdFwiKVxuICAgICAgICBhd2FpdCB0aGlzLnRha2VTY3JlZW5zaG90KClcbiAgICAgICAgdGhpcy5kZWJ1Z0xvZyhcIlNjcmVlbnNob3QgY2FwdHVyZWQgYWZ0ZXIgbmF0aXZlIHN5c3RlbVRlc3RpbmdDb21wb25lbnQgbG9va3VwIGZhaWx1cmVcIilcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXYWl0IGZvciBjbGllbnQgdG8gY29ubmVjdFxuICAgIHRoaXMuZGVidWdMb2coXCJXYWl0aW5nIGZvciBjbGllbnQgV2ViU29ja2V0IGNvbm5lY3Rpb24gKG9wZW5pbmcpXCIpXG4gICAgdGhpcy5kZWJ1Z0xvZyhgV1Mgc3RhdGU6ICR7dGhpcy53cz8ucmVhZHlTdGF0ZSA/PyBcIm5vbmVcIn1gKVxuICAgIHRoaXMuZGVidWdMb2coXCJ3YWl0Rm9yQ2xpZW50V2ViU29ja2V0XCIpXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0KClcbiAgICB0aGlzLmRlYnVnTG9nKFwiQ2xpZW50IFdlYlNvY2tldCBjb25uZWN0ZWRcIilcblxuICAgIHRoaXMuX3N0YXJ0ZWQgPSB0cnVlXG4gICAgdGhpcy5kZWJ1Z0xvZyhcIk1hcmtlZCBzeXN0ZW0gdGVzdCBhcyBzdGFydGVkXCIpXG4gICAgaWYgKCFpc05hdGl2ZUhvc3QpIHtcbiAgICAgIHRoaXMuZGVidWdMb2coXCJTZXR0aW5nIGJhc2Ugc2VsZWN0b3IgdG8gZm9jdXNlZCBzeXN0ZW1UZXN0aW5nQ29tcG9uZW50XCIpXG4gICAgICB0aGlzLnNldEJhc2VTZWxlY3RvcihcIltkYXRhLXRlc3RpZD0nc3lzdGVtVGVzdGluZ0NvbXBvbmVudCddW2RhdGEtZm9jdXNzZWQ9J3RydWUnXVwiKVxuICAgICAgdGhpcy5kZWJ1Z0xvZyhcIkJhc2Ugc2VsZWN0b3Igc2V0XCIpXG4gICAgfVxuICAgIHRoaXMuZGVidWdMb2coXCJTdGFydCBjb21wbGV0ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Um9vdFBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3RQYXRoID8/IFN5c3RlbVRlc3Qucm9vdFBhdGhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgYnVpbGRSb290UGF0aCgpIHtcbiAgICBpZiAoIXRoaXMuX3VybEFyZ3MpIHJldHVybiBTeXN0ZW1UZXN0LnJvb3RQYXRoXG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFN5c3RlbVRlc3Qucm9vdFBhdGgsIFwiaHR0cDovL2xvY2FsaG9zdFwiKVxuICAgIGNvbnN0IGFwcGVuZFBhcmFtID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm5cbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgU3RyaW5nKHZhbHVlKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fdXJsQXJncyBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5fdXJsQXJncykge1xuICAgICAgICBhcHBlbmRQYXJhbShrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl91cmxBcmdzKSkge1xuICAgICAgICBhcHBlbmRQYXJhbShrZXksIHZhbHVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJvb3RQYXRoID0gIGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9JHt1cmwuaGFzaH1gXG5cbiAgICB0aGlzLmRlYnVnTG9nKGBidWlsZFJvb3RQYXRoIHJvb3RQYXRoOiAke3Jvb3RQYXRofWApXG5cbiAgICByZXR1cm4gcm9vdFBhdGhcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0cyBmb3IgdGhlIGNsaWVudCB3ZWIgc29ja2V0IHRvIGNvbm5lY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyB3YWl0Rm9yQ2xpZW50V2ViU29ja2V0KCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aW1lb3V0KHt0aW1lb3V0OiAzMDAwMCwgZXJyb3JNZXNzYWdlOiBcInRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgY2xpZW50IFdlYlNvY2tldCBjb25uZWN0aW9uXCJ9LCAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLndzKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0ID0gcmVqZWN0XG4gICAgICAgIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgfSkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0XG4gICAgICBkZWxldGUgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlc29sdmVcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgd2ViIHNvY2tldCBzZXJ2ZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGFydFdlYlNvY2tldFNlcnZlcigpIHtcbiAgICB0aGlzLmNsaWVudFdzcyA9IG5ldyBXZWJTb2NrZXRTZXJ2ZXIoe3BvcnQ6IDE5ODV9KVxuICAgIHRoaXMuY2xpZW50V3NzLm9uKFwiY29ubmVjdGlvblwiLCB0aGlzLm9uV2ViU29ja2V0Q29ubmVjdGlvbilcbiAgICB0aGlzLmNsaWVudFdzcy5vbihcImNsb3NlXCIsIHRoaXMub25XZWJTb2NrZXRDbG9zZSlcbiAgICB0aGlzLmNsaWVudFdzcy5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5kZWJ1Z0Vycm9yKGVycm9yKVxuXG4gICAgICBpZiAodGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlamVjdCkge1xuICAgICAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSlcbiAgICAgICAgZGVsZXRlIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZWplY3RcbiAgICAgICAgZGVsZXRlIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZXNvbHZlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvbiBjb21tYW5kIGNhbGxiYWNrXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oe3R5cGU6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pn0pOiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uQ29tbWFuZChjYWxsYmFjaykge1xuICAgIHRoaXMuX29uQ29tbWFuZENhbGxiYWNrID0gY2FsbGJhY2tcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGEgY29tbWFuZCByZWNlaXZlZCBmcm9tIHRoZSBicm93c2VyXG4gICAqIEBwYXJhbSB7e2RhdGE6IHttZXNzYWdlOiBzdHJpbmcsIGJhY2t0cmFjZT86IHN0cmluZywgdHlwZTogc3RyaW5nLCB2YWx1ZTogYW55W119fX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fVxuICAgKi9cbiAgb25Db21tYW5kUmVjZWl2ZWQgPSBhc3luYyAoe2RhdGF9KSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IGRhdGEudHlwZVxuICAgIGxldCByZXN1bHRcblxuICAgIGlmICh0eXBlID09IFwiY29uc29sZS5lcnJvclwiKSB7XG4gICAgICBjb25zdCBzaG93TWVzc2FnZSA9ICF0aGlzLnNob3VsZElnbm9yZUVycm9yKGRhdGEpXG5cbiAgICAgIGlmIChzaG93TWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQnJvd3NlciBlcnJvclwiLCAuLi5kYXRhLnZhbHVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImNvbnNvbGUubG9nXCIpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiQnJvd3NlciBsb2dcIiwgLi4uZGF0YS52YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJlcnJvclwiIHx8IGRhdGEudHlwZSA9PSBcInVuaGFuZGxlZHJlamVjdGlvblwiKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGRhdGEpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9vbkNvbW1hbmRDYWxsYmFjaykge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5fb25Db21tYW5kQ2FsbGJhY2soe2RhdGEsIHR5cGV9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBvbldlYlNvY2tldENsaWVudE1lc3NhZ2UgdW5rbm93biBkYXRhICh0eXBlICR7dHlwZX0pYCwgZGF0YSlcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIG5ldyB3ZWIgc29ja2V0IGNvbm5lY3Rpb25cbiAgICogQHBhcmFtIHtXZWJTb2NrZXR9IHdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgb25XZWJTb2NrZXRDb25uZWN0aW9uID0gYXN5bmMgKHdzKSA9PiB7XG4gICAgdGhpcy53cyA9IHdzXG4gICAgdGhpcy5nZXRDb21tdW5pY2F0b3IoKS53cyA9IHdzXG4gICAgdGhpcy5nZXRDb21tdW5pY2F0b3IoKS5vbk9wZW4oKVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHRoaXMud3Mub24oXCJlcnJvclwiLCBkaWdnKHRoaXMsIFwiY29tbXVuaWNhdG9yXCIsIFwib25FcnJvclwiKSlcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB0aGlzLndzLm9uKFwibWVzc2FnZVwiLCBkaWdnKHRoaXMsIFwiY29tbXVuaWNhdG9yXCIsIFwib25NZXNzYWdlXCIpKVxuXG4gICAgaWYgKHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZXNvbHZlKSB7XG4gICAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVzb2x2ZSgpXG4gICAgICBkZWxldGUgdGhpcy53YWl0Rm9yQ2xpZW50V2ViU29ja2V0UHJvbWlzZVJlc29sdmVcbiAgICAgIGRlbGV0ZSB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0XG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbldlYlNvY2tldENsb3NlID0gKCkgPT4ge1xuICAgIHRoaXMud3MgPSBudWxsXG4gICAgdGhpcy5nZXRDb21tdW5pY2F0b3IoKS53cyA9IG51bGxcblxuICAgIGlmICh0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0KSB7XG4gICAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVqZWN0KG5ldyBFcnJvcihcIkNsaWVudCB3ZWJzb2NrZXQgY2xvc2VkIGJlZm9yZSBjb25uZWN0aW5nXCIpKVxuICAgICAgZGVsZXRlIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZWplY3RcbiAgICAgIGRlbGV0ZSB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVzb2x2ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGFuIGVycm9yIHJlcG9ydGVkIGZyb20gdGhlIGJyb3dzZXJcbiAgICogQHBhcmFtIHtvYmplY3R9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGEubWVzc2FnZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGEuYmFja3RyYWNlXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGhhbmRsZUVycm9yKGRhdGEpIHtcbiAgICBpZiAodGhpcy5zaG91bGRJZ25vcmVFcnJvcihkYXRhKSkgcmV0dXJuXG5cbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgQnJvd3NlciBlcnJvcjogJHtkYXRhLm1lc3NhZ2V9YClcblxuICAgIGlmIChkYXRhLmJhY2t0cmFjZSkge1xuICAgICAgZXJyb3Iuc3RhY2sgPSBgJHtlcnJvci5tZXNzYWdlfVxcbiR7ZGF0YS5iYWNrdHJhY2V9XFxuXFxuJHtlcnJvci5zdGFja31gXG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgc3lzdGVtIHRlc3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzdG9wKCkge1xuICAgIGF3YWl0IHRoaXMuc3RvcFNjb3VuZHJlbCgpXG4gICAgaWYgKHRoaXMud3MpIHtcbiAgICAgIHRoaXMud3MuY2xvc2UoKVxuICAgICAgdGhpcy53cyA9IG51bGxcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jbG9zZVdlYlNvY2tldFNlcnZlcih0aGlzLmNsaWVudFdzcywgXCJjbGllbnQgV2ViU29ja2V0IHNlcnZlclwiKVxuICAgIGlmICh0aGlzLmRyaXZlckFkYXB0ZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMuZHJpdmVyQWRhcHRlci5zdG9wKClcbiAgICB9XG4gICAgaWYgKHRoaXMuc3lzdGVtVGVzdEh0dHBTZXJ2ZXIpIHtcbiAgICAgIGF3YWl0IHRpbWVvdXQoe3RpbWVvdXQ6IHRoaXMuZ2V0VGltZW91dHMoKSwgZXJyb3JNZXNzYWdlOiBcInRpbWVvdXQgd2hpbGUgY2xvc2luZyBIVFRQIHNlcnZlclwifSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zeXN0ZW1UZXN0SHR0cFNlcnZlci5jbG9zZSgpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdWxseSB0ZWFycyBkb3duIGFuZCByZXN0YXJ0cyB0aGUgc3lzdGVtIHRlc3QgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgcmVpbml0aWFsaXplKCkge1xuICAgIGF3YWl0IHRoaXMuc3RvcCgpXG5cbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2VcbiAgICB0aGlzLl9iYXNlU2VsZWN0b3IgPSB1bmRlZmluZWRcbiAgICB0aGlzLmN1cnJlbnRVcmwgPSB1bmRlZmluZWRcbiAgICB0aGlzLmRyaXZlciA9IHVuZGVmaW5lZFxuICAgIHRoaXMuZHJpdmVyQWRhcHRlciA9IHRoaXMuY3JlYXRlRHJpdmVyKHRoaXMuX2RyaXZlckNvbmZpZylcbiAgICB0aGlzLndzID0gbnVsbFxuICAgIHRoaXMuY2xpZW50V3NzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5zY291bmRyZWxXc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLnNlcnZlciA9IHVuZGVmaW5lZFxuICAgIHRoaXMuc2VydmVyV2ViU29ja2V0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5zeXN0ZW1UZXN0SHR0cFNlcnZlciA9IHVuZGVmaW5lZFxuICAgIHRoaXMuX2h0dHBTZXJ2ZXJFcnJvciA9IHVuZGVmaW5lZFxuICAgIHRoaXMud2FpdEZvckNsaWVudFdlYlNvY2tldFByb21pc2VSZWplY3QgPSB1bmRlZmluZWRcbiAgICB0aGlzLndhaXRGb3JDbGllbnRXZWJTb2NrZXRQcm9taXNlUmVzb2x2ZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuY29tbXVuaWNhdG9yID0gbmV3IFN5c3RlbVRlc3RDb21tdW5pY2F0b3Ioe29uQ29tbWFuZDogdGhpcy5vbkNvbW1hbmRSZWNlaXZlZH0pXG4gICAgdGhpcy5zZXRDb21tdW5pY2F0b3IodGhpcy5jb21tdW5pY2F0b3IpXG5cbiAgICB0aGlzLnN0YXJ0U2NvdW5kcmVsKClcbiAgICBhd2FpdCB0aGlzLnN0YXJ0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1dlYlNvY2tldFNlcnZlciB8IHVuZGVmaW5lZH0gd3NzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGFiZWxdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgY2xvc2VXZWJTb2NrZXRTZXJ2ZXIod3NzLCBsYWJlbCA9IFwiV2ViU29ja2V0IHNlcnZlclwiKSB7XG4gICAgaWYgKCF3c3MpIHJldHVyblxuXG4gICAgYXdhaXQgdGltZW91dCh7dGltZW91dDogdGhpcy5nZXRUaW1lb3V0cygpLCBlcnJvck1lc3NhZ2U6IGB0aW1lb3V0IHdoaWxlIGNsb3NpbmcgJHtsYWJlbH1gfSwgYXN5bmMgKCkgPT4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZVxuICAgICAgY29uc3QgdGVybWluYXRlQ2xpZW50ID0gKGNsaWVudCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsaWVudC50ZXJtaW5hdGUoKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgdGVybWluYXRpb24gZXJyb3JzXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRsZSA9IChjYWxsYmFjaywgYXJnKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm5cbiAgICAgICAgc2V0dGxlZCA9IHRydWVcbiAgICAgICAgY2FsbGJhY2soYXJnKVxuICAgICAgfVxuXG4gICAgICB3c3Mub25jZShcImNsb3NlXCIsICgpID0+IHNldHRsZShyZXNvbHZlKSlcbiAgICAgIHdzcy5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiBzZXR0bGUocmVqZWN0LCBlcnJvcikpXG4gICAgICBpZiAod3NzLmNsaWVudHMgJiYgd3NzLmNsaWVudHMuc2l6ZSA+IDApIHtcbiAgICAgICAgd3NzLmNsaWVudHMuZm9yRWFjaCh0ZXJtaW5hdGVDbGllbnQpXG4gICAgICB9XG4gICAgICB3c3MuY2xvc2UoKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikgc2V0dGxlKHJlamVjdCwgZXJyb3IpXG4gICAgICAgIGVsc2Ugc2V0dGxlKHJlc29sdmUpXG4gICAgICB9KVxuICAgIH0pKVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "system-testing",
3
- "version": "1.0.79",
3
+ "version": "1.0.83",
4
4
  "description": "System testing with Selenium and browsers.",
5
5
  "bin": {
6
6
  "system-testing": "build/cli.js"
@@ -47,7 +47,7 @@
47
47
  "watch": "tsc -w"
48
48
  },
49
49
  "dependencies": {
50
- "appium": "3.2.0",
50
+ "appium": "3.2.2",
51
51
  "awaitery": "^1.0.12",
52
52
  "diggerize": "^1.0.9",
53
53
  "eventemitter3": "^5.0.1",
@@ -69,10 +69,13 @@
69
69
  "peerDependenciesMeta": {
70
70
  "expo-router": {
71
71
  "optional": true
72
+ },
73
+ "react": {
74
+ "optional": true
72
75
  }
73
76
  },
74
77
  "devDependencies": {
75
- "@eslint/js": "^9.39.1",
78
+ "@eslint/js": "^10.0.1",
76
79
  "@types/jasmine": "^6.0.0",
77
80
  "@types/node": "^25.0.2",
78
81
  "@types/qs": "^6.14.0",
@@ -80,9 +83,9 @@
80
83
  "@types/selenium-webdriver": "^4.35.4",
81
84
  "appium-chromium-driver": "^2.1.6",
82
85
  "appium-uiautomator2-driver": "6.7.11",
83
- "eslint": "^9.39.1",
84
- "eslint-plugin-jsdoc": "^62.0.0",
85
- "expo-router": "^6.0.21",
86
+ "eslint": "^10.0.3",
87
+ "eslint-plugin-jsdoc": "^62.7.1",
88
+ "expo-router": "^55.0.5",
86
89
  "globals": "^17.0.0",
87
90
  "jasmine": "^6.0.0",
88
91
  "typescript": "^5.9.3"