oxygen-cli 1.27.0 → 1.27.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.27.2 (2023-02-09)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Browser windows were terminated instead of remaining open on failed tests in Oxygen IDE.
7
+
8
+ #### :house: Internal
9
+ * Bump dependencies.
10
+
3
11
  ## v1.27.0 (2023-01-04)
4
12
 
5
13
  #### :beetle: Bug Fix
@@ -73,7 +73,7 @@ class UtilsModule extends _OxygenModule.default {
73
73
  * @return {Object} DecryptResult Object with getDecryptResult method
74
74
  * @example <caption>[javascript] Usage example</caption>
75
75
  * // to encrypt plaintext into ciphertext
76
- * const encrypt = utils.encrypt('https://www.wikipedia.org/');
76
+ * const encrypt = utils.encrypt('https://www.wikipedia.org');
77
77
  * log.info(encrypt); // will print b757ba2c2fc50fbb511d596816ca06c4fa56f4e98ce222f30bc58d5251ed635e
78
78
  *
79
79
  * // to decrypt ciphertext and use it in script
@@ -81,11 +81,11 @@ class UtilsModule extends _OxygenModule.default {
81
81
  * log.info(decrypt); // will print ENCRYPTED
82
82
  *
83
83
  * web.init();
84
- * web.open(decrypt); // will open https://www.wikipedia.org/
84
+ * web.open(decrypt); // will open https://www.wikipedia.org
85
85
  *
86
86
  * // to get original plaintext use getDecryptResult
87
87
  * const value = decrypt.getDecryptResult();
88
- * log.info(value); //will print https://www.wikipedia.org/
88
+ * log.info(value); //will print https://www.wikipedia.org
89
89
  */
90
90
 
91
91
 
@@ -99,7 +99,7 @@ class UtilsModule extends _OxygenModule.default {
99
99
  * @return {String} Encrypted text
100
100
  * @example <caption>[javascript] Usage example</caption>
101
101
  * // to encrypt plaintext into ciphertext
102
- * const encrypt = utils.encrypt('https://www.wikipedia.org/');
102
+ * const encrypt = utils.encrypt('https://www.wikipedia.org');
103
103
  * log.info(encrypt); // will print b757ba2c2fc50fbb511d596816ca06c4fa56f4e98ce222f30bc58d5251ed635e
104
104
  *
105
105
  * // to decrypt ciphertext and use it in script
@@ -107,11 +107,11 @@ class UtilsModule extends _OxygenModule.default {
107
107
  * log.info(decrypt); // will print ENCRYPTED
108
108
  *
109
109
  * web.init();
110
- * web.open(decrypt); // will open https://www.wikipedia.org/
110
+ * web.open(decrypt); // will open https://www.wikipedia.org
111
111
  *
112
112
  * // to get original plaintext use getDecryptResult
113
113
  * const value = decrypt.getDecryptResult();
114
- * log.info(value); //will print https://www.wikipedia.org/
114
+ * log.info(value); //will print https://www.wikipedia.org
115
115
  */
116
116
 
117
117
 
@@ -122,7 +122,7 @@ class UtilsModule extends _OxygenModule.default {
122
122
  * @summary Reads data from csv file
123
123
  * @function readCsv
124
124
  * @param {String} filePath - Absolute path to file
125
- * @param {Object=} options - Options (https://csv.js.org/parse/options/)
125
+ * @param {Object=} options - [Options](https://csv.js.org/parse/options/)
126
126
  */
127
127
 
128
128
 
@@ -175,7 +175,7 @@ class UtilsModule extends _OxygenModule.default {
175
175
  * @function writeCsv
176
176
  * @param {String} filePath - Absolute path to file
177
177
  * @param {Array} data - CSV data in format [{column_name_1: 'foo', column_name_2: 'bar'}]
178
- * @param {Object=} options - Options (https://github.com/anton-bot/objects-to-csv#async-todiskfilename-options)
178
+ * @param {Object=} options - [Options](https://github.com/anton-bot/objects-to-csv#async-todiskfilename-options)
179
179
  */
180
180
 
181
181
 
@@ -234,7 +234,7 @@ class UtilsModule extends _OxygenModule.default {
234
234
  * @summary Parse XML data to JS object
235
235
  * @function xmlToJson
236
236
  * @param {string|Buffer} xmlDataStr - Like <root a="nice" b="very nice" ><a>wow</a></root>
237
- * @param {boolean|Object} options - Options (https://github.com/NaturalIntelligence/fast-xml-parser/blob/b0ea6358844ccca95cab02758e038c1c3321427e/docs/v4/2.XMLparseOptions.md)
237
+ * @param {boolean|Object} options - [Options](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md)
238
238
  */
239
239
 
240
240
 
@@ -251,4 +251,4 @@ class UtilsModule extends _OxygenModule.default {
251
251
  }
252
252
 
253
253
  exports.default = UtilsModule;
254
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBOztBQUNB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LE1BQU0sR0FBRyxJQUFJQyx1QkFBY0MsU0FBbEIsQ0FBNEJqRSxPQUE1QixDQUFmO0FBQ0EsWUFBTWtFLE1BQU0sR0FBR0gsTUFBTSxDQUFDM0MsS0FBUCxDQUFhMEMsVUFBYixDQUFmO0FBQ0EsYUFBT0ksTUFBUDtBQUNILEtBSkQsQ0FJRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQnVDLFNBQWxDLEVBQTZDbkMsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjs7QUF2TGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdXRpbHNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtZXRob2RzLlxyXG4gKi9cclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3V0aWxzJztcclxuaW1wb3J0IGZhc3RYbWxQYXJzZXIgZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGxpYlV0aWxzIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgRXhjZWxSZWFkZXIgZnJvbSAnLi4vbGliL3BhcmFtLXJlYWRlci1leGNlbCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsc01vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwidXRpbHNcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGF1c2UgdGVzdCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQGZ1bmN0aW9uIHBhdXNlXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbXMgLSBNaWxsaXNlY29uZHMgdG8gcGF1c2UgdGhlIGV4ZWN1dGlvbiBmb3IuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdXNlKG1zKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShtcywgJ21zJyk7XHJcbiAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAobXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVjcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZGVjcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IERlY3J5cHRSZXN1bHQgT2JqZWN0IHdpdGggZ2V0RGVjcnlwdFJlc3VsdCBtZXRob2RcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmRlY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFbmNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBlbmNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gRW5jcnlwdGVkIHRleHRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmVuY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9jc3YuanMub3JnL3BhcnNlL29wdGlvbnMvKVxyXG4gICAgICovXHJcbiAgICByZWFkQ3N2KGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZS9saWIvc3luYycpO1xyXG4gICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcblxyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChleHQgIT09ICcuY3N2JyAmJiBleHQgIT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5zdXBwb3J0ZWQgZmlsZSBleHRlbnNpb246ICcgKyBleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbmFibGUgdG8gcmVhZCBwYXJhbWV0ZXJzIGZpbGU6ICcgKyBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENTVnMgcHJvZHVjZWQgYnkgT1MgWCBFeGNlbCBoYXZlIGhlYWRlciB0ZXJtaW5hdGVkIHdpdGggMGQwZDBhXHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXFxyXFxyL2csICdcXHInKTtcclxuXHJcbiAgICAgICAgLy8gc3RyaXAgQk9NIGZvciBVVEYtOFxyXG4gICAgICAgIHZhciBib20gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYXRjaGVzIDB4RUZCQkJGIChVVEYtOCBCT00pIGJlY2F1c2UgdGhlIGJ1ZmZlci10by1zdHJpbmdcclxuICAgICAgICAvLyBjb252ZXJzaW9uIHRyYW5zbGF0ZXMgaXQgdG8gMHhGRUZGIChVVEYtMTYgQk9NKVxyXG4gICAgICAgIGlmIChkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICBib20gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHRhYmxlID0gcGFyc2UoZGF0YSwgeyBib206IGJvbSwgY29sdW1uczogdHJ1ZSwgdHJpbTogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXcml0ZXMgZGF0YSBpbnRvIGNzdiBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gd3JpdGVDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAtIENTViBkYXRhIGluIGZvcm1hdCBbe2NvbHVtbl9uYW1lXzE6ICdmb28nLCBjb2x1bW5fbmFtZV8yOiAnYmFyJ31dXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIChodHRwczovL2dpdGh1Yi5jb20vYW50b24tYm90L29iamVjdHMtdG8tY3N2I2FzeW5jLXRvZGlza2ZpbGVuYW1lLW9wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdyaXRlQ3N2KGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBPYmplY3RzVG9Dc3YgPSByZXF1aXJlKCdvYmplY3RzLXRvLWNzdicpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3YgPSBuZXcgT2JqZWN0c1RvQ3N2KGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBjc3YudG9EaXNrKGZpbGVQYXRoLCB7IGFsbENvbHVtbnM6IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBYbHN4IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkWGxzeFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gLSBBcnJheSBvZiB4bHN4IGRhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhZFhsc3goZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZGVyLnJlYWQoZmlsZVBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXNlcyB0aGUgRE5TIHByb3RvY29sIHRvIHJlc29sdmUgYSBob3N0IG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBkbnNSZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdG5hbWUgLSBIb3N0IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gcnJUeXBlIC0gUmVzb3VyY2UgcmVjb3JkIHR5cGUuIERlZmF1bHQ6ICdBJy5cclxuICAgICAqIEByZXR1cm4ge1N0cmluZ1tdIHwgT2JqZWN0fSAtIEFycmF5IG9yIE9iamVjdCBvZiByZXNvdXJjZSByZWNvcmRzLiBUaGUgdHlwZSBhbmQgc3RydWN0dXJlIG9mIGluZGl2aWR1YWwgcmVzdWx0cyB2YXJ5IGJhc2VkIG9uIHJydHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkbnNSZXNvbHZlKGhvc3RuYW1lLCByclR5cGUgPSAnQScpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcclxuICAgICAgICBjb25zdCByclR5cGVzID0gWydBJywgJ0FBQUEnLCAnQU5ZJywgJ0NOQU1FJywgJ01YJywgJ05BUFRSJywgJ05TJywgJ1BUUicsICdTT0EnLCAnU1JWJywgJ1RYVCddO1xyXG5cclxuICAgICAgICBpZiAoIXJyVHlwZXMuaW5jbHVkZXMocnJUeXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdyclR5cGUnLiBBdmFpbGFibGUgcnJUeXBlIHZhbHVlczogJHtyclR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkbnNQcm9taXNlcyA9IHJlcXVpcmUoJ2RucycpLnByb21pc2VzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkbnNQcm9taXNlcy5yZXNvbHZlKGhvc3RuYW1lLCByclR5cGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXJzZSBYTUwgZGF0YSB0byBKUyBvYmplY3QgXHJcbiAgICAgKiBAZnVuY3Rpb24geG1sVG9Kc29uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGFTdHIgLSBMaWtlIDxyb290IGE9XCJuaWNlXCIgYj1cInZlcnkgbmljZVwiID48YT53b3c8L2E+PC9yb290PlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9OYXR1cmFsSW50ZWxsaWdlbmNlL2Zhc3QteG1sLXBhcnNlci9ibG9iL2IwZWE2MzU4ODQ0Y2NjYTk1Y2FiMDI3NThlMDM4YzFjMzMyMTQyN2UvZG9jcy92NC8yLlhNTHBhcnNlT3B0aW9ucy5tZCkgXHJcbiAgICAgKi9cclxuICAgIHhtbFRvSnNvbih4bWxEYXRhU3RyLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdFhtbFBhcnNlci5YTUxQYXJzZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHBhcnNlci5wYXJzZSh4bWxEYXRhU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5YTUxfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
254
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxXQUFXLEdBQUcsT0FBcEI7O0FBU2UsTUFBTUMsV0FBTixTQUEwQkMscUJBQTFCLENBQXVDO0FBQ2xEQyxFQUFBQSxXQUFXLENBQUNDLE9BQUQsRUFBVUMsT0FBVixFQUFtQkMsRUFBbkIsRUFBdUJDLE1BQXZCLEVBQStCQyxPQUEvQixFQUF3Q0MsUUFBeEMsRUFBa0Q7QUFDekQsVUFBTUwsT0FBTixFQUFlQyxPQUFmLEVBQXdCQyxFQUF4QixFQUE0QkMsTUFBNUIsRUFBb0NDLE9BQXBDLEVBQTZDQyxRQUE3QztBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLElBQTFCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixJQUF0QjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ1ksTUFBSkMsSUFBSSxHQUFHO0FBQ1AsV0FBT1osV0FBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ2UsUUFBTGEsS0FBSyxDQUFDQyxFQUFELEVBQUs7QUFDWkMsbUJBQU1DLCtCQUFOLENBQXNDRixFQUF0QyxFQUEwQyxJQUExQzs7QUFDQSxVQUFNRyxjQUFTQyxLQUFULENBQWVKLEVBQWYsQ0FBTjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDSUssRUFBQUEsT0FBTyxDQUFDQyxJQUFELEVBQU87QUFDVixXQUFPSCxjQUFTRSxPQUFULENBQWlCQyxJQUFqQixDQUFQO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJQyxFQUFBQSxPQUFPLENBQUNELElBQUQsRUFBTztBQUNWLFdBQU9ILGNBQVNJLE9BQVQsQ0FBaUJELElBQWpCLENBQVA7QUFDSDtBQUNEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lFLEVBQUFBLE9BQU8sQ0FBQ0MsUUFBRCxFQUFXbkIsT0FBTyxHQUFHLEVBQXJCLEVBQXlCO0FBQzVCLFVBQU1vQixLQUFLLEdBQUdDLE9BQU8sQ0FBQyxvQkFBRCxDQUFyQjs7QUFDQSxRQUFJQyxFQUFFLEdBQUdELE9BQU8sQ0FBQyxJQUFELENBQWhCOztBQUNBLFFBQUlFLElBQUksR0FBR0YsT0FBTyxDQUFDLE1BQUQsQ0FBbEI7O0FBRUEsUUFBSUcsR0FBRyxHQUFHRCxJQUFJLENBQUNFLE9BQUwsQ0FBYU4sUUFBYixDQUFWOztBQUNBLFFBQUlLLEdBQUcsS0FBSyxNQUFSLElBQWtCQSxHQUFHLEtBQUssTUFBOUIsRUFBc0M7QUFDbEMsWUFBTSxJQUFJRSxvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQkMsU0FBbEMsRUFBNkMsaUNBQWlDTCxHQUE5RSxDQUFOO0FBQ0g7O0FBRUQsUUFBSU0sSUFBSjs7QUFDQSxRQUFJO0FBQ0FBLE1BQUFBLElBQUksR0FBR1IsRUFBRSxDQUFDUyxZQUFILENBQWdCWixRQUFoQixFQUEwQixNQUExQixDQUFQO0FBQ0gsS0FGRCxDQUVFLE9BQU9hLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSU4sb0JBQUosQ0FBWUMsZ0JBQVlDLFNBQVosQ0FBc0JDLFNBQWxDLEVBQTZDLHFDQUFxQ0csQ0FBbEYsQ0FBTjtBQUNILEtBZjJCLENBaUI1Qjs7O0FBQ0FGLElBQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDRyxPQUFMLENBQWEsT0FBYixFQUFzQixJQUF0QixDQUFQLENBbEI0QixDQW9CNUI7O0FBQ0EsUUFBSUMsR0FBRyxHQUFHLEtBQVYsQ0FyQjRCLENBc0I1QjtBQUNBOztBQUNBLFFBQUlKLElBQUksQ0FBQ0ssVUFBTCxDQUFnQixDQUFoQixNQUF1QixNQUEzQixFQUFtQztBQUMvQkQsTUFBQUEsR0FBRyxHQUFHLElBQU47QUFDSDs7QUFFRCxRQUFJO0FBQ0EsVUFBSUUsS0FBSyxHQUFHaEIsS0FBSyxDQUFDVSxJQUFELEVBQU87QUFBRUksUUFBQUEsR0FBRyxFQUFFQSxHQUFQO0FBQVlHLFFBQUFBLE9BQU8sRUFBRSxJQUFyQjtBQUEyQkMsUUFBQUEsSUFBSSxFQUFFLElBQWpDO0FBQXVDLFdBQUd0QztBQUExQyxPQUFQLENBQWpCO0FBQ0gsS0FGRCxDQUVFLE9BQU9nQyxDQUFQLEVBQVU7QUFDUixZQUFNLElBQUlOLG9CQUFKLENBQVlDLGdCQUFZQyxTQUFaLENBQXNCQyxTQUFsQyxFQUE2Q0csQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7O0FBRUQsV0FBT0gsS0FBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNrQixRQUFSSSxRQUFRLENBQUNyQixRQUFELEVBQVdXLElBQVgsRUFBaUI5QixPQUFPLEdBQUcsRUFBM0IsRUFBK0I7QUFDekMsUUFBSTtBQUNBLFlBQU15QyxZQUFZLEdBQUdwQixPQUFPLENBQUMsZ0JBQUQsQ0FBNUI7O0FBQ0EsWUFBTXFCLEdBQUcsR0FBRyxJQUFJRCxZQUFKLENBQWlCWCxJQUFqQixDQUFaO0FBQ0EsWUFBTVksR0FBRyxDQUFDQyxNQUFKLENBQVd4QixRQUFYLEVBQXFCO0FBQUV5QixRQUFBQSxVQUFVLEVBQUUsSUFBZDtBQUFvQixXQUFHNUM7QUFBdkIsT0FBckIsQ0FBTjtBQUNILEtBSkQsQ0FJRSxPQUFPZ0MsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQkMsU0FBbEMsRUFBNkNHLENBQUMsQ0FBQ08sT0FBL0MsQ0FBTjtBQUNIO0FBQ0o7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNrQixRQUFSTSxRQUFRLENBQUMxQixRQUFELEVBQVc7QUFDckIsVUFBTTJCLE1BQU0sR0FBRyxJQUFJQyx5QkFBSixFQUFmO0FBQ0EsV0FBTyxNQUFNRCxNQUFNLENBQUNFLElBQVAsQ0FBWTdCLFFBQVosQ0FBYjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNvQixRQUFWOEIsVUFBVSxDQUFDQyxRQUFELEVBQVdDLE1BQU0sR0FBRyxHQUFwQixFQUF5QjtBQUNyQ3hDLG1CQUFNeUMsNEJBQU4sQ0FBbUNGLFFBQW5DLEVBQTZDLFVBQTdDOztBQUNBLFVBQU1HLE9BQU8sR0FBRyxDQUFDLEdBQUQsRUFBTSxNQUFOLEVBQWMsS0FBZCxFQUFxQixPQUFyQixFQUE4QixJQUE5QixFQUFvQyxPQUFwQyxFQUE2QyxJQUE3QyxFQUFtRCxLQUFuRCxFQUEwRCxLQUExRCxFQUFpRSxLQUFqRSxFQUF3RSxLQUF4RSxDQUFoQjs7QUFFQSxRQUFJLENBQUNBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQkgsTUFBakIsQ0FBTCxFQUErQjtBQUMzQixZQUFNLElBQUl6QixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQjJCLFlBQWxDLEVBQWlELHlEQUF3REYsT0FBTyxDQUFDRyxJQUFSLENBQWEsSUFBYixDQUFtQixFQUE1SCxDQUFOO0FBQ0g7O0FBRUQsVUFBTUMsV0FBVyxHQUFHcEMsT0FBTyxDQUFDLEtBQUQsQ0FBUCxDQUFlcUMsUUFBbkM7O0FBQ0EsUUFBSTtBQUNBLGFBQU8sTUFBTUQsV0FBVyxDQUFDRSxPQUFaLENBQW9CVCxRQUFwQixFQUE4QkMsTUFBOUIsQ0FBYjtBQUNILEtBRkQsQ0FFRSxPQUFPbkIsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQmdDLFNBQWxDLEVBQTZDNUIsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0lzQixFQUFBQSxTQUFTLENBQUNDLFVBQUQsRUFBYTlELE9BQU8sR0FBRyxFQUF2QixFQUEyQjtBQUNoQyxRQUFJO0FBQ0EsWUFBTStELE1BQU0sR0FBRyxJQUFJQyx1QkFBY0MsU0FBbEIsQ0FBNEJqRSxPQUE1QixDQUFmO0FBQ0EsWUFBTWtFLE1BQU0sR0FBR0gsTUFBTSxDQUFDM0MsS0FBUCxDQUFhMEMsVUFBYixDQUFmO0FBQ0EsYUFBT0ksTUFBUDtBQUNILEtBSkQsQ0FJRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQnVDLFNBQWxDLEVBQTZDbkMsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjs7QUF2TGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdXRpbHNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtZXRob2RzLlxyXG4gKi9cclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3V0aWxzJztcclxuaW1wb3J0IGZhc3RYbWxQYXJzZXIgZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGxpYlV0aWxzIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgRXhjZWxSZWFkZXIgZnJvbSAnLi4vbGliL3BhcmFtLXJlYWRlci1leGNlbCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsc01vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwidXRpbHNcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGF1c2UgdGVzdCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQGZ1bmN0aW9uIHBhdXNlXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbXMgLSBNaWxsaXNlY29uZHMgdG8gcGF1c2UgdGhlIGV4ZWN1dGlvbiBmb3IuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdXNlKG1zKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShtcywgJ21zJyk7XHJcbiAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAobXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVjcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZGVjcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IERlY3J5cHRSZXN1bHQgT2JqZWN0IHdpdGggZ2V0RGVjcnlwdFJlc3VsdCBtZXRob2RcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcnKTtcclxuICAgICAqIGxvZy5pbmZvKGVuY3J5cHQpOyAvLyB3aWxsIHByaW50IGI3NTdiYTJjMmZjNTBmYmI1MTFkNTk2ODE2Y2EwNmM0ZmE1NmY0ZTk4Y2UyMjJmMzBiYzU4ZDUyNTFlZDYzNWVcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZGVjcnlwdCBjaXBoZXJ0ZXh0IGFuZCB1c2UgaXQgaW4gc2NyaXB0ICBcclxuICAgICAqIGNvbnN0IGRlY3J5cHQgPSB1dGlscy5kZWNyeXB0KGVuY3J5cHQpO1xyXG4gICAgICogbG9nLmluZm8oZGVjcnlwdCk7IC8vIHdpbGwgcHJpbnQgRU5DUllQVEVEXHJcbiAgICAgKiBcclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIub3BlbihkZWNyeXB0KTsgLy8gd2lsbCBvcGVuIGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqL1xyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmRlY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFbmNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBlbmNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gRW5jcnlwdGVkIHRleHRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcnKTtcclxuICAgICAqIGxvZy5pbmZvKGVuY3J5cHQpOyAvLyB3aWxsIHByaW50IGI3NTdiYTJjMmZjNTBmYmI1MTFkNTk2ODE2Y2EwNmM0ZmE1NmY0ZTk4Y2UyMjJmMzBiYzU4ZDUyNTFlZDYzNWVcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZGVjcnlwdCBjaXBoZXJ0ZXh0IGFuZCB1c2UgaXQgaW4gc2NyaXB0ICBcclxuICAgICAqIGNvbnN0IGRlY3J5cHQgPSB1dGlscy5kZWNyeXB0KGVuY3J5cHQpO1xyXG4gICAgICogbG9nLmluZm8oZGVjcnlwdCk7IC8vIHdpbGwgcHJpbnQgRU5DUllQVEVEXHJcbiAgICAgKiBcclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIub3BlbihkZWNyeXB0KTsgLy8gd2lsbCBvcGVuIGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqL1xyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmVuY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gW09wdGlvbnNdKGh0dHBzOi8vY3N2LmpzLm9yZy9wYXJzZS9vcHRpb25zLylcclxuICAgICAqL1xyXG4gICAgcmVhZENzdihmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UvbGliL3N5bmMnKTtcclxuICAgICAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5cclxuICAgICAgICB2YXIgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBpZiAoZXh0ICE9PSAnLmNzdicgJiYgZXh0ICE9PSAnLnR4dCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1Vuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uOiAnICsgZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5hYmxlIHRvIHJlYWQgcGFyYW1ldGVycyBmaWxlOiAnICsgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDU1ZzIHByb2R1Y2VkIGJ5IE9TIFggRXhjZWwgaGF2ZSBoZWFkZXIgdGVybWluYXRlZCB3aXRoIDBkMGQwYVxyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcclxcci9nLCAnXFxyJyk7XHJcblxyXG4gICAgICAgIC8vIHN0cmlwIEJPTSBmb3IgVVRGLThcclxuICAgICAgICB2YXIgYm9tID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2F0Y2hlcyAweEVGQkJCRiAoVVRGLTggQk9NKSBiZWNhdXNlIHRoZSBidWZmZXItdG8tc3RyaW5nXHJcbiAgICAgICAgLy8gY29udmVyc2lvbiB0cmFuc2xhdGVzIGl0IHRvIDB4RkVGRiAoVVRGLTE2IEJPTSlcclxuICAgICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgYm9tID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZSA9IHBhcnNlKGRhdGEsIHsgYm9tOiBib20sIGNvbHVtbnM6IHRydWUsIHRyaW06IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV3JpdGVzIGRhdGEgaW50byBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHdyaXRlQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgLSBDU1YgZGF0YSBpbiBmb3JtYXQgW3tjb2x1bW5fbmFtZV8xOiAnZm9vJywgY29sdW1uX25hbWVfMjogJ2Jhcid9XVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gW09wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRvbi1ib3Qvb2JqZWN0cy10by1jc3YjYXN5bmMtdG9kaXNrZmlsZW5hbWUtb3B0aW9ucylcclxuICAgICAqL1xyXG4gICAgYXN5bmMgd3JpdGVDc3YoZmlsZVBhdGgsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IE9iamVjdHNUb0NzdiA9IHJlcXVpcmUoJ29iamVjdHMtdG8tY3N2Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNzdiA9IG5ldyBPYmplY3RzVG9Dc3YoZGF0YSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNzdi50b0Rpc2soZmlsZVBhdGgsIHsgYWxsQ29sdW1uczogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmVhZHMgZGF0YSBmcm9tIFhsc3ggZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRYbHN4XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEByZXR1cm4ge0FycmF5fSAtIEFycmF5IG9mIHhsc3ggZGF0YVxyXG4gICAgICovXHJcbiAgICBhc3luYyByZWFkWGxzeChmaWxlUGF0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBFeGNlbFJlYWRlcigpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZWFkZXIucmVhZChmaWxlUGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBVc2VzIHRoZSBETlMgcHJvdG9jb2wgdG8gcmVzb2x2ZSBhIGhvc3QgbmFtZVxyXG4gICAgICogQGZ1bmN0aW9uIGRuc1Jlc29sdmVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBob3N0bmFtZSAtIEhvc3QgbmFtZSB0byByZXNvbHZlLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSByclR5cGUgLSBSZXNvdXJjZSByZWNvcmQgdHlwZS4gRGVmYXVsdDogJ0EnLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nW10gfCBPYmplY3R9IC0gQXJyYXkgb3IgT2JqZWN0IG9mIHJlc291cmNlIHJlY29yZHMuIFRoZSB0eXBlIGFuZCBzdHJ1Y3R1cmUgb2YgaW5kaXZpZHVhbCByZXN1bHRzIHZhcnkgYmFzZWQgb24gcnJ0eXBlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRuc1Jlc29sdmUoaG9zdG5hbWUsIHJyVHlwZSA9ICdBJykge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdG5hbWUsICdob3N0bmFtZScpO1xyXG4gICAgICAgIGNvbnN0IHJyVHlwZXMgPSBbJ0EnLCAnQUFBQScsICdBTlknLCAnQ05BTUUnLCAnTVgnLCAnTkFQVFInLCAnTlMnLCAnUFRSJywgJ1NPQScsICdTUlYnLCAnVFhUJ107XHJcblxyXG4gICAgICAgIGlmICghcnJUeXBlcy5pbmNsdWRlcyhyclR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGBJbnZhbGlkIGFyZ3VtZW50IC0gJ3JyVHlwZScuIEF2YWlsYWJsZSByclR5cGUgdmFsdWVzOiAke3JyVHlwZXMuam9pbignLCAnKX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRuc1Byb21pc2VzID0gcmVxdWlyZSgnZG5zJykucHJvbWlzZXM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRuc1Byb21pc2VzLnJlc29sdmUoaG9zdG5hbWUsIHJyVHlwZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuRE5TX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBhcnNlIFhNTCBkYXRhIHRvIEpTIG9iamVjdCBcclxuICAgICAqIEBmdW5jdGlvbiB4bWxUb0pzb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0geG1sRGF0YVN0ciAtIExpa2UgPHJvb3QgYT1cIm5pY2VcIiBiPVwidmVyeSBuaWNlXCIgPjxhPndvdzwvYT48L3Jvb3Q+XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBvcHRpb25zIC0gW09wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9OYXR1cmFsSW50ZWxsaWdlbmNlL2Zhc3QteG1sLXBhcnNlci9ibG9iL21hc3Rlci9kb2NzL3Y0LzIuWE1McGFyc2VPcHRpb25zLm1kKSBcclxuICAgICAqL1xyXG4gICAgeG1sVG9Kc29uKHhtbERhdGFTdHIsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBmYXN0WG1sUGFyc2VyLlhNTFBhcnNlcihvcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gcGFyc2VyLnBhcnNlKHhtbERhdGFTdHIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlhNTF9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
@@ -427,19 +427,23 @@ class WebModule extends _WebDriverModule.default {
427
427
  }
428
428
 
429
429
  async closeBrowserWindows(status) {
430
- try {
431
- await this.deleteSession();
432
- } catch (e) {
433
- this.logger.warn('Failed to close browser windows:', e);
434
- }
430
+ if (status && 'FAILED' === status.toUpperCase() && this.options && this.options.seleniumPid) {
431
+ this.disposeContinue(status);
432
+ } else {
433
+ try {
434
+ await this.deleteSession();
435
+ } catch (e) {
436
+ this.logger.warn('Failed to close browser windows:', e);
437
+ }
435
438
 
436
- this.disposeContinue();
439
+ this.disposeContinue();
440
+ }
437
441
  }
438
442
 
439
443
  disposeContinue(status) {
440
444
  this.driver = null;
441
445
  this.lastNavigationStartTime = null;
442
- super.dispose(); // cleanup chromedriver and edgedriver only when running from within the IDE and test did not fail
446
+ super.dispose(); // cleanup chromedriver's only when running from within the IDE and test did not fail
443
447
 
444
448
  if (this.options && this.options.seleniumPid && (!status || 'FAILED' !== status.toUpperCase())) {
445
449
  try {
@@ -462,12 +466,12 @@ class WebModule extends _WebDriverModule.default {
462
466
  }
463
467
  } catch (e) {// ignore errors
464
468
  }
469
+ } // cleanup edgedriver's only when running from within the IDE and test did not fail
465
470
 
471
+
472
+ if (this.options && this.options.seleniumPid && (!status || 'FAILED' !== status.toUpperCase())) {
466
473
  try {
467
- if (process.platform === 'win32') {
468
- (0, _child_process.execSync)('taskkill /IM msedgedriver.exe /F', {
469
- stdio: ['ignore', 'ignore', 'ignore']
470
- });
474
+ if (process.platform === 'win32') {// ignore for now
471
475
  } else {
472
476
  let pgrepResult = (0, _child_process.execSync)("pgrep -d' ' msedgedriver");
473
477
 
@@ -899,4 +903,4 @@ class WebModule extends _WebDriverModule.default {
899
903
  }
900
904
 
901
905
  exports.default = WebModule;
902
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiZGVmYXVsdEJyb3dzZXIiLCJicm93c2VyTmFtZSIsImVycm9yQ29kZSIsIklOVkFMSURfQ0FQQUJJTElUSUVTIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsIlBFUkZFQ1RPIiwib3BlbkRldmljZVRpbWVvdXQiLCJkcml2ZXIiLCJ3ZGlvIiwicmVtb3RlIiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInNlbGVuaXVtVGltZW91dCIsInBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsInBlcmZlY3RvUmVwb3J0aW5nIiwiUGVyZmVjdG8iLCJQZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJ3ZWJkcml2ZXIiLCJleGVjdXRlU2NyaXB0IiwiY29tbWFuZCIsInBhcmFtcyIsImV4ZWN1dGUiLCJyZXBvcnRpbmdDbGllbnQiLCJQZXJmZWN0b1JlcG9ydGluZ0NsaWVudCIsInRlc3RTdGFydCIsImUiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0IiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsInN0ZXBzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZmFpbGVkRmluZGVkIiwiZmluZCIsIml0ZW0iLCJ0b1VwcGVyQ2FzZSIsIlNBVUNFTEFCUyIsInVzZXJuYW1lIiwiYWNjZXNzS2V5IiwicGFzc2VkIiwiaWQiLCJzZXNzaW9uSWQiLCJib2R5IiwibXlBY2NvdW50IiwiU2F1Y2VMYWJzIiwidXBkYXRlSm9iIiwic3RvcEpvYiIsIl9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0IiwiZGVsZXRlU2Vzc2lvbiIsIlRFU1RJTkdCT1QiLCJfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdCIsInRlc3RTdG9wIiwiQ29uc3RhbnRzIiwicmVzdWx0cyIsImZhaWxlZCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2siLCJjbG9zZUJyb3dzZXJXaW5kb3dzIiwiZGlzcG9zZUNvbnRpbnVlIiwid2FybiIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGRpbyIsInBncmVwUmVzdWx0IiwidG9TdHJpbmciLCJyZXNvbHZlIiwiX2l0ZXJhdGlvblN0YXJ0IiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImxvZyIsInB1c2giLCJfYWRqdXN0QnJvd3NlckxvZyIsIl9nZXRIQVIiLCJoYXIiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJ0YWtlU2NyZWVuc2hvdCIsInJldHZhbCIsImNhbGwiLCJQcm9taXNlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwiaGFuZGxlcyIsImdldFdpbmRvd0hhbmRsZXMiLCJoYW5kbGUiLCJzd2l0Y2hUb1dpbmRvdyIsImltYWdlIiwidGl0bGUiLCJnZXRUaXRsZSIsInRleHRUb0ltYWdlIiwicmVxdWlyZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsIm1lcmdlZEltYWdlIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJsZXZlbCIsInNyYyIsIl9nZXRTdGF0cyIsImNvbW1hbmROYW1lIiwiZmV0Y2hTdGF0cyIsIm5hdmlnYXRpb25TdGFydCIsImRvbUNvbnRlbnRMb2FkZWQiLCJsb2FkIiwic2FtZVBhZ2UiLCJsYXN0RXJyb3IiLCJ0aW1pbmdzIiwid2luZG93IiwidGltaW5nIiwiZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQiLCJsb2FkRXZlbnRTdGFydCIsImV4ZWN1dGVFcnJvciIsImNvbnNvbGUiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsImNvdW50ZXIiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwidHlwZXMiLCJnZXRMb2dUeXBlcyIsImdldExvZ3MiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudHMiLCJtc2dPYmoiLCJjaGVja1dhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyIiwid2FpdEZvckFuZ3VsYXIiLCJhdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3Jp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Z0QsU0FBVSxPQURqRTtBQUVaMEksUUFBQUEsTUFBTSxFQUFFLEtBRkk7QUFHWkMsUUFBQUEsSUFBSSxFQUFFLElBSE07QUFJWkMsUUFBQUEsa0JBQWtCLEVBQUUsS0FKUjtBQUtaM0ksUUFBQUEsSUFBSSxFQUFFK0gsV0FMTTtBQU1aLGdCQUFRO0FBQ0osa0JBQVEsS0FBS2hNLFFBQUwsQ0FBY0MsSUFEbEI7QUFFSixrQkFBUSxLQUFLRCxRQUFMLENBQWNFLEdBRmxCO0FBR0osNkJBQW1CO0FBSGY7QUFOSSxPQUFoQjs7QUFhQSxVQUFJO0FBQ0EsOEJBQVE1QyxPQUFSLEVBQWlCLENBQUNxRixHQUFELEVBQU1rSyxHQUFOLEVBQVc1SSxJQUFYLEtBQW9CO0FBQ2pDeUIsVUFBQUEsT0FBTztBQUNWLFNBRkQ7QUFHSCxPQUpELENBSUUsT0FBT3pELENBQVAsRUFBVTtBQUNSLGFBQUt4RSxNQUFMLENBQVk0RSxLQUFaLENBQWtCLG1EQUFtREosQ0FBQyxDQUFDd0QsUUFBRixFQUFyRTtBQUNBQyxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQTFCTSxDQUFQO0FBMkJIOztBQXp2QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3ZWJcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGJyb3dzZXIgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKk5vdGVzOioqICBcclxuICogICBcclxuICogQ29tbWFuZHMgd2hpY2ggb3BlcmF0ZSBvbiBlbGVtZW50cyBzdWNoIGFzIGNsaWNrLCBhc3NlcnQsIHdhaXRGb3IsIHR5cGUsIHNlbGVjdCwgYW5kIG90aGVycyB3aWxsIGF1dG9tYXRpY2FsbHkgd2FpdCBmb3IgYSBwZXJpb2Qgb2YgdGltZSBmb3IgdGhlIGVsZW1lbnQgdG8gYXBwZWFyIGluIERPTSBhbmQgYmVjb21lIHZpc2libGUuIEJ5IGRlZmF1bHQgdGhpcyBwZXJpb2QgZXF1YWxzIHRvIDYwIHNlY29uZHMsIGJ1dCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgYHNldFRpbWVvdXRgY29tbWFuZC5cclxuICogICBcclxuICogKipTdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYHJlZ2V4aTpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgZXhhY3Q6U1RSSU5HYCAtIE1hdGNoIHRoZSBzdHJpbmcgdmVyYmF0aW0uXHJcbiAqICAqIGBnbG9iOlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBnbG9iIHBhdHRlcm4uIGA/YCB3aWxsIG1hdGNoIGFueSBzaW5nbGUgY2hhcmFjdGVyIGV4Y2VwdCBuZXcgbGluZSBcXChcXG5cXCkuIGAqYCB3aWxsIG1hdGNoIGFueSBzZXF1ZW5jZSBcXCgwIG9yIG1vcmVcXCkgb2YgY2hhcmFjdGVycyBleGNlcHQgbmV3IGxpbmUuIEVtcHR5ICAgICBQQVRURVJOIHdpbGwgbWF0Y2ggb25seSBvdGhlciBlbXB0eSBzdHJpbmdzLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBTYW1lIGFzIGdsb2IgbWF0Y2hpbmcuICBcclxuICpcclxuICogKipMb2NhdG9yczoqKiBcclxuICogXHJcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYW4gZWxlbWVudCBsb2NhdG9yIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgbG9jYXRvciB0eXBlcyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElEIGF0dHJpYnV0ZS5cclxuICogICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiAgKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBsaW5rIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBOQU1FIGF0dHJpYnV0ZS5cclxuICogICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAgKiBgKFhQQVRIKVtdYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICovXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBxdW90ZXMgKi9cclxuaW1wb3J0IHsgaGFyRnJvbU1lc3NhZ2VzIH0gZnJvbSAnY2hyb21lLWhhcic7XHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQgU2F1Y2VMYWJzIGZyb20gJ3NhdWNlbGFicyc7XHJcbmltcG9ydCBsYW1iZGFSZXN0Q2xpZW50IGZyb20gJ0BsYW1iZGF0ZXN0L25vZGUtcmVzdC1jbGllbnQnO1xyXG5pbXBvcnQgVGVzdGluZ0JvdCBmcm9tICd0ZXN0aW5nYm90LWFwaSc7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3ZWInO1xyXG5jb25zdCBERUZBVUxUX1NFTEVOSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnY2hyb21lJztcclxuY29uc3QgREVGQVVMVF9NT0JJTEVfQlJPV1NFUiA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCAnY2xpY2snXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBuZXcgU2VsZW5pdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc2VsZW5pdW1VcmwgLSBSZW1vdGUgc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2Fwcywgc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGNhcGFiaWxpdGllcyBlaXRoZXIgZnJvbSBpbml0IG1ldGhvZCBhcmd1bWVudCBvciBmcm9tIGNvbnRleHQgcGFyYW1ldGVycyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBicm93c2VyTmFtZSBjYXBzIGZyb20gb3B0aW9ucy4gRklYTUU6IHdoeSBpcyB0aGlzIGV2ZW4gbmVlZGVkP1xyXG4gICAgICAgIGxldCBkZWZhdWx0QnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZSB8fCBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICAgICAgZGVmYXVsdEJyb3dzZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGSVhNRTogc2hhbGwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGJyb3dzZXJOYW1lIGlzIG5vdCBzcGVjaWZpZWQsIG5laXRoZXIgaW4gY2FwcyBub3IgaW4gb3B0aW9ucz8hXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5JTlZBTElEX0NBUEFCSUxJVElFUyxcclxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBgd2ViYCBtb2R1bGUgLSBicm93c2VyTmFtZSBtdXN0IGJlIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBicm93c2VyTmFtZS1zXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWUnKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGlzIHNwZWNpZmllZCBhcyAnaWUnIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBhbmQgcG9zc2libHkgc3VpdGVzXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzICdpbnRlcm5ldCBleHBsb3JlcidcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gJ2ludGVybmV0IGV4cGxvcmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1snbGFtYmRhOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBsYW1iZGF0ZXN0IGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gcGVyZmVjdG9Nb2JpbGUgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgIT09ICdNaWNyb3NvZnRFZGdlJykge1xyXG4gICAgICAgICAgICAvLyBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzIGFsbCBicm93c2VyTmFtZXMgdG8gYmUgbG93ZXJjYXNlXHJcbiAgICAgICAgICAgIC8vIGV4Y2VwdCBcIk1pY3Jvc29mdEVkZ2VcIlxyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gc3BlY2lmeWluZyB0aGlzIGxlYWRzIENocm9tZSA3NysgdG8gcmVmdXNlIGxvYWRpbmdcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmxvZ2dpbmdQcmVmcyA9IHsgICAgICAgICAgICAgLy8gZm9yIENocm9tZURyaXZlciA8IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuY2hyb21lT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZMb2dnaW5nUHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVOZXR3b3JrOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVBhZ2U6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2Uoc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGluaXRFcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBhdGggPSAnL25leHBlcmllbmNlL3BlcmZlY3RvbW9iaWxlL3dkL2h1Yic7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBvcnQgPSA4MDtcclxuICAgICAgICAgICAgd2Rpb09wdHMucHJvdG9jb2wgPSAnaHR0cCc7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLm9wZW5EZXZpY2VUaW1lb3V0ID0gMTU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgYnJvd3NlciBmb3IgbW9iaWxlIHdlYiB0ZXN0cywgaWYgZXhlY3V0ZWQgYWdhaW5zdCByZW1vdGUgZGV2aWNlcyBvZiBhIGNsb3VkIHByb3ZpZGVyXHJcbiAgICAgICAgaWYgKGRlZmF1bHRCcm93c2VyICYmIHByb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IERFRkFVTFRfTU9CSUxFX0JST1dTRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5VTktOT1dOX0VSUk9SLCBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIGNsb3NlIGJyb3dzZXIgd2luZG93czonLCBlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwb3NlQ29udGludWUoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBjaHJvbWVkcml2ZXIgYW5kIGVkZ2Vkcml2ZXIgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCd0YXNra2lsbCAvSU0gY2hyb21lZHJpdmVyLmV4ZSAvRicsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBjaHJvbWVkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjU3luYygndGFza2tpbGwgL0lNIG1zZWRnZWRyaXZlci5leGUgL0YnLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgbXNlZGdlZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucmVzb2x2ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGJyb3dzZXIgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgPT09IHRydWUgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RCcm93c2VyTG9nKGxvZykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNsZWFyIHRyYW5zYWN0aW9ucyB0byBhdm9pZCBkdXBsaWNhdGUgbmFtZXMgYWNyb3NzIGl0ZXJhdGlvbnNcclxuICAgICAgICAvLyBhbHNvIHNob3VsZCB0aHJvdyBvbiBkdXBsaWNhdGUgbmFtZXMuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBubyB0cmFuc2FjdGlvbnMgc2V0IGlmIHRlc3QgZmFpbHMgYmVmb3JlIHdlYi50cmFuc2FjdGlvbiBjb21tYW5kXHJcbiAgICAgICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ycy5oYXIgPSB0aGlzLnRyYW5zYWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRUb0ltYWdlID0gcmVxdWlyZSgnLi4vbGliL3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFsbCBpbWFnZXMgaW50byBvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbWVyZ2VkSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2FkanVzdEJyb3dzZXJMb2cobG9nKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBicm93c2VyIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgLy8gY29udmVydCBTRVZFUkUgbG9nIGxldmVsIHRvIEVSUk9SXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwgPT09ICdTRVZFUkUnID8gJ0VSUk9SJyA6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiAnYnJvd3NlcidcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBGSVhNRTogVGhlcmUgaXMgYSBidWcgd2l0aCBJRS4gU2VlIHRoZSBjb21tZW50IHdpdGhpbiBmdW5jdGlvbiBib2R5LlxyXG4gICAgICpcclxuICAgICAqICBkb21Db250ZW50TG9hZGVkIChha2EgRmlyc3QgVmlzdWFsIFRpbWUpLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqICBsb2FkIChha2EgRnVsbCBMb2FkIFRpbWUpICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9hZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcHJvY2Vzc2luZyBtb2RlbDpcclxuICAgICAqXHJcbiAgICAgKiAgMS4gbmF2aWdhdGlvblN0YXJ0ICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDIuIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3QgcmVsZXZhbnQgdG8gdXMuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9uYXZpZ2F0aW9uLXRpbWluZy8jcHJvY2VzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqICAzLiBkb21Mb2FkaW5nICAgICAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgc3RhcnRzIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDQuIGRvbUludGVyYWN0aXZlICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgZmluaXNoZWQgcGFyc2luZyB0aGUgZG9jdW1lbnQgYW5kIHRoZSB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlLlxyXG4gICAgICogIDUuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ICAgLSBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gY29tcGxldGVseSBsb2FkZWQgYW5kIHBhcnNlZCBhbmQgZGVmZXJyZWQgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLiBcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmMgc2NyaXB0cywgaWYgYW55LCBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVzaGVldHNbMV0sIGltYWdlcywgYW5kIHN1YmZyYW1lcyBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSAtIFN0eWxlc2hlZXRzIC91c3VhbGx5LyBkZWZlciB0aGlzIGV2ZW50ISAtIGh0dHA6Ly9tb2xpbHkuZGUvd2VibG9nL2RvbWNvbnRlbnRsb2FkZWRcclxuICAgICAqICA2LiBkb21Db250ZW50TG9hZGVkRXZlbnRFbmQgICAgIC0gVGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLiBFLmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJET00gZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcIik7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgKiAgNy4gZG9tQ29tcGxldGUgICAgICAgICAgICAgICAgICAtIFRoZSBET00gdHJlZSBpcyBjb21wbGV0ZWx5IGJ1aWx0LiBBc3luYyBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgOC4gbG9hZEV2ZW50U3RhcnQgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhdmUgZmluaXNoZWQgbG9hZGluZyBhbGwgdGhlIHJlc291cmNlcyBsaWtlIGltYWdlcywgc3dmLCBldGMuXHJcbiAgICAgKiAgOS4gbG9hZEV2ZW50RW5kICAgICAgICAgICAgICAgICAtIFRoZSBsb2FkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy5cclxuICAgICAqL1xyXG4gICAgX2dldFN0YXRzKGNvbW1hbmROYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mZXRjaFN0YXRzICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLl9pc0FjdGlvbihjb21tYW5kTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFyIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgbG9hZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzYW1lUGFnZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGZvbGxvd2luZyBzaXR1YXRpb246XHJcbiAgICAgICAgICAgIC8vIGlmIG5hdmlnYXRlU3RhcnQgZXF1YWxzIHRvIHRoZSBvbmUgd2UgZ290IGZyb20gcHJldmlvdXMgYXR0ZW1wdCAod2UgbmVlZCB0byBzYXZlIGl0KVxyXG4gICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBhcmUgc3RpbGwgb24gdGhlIHNhbWUgcGFnZSBhbmQgZG9uJ3QgbmVlZCB0byByZWNvcmQgbG9hZC9kb21Db250ZW50TG9hZGVkIHRpbWVzXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypnbG9iYWwgd2luZG93Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltaW5ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5sb2FkRXZlbnRTdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgdGltaW5ncy5sb2FkRXZlbnRTdGFydCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhZ2UgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lICYmIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPT0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydCA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID0gdGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRFdmVudFN0YXJ0ID0gdGltaW5ncy5sb2FkRXZlbnRTdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWQgPSBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGxvYWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiBsb2FkRXZlbnRTdGFydCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4ZWN1dGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZXJyb3IgaW5zaWRlIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBleGVjdXRlRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkbid0IGdldCB0aW1pbmdzLlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNhbWVQYWdlID8ge30gOiB7IERvbUNvbnRlbnRMb2FkZWRFdmVudDogZG9tQ29udGVudExvYWRlZCwgTG9hZEV2ZW50OiBsb2FkIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmVcclxuICAgICAqICAgICAgICAgICAgICB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uc1tuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNhY3Rpb25zKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChuYW1lKSkubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZSsnICgjJytjb3VudGVyKycpJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSBtb2RVdGlscy5nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0SEFSKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9nVHlwZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygncGVyZm9ybWFuY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ3MoJ3BlcmZvcm1hbmNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gb25lIGluc3RhbmNlLCBsb2dzIHdhcyBub3QgaXRlcmFibGUgZm9yIHNvbWUgcmVhc29uIC0gaGVuY2UgdGhlIGZvbGxvd2luZyBjaGVjazpcclxuICAgICAgICAgICAgICAgIGlmICghbG9ncyB8fCB0eXBlb2YgbG9nc1tTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2dldEhBUjogbG9ncyBub3QgaXRlcmFibGU6ICcgKyBKU09OLnN0cmluZ2lmeShsb2dzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ09iaiA9IEpTT04ucGFyc2UobG9nLm1lc3NhZ2UpOyAgIC8vIHJldHVybmVkIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5wdXNoKG1zZ09iai5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXIgPSBoYXJGcm9tTWVzc2FnZXMoZXZlbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShoYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmV0Y2ggSEFSOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrV2FpdEZvckFuZ3VsYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckFuZ3VsYXIodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyVGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUNyZWRlbnRpYWxzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50ID0gbGFtYmRhUmVzdENsaWVudC5BdXRvbWF0aW9uQ2xpZW50KFxyXG4gICAgICAgICAgICAgICAgbGFtYmRhQ3JlZGVudGlhbHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNfaW5kOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGFtYmRhQXV0b21hdGlvbkNsaWVudC51cGRhdGVTZXNzaW9uQnlJZChzZXNzaW9uSWQsIHJlcXVlc3RCb2R5LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gTGFtYmRhVGVzdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHRiID0gbmV3IFRlc3RpbmdCb3Qoe1xyXG4gICAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYXBpX3NlY3JldDogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhID0geyBcInRlc3Rbc3VjY2Vzc11cIiA6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyBcIjFcIiA6IFwiMFwiIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0Yi51cGRhdGVUZXN0KHRlc3REYXRhLCBzZXNzaW9uSWQsIGZ1bmN0aW9uKGVycm9yLCB0ZXN0RGV0YWlscykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBUZXN0aW5nQm90OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuIl19
906
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiZGVmYXVsdEJyb3dzZXIiLCJicm93c2VyTmFtZSIsImVycm9yQ29kZSIsIklOVkFMSURfQ0FQQUJJTElUSUVTIiwidG9Mb3dlckNhc2UiLCJyZWNvcmRIQVIiLCJicm93c2VyIiwicGVyZm9ybWFuY2UiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsInByb3RvY29sIiwicmVwbGFjZSIsImhvc3QiLCJob3N0bmFtZSIsInBvcnQiLCJwYXJzZUludCIsInBhdGgiLCJwYXRobmFtZSIsImF1dGgiLCJzcGxpdCIsIndkaW9PcHRzIiwidXNlciIsImtleSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsIlBFUkZFQ1RPIiwib3BlbkRldmljZVRpbWVvdXQiLCJkcml2ZXIiLCJ3ZGlvIiwicmVtb3RlIiwic2VsZW5pdW1Ccm93c2VyVGltZW91dCIsInNlbGVuaXVtVGltZW91dCIsInBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsInBlcmZlY3RvUmVwb3J0aW5nIiwiUGVyZmVjdG8iLCJQZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJ3ZWJkcml2ZXIiLCJleGVjdXRlU2NyaXB0IiwiY29tbWFuZCIsInBhcmFtcyIsImV4ZWN1dGUiLCJyZXBvcnRpbmdDbGllbnQiLCJQZXJmZWN0b1JlcG9ydGluZ0NsaWVudCIsInRlc3RTdGFydCIsImUiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0IiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsInN0ZXBzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZmFpbGVkRmluZGVkIiwiZmluZCIsIml0ZW0iLCJ0b1VwcGVyQ2FzZSIsIlNBVUNFTEFCUyIsInVzZXJuYW1lIiwiYWNjZXNzS2V5IiwicGFzc2VkIiwiaWQiLCJzZXNzaW9uSWQiLCJib2R5IiwibXlBY2NvdW50IiwiU2F1Y2VMYWJzIiwidXBkYXRlSm9iIiwic3RvcEpvYiIsIl9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0IiwiZGVsZXRlU2Vzc2lvbiIsIlRFU1RJTkdCT1QiLCJfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdCIsInRlc3RTdG9wIiwiQ29uc3RhbnRzIiwicmVzdWx0cyIsImZhaWxlZCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2siLCJjbG9zZUJyb3dzZXJXaW5kb3dzIiwiZGlzcG9zZUNvbnRpbnVlIiwid2FybiIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJzdGRpbyIsInBncmVwUmVzdWx0IiwidG9TdHJpbmciLCJyZXNvbHZlIiwiX2l0ZXJhdGlvblN0YXJ0IiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImxvZyIsInB1c2giLCJfYWRqdXN0QnJvd3NlckxvZyIsIl9nZXRIQVIiLCJoYXIiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJ0YWtlU2NyZWVuc2hvdCIsInJldHZhbCIsImNhbGwiLCJQcm9taXNlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwiaGFuZGxlcyIsImdldFdpbmRvd0hhbmRsZXMiLCJoYW5kbGUiLCJzd2l0Y2hUb1dpbmRvdyIsImltYWdlIiwidGl0bGUiLCJnZXRUaXRsZSIsInRleHRUb0ltYWdlIiwicmVxdWlyZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsIm1lcmdlZEltYWdlIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJsZXZlbCIsInNyYyIsIl9nZXRTdGF0cyIsImNvbW1hbmROYW1lIiwiZmV0Y2hTdGF0cyIsIm5hdmlnYXRpb25TdGFydCIsImRvbUNvbnRlbnRMb2FkZWQiLCJsb2FkIiwic2FtZVBhZ2UiLCJsYXN0RXJyb3IiLCJ0aW1pbmdzIiwid2luZG93IiwidGltaW5nIiwiZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQiLCJsb2FkRXZlbnRTdGFydCIsImV4ZWN1dGVFcnJvciIsImNvbnNvbGUiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsImNvdW50ZXIiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydEFyZ3VtZW50U3RyaW5nIiwidHlwZXMiLCJnZXRMb2dUeXBlcyIsImdldExvZ3MiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudHMiLCJtc2dPYmoiLCJjaGVja1dhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyIiwid2FpdEZvckFuZ3VsYXIiLCJhdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3Jp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QUFJNEQsT0FBSixDQUFZLENBQUNuQixPQUFELEVBQVVvQixNQUFWLEtBQXFCO0FBQ3BDLFlBQU1rRixXQUFXLEdBQUc7QUFDaEIvSSxRQUFBQSxNQUFNLEVBQUVBLE1BQU0sS0FBSyxRQUFYLEdBQXNCLFFBQXRCLEdBQWlDO0FBRHpCLE9BQXBCO0FBSUEsWUFBTTNGLE9BQU8sR0FBRztBQUNaNkIsUUFBQUEsR0FBRyxFQUFHLGtEQUFpRCxLQUFLNkIsTUFBTCxDQUFZZ0QsU0FBVSxPQURqRTtBQUVaMEksUUFBQUEsTUFBTSxFQUFFLEtBRkk7QUFHWkMsUUFBQUEsSUFBSSxFQUFFLElBSE07QUFJWkMsUUFBQUEsa0JBQWtCLEVBQUUsS0FKUjtBQUtaM0ksUUFBQUEsSUFBSSxFQUFFK0gsV0FMTTtBQU1aLGdCQUFRO0FBQ0osa0JBQVEsS0FBS2hNLFFBQUwsQ0FBY0MsSUFEbEI7QUFFSixrQkFBUSxLQUFLRCxRQUFMLENBQWNFLEdBRmxCO0FBR0osNkJBQW1CO0FBSGY7QUFOSSxPQUFoQjs7QUFhQSxVQUFJO0FBQ0EsOEJBQVE1QyxPQUFSLEVBQWlCLENBQUNxRixHQUFELEVBQU1rSyxHQUFOLEVBQVc1SSxJQUFYLEtBQW9CO0FBQ2pDeUIsVUFBQUEsT0FBTztBQUNWLFNBRkQ7QUFHSCxPQUpELENBSUUsT0FBT3pELENBQVAsRUFBVTtBQUNSLGFBQUt4RSxNQUFMLENBQVk0RSxLQUFaLENBQWtCLG1EQUFtREosQ0FBQyxDQUFDd0QsUUFBRixFQUFyRTtBQUNBQyxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQTFCTSxDQUFQO0FBMkJIOztBQWh3QmtEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3ZWJcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGJyb3dzZXIgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKk5vdGVzOioqICBcclxuICogICBcclxuICogQ29tbWFuZHMgd2hpY2ggb3BlcmF0ZSBvbiBlbGVtZW50cyBzdWNoIGFzIGNsaWNrLCBhc3NlcnQsIHdhaXRGb3IsIHR5cGUsIHNlbGVjdCwgYW5kIG90aGVycyB3aWxsIGF1dG9tYXRpY2FsbHkgd2FpdCBmb3IgYSBwZXJpb2Qgb2YgdGltZSBmb3IgdGhlIGVsZW1lbnQgdG8gYXBwZWFyIGluIERPTSBhbmQgYmVjb21lIHZpc2libGUuIEJ5IGRlZmF1bHQgdGhpcyBwZXJpb2QgZXF1YWxzIHRvIDYwIHNlY29uZHMsIGJ1dCBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgYHNldFRpbWVvdXRgY29tbWFuZC5cclxuICogICBcclxuICogKipTdHJpbmcgbWF0Y2hpbmcgcGF0dGVybnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGByZWdleDpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYHJlZ2V4aTpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgZXhhY3Q6U1RSSU5HYCAtIE1hdGNoIHRoZSBzdHJpbmcgdmVyYmF0aW0uXHJcbiAqICAqIGBnbG9iOlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBnbG9iIHBhdHRlcm4uIGA/YCB3aWxsIG1hdGNoIGFueSBzaW5nbGUgY2hhcmFjdGVyIGV4Y2VwdCBuZXcgbGluZSBcXChcXG5cXCkuIGAqYCB3aWxsIG1hdGNoIGFueSBzZXF1ZW5jZSBcXCgwIG9yIG1vcmVcXCkgb2YgY2hhcmFjdGVycyBleGNlcHQgbmV3IGxpbmUuIEVtcHR5ICAgICBQQVRURVJOIHdpbGwgbWF0Y2ggb25seSBvdGhlciBlbXB0eSBzdHJpbmdzLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBTYW1lIGFzIGdsb2IgbWF0Y2hpbmcuICBcclxuICpcclxuICogKipMb2NhdG9yczoqKiBcclxuICogXHJcbiAqICBDb21tYW5kcyB3aGljaCBleHBlY3QgYW4gZWxlbWVudCBsb2NhdG9yIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgbG9jYXRvciB0eXBlcyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogXHJcbiAqICAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElEIGF0dHJpYnV0ZS5cclxuICogICogYGNzcz1DU1NfU0VMRUNUT1JgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGEgQ1NTIHNlbGVjdG9yLlxyXG4gKiAgKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBsaW5rLWNvbnRhaW5zPVRFWFRgIC0gTG9jYXRlcyBsaW5rIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBOQU1FIGF0dHJpYnV0ZS5cclxuICogICogYHRhZz1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgdGFnIG5hbWUuXHJcbiAqICAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAgKiBgKFhQQVRIKVtdYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICovXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBxdW90ZXMgKi9cclxuaW1wb3J0IHsgaGFyRnJvbU1lc3NhZ2VzIH0gZnJvbSAnY2hyb21lLWhhcic7XHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQgU2F1Y2VMYWJzIGZyb20gJ3NhdWNlbGFicyc7XHJcbmltcG9ydCBsYW1iZGFSZXN0Q2xpZW50IGZyb20gJ0BsYW1iZGF0ZXN0L25vZGUtcmVzdC1jbGllbnQnO1xyXG5pbXBvcnQgVGVzdGluZ0JvdCBmcm9tICd0ZXN0aW5nYm90LWFwaSc7XHJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCBwZXJmZWN0b1JlcG9ydGluZyBmcm9tICdwZXJmZWN0by1yZXBvcnRpbmcnO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tICdyZXF1ZXN0JztcclxuaW1wb3J0IG1lcmdlSW1hZ2VzIGZyb20gJy4uL2xpYi9pbWctbWVyZ2UnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3ZWInO1xyXG5jb25zdCBERUZBVUxUX1NFTEVOSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnY2hyb21lJztcclxuY29uc3QgREVGQVVMVF9NT0JJTEVfQlJPV1NFUiA9ICdkZWZhdWx0JztcclxuY29uc3QgTk9fU0NSRUVOU0hPVF9DT01NQU5EUyA9IFsnaW5pdCcsICdhc3NlcnRBbGVydCddO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCAnY2xpY2snXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBuZXcgU2VsZW5pdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc2VsZW5pdW1VcmwgLSBSZW1vdGUgc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2Fwcywgc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGNhcGFiaWxpdGllcyBlaXRoZXIgZnJvbSBpbml0IG1ldGhvZCBhcmd1bWVudCBvciBmcm9tIGNvbnRleHQgcGFyYW1ldGVycyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBicm93c2VyTmFtZSBjYXBzIGZyb20gb3B0aW9ucy4gRklYTUU6IHdoeSBpcyB0aGlzIGV2ZW4gbmVlZGVkP1xyXG4gICAgICAgIGxldCBkZWZhdWx0QnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZSB8fCBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICAgICAgZGVmYXVsdEJyb3dzZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGSVhNRTogc2hhbGwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGJyb3dzZXJOYW1lIGlzIG5vdCBzcGVjaWZpZWQsIG5laXRoZXIgaW4gY2FwcyBub3IgaW4gb3B0aW9ucz8hXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5JTlZBTElEX0NBUEFCSUxJVElFUyxcclxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBgd2ViYCBtb2R1bGUgLSBicm93c2VyTmFtZSBtdXN0IGJlIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBicm93c2VyTmFtZS1zXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWUnKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGlzIHNwZWNpZmllZCBhcyAnaWUnIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBhbmQgcG9zc2libHkgc3VpdGVzXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzICdpbnRlcm5ldCBleHBsb3JlcidcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gJ2ludGVybmV0IGV4cGxvcmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1snbGFtYmRhOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBsYW1iZGF0ZXN0IGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gcGVyZmVjdG9Nb2JpbGUgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgIT09ICdNaWNyb3NvZnRFZGdlJykge1xyXG4gICAgICAgICAgICAvLyBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzIGFsbCBicm93c2VyTmFtZXMgdG8gYmUgbG93ZXJjYXNlXHJcbiAgICAgICAgICAgIC8vIGV4Y2VwdCBcIk1pY3Jvc29mdEVkZ2VcIlxyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gc3BlY2lmeWluZyB0aGlzIGxlYWRzIENocm9tZSA3NysgdG8gcmVmdXNlIGxvYWRpbmdcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmxvZ2dpbmdQcmVmcyA9IHsgICAgICAgICAgICAgLy8gZm9yIENocm9tZURyaXZlciA8IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuY2hyb21lT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZMb2dnaW5nUHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVOZXR3b3JrOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVBhZ2U6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2Uoc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGluaXRFcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBhdGggPSAnL25leHBlcmllbmNlL3BlcmZlY3RvbW9iaWxlL3dkL2h1Yic7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnBvcnQgPSA4MDtcclxuICAgICAgICAgICAgd2Rpb09wdHMucHJvdG9jb2wgPSAnaHR0cCc7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLm9wZW5EZXZpY2VUaW1lb3V0ID0gMTU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbmFtZSA9ICduYW1lJztcclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydsYW1iZGE6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2xhbWJkYTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snbGFtYmRhOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1sndGVzdGluZ0JvdDpvcHRpb25zJ10gJiYgd2Rpb09wdHMuY2FwYWJpbGl0aWVzWyd0ZXN0aW5nQm90Om9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3Rlc3RpbmdCb3Q6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddICYmIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXVsnbmFtZSddKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgYnJvd3NlciBmb3IgbW9iaWxlIHdlYiB0ZXN0cywgaWYgZXhlY3V0ZWQgYWdhaW5zdCByZW1vdGUgZGV2aWNlcyBvZiBhIGNsb3VkIHByb3ZpZGVyXHJcbiAgICAgICAgaWYgKGRlZmF1bHRCcm93c2VyICYmIHByb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IERFRkFVTFRfTU9CSUxFX0JST1dTRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5VTktOT1dOX0VSUk9SLCBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgJiYgJ0ZBSUxFRCcgPT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoc3RhdHVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0ZhaWxlZCB0byBjbG9zZSBicm93c2VyIHdpbmRvd3M6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZUNvbnRpbnVlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgY2hyb21lZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCd0YXNra2lsbCAvSU0gY2hyb21lZHJpdmVyLmV4ZSAvRicsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBjaHJvbWVkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGVkZ2Vkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGZvciBub3dcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBtc2VkZ2Vkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyA9PT0gdHJ1ZSAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEJyb3dzZXJMb2cobG9nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2xlYXIgdHJhbnNhY3Rpb25zIHRvIGF2b2lkIGR1cGxpY2F0ZSBuYW1lcyBhY3Jvc3MgaXRlcmF0aW9uc1xyXG4gICAgICAgIC8vIGFsc28gc2hvdWxkIHRocm93IG9uIGR1cGxpY2F0ZSBuYW1lcy5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG5vIHRyYW5zYWN0aW9ucyBzZXQgaWYgdGVzdCBmYWlscyBiZWZvcmUgd2ViLnRyYW5zYWN0aW9uIGNvbW1hbmRcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJzLmhhciA9IHRoaXMudHJhbnNhY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCcuLi9saWIvdGV4dC10by1pbWFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUltYWdlID0gdGl0bGVJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWRJbWFnZSAmJiB0eXBlb2YgbWVyZ2VkSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfYWRqdXN0QnJvd3NlckxvZyhsb2cpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGJyb3dzZXIgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncylcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IFNFVkVSRSBsb2cgbGV2ZWwgdG8gRVJST1JcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCA9PT0gJ1NFVkVSRScgPyAnRVJST1InIDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6ICdicm93c2VyJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEZJWE1FOiBUaGVyZSBpcyBhIGJ1ZyB3aXRoIElFLiBTZWUgdGhlIGNvbW1lbnQgd2l0aGluIGZ1bmN0aW9uIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogIGRvbUNvbnRlbnRMb2FkZWQgKGFrYSBGaXJzdCBWaXN1YWwgVGltZSktIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCBhbmQgbmF2aWdhdGlvblN0YXJ0LlxyXG4gICAgICogIGxvYWQgKGFrYSBGdWxsIExvYWQgVGltZSkgICAgICAgICAgICAgICAtIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2FkRXZlbnRTdGFydCBhbmQgbmF2aWdhdGlvblN0YXJ0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBwcm9jZXNzaW5nIG1vZGVsOlxyXG4gICAgICpcclxuICAgICAqICAxLiBuYXZpZ2F0aW9uU3RhcnQgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIHJlcXVlc3RlZCB0aGUgZG9jdW1lbnQuXHJcbiAgICAgKiAgMi4gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtIE5vdCByZWxldmFudCB0byB1cy4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL25hdmlnYXRpb24tdGltaW5nLyNwcm9jZXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICogIDMuIGRvbUxvYWRpbmcgICAgICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBzdGFydHMgcGFyc2luZyB0aGUgZG9jdW1lbnQuXHJcbiAgICAgKiAgNC4gZG9tSW50ZXJhY3RpdmUgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyBmaW5pc2hlZCBwYXJzaW5nIHRoZSBkb2N1bWVudCBhbmQgdGhlIHVzZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIHBhZ2UuXHJcbiAgICAgKiAgNS4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgICAtIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBjb21wbGV0ZWx5IGxvYWRlZCBhbmQgcGFyc2VkIGFuZCBkZWZlcnJlZCBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuIFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3luYyBzY3JpcHRzLCBpZiBhbnksIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZXNoZWV0c1sxXSwgaW1hZ2VzLCBhbmQgc3ViZnJhbWVzIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGZpbmlzaGVkIGxvYWRpbmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdIC0gU3R5bGVzaGVldHMgL3VzdWFsbHkvIGRlZmVyIHRoaXMgZXZlbnQhIC0gaHR0cDovL21vbGlseS5kZS93ZWJsb2cvZG9tY29udGVudGxvYWRlZFxyXG4gICAgICogIDYuIGRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCAgICAgLSBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuIEUuZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRPTSBmdWxseSBsb2FkZWQgYW5kIHBhcnNlZFwiKTtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAqICA3LiBkb21Db21wbGV0ZSAgICAgICAgICAgICAgICAgIC0gVGhlIERPTSB0cmVlIGlzIGNvbXBsZXRlbHkgYnVpbHQuIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICA4LiBsb2FkRXZlbnRTdGFydCAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGFsbCB0aGUgcmVzb3VyY2VzIGxpa2UgaW1hZ2VzLCBzd2YsIGV0Yy5cclxuICAgICAqICA5LiBsb2FkRXZlbnRFbmQgICAgICAgICAgICAgICAgIC0gVGhlIGxvYWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLlxyXG4gICAgICovXHJcbiAgICBfZ2V0U3RhdHMoY29tbWFuZE5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZldGNoU3RhdHMgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuX2lzQWN0aW9uKGNvbW1hbmROYW1lKSkge1xyXG4gICAgICAgICAgICB2YXIgbmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICB2YXIgZG9tQ29udGVudExvYWRlZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBsb2FkID0gMDtcclxuICAgICAgICAgICAgdmFyIHNhbWVQYWdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZm9sbG93aW5nIHNpdHVhdGlvbjpcclxuICAgICAgICAgICAgLy8gaWYgbmF2aWdhdGVTdGFydCBlcXVhbHMgdG8gdGhlIG9uZSB3ZSBnb3QgZnJvbSBwcmV2aW91cyBhdHRlbXB0ICh3ZSBuZWVkIHRvIHNhdmUgaXQpXHJcbiAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGFyZSBzdGlsbCBvbiB0aGUgc2FtZSBwYWdlIGFuZCBkb24ndCBuZWVkIHRvIHJlY29yZCBsb2FkL2RvbUNvbnRlbnRMb2FkZWQgdGltZXNcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0RXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmdsb2JhbCB3aW5kb3cqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1pbmdzID0gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmxvYWRFdmVudFN0YXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1pbmdzLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiB0aW1pbmdzLmxvYWRFdmVudFN0YXJ0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lUGFnZSA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgJiYgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9PSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0ID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPSB0aW1pbmdzLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZEV2ZW50U3RhcnQgPSB0aW1pbmdzLmxvYWRFdmVudFN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZCA9IGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkID0gbG9hZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIGxvYWRFdmVudFN0YXJ0ID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhlY3V0ZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBlcnJvciBpbnNpZGUgZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGV4ZWN1dGVFcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgICAgICAgLy8gY291bGRuJ3QgZ2V0IHRpbWluZ3MuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBuYXZpZ2F0aW9uU3RhcnQ7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2FtZVBhZ2UgPyB7fSA6IHsgRG9tQ29udGVudExvYWRlZEV2ZW50OiBkb21Db250ZW50TG9hZGVkLCBMb2FkRXZlbnQ6IGxvYWQgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25zW25hbWVdICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50cmFuc2FjdGlvbnMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zdGFydHNXaXRoKG5hbWUpKS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lKycgKCMnK2NvdW50ZXIrJyknO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IG1vZFV0aWxzLmdldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXRIQVIoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dUeXBlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdwZXJmb3JtYW5jZScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9ncygncGVyZm9ybWFuY2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpbiBvbmUgaW5zdGFuY2UsIGxvZ3Mgd2FzIG5vdCBpdGVyYWJsZSBmb3Igc29tZSByZWFzb24gLSBoZW5jZSB0aGUgZm9sbG93aW5nIGNoZWNrOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFsb2dzIHx8IHR5cGVvZiBsb2dzW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZ2V0SEFSOiBsb2dzIG5vdCBpdGVyYWJsZTogJyArIEpTT04uc3RyaW5naWZ5KGxvZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnT2JqID0gSlNPTi5wYXJzZShsb2cubWVzc2FnZSk7ICAgLy8gcmV0dXJuZWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2gobXNnT2JqLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhciA9IGhhckZyb21NZXNzYWdlcyhldmVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGhhcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBIQVI6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tXYWl0Rm9yQW5ndWxhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQW5ndWxhcih0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclJvb3RTZWxlY3RvciwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQ3JlZGVudGlhbHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUF1dG9tYXRpb25DbGllbnQgPSBsYW1iZGFSZXN0Q2xpZW50LkF1dG9tYXRpb25DbGllbnQoXHJcbiAgICAgICAgICAgICAgICBsYW1iZGFDcmVkZW50aWFsc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1c19pbmQ6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50LnVwZGF0ZVNlc3Npb25CeUlkKHNlc3Npb25JZCwgcmVxdWVzdEJvZHksIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBMYW1iZGFUZXN0OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgdGIgPSBuZXcgVGVzdGluZ0JvdCh7XHJcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhcGlfc2VjcmV0OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSB7IFwidGVzdFtzdWNjZXNzXVwiIDogc3RhdHVzID09PSAnUEFTU0VEJyA/IFwiMVwiIDogXCIwXCIgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRiLnVwZGF0ZVRlc3QodGVzdERhdGEsIHNlc3Npb25JZCwgZnVuY3Rpb24oZXJyb3IsIHRlc3REZXRhaWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIFRlc3RpbmdCb3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmtleSxcclxuICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.27.0",
3
+ "version": "1.27.2",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {
@@ -44,20 +44,20 @@
44
44
  "axios is a peer dependency of soap. when using npm 6 (node 12-14) it needs to be explicitly included. when we migrate to npm 7 (node 16+) it can be removed."
45
45
  ],
46
46
  "dependencies": {
47
- "@applitools/eyes-webdriverio": "5.39.0",
47
+ "@applitools/eyes-webdriverio": "5.39.1",
48
48
  "@lambdatest/node-rest-client": "1.0.5",
49
49
  "@oxygenhq/chrome-remote-interface": "0.30.0",
50
50
  "@oxygenhq/logger": "0.5.1",
51
51
  "@oxygenhq/mitmproxy-node": "1.0.1",
52
- "@wdio/cli": "7.29.1",
53
- "@wdio/devtools-service": "7.29.1",
54
- "@wdio/sync": "7.29.1",
52
+ "@wdio/cli": "7.30.0",
53
+ "@wdio/devtools-service": "7.30.0",
54
+ "@wdio/sync": "7.30.0",
55
55
  "async": "3.2.4",
56
56
  "axios": "0.27.2",
57
57
  "canvas": "2.11.0",
58
58
  "chai": "4.3.7",
59
59
  "chrome-har": "0.13.0",
60
- "config": "3.3.8",
60
+ "config": "3.3.9",
61
61
  "cross-spawn": "7.0.3",
62
62
  "csv-parse": "4.16.3",
63
63
  "cucumber": "6.0.5",
@@ -66,7 +66,7 @@
66
66
  "easyxml": "2.0.1",
67
67
  "ejs": "3.1.8",
68
68
  "esm": "3.2.25",
69
- "fast-xml-parser": "4.0.12",
69
+ "fast-xml-parser": "4.0.15",
70
70
  "fibers": "5.0.3",
71
71
  "glob": "7.2.3",
72
72
  "glob-to-regexp": "0.4.1",
@@ -93,13 +93,13 @@
93
93
  "stacktrace-parser": "0.1.10",
94
94
  "testdouble": "3.16.8",
95
95
  "testingbot-api": "1.0.8",
96
- "twilio": "3.84.0",
97
- "webdriverio": "7.29.1",
96
+ "twilio": "3.84.1",
97
+ "webdriverio": "7.30.0",
98
98
  "when": "3.7.8",
99
99
  "xlsx": "0.18.5"
100
100
  },
101
101
  "optionalDependencies": {
102
- "odbc": "2.4.6"
102
+ "odbc": "2.4.7"
103
103
  },
104
104
  "scripts": {
105
105
  "build": "npm run clean && npm run compile",