oxygen-cli 1.43.0 → 1.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
package/build/lib/launcher.js
CHANGED
|
@@ -18,7 +18,13 @@ class Launcher {
|
|
|
18
18
|
this._queue = null;
|
|
19
19
|
}
|
|
20
20
|
async run(capsSet) {
|
|
21
|
-
|
|
21
|
+
let concurrency = 1;
|
|
22
|
+
if (Number.isInteger(this._config.parallel)) {
|
|
23
|
+
concurrency = this._config.parallel;
|
|
24
|
+
} else if (Number.isInteger(this._config.concurrency)) {
|
|
25
|
+
concurrency = this._config.concurrency;
|
|
26
|
+
}
|
|
27
|
+
this._queue = (0, _queue.default)((task, cb) => this._launchTest(task, cb), concurrency);
|
|
22
28
|
this._queue.error((err, task) => {
|
|
23
29
|
console.log('Error in queue:', err);
|
|
24
30
|
});
|
|
@@ -73,4 +79,4 @@ class Launcher {
|
|
|
73
79
|
}
|
|
74
80
|
}
|
|
75
81
|
exports.default = Launcher;
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJSdW5uZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVldWUiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJMYXVuY2hlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVwb3J0ZXIiLCJfY29uZmlnIiwiX3Jlc3VsdHMiLCJydW4iLCJjYXBzU2V0IiwicXVldWUiLCJ0YXNrIiwiY2IiLCJfbGF1bmNoVGVzdCIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJlcnJvciIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJwdXNoIiwiQXJyYXkiLCJpc0FycmF5IiwiX3RoaXMiLCJfIiwiZWFjaCIsImNhcHMiLCJkcmFpbiIsIl9pbnN0YW50aWF0ZVJ1bm5lciIsImZyYW1ld29yayIsInByb3RvdHlwZSIsIm94eWdlbiIsImNhbGxiYWNrIiwicnVubmVyIiwiRXJyb3IiLCJpbml0IiwicmVzdWx0Iiwia2lsbCIsImVyck1zZyIsInR5cGUiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9sYXVuY2hlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFJ1bm5lcnMgZnJvbSAnLi4vcnVubmVycyc7XHJcbmltcG9ydCBxdWV1ZSBmcm9tICdhc3luYy9xdWV1ZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXVuY2hlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihjYXBzU2V0KSB7XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBxdWV1ZSgodGFzaywgY2IpID0+IHRoaXMuX2xhdW5jaFRlc3QodGFzaywgY2IpLCB0aGlzLl9jb25maWcucGFyYWxsZWwgfHwgdGhpcy5fY29uZmlnLmNvbmN1cnJlbmN5IHx8IDEpO1xyXG4gICAgICAgIHRoaXMuX3F1ZXVlLmVycm9yKChlcnIsIHRhc2spID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGluIHF1ZXVlOicsIGVycik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIGlmIG5vIGNhcGFiaWxpdGllcyBhcmUgc3BlY2lmaWVkLCBydW4gc2luZ2xlIGluc3RhbmNlIHdpdGggZGVmYXVsdCBhcmd1bWVudHNcclxuICAgICAgICBpZiAoIWNhcHNTZXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fcXVldWUucHVzaChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjYXBzU2V0IGlzIGFuIGFycmF5IFxyXG4gICAgICAgICAgICBjYXBzU2V0ID0gQXJyYXkuaXNBcnJheShjYXBzU2V0KSA/IGNhcHNTZXQgOiBbY2Fwc1NldF07XHJcbiAgICAgICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgXy5lYWNoKGNhcHNTZXQsIGZ1bmN0aW9uKGNhcHMpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLl9xdWV1ZS5wdXNoKGNhcHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fcXVldWUuZHJhaW4oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICBfaW5zdGFudGlhdGVSdW5uZXIoY2Fwcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiB0aGlzLl9jb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJ1bm5lcnMsIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnNbdGhpcy5fY29uZmlnLmZyYW1ld29ya10oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSdW5uZXJzLm94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9sYXVuY2hUZXN0KGNhcHMsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJ1bm5lciA9IHRoaXMuX2luc3RhbnRpYXRlUnVubmVyKGNhcHMpO1xyXG4gICAgICAgIGlmICghcnVubmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyYW1ld29yayA9IHRoaXMuX2NvbmZpZy5mcmFtZXdvcms7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcnVubmVyIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1ld29yazogJHtmcmFtZXdvcmt9LmApKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIG94eWdlblxyXG4gICAgICAgICAgICBhd2FpdCBydW5uZXIuaW5pdCh0aGlzLl9jb25maWcsIGNhcHMsIHRoaXMucmVwb3J0ZXIpO1xyXG4gICAgICAgICAgICAvLyBydW4gT3h5Z2VuIHRlc3QgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bm5lci5ydW4oKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsYXVuY2ggdGhlIHRlc3Q6JywgZSk7XHJcbiAgICAgICAgICAgIC8vIHN0b3AgcHJvY2Vzc2luZyB0aGUgcXVldWVcclxuICAgICAgICAgICAgdGhpcy5fcXVldWUua2lsbCgpO1xyXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGN1c3RvbSBlcnJvciBtZXNzYWdlXHJcbiAgICAgICAgICAgIGlmIChlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyTXNnID0gJyc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gZS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIudHlwZSlcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgKz0gZXJyLnR5cGUgKyAnIC0gJztcclxuICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgKz0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnID0gZXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoZXJyTXNnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlKTsgICAgLy8gY2FsbCBiYWNrIHdpdGggdGhlIG9yaWdpbmFsIGV4Y2VwdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUFnQyxTQUFBRSx3QkFBQUUsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUosdUJBQUEsWUFBQUEsQ0FBQUUsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEs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
|
|
82
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJSdW5uZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVldWUiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJMYXVuY2hlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVwb3J0ZXIiLCJfY29uZmlnIiwiX3Jlc3VsdHMiLCJydW4iLCJjYXBzU2V0IiwiY29uY3VycmVuY3kiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJwYXJhbGxlbCIsInF1ZXVlIiwidGFzayIsImNiIiwiX2xhdW5jaFRlc3QiLCJlcnJvciIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJwdXNoIiwiQXJyYXkiLCJpc0FycmF5IiwiX3RoaXMiLCJfIiwiZWFjaCIsImNhcHMiLCJkcmFpbiIsIl9pbnN0YW50aWF0ZVJ1bm5lciIsImZyYW1ld29yayIsInByb3RvdHlwZSIsIm94eWdlbiIsImNhbGxiYWNrIiwicnVubmVyIiwiRXJyb3IiLCJpbml0IiwicmVzdWx0Iiwia2lsbCIsImVyck1zZyIsInR5cGUiLCJtZXNzYWdlIiwidG9TdHJpbmciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9sYXVuY2hlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFJ1bm5lcnMgZnJvbSAnLi4vcnVubmVycyc7XHJcbmltcG9ydCBxdWV1ZSBmcm9tICdhc3luYy9xdWV1ZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMYXVuY2hlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihjYXBzU2V0KSB7XHJcbiAgICAgICAgbGV0IGNvbmN1cnJlbmN5ID0gMTtcclxuXHJcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodGhpcy5fY29uZmlnLnBhcmFsbGVsKSkge1xyXG4gICAgICAgICAgICBjb25jdXJyZW5jeSA9IHRoaXMuX2NvbmZpZy5wYXJhbGxlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoTnVtYmVyLmlzSW50ZWdlcih0aGlzLl9jb25maWcuY29uY3VycmVuY3kpKSB7XHJcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5ID0gdGhpcy5fY29uZmlnLmNvbmN1cnJlbmN5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBxdWV1ZSgodGFzaywgY2IpID0+IHRoaXMuX2xhdW5jaFRlc3QodGFzaywgY2IpLCBjb25jdXJyZW5jeSk7XHJcbiAgICAgICAgdGhpcy5fcXVldWUuZXJyb3IoKGVyciwgdGFzaykgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gcXVldWU6JywgZXJyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gaWYgbm8gY2FwYWJpbGl0aWVzIGFyZSBzcGVjaWZpZWQsIHJ1biBzaW5nbGUgaW5zdGFuY2Ugd2l0aCBkZWZhdWx0IGFyZ3VtZW50c1xyXG4gICAgICAgIGlmICghY2Fwc1NldCkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5wdXNoKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNhcHNTZXQgaXMgYW4gYXJyYXkgXHJcbiAgICAgICAgICAgIGNhcHNTZXQgPSBBcnJheS5pc0FycmF5KGNhcHNTZXQpID8gY2Fwc1NldCA6IFtjYXBzU2V0XTtcclxuICAgICAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICBfLmVhY2goY2Fwc1NldCwgZnVuY3Rpb24oY2Fwcykge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX3F1ZXVlLnB1c2goY2Fwcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9xdWV1ZS5kcmFpbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xyXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgIF9pbnN0YW50aWF0ZVJ1bm5lcihjYXBzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUnVubmVycywgdGhpcy5fY29uZmlnLmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVubmVyc1t0aGlzLl9jb25maWcuZnJhbWV3b3JrXSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnMub3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2xhdW5jaFRlc3QoY2FwcywgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcnVubmVyID0gdGhpcy5faW5zdGFudGlhdGVSdW5uZXIoY2Fwcyk7XHJcbiAgICAgICAgaWYgKCFydW5uZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gdGhpcy5fY29uZmlnLmZyYW1ld29yaztcclxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBDYW5ub3QgZmluZCBydW5uZXIgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWV3b3JrOiAke2ZyYW1ld29ya30uYCkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgb3h5Z2VuXHJcbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5pbml0KHRoaXMuX2NvbmZpZywgY2FwcywgdGhpcy5yZXBvcnRlcik7XHJcbiAgICAgICAgICAgIC8vIHJ1biBPeHlnZW4gdGVzdCBcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVubmVyLnJ1bigpO1xyXG4gICAgICAgICAgICB0aGlzLl9yZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxhdW5jaCB0aGUgdGVzdDonLCBlKTtcclxuICAgICAgICAgICAgLy8gc3RvcCBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxyXG4gICAgICAgICAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgY3VzdG9tIGVycm9yIG1lc3NhZ2VcclxuICAgICAgICAgICAgaWYgKGUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSAnJztcclxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBlLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIudHlwZSArICcgLSAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgPSBlcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnJNc2cpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGUpOyAgICAvLyBjYWxsIGJhY2sgd2l0aCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBU0EsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0Es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
|
|
@@ -4,14 +4,12 @@ require("source-map-support/register");
|
|
|
4
4
|
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
5
5
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
6
|
module.exports = function (filePath, mode, fileType) {
|
|
7
|
-
var defer = require('when').defer;
|
|
8
7
|
var path = require('path');
|
|
9
8
|
var ExcelReader = require('./param-reader-excel');
|
|
10
9
|
var CsvReader = require('./param-reader-csv');
|
|
11
10
|
var JsonReader = require('./param-reader-json');
|
|
12
11
|
var errHelper = require('../errors/helper');
|
|
13
12
|
var module = {};
|
|
14
|
-
var _whenInitialized = defer();
|
|
15
13
|
module.init = function () {
|
|
16
14
|
var ext = path.extname(filePath);
|
|
17
15
|
if (fileType) {
|
|
@@ -26,19 +24,16 @@ module.exports = function (filePath, mode, fileType) {
|
|
|
26
24
|
} else if (ext === '.json' || ext === '.js') {
|
|
27
25
|
reader = new JsonReader();
|
|
28
26
|
} else {
|
|
29
|
-
|
|
30
|
-
return _whenInitialized.promise;
|
|
27
|
+
return Promise.reject(new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, 'Unsupported parameters file type: ' + ext));
|
|
31
28
|
}
|
|
32
29
|
this.mode = mode;
|
|
33
|
-
reader.read(filePath, fileType || null).then(function (result) {
|
|
30
|
+
return reader.read(filePath, fileType || null).then(function (result) {
|
|
34
31
|
self.table = result;
|
|
35
32
|
self.currentRow = self.mode === 'random' ? random(0, self.table.length) : 0;
|
|
36
|
-
|
|
33
|
+
return null;
|
|
37
34
|
}).catch(function (err) {
|
|
38
|
-
|
|
39
|
-
${err.message}`));
|
|
35
|
+
throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `Unable to load parameters file: ${err.message}`);
|
|
40
36
|
});
|
|
41
|
-
return _whenInitialized.promise;
|
|
42
37
|
};
|
|
43
38
|
module.getMode = function () {
|
|
44
39
|
return this.mode;
|
|
@@ -73,4 +68,4 @@ ${err.message}`));
|
|
|
73
68
|
}
|
|
74
69
|
return module;
|
|
75
70
|
};
|
|
76
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJmaWxlUGF0aCIsIm1vZGUiLCJmaWxlVHlwZSIsInBhdGgiLCJFeGNlbFJlYWRlciIsIkNzdlJlYWRlciIsIkpzb25SZWFkZXIiLCJlcnJIZWxwZXIiLCJpbml0IiwiZXh0IiwiZXh0bmFtZSIsInJlYWRlciIsInNlbGYiLCJQcm9taXNlIiwicmVqZWN0IiwiT3hFcnJvciIsImVycm9yQ29kZSIsIlBBUkFNRVRFUlNfRVJST1IiLCJyZWFkIiwidGhlbiIsInJlc3VsdCIsInRhYmxlIiwiY3VycmVudFJvdyIsInJhbmRvbSIsImxlbmd0aCIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImdldE1vZGUiLCJyZWFkTmV4dCIsInByZXZSb3ciLCJyZWFkUHJldiIsImdldFZhbHVlcyIsIl9fZGVmaW5lR2V0dGVyX18iLCJtaW4iLCJtYXgiLCJNYXRoIiwiZmxvb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BhcmFtLW1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbGVQYXRoLCBtb2RlLCBmaWxlVHlwZSAvKm9wdGlvbmFsKi8pIHtcclxuICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG4gICAgdmFyIEV4Y2VsUmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItZXhjZWwnKTtcclxuICAgIHZhciBDc3ZSZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1jc3YnKTtcclxuICAgIHZhciBKc29uUmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItanNvbicpO1xyXG4gICAgdmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuICAgIHZhciBtb2R1bGUgPSB7fTtcclxuXHJcbiAgICBtb2R1bGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZVR5cGUpIHtcclxuICAgICAgICAgICAgZXh0ID0gZmlsZVR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZWFkZXIgPSBudWxsO1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBjaG9vc2UgdGhlIHJpZ2h0IGNvbnZlcnRlciBiYXNlZCBvbiBlaXRoZXIgeGxzIG9yIHhsc3ggZmlsZSBleHRlbnNpb25cclxuICAgICAgICBpZiAoZXh0ID09PSAnLnhsc3gnIHx8IGV4dCA9PT0gJy54bHMnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBFeGNlbFJlYWRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChleHQgPT09ICcuY3N2JyB8fCBleHQgPT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICByZWFkZXIgPSBuZXcgQ3N2UmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4dCA9PT0gJy5qc29uJyB8fCBleHQgPT09ICcuanMnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBKc29uUmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCAnVW5zdXBwb3J0ZWQgcGFyYW1ldGVycyBmaWxlIHR5cGU6ICcgKyBleHQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcblxyXG4gICAgICAgIHJldHVybiByZWFkZXIucmVhZChmaWxlUGF0aCwgZmlsZVR5cGUgfHwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRhYmxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50Um93IGFjY29yZGluZyB3aXRoIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgKHJhbmRvbSBvciBzZXF1ZW50aWFsKVxyXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50Um93ID0gc2VsZi5tb2RlID09PSAncmFuZG9tJyA/IHJhbmRvbSgwLCBzZWxmLnRhYmxlLmxlbmd0aCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgYFVuYWJsZSB0byBsb2FkIHBhcmFtZXRlcnMgZmlsZTogJHtlcnIubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWROZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMucHJldlJvdyA9IHRoaXMuY3VycmVudFJvdztcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncmFuZG9tJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSByYW5kb20oMCwgdGhpcy50YWJsZS5sZW5ndGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdysrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJvdyA+IHRoaXMudGFibGUubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLnJlYWRQcmV2ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2Um93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSB0aGlzLnByZXZSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlIHx8IHRoaXMudGFibGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgJ1BhcmFtZXRlcnMgdGFibGUgaXMgZW1wdHknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVbdGhpcy5jdXJyZW50Um93XTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLl9fZGVmaW5lR2V0dGVyX18oJ3Jvd3MnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZS5sZW5ndGg7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBUUEsSUFBQUEsWUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQTRDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBQzVDRyxNQUFNLENBQUNDLE9BQU8sR0FBRyxVQUFVQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFlO0VBQzlELElBQUlDLElBQUksR0FBR1QsT0FBTyxDQUFDLE1BQU0sQ0FBQztFQUMxQixJQUFJVSxXQUFXLEdBQUdWLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztFQUNqRCxJQUFJVyxTQUFTLEdBQUdYLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztFQUM3QyxJQUFJWSxVQUFVLEdBQUdaLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztFQUMvQyxJQUFJYSxTQUFTLEdBQUdiLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztFQUMzQyxJQUFJSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBRWZBLE1BQU0sQ0FBQ1UsSUFBSSxHQUFHLFlBQVc7SUFDckIsSUFBSUMsR0FBRyxHQUFHTixJQUFJLENBQUNPLE9BQU8sQ0FBQ1YsUUFBUSxDQUFDO0lBRWhDLElBQUlFLFFBQVEsRUFBRTtNQUNWTyxHQUFHLEdBQUdQLFFBQVE7SUFDbEI7SUFDQSxJQUFJUyxNQUFNLEdBQUcsSUFBSTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUVmLElBQUlILEdBQUcsS0FBSyxPQUFPLElBQUlBLEdBQUcsS0FBSyxNQUFNLEVBQUU7TUFDbkNFLE1BQU0sR0FBRyxJQUFJUCxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDLE1BQ0ksSUFBSUssR0FBRyxLQUFLLE1BQU0sSUFBSUEsR0FBRyxLQUFLLE1BQU0sRUFBRTtNQUN2Q0UsTUFBTSxHQUFHLElBQUlOLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsTUFDSSxJQUFJSSxHQUFHLEtBQUssT0FBTyxJQUFJQSxHQUFHLEtBQUssS0FBSyxFQUFFO01BQ3ZDRSxNQUFNLEdBQUcsSUFBSUwsVUFBVSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxNQUNJO01BQ0QsT0FBT08sT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSUMsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLG9DQUFvQyxHQUFHUixHQUFHLENBQUMsQ0FBQztJQUN4SDtJQUVBLElBQUksQ0FBQ1IsSUFBSSxHQUFHQSxJQUFJO0lBRWhCLE9BQU9VLE1BQU0sQ0FBQ08sSUFBSSxDQUFDbEIsUUFBUSxFQUFFRSxRQUFRLElBQUksSUFBSSxDQUFDLENBQ3pDaUIsSUFBSSxDQUFDLFVBQVNDLE1BQU0sRUFBRTtNQUNuQlIsSUFBSSxDQUFDUyxLQUFLLEdBQUdELE1BQU07TUFFbkJSLElBQUksQ0FBQ1UsVUFBVSxHQUFHVixJQUFJLENBQUNYLElBQUksS0FBSyxRQUFRLEdBQUdzQixNQUFNLENBQUMsQ0FBQyxFQUFFWCxJQUFJLENBQUNTLEtBQUssQ0FBQ0csTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUMzRSxPQUFPLElBQUk7SUFDZixDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVNDLEdBQUcsRUFBRTtNQUNqQixNQUFNLElBQUlYLG9CQUFPLENBQUNSLFNBQVMsQ0FBQ1MsU0FBUyxDQUFDQyxnQkFBZ0IsRUFBRSxtQ0FBbUNTLEdBQUcsQ0FBQ0MsT0FBTyxFQUFFLENBQUM7SUFDN0csQ0FBQyxDQUFDO0VBQ1YsQ0FBQztFQUVEN0IsTUFBTSxDQUFDOEIsT0FBTyxHQUFHLFlBQVc7SUFDeEIsT0FBTyxJQUFJLENBQUMzQixJQUFJO0VBQ3BCLENBQUM7RUFFREgsTUFBTSxDQUFDK0IsUUFBUSxHQUFHLFlBQVk7SUFDMUIsSUFBSSxDQUFDQyxPQUFPLEdBQUcsSUFBSSxDQUFDUixVQUFVO0lBQzlCLElBQUksSUFBSSxDQUFDckIsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUN4QixJQUFJLENBQUNxQixVQUFVLEdBQUdDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDRixLQUFLLENBQUNHLE1BQU0sQ0FBQztJQUNsRCxDQUFDLE1BQU07TUFDSCxJQUFJLENBQUNGLFVBQVUsRUFBRTtJQUNyQjtJQUVBLElBQUksSUFBSSxDQUFDQSxVQUFVLEdBQUcsSUFBSSxDQUFDRCxLQUFLLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDekMsSUFBSSxDQUFDRixVQUFVLEdBQUcsQ0FBQztJQUN2QjtFQUNKLENBQUM7RUFFRHhCLE1BQU0sQ0FBQ2lDLFFBQVEsR0FBRyxZQUFZO0lBQzFCLElBQUksT0FBTyxJQUFJLENBQUNELE9BQU8sS0FBSyxXQUFXLEVBQUU7TUFDckMsSUFBSSxDQUFDUixVQUFVLEdBQUcsSUFBSSxDQUFDUSxPQUFPO0lBQ2xDO0VBQ0osQ0FBQztFQUVEaEMsTUFBTSxDQUFDa0MsU0FBUyxHQUFHLFlBQVc7SUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQ1gsS0FBSyxJQUFJLElBQUksQ0FBQ0EsS0FBSyxDQUFDRyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ3hDLE1BQU0sSUFBSVQsb0JBQU8sQ0FBQ1IsU0FBUyxDQUFDUyxTQUFTLENBQUNDLGdCQUFnQixFQUFFLDJCQUEyQixDQUFDO0lBQ3hGO0lBQ0EsT0FBTyxJQUFJLENBQUNJLEtBQUssQ0FBQyxJQUFJLENBQUNDLFVBQVUsQ0FBQztFQUN0QyxDQUFDO0VBRUR4QixNQUFNLENBQUNtQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsWUFBVztJQUN2QyxPQUFPLElBQUksQ0FBQ1osS0FBSyxDQUFDRyxNQUFNO0VBQzVCLENBQUMsQ0FBQztFQUVGLFNBQVNELE1BQU1BLENBQUNXLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0lBQ3RCLE9BQU9DLElBQUksQ0FBQ0MsS0FBSyxDQUFDRCxJQUFJLENBQUNiLE1BQU0sQ0FBQyxDQUFDLElBQUlZLEdBQUcsR0FBR0QsR0FBRyxDQUFDLENBQUMsR0FBR0EsR0FBRztFQUN4RDtFQUVBLE9BQU9wQyxNQUFNO0FBQ2pCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -917,4 +917,4 @@ class WebModule extends _WebDriverModule.default {
|
|
|
917
917
|
}
|
|
918
918
|
}
|
|
919
919
|
exports.default = WebModule;
|
|
920
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX2Nocm9tZUhhciIsIl91cmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwid2RpbyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1dlYkRyaXZlck1vZHVsZSIsIl93aGVuIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl91dGlsIiwiX3NhdWNlbGFicyIsIl9ub2RlUmVzdENsaWVudCIsIl90ZXN0aW5nYm90QXBpIiwiX2NoaWxkX3Byb2Nlc3MiLCJfcGVyZmVjdG9SZXBvcnRpbmciLCJfcmVxdWVzdCIsIl9pbWdNZXJnZSIsIl9hdXRvU3RhcnQiLCJfc2FuaXRpemVIdG1sIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiU0FOSVRJWkVfSFRNTF9PUFRTIiwiYWxsb3dlZFRhZ3MiLCJhbGxvd2VkQXR0cmlidXRlcyIsImFsbG93ZWRDbGFzc2VzIiwidW5kZWZpbmVkIiwiYWxsb3dlZFN0eWxlcyIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0Iiwid2RQcm9jIiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiYXV0b1N0YXJ0V2ViRHJpdmVyIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsInJlbW90ZVVybCIsInByb2MiLCJkZWZhdWx0QnJvd3NlciIsImJyb3dzZXJOYW1lIiwiZXJyb3JDb2RlIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5Iiwic2VsZW5pdW1VcmxCYXNlIiwiaXNSdW5uaW5nT25TZWxlbm9pZCIsIl9pc1NlbGVub2lkSHViIiwiZW5hYmxlVmlkZW8iLCJ2aWRlb0ZyYW1lUmF0ZSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJkcml2ZXIiLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiUEVSRkVDVE8iLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0Iiwib3ZlcndyaXRlV2Rpb0NvbW1hbmRzIiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsImRlZmVyIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwia2lsbCIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJleGVjU3luYyIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiUHJvbWlzZSIsInJlamVjdCIsIndhaXRVbnRpbFJldFZhbCIsIndhaXRVbnRpbCIsImltYWdlcyIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImV3IiwiX3Rha2VTbmFwc2hvdFNpbGVudCIsImdldFBhZ2VTb3VyY2UiLCJyZXN1bHQiLCJzYW5pdGl6ZUh0bWwiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsInNsaWNlIiwiY291bnRlciIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiaGFyRnJvbU1lc3NhZ2VzIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVxdWVzdCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgeyBhdXRvU3RhcnRXZWJEcml2ZXIgfSBmcm9tICcuLi9veF9tb2R1bGVzL21vZHVsZS13ZWIvd2ViZHJpdmVyL2F1dG8tc3RhcnQnO1xyXG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBOT19TTkFQU0hPVF9DT01NQU5EUyA9IFtcclxuICAgICdpbml0JyxcclxuICAgICdhc3NlcnRBbGVydCcsXHJcbiAgICAnZGlzcG9zZScsXHJcbiAgICAndHJhbnNhY3Rpb24nLFxyXG4gICAgJ2RlbGV0ZUNvb2tpZXMnLFxyXG4gICAgJ2dldENvb2tpZXMnLFxyXG4gICAgJ2dldENzc1ZhbHVlJyxcclxuICAgICdnZXRIVE1MJyxcclxuICAgICdnZXRTb3VyY2UnLFxyXG4gICAgJ2dldFRpdGxlJyxcclxuICAgICdnZXRXaW5kb3dIYW5kbGVzJyxcclxuICAgICdnZXRXaW5kb3dTaXplJyxcclxuICAgICdnZXRYTUxQYWdlU291cmNlJyxcclxuICAgICdpc0FsZXJ0UHJlc2VudCcsXHJcbiAgICAnaXNDaGVja2VkJyxcclxuICAgICdpc0V4aXN0JyxcclxuICAgICdpc0ludGVyYWN0YWJsZScsXHJcbiAgICAnaXNTZWxlY3RlZCcsXHJcbiAgICAnaXNWaXNpYmxlJyxcclxuICAgICdtb2NrJyxcclxuICAgICdtb2NrQ2xlYXJBbGwnLFxyXG4gICAgJ21vY2tSZXN0b3JlQWxsJyxcclxuICAgICduZXdXaW5kb3cnLFxyXG4gICAgJ3NldEF1dG9XYWl0Rm9yQW5ndWxhcicsXHJcbiAgICAnc2V0VGltZW91dCcsXHJcbiAgICAndGFrZVNjcmVlbnNob3QnLFxyXG4gICAgJ3dhaXRGb3JBbmd1bGFyJyxcclxuICAgICd3YWl0Rm9yV2luZG93J1xyXG4gICAgXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywgJ2NsaWNrJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuY29uc3QgU0FOSVRJWkVfSFRNTF9PUFRTID0ge1xyXG4gICAgYWxsb3dlZFRhZ3M6IFtcclxuICAgICdib2R5JyxcclxuICAgICdidXR0b24nLFxyXG4gICAgJ2Zvcm0nLFxyXG4gICAgJ2ltZycsXHJcbiAgICAnaW5wdXQnLFxyXG4gICAgJ3NlbGVjdCcsXHJcbiAgICAndGV4dGFyZWEnLFxyXG4gICAgJ29wdGlvbicsXHJcbiAgICAnYWRkcmVzcycsXHJcbiAgICAnYXJ0aWNsZScsXHJcbiAgICAnYXNpZGUnLFxyXG4gICAgJ2Zvb3RlcicsXHJcbiAgICAnaGVhZGVyJyxcclxuICAgICdoMScsXHJcbiAgICAnaDInLFxyXG4gICAgJ2gzJyxcclxuICAgICdoNCcsXHJcbiAgICAnaDUnLFxyXG4gICAgJ2g2JyxcclxuICAgICdoZ3JvdXAnLFxyXG4gICAgJ21haW4nLFxyXG4gICAgJ25hdicsXHJcbiAgICAnc2VjdGlvbicsXHJcbiAgICAnYmxvY2txdW90ZScsXHJcbiAgICAnZGQnLFxyXG4gICAgJ2RpdicsXHJcbiAgICAnZGwnLFxyXG4gICAgJ2R0JyxcclxuICAgICdmaWdjYXB0aW9uJyxcclxuICAgICdmaWd1cmUnLFxyXG4gICAgJ2hyJyxcclxuICAgICdsaScsXHJcbiAgICAnbWFpbicsXHJcbiAgICAnb2wnLFxyXG4gICAgJ3AnLFxyXG4gICAgJ3ByZScsXHJcbiAgICAndWwnLFxyXG4gICAgJ2EnLFxyXG4gICAgJ2FiYnInLFxyXG4gICAgJ2InLFxyXG4gICAgJ2JkaScsXHJcbiAgICAnYmRvJyxcclxuICAgICdjaXRlJyxcclxuICAgICdjb2RlJyxcclxuICAgICdkYXRhJyxcclxuICAgICdkZm4nLFxyXG4gICAgJ2VtJyxcclxuICAgICdpJyxcclxuICAgICdrYmQnLFxyXG4gICAgJ21hcmsnLFxyXG4gICAgJ3EnLFxyXG4gICAgJ3JiJyxcclxuICAgICdycCcsXHJcbiAgICAncnQnLFxyXG4gICAgJ3J0YycsXHJcbiAgICAncnVieScsXHJcbiAgICAncycsXHJcbiAgICAnc2FtcCcsXHJcbiAgICAnc21hbGwnLFxyXG4gICAgJ3NwYW4nLFxyXG4gICAgJ3N0cm9uZycsXHJcbiAgICAnc3ViJyxcclxuICAgICdzdXAnLFxyXG4gICAgJ3RpbWUnLFxyXG4gICAgJ3UnLFxyXG4gICAgJ3ZhcicsXHJcbiAgICAnd2JyJyxcclxuICAgICdjYXB0aW9uJyxcclxuICAgICdjb2wnLFxyXG4gICAgJ2NvbGdyb3VwJyxcclxuICAgICd0YWJsZScsXHJcbiAgICAndGJvZHknLFxyXG4gICAgJ3RkJyxcclxuICAgICd0Zm9vdCcsXHJcbiAgICAndGgnLFxyXG4gICAgJ3RoZWFkJyxcclxuICAgICd0cicsXHJcbiAgICAndGl0bGUnXHJcbiAgICBdLFxyXG4gICAgYWxsb3dlZEF0dHJpYnV0ZXM6IGZhbHNlLC8qe1xyXG4gICAgJyonOiBbXHJcbiAgICAgICdpZCcsXHJcbiAgICAgICdjbGFzcycsXHJcbiAgICAgICduYW1lJyxcclxuICAgICAgJ2RhdGEtKicsXHJcbiAgICAgICdyb2xlJyxcclxuICAgICAgJ3R5cGUnLFxyXG4gICAgICAnYXJpYS0qJyxcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnYWx0JyxcclxuICAgICAgJ3NyYydcclxuICAgIF1cclxuICB9LCovXHJcbiAgICBhbGxvd2VkQ2xhc3NlczogdW5kZWZpbmVkLFxyXG4gICAgYWxsb3dlZFN0eWxlczogdW5kZWZpbmVkXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICAgICAgdGhpcy53ZFByb2MgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgbmV3IFNlbGVuaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHNlbGVuaXVtVXJsIC0gUmVtb3RlIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGNhcGFiaWxpdGllcyBlaXRoZXIgZnJvbSBpbml0IG1ldGhvZCBhcmd1bWVudCBvciBmcm9tIGNvbnRleHQgcGFyYW1ldGVycyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVuaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXV0b1N0YXJ0V2ViRHJpdmVyKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGFwcGl1bVVybCBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgZXhlY3V0aW9uIGdyaWQgKHN1Y2ggYXMgQlMpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXBwaXVtVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly9sb2NhbGhvc3QnKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIGluZGV0aWZ5IGFuZCBhdXRvLXN0YXJ0IGEgcmVsZXZhbnQgd2ViZHJpdmVyXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmF1dG9TdGFydFdlYkRyaXZlcikge1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlbW90ZVVybCwgcHJvYyB9ID0gYXdhaXQgYXV0b1N0YXJ0V2ViRHJpdmVyKHRoaXMuY2Fwcyk7XHJcbiAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gcmVtb3RlVXJsO1xyXG4gICAgICAgICAgICB0aGlzLndkUHJvYyA9IHByb2M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBicm93c2VyTmFtZSBjYXBzIGZyb20gb3B0aW9ucy4gRklYTUU6IHdoeSBpcyB0aGlzIGV2ZW4gbmVlZGVkP1xyXG4gICAgICAgIGxldCBkZWZhdWx0QnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZSB8fCBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICAgICAgZGVmYXVsdEJyb3dzZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGSVhNRTogc2hhbGwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGJyb3dzZXJOYW1lIGlzIG5vdCBzcGVjaWZpZWQsIG5laXRoZXIgaW4gY2FwcyBub3IgaW4gb3B0aW9ucz8hXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5JTlZBTElEX0NBUEFCSUxJVElFUyxcclxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBgd2ViYCBtb2R1bGUgLSBicm93c2VyTmFtZSBtdXN0IGJlIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBicm93c2VyTmFtZS1zXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWUnKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGlzIHNwZWNpZmllZCBhcyAnaWUnIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBhbmQgcG9zc2libHkgc3VpdGVzXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzICdpbnRlcm5ldCBleHBsb3JlcidcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gJ2ludGVybmV0IGV4cGxvcmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1snbGFtYmRhOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBsYW1iZGF0ZXN0IGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gcGVyZmVjdG9Nb2JpbGUgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgIT09ICdNaWNyb3NvZnRFZGdlJykge1xyXG4gICAgICAgICAgICAvLyBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzIGFsbCBicm93c2VyTmFtZXMgdG8gYmUgbG93ZXJjYXNlXHJcbiAgICAgICAgICAgIC8vIGV4Y2VwdCBcIk1pY3Jvc29mdEVkZ2VcIlxyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gc3BlY2lmeWluZyB0aGlzIGxlYWRzIENocm9tZSA3NysgdG8gcmVmdXNlIGxvYWRpbmdcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmxvZ2dpbmdQcmVmcyA9IHsgICAgICAgICAgICAgLy8gZm9yIENocm9tZURyaXZlciA8IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuY2hyb21lT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZMb2dnaW5nUHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVOZXR3b3JrOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVBhZ2U6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2Uoc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZW5pdW1VcmxCYXNlID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fToke3BvcnR9YDtcclxuICAgICAgICAvLyBjaGVjayBpZiBzZWxlbml1bSBodWIgaXMgYmFzZWQgb24gU2VsZW5vaWQsIHRoZW4gZW5hYmxlIHZpZGVvIHJlY29yZGluZ1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCA9IGF3YWl0IHRoaXMuX2lzU2VsZW5vaWRIdWIodGhpcy5zZWxlbml1bVVybEJhc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10udmlkZW9GcmFtZVJhdGUgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIFdlYmRyaXZlci5pbyBvcHRpb25zXHJcbiAgICAgICAgY29uc3Qgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpbml0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zdCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBjb25zdCBuYW1lID0gbW9kVXRpbHMuZW5yaWNoUHJvdmlkZXJXZGlvT3B0aW9ucyhwcm92aWRlciwgd2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBicm93c2VyIGZvciBtb2JpbGUgd2ViIHRlc3RzLCBpZiBleGVjdXRlZCBhZ2FpbnN0IHJlbW90ZSBkZXZpY2VzIG9mIGEgY2xvdWQgcHJvdmlkZXJcclxuICAgICAgICBpZiAoZGVmYXVsdEJyb3dzZXIgJiYgcHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gREVGQVVMVF9NT0JJTEVfQlJPV1NFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53ZGlvT3B0cyA9IHdkaW9PcHRzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlVOS05PV05fRVJST1IsIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBtb2RVdGlscy5vdmVyd3JpdGVXZGlvQ29tbWFuZHModGhpcy5kcml2ZXIpO1xyXG5cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMud2RQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2RQcm9jLmtpbGwoKTtcclxuICAgICAgICAgICAgdGhpcy53ZFByb2MgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIG9ubHkgaWYgbm8gc2Vzc2lvbiB0aW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0YWtlIDUgbWluIHRvIGV4ZWN1dGUgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uICYmICF0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlbGV0ZVNlc3Npb24gZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzICYmICdGQUlMRUQnID09PSBzdGF0dXMudG9VcHBlckNhc2UoKSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKHN0YXR1cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2VDb250aW51ZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGNocm9tZWRyaXZlcidzIG9ubHkgd2hlbiBydW5uaW5nIGZyb20gd2l0aGluIHRoZSBJREUgYW5kIHRlc3QgZGlkIG5vdCBmYWlsXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQgJiYgKCFzdGF0dXMgfHwgJ0ZBSUxFRCcgIT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjU3luYygndGFza2tpbGwgL0lNIGNocm9tZWRyaXZlci5leGUgL0YnLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgY2hyb21lZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBlZGdlZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBmb3Igbm93XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgbXNlZGdlZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucmVzb2x2ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBicm93c2VyIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzID09PSB0cnVlICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QnJvd3NlckxvZyhsb2cpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCBjbGVhciB0cmFuc2FjdGlvbnMgdG8gYXZvaWQgZHVwbGljYXRlIG5hbWVzIGFjcm9zcyBpdGVyYXRpb25zXHJcbiAgICAgICAgLy8gYWxzbyBzaG91bGQgdGhyb3cgb24gZHVwbGljYXRlIG5hbWVzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgLy8gdGhlcmUgbWlnaHQgYmUgbm8gdHJhbnNhY3Rpb25zIHNldCBpZiB0ZXN0IGZhaWxzIGJlZm9yZSB3ZWIudHJhbnNhY3Rpb24gY29tbWFuZFxyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gYXdhaXQgdGhpcy5fZ2V0SEFSKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnMuaGFyID0gdGhpcy50cmFuc2FjdGlvbnM7XHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudChoYXNGYWlsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJy4uL2xpYi90ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgb3BlcmF0aW9uIGZhaWxlZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSWdub3JlIGNhbnZhcy1yZWxhdGVkIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMSknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMiknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgzKScsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU25hcHNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU05BUFNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0UGFnZVNvdXJjZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldFBhZ2VTb3VyY2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2FuaXRpemVIdG1sKHJldHZhbCwgU0FOSVRJWkVfSFRNTF9PUFRTKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGVtcHR5IGxpbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKC8oXlsgXFx0XSpcXG4pL2dtLCBcIlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90ICgxKScsIGVycm9yKTsgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDIpJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9hZGp1c3RCcm93c2VyTG9nKGxvZykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgYnJvd3NlciB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgU0VWRVJFIGxvZyBsZXZlbCB0byBFUlJPUlxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsID09PSAnU0VWRVJFJyA/ICdFUlJPUicgOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogJ2Jyb3dzZXInXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogRklYTUU6IFRoZXJlIGlzIGEgYnVnIHdpdGggSUUuIFNlZSB0aGUgY29tbWVudCB3aXRoaW4gZnVuY3Rpb24gYm9keS5cclxuICAgICAqXHJcbiAgICAgKiAgZG9tQ29udGVudExvYWRlZCAoYWthIEZpcnN0IFZpc3VhbCBUaW1lKS0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKiAgbG9hZCAoYWthIEZ1bGwgTG9hZCBUaW1lKSAgICAgICAgICAgICAgIC0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb2Nlc3NpbmcgbW9kZWw6XHJcbiAgICAgKlxyXG4gICAgICogIDEuIG5hdmlnYXRpb25TdGFydCAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgcmVxdWVzdGVkIHRoZSBkb2N1bWVudC5cclxuICAgICAqICAyLiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gTm90IHJlbGV2YW50IHRvIHVzLiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvbmF2aWdhdGlvbi10aW1pbmcvI3Byb2Nlc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKiAgMy4gZG9tTG9hZGluZyAgICAgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIHN0YXJ0cyBwYXJzaW5nIHRoZSBkb2N1bWVudC5cclxuICAgICAqICA0LiBkb21JbnRlcmFjdGl2ZSAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50IGFuZCB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZS5cclxuICAgICAqICA1LiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAgIC0gVGhlIGRvY3VtZW50IGhhcyBiZWVuIGNvbXBsZXRlbHkgbG9hZGVkIGFuZCBwYXJzZWQgYW5kIGRlZmVycmVkIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC4gXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlc2hlZXRzWzFdLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgbG9hZGluZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0gLSBTdHlsZXNoZWV0cyAvdXN1YWxseS8gZGVmZXIgdGhpcyBldmVudCEgLSBodHRwOi8vbW9saWx5LmRlL3dlYmxvZy9kb21jb250ZW50bG9hZGVkXHJcbiAgICAgKiAgNi4gZG9tQ29udGVudExvYWRlZEV2ZW50RW5kICAgICAtIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy4gRS5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRE9NIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXCIpO1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICogIDcuIGRvbUNvbXBsZXRlICAgICAgICAgICAgICAgICAgLSBUaGUgRE9NIHRyZWUgaXMgY29tcGxldGVseSBidWlsdC4gQXN5bmMgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogIDguIGxvYWRFdmVudFN0YXJ0ICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgYWxsIHRoZSByZXNvdXJjZXMgbGlrZSBpbWFnZXMsIHN3ZiwgZXRjLlxyXG4gICAgICogIDkuIGxvYWRFdmVudEVuZCAgICAgICAgICAgICAgICAgLSBUaGUgbG9hZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuXHJcbiAgICAgKi9cclxuICAgIF9nZXRTdGF0cyhjb21tYW5kTmFtZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmV0Y2hTdGF0cyAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5faXNBY3Rpb24oY29tbWFuZE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkID0gMDtcclxuICAgICAgICAgICAgdmFyIGxvYWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2FtZVBhZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRPRE86IGhhbmRsZSBmb2xsb3dpbmcgc2l0dWF0aW9uOlxyXG4gICAgICAgICAgICAvLyBpZiBuYXZpZ2F0ZVN0YXJ0IGVxdWFscyB0byB0aGUgb25lIHdlIGdvdCBmcm9tIHByZXZpb3VzIGF0dGVtcHQgKHdlIG5lZWQgdG8gc2F2ZSBpdClcclxuICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgYXJlIHN0aWxsIG9uIHRoZSBzYW1lIHBhZ2UgYW5kIGRvbid0IG5lZWQgdG8gcmVjb3JkIGxvYWQvZG9tQ29udGVudExvYWRlZCB0aW1lc1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3RFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qZ2xvYmFsIHdpbmRvdyovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWluZ3MgPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubG9hZEV2ZW50U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIHRpbWluZ3MubG9hZEV2ZW50U3RhcnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVQYWdlID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSAmJiB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID09IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA9IHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkRXZlbnRTdGFydCA9IHRpbWluZ3MubG9hZEV2ZW50U3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkID0gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBsb2FkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgbG9hZEV2ZW50U3RhcnQgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGVjdXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGVycm9yIGluc2lkZSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXhlY3V0ZUVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICAvLyBjb3VsZG4ndCBnZXQgdGltaW5ncy5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzYW1lUGFnZSA/IHt9IDogeyBEb21Db250ZW50TG9hZGVkRXZlbnQ6IGRvbUNvbnRlbnRMb2FkZWQsIExvYWRFdmVudDogbG9hZCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBsaW1pdCB0aGUgbmFtZSBsZW5ndGggKHNpbmNlIHdlIGNhbid0IHN0b3JlIHZhbHVlcyBsYXJnZXIgdGhhbiA1MTJCIGluIHRoZSBkYXRhYmFzZSlcclxuICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCA1MTIpO1xyXG5cclxuICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uc1tuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNhY3Rpb25zKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChuYW1lKSkubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZSsnICgjJytjb3VudGVyKycpJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSBtb2RVdGlscy5nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0SEFSKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9nVHlwZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygncGVyZm9ybWFuY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ3MoJ3BlcmZvcm1hbmNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gb25lIGluc3RhbmNlLCBsb2dzIHdhcyBub3QgaXRlcmFibGUgZm9yIHNvbWUgcmVhc29uIC0gaGVuY2UgdGhlIGZvbGxvd2luZyBjaGVjazpcclxuICAgICAgICAgICAgICAgIGlmICghbG9ncyB8fCB0eXBlb2YgbG9nc1tTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2dldEhBUjogbG9ncyBub3QgaXRlcmFibGU6ICcgKyBKU09OLnN0cmluZ2lmeShsb2dzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ09iaiA9IEpTT04ucGFyc2UobG9nLm1lc3NhZ2UpOyAgIC8vIHJldHVybmVkIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5wdXNoKG1zZ09iai5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXIgPSBoYXJGcm9tTWVzc2FnZXMoZXZlbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShoYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmV0Y2ggSEFSOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrV2FpdEZvckFuZ3VsYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckFuZ3VsYXIodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyVGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUNyZWRlbnRpYWxzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50ID0gbGFtYmRhUmVzdENsaWVudC5BdXRvbWF0aW9uQ2xpZW50KFxyXG4gICAgICAgICAgICAgICAgbGFtYmRhQ3JlZGVudGlhbHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNfaW5kOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGFtYmRhQXV0b21hdGlvbkNsaWVudC51cGRhdGVTZXNzaW9uQnlJZChzZXNzaW9uSWQsIHJlcXVlc3RCb2R5LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gTGFtYmRhVGVzdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHRiID0gbmV3IFRlc3RpbmdCb3Qoe1xyXG4gICAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYXBpX3NlY3JldDogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhID0geyBcInRlc3Rbc3VjY2Vzc11cIiA6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyBcIjFcIiA6IFwiMFwiIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0Yi51cGRhdGVUZXN0KHRlc3REYXRhLCBzZXNzaW9uSWQsIGZ1bmN0aW9uKGVycm9yLCB0ZXN0RGV0YWlscykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBUZXN0aW5nQm90OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXNTZWxlbm9pZEh1YihzZWxlbml1bVVybCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3NlbGVuaXVtVXJsfWAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5ICYmIGJvZHkubGVuZ3RoICYmIGJvZHkuaW5kZXhPZignWW91IGFyZSB1c2luZyBTZWxlbm9pZCcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBpbnNpZGUgU2VsZW5vaWQsIHRoZW4gZG93bmxvYWQgdGhlIHZpZGVvIGlmIHRlc3QgaGFzIGZhaWxlZFxyXG4gICAgYXN5bmMgX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZWNvcmRWaWRlbyAmJiAhaGFzRmFpbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmlkZW9GaWxlVXJsID0gYCR7dGhpcy5zZWxlbml1bVVybEJhc2V9L3ZpZGVvLyR7dGhpcy5zZXNzaW9uSWR9Lm1wNGA7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICB0aGlzLnJzLmF0dGFjaG1lbnRzLnB1c2gobW9kVXRpbHMubmV3VmlkZW9BdHRhY2htZW50KGZpbGVOYW1lLCB2aWRlb0ZpbGVVcmwpKTtcclxuICAgIH1cclxufVxyXG5cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTs7QUFDWjtBQUNBO0FB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
|
|
920
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX2Nocm9tZUhhciIsIl91cmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwid2RpbyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1dlYkRyaXZlck1vZHVsZSIsIl93aGVuIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl91dGlsIiwiX3NhdWNlbGFicyIsIl9ub2RlUmVzdENsaWVudCIsIl90ZXN0aW5nYm90QXBpIiwiX2NoaWxkX3Byb2Nlc3MiLCJfcGVyZmVjdG9SZXBvcnRpbmciLCJfcmVxdWVzdCIsIl9pbWdNZXJnZSIsIl9hdXRvU3RhcnQiLCJfc2FuaXRpemVIdG1sIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiU0FOSVRJWkVfSFRNTF9PUFRTIiwiYWxsb3dlZFRhZ3MiLCJhbGxvd2VkQXR0cmlidXRlcyIsImFsbG93ZWRDbGFzc2VzIiwidW5kZWZpbmVkIiwiYWxsb3dlZFN0eWxlcyIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0Iiwid2RQcm9jIiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiYXV0b1N0YXJ0V2ViRHJpdmVyIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsInJlbW90ZVVybCIsInByb2MiLCJkZWZhdWx0QnJvd3NlciIsImJyb3dzZXJOYW1lIiwiZXJyb3JDb2RlIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5Iiwic2VsZW5pdW1VcmxCYXNlIiwiaXNSdW5uaW5nT25TZWxlbm9pZCIsIl9pc1NlbGVub2lkSHViIiwiZW5hYmxlVmlkZW8iLCJ2aWRlb0ZyYW1lUmF0ZSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJkcml2ZXIiLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiUEVSRkVDVE8iLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0Iiwib3ZlcndyaXRlV2Rpb0NvbW1hbmRzIiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsImRlZmVyIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwia2lsbCIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJleGVjU3luYyIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiUHJvbWlzZSIsInJlamVjdCIsIndhaXRVbnRpbFJldFZhbCIsIndhaXRVbnRpbCIsImltYWdlcyIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImV3IiwiX3Rha2VTbmFwc2hvdFNpbGVudCIsImdldFBhZ2VTb3VyY2UiLCJyZXN1bHQiLCJzYW5pdGl6ZUh0bWwiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsInNsaWNlIiwiY291bnRlciIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiaGFyRnJvbU1lc3NhZ2VzIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVxdWVzdCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgeyBhdXRvU3RhcnRXZWJEcml2ZXIgfSBmcm9tICcuLi9veF9tb2R1bGVzL21vZHVsZS13ZWIvd2ViZHJpdmVyL2F1dG8tc3RhcnQnO1xyXG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBOT19TTkFQU0hPVF9DT01NQU5EUyA9IFtcclxuICAgICdpbml0JyxcclxuICAgICdhc3NlcnRBbGVydCcsXHJcbiAgICAnZGlzcG9zZScsXHJcbiAgICAndHJhbnNhY3Rpb24nLFxyXG4gICAgJ2RlbGV0ZUNvb2tpZXMnLFxyXG4gICAgJ2dldENvb2tpZXMnLFxyXG4gICAgJ2dldENzc1ZhbHVlJyxcclxuICAgICdnZXRIVE1MJyxcclxuICAgICdnZXRTb3VyY2UnLFxyXG4gICAgJ2dldFRpdGxlJyxcclxuICAgICdnZXRXaW5kb3dIYW5kbGVzJyxcclxuICAgICdnZXRXaW5kb3dTaXplJyxcclxuICAgICdnZXRYTUxQYWdlU291cmNlJyxcclxuICAgICdpc0FsZXJ0UHJlc2VudCcsXHJcbiAgICAnaXNDaGVja2VkJyxcclxuICAgICdpc0V4aXN0JyxcclxuICAgICdpc0ludGVyYWN0YWJsZScsXHJcbiAgICAnaXNTZWxlY3RlZCcsXHJcbiAgICAnaXNWaXNpYmxlJyxcclxuICAgICdtb2NrJyxcclxuICAgICdtb2NrQ2xlYXJBbGwnLFxyXG4gICAgJ21vY2tSZXN0b3JlQWxsJyxcclxuICAgICduZXdXaW5kb3cnLFxyXG4gICAgJ3NldEF1dG9XYWl0Rm9yQW5ndWxhcicsXHJcbiAgICAnc2V0VGltZW91dCcsXHJcbiAgICAndGFrZVNjcmVlbnNob3QnLFxyXG4gICAgJ3dhaXRGb3JBbmd1bGFyJyxcclxuICAgICd3YWl0Rm9yV2luZG93J1xyXG5dO1xyXG5jb25zdCBBQ1RJT05fQ09NTUFORFMgPSBbJ29wZW4nLCAnY2xpY2snXTtcclxuY29uc3QgREVGQVVMVF9XQUlUX1RJTUVPVVQgPSA2MCAqIDEwMDA7ICAgICAgICAgICAgLy8gZGVmYXVsdCA2MHMgd2FpdCB0aW1lb3V0XHJcblxyXG5jb25zdCBTQU5JVElaRV9IVE1MX09QVFMgPSB7XHJcbiAgICBhbGxvd2VkVGFnczogW1xyXG4gICAgJ2JvZHknLFxyXG4gICAgJ2J1dHRvbicsXHJcbiAgICAnZm9ybScsXHJcbiAgICAnaW1nJyxcclxuICAgICdpbnB1dCcsXHJcbiAgICAnc2VsZWN0JyxcclxuICAgICd0ZXh0YXJlYScsXHJcbiAgICAnb3B0aW9uJyxcclxuICAgICdhZGRyZXNzJyxcclxuICAgICdhcnRpY2xlJyxcclxuICAgICdhc2lkZScsXHJcbiAgICAnZm9vdGVyJyxcclxuICAgICdoZWFkZXInLFxyXG4gICAgJ2gxJyxcclxuICAgICdoMicsXHJcbiAgICAnaDMnLFxyXG4gICAgJ2g0JyxcclxuICAgICdoNScsXHJcbiAgICAnaDYnLFxyXG4gICAgJ2hncm91cCcsXHJcbiAgICAnbWFpbicsXHJcbiAgICAnbmF2JyxcclxuICAgICdzZWN0aW9uJyxcclxuICAgICdibG9ja3F1b3RlJyxcclxuICAgICdkZCcsXHJcbiAgICAnZGl2JyxcclxuICAgICdkbCcsXHJcbiAgICAnZHQnLFxyXG4gICAgJ2ZpZ2NhcHRpb24nLFxyXG4gICAgJ2ZpZ3VyZScsXHJcbiAgICAnaHInLFxyXG4gICAgJ2xpJyxcclxuICAgICdtYWluJyxcclxuICAgICdvbCcsXHJcbiAgICAncCcsXHJcbiAgICAncHJlJyxcclxuICAgICd1bCcsXHJcbiAgICAnYScsXHJcbiAgICAnYWJicicsXHJcbiAgICAnYicsXHJcbiAgICAnYmRpJyxcclxuICAgICdiZG8nLFxyXG4gICAgJ2NpdGUnLFxyXG4gICAgJ2NvZGUnLFxyXG4gICAgJ2RhdGEnLFxyXG4gICAgJ2RmbicsXHJcbiAgICAnZW0nLFxyXG4gICAgJ2knLFxyXG4gICAgJ2tiZCcsXHJcbiAgICAnbWFyaycsXHJcbiAgICAncScsXHJcbiAgICAncmInLFxyXG4gICAgJ3JwJyxcclxuICAgICdydCcsXHJcbiAgICAncnRjJyxcclxuICAgICdydWJ5JyxcclxuICAgICdzJyxcclxuICAgICdzYW1wJyxcclxuICAgICdzbWFsbCcsXHJcbiAgICAnc3BhbicsXHJcbiAgICAnc3Ryb25nJyxcclxuICAgICdzdWInLFxyXG4gICAgJ3N1cCcsXHJcbiAgICAndGltZScsXHJcbiAgICAndScsXHJcbiAgICAndmFyJyxcclxuICAgICd3YnInLFxyXG4gICAgJ2NhcHRpb24nLFxyXG4gICAgJ2NvbCcsXHJcbiAgICAnY29sZ3JvdXAnLFxyXG4gICAgJ3RhYmxlJyxcclxuICAgICd0Ym9keScsXHJcbiAgICAndGQnLFxyXG4gICAgJ3Rmb290JyxcclxuICAgICd0aCcsXHJcbiAgICAndGhlYWQnLFxyXG4gICAgJ3RyJyxcclxuICAgICd0aXRsZSdcclxuICAgIF0sXHJcbiAgICBhbGxvd2VkQXR0cmlidXRlczogZmFsc2UsLyp7XHJcbiAgICAnKic6IFtcclxuICAgICAgJ2lkJyxcclxuICAgICAgJ2NsYXNzJyxcclxuICAgICAgJ25hbWUnLFxyXG4gICAgICAnZGF0YS0qJyxcclxuICAgICAgJ3JvbGUnLFxyXG4gICAgICAndHlwZScsXHJcbiAgICAgICdhcmlhLSonLFxyXG4gICAgICAnaHJlZicsXHJcbiAgICAgICdhbHQnLFxyXG4gICAgICAnc3JjJ1xyXG4gICAgXVxyXG4gIH0sKi9cclxuICAgIGFsbG93ZWRDbGFzc2VzOiB1bmRlZmluZWQsXHJcbiAgICBhbGxvd2VkU3R5bGVzOiB1bmRlZmluZWRcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYk1vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9OyAgICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbi0+aGFyIGRpY3Rpb25hcnlcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgICAgICB0aGlzLndkUHJvYyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldERyaXZlclxyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyBXRElPIGRyaXZlci5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gV0RJTyBkcml2ZXIuXHJcbiAgICAgKi9cclxuICAgIGdldERyaXZlcigpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RHJpdmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGN1cnJlbnRseSBkZWZpbmVkIGNhcGFiaWxpdGllcy5cclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBnZXRDYXBhYmlsaXRpZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FwcyB8fCBzdXBlci5nZXRDYXBhYmlsaXRpZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBpbml0XHJcbiAgICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBuZXcgU2VsZW5pdW0gc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gY2FwcyAtIERlc2lyZWQgY2FwYWJpbGl0aWVzLiBJZiBub3Qgc3BlY2lmaWVkIGNhcGFiaWxpdGllcyB3aWxsIGJlIHRha2VuIGZyb20gc3VpdGUgZGVmaW5pdGlvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc2VsZW5pdW1VcmwgLSBSZW1vdGUgc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2Fwcywgc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRha2UgY2FwYWJpbGl0aWVzIGVpdGhlciBmcm9tIGluaXQgbWV0aG9kIGFyZ3VtZW50IG9yIGZyb20gY29udGV4dCBwYXJhbWV0ZXJzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3JcclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZW5pdW1VcmwgJiYgIXRoaXMub3B0aW9ucy5hdXRvU3RhcnRXZWJEcml2ZXIpIHtcclxuICAgICAgICAgICAgLy8gaWYgYXBwaXVtVXJsIHBvaW50cyB0byBhbiBleHRlcm5hbCBleGVjdXRpb24gZ3JpZCAoc3VjaCBhcyBCUylcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgJiYgIXRoaXMub3B0aW9ucy5hcHBpdW1Vcmwuc3RhcnRzV2l0aCgnaHR0cDovL2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1Vcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlbml1bVVybCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiB3ZSBzaG91bGQgaW5kZXRpZnkgYW5kIGF1dG8tc3RhcnQgYSByZWxldmFudCB3ZWJkcml2ZXJcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuYXV0b1N0YXJ0V2ViRHJpdmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgcmVtb3RlVXJsLCBwcm9jIH0gPSBhd2FpdCBhdXRvU3RhcnRXZWJEcml2ZXIodGhpcy5jYXBzKTtcclxuICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSByZW1vdGVVcmw7XHJcbiAgICAgICAgICAgIHRoaXMud2RQcm9jID0gcHJvYztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIGJyb3dzZXJOYW1lIGNhcHMgZnJvbSBvcHRpb25zLiBGSVhNRTogd2h5IGlzIHRoaXMgZXZlbiBuZWVkZWQ/XHJcbiAgICAgICAgbGV0IGRlZmF1bHRCcm93c2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5vcHRpb25zLmJyb3dzZXJOYW1lIHx8IERFRkFVTFRfQlJPV1NFUl9OQU1FO1xyXG4gICAgICAgICAgICBkZWZhdWx0QnJvd3NlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZJWE1FOiBzaGFsbCB3ZSB0aHJvdyBhbiBleGNlcHRpb24gaWYgYnJvd3Nlck5hbWUgaXMgbm90IHNwZWNpZmllZCwgbmVpdGhlciBpbiBjYXBzIG5vciBpbiBvcHRpb25zPyFcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLklOVkFMSURfQ0FQQUJJTElUSUVTLFxyXG4gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBpbml0aWFsaXplIGB3ZWJgIG1vZHVsZSAtIGJyb3dzZXJOYW1lIG11c3QgYmUgc3BlY2lmaWVkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRqdXN0IGJyb3dzZXJOYW1lLXNcclxuICAgICAgICBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZScpIHtcclxuICAgICAgICAgICAgLy8gSUUgaXMgc3BlY2lmaWVkIGFzICdpZScgdGhyb3VnaCB0aGUgY29tbWFuZCBsaW5lIGFuZCBwb3NzaWJseSBzdWl0ZXNcclxuICAgICAgICAgICAgLy8gYnV0IHNlbGVuaXVtIHN0YW5kYWxvbmUgc2VydmVyIGV4cGVjdHMgJ2ludGVybmV0IGV4cGxvcmVyJ1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSAnaW50ZXJuZXQgZXhwbG9yZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydsYW1iZGE6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIC8vIGxhbWJkYXRlc3QgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHNbJ3BlcmZlY3RvTW9iaWxlOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBwZXJmZWN0b01vYmlsZSBleHBlY3RzIG9yaWdpbmFsIGNhc2UgbmFtZXNcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAhPT0gJ01pY3Jvc29mdEVkZ2UnKSB7XHJcbiAgICAgICAgICAgIC8vIHNlbGVuaXVtIHN0YW5kYWxvbmUgc2VydmVyIGV4cGVjdHMgYWxsIGJyb3dzZXJOYW1lcyB0byBiZSBsb3dlcmNhc2VcclxuICAgICAgICAgICAgLy8gZXhjZXB0IFwiTWljcm9zb2Z0RWRnZVwiXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWRqdXN0IGNhcGFiaWxpdGllcyB0byBlbmFibGUgY29sbGVjdGluZyBicm93c2VyIGFuZCBwZXJmb3JtYW5jZSBzdGF0cyBpbiBDaHJvbWUgXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2dvb2c6bG9nZ2luZ1ByZWZzJ10gPSB7ICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyID49IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoaXMgbGVhZHMgQ2hyb21lIDc3KyB0byByZWZ1c2UgbG9hZGluZ1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMubG9nZ2luZ1ByZWZzID0geyAgICAgICAgICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyIDwgNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5jaHJvbWVPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgcGVyZkxvZ2dpbmdQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZU5ldHdvcms6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlUGFnZTogZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShzZWxlbml1bVVybCB8fCBERUZBVUxUX1NFTEVOSVVNX1VSTCk7XHJcbiAgICAgICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XHJcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcclxuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcclxuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcclxuICAgICAgICBpZiAodXJsLmF1dGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aCA9IHVybC5hdXRoLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IGF1dGhbMF0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGF1dGhbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlbml1bVVybEJhc2UgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3R9OiR7cG9ydH1gO1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHNlbGVuaXVtIGh1YiBpcyBiYXNlZCBvbiBTZWxlbm9pZCwgdGhlbiBlbmFibGUgdmlkZW8gcmVjb3JkaW5nXHJcbiAgICAgICAgdGhpcy5pc1J1bm5pbmdPblNlbGVub2lkID0gYXdhaXQgdGhpcy5faXNTZWxlbm9pZEh1Yih0aGlzLnNlbGVuaXVtVXJsQmFzZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS5lbmFibGVWaWRlbyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS5lbmFibGVWaWRlbyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXS52aWRlb0ZyYW1lUmF0ZSA9IDQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZ2VuZXJhdGUgV2ViZHJpdmVyLmlvIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGluaXRFcnJvciA9IG51bGw7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSBtb2RVdGlscy5lbnJpY2hQcm92aWRlcldkaW9PcHRpb25zKHByb3ZpZGVyLCB3ZGlvT3B0cyk7XHJcblxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGJyb3dzZXIgZm9yIG1vYmlsZSB3ZWIgdGVzdHMsIGlmIGV4ZWN1dGVkIGFnYWluc3QgcmVtb3RlIGRldmljZXMgb2YgYSBjbG91ZCBwcm92aWRlclxyXG4gICAgICAgIGlmIChkZWZhdWx0QnJvd3NlciAmJiBwcm92aWRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUgPSBERUZBVUxUX01PQklMRV9CUk9XU0VSO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5wcm92aWRlciA9IHByb3ZpZGVyO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQgPSBhd2FpdCBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICB3ZWJkcml2ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZVNjcmlwdDogYXN5bmMgKGNvbW1hbmQsIHBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoY29tbWFuZCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRpbmdDbGllbnQgPSBuZXcgcGVyZmVjdG9SZXBvcnRpbmcuUGVyZmVjdG8uUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQocGVyZmVjdG9FeGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdGFydChuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0U2VsZW5pdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBicm93c2VyIGxvZ3MgaWYgYXV0byBjb2xsZWN0IGxvZ3Mgb3B0aW9uIGlzIGVuYWJsZWRcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaW1wbHkgY2FsbCB0aGlzIHRvIGNsZWFyIHRoZSBwcmV2aW91cyBsb2dzIGFuZCBzdGFydCB0aGUgdGVzdCB3aXRoIHRoZSBjbGVhbiBsb2dzXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBbbW9kVXRpbHMucHJvdmlkZXIuTEFNQkRBVEVTVCwgbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLLCBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUT10uaW5jbHVkZXModGhpcy5kcml2ZXIucHJvdmlkZXIpXHJcbiAgICAgICAgICAgICAgICAvL1snTWljcm9zb2Z0RWRnZScsICdtc2VkZ2UnLCAnRWRnZScsICdJbnRlcm5ldCBFeHBsb3JlciddLmluY2x1ZGVzKHRoaXMuZHJpdmVyLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgbWF4aW1pemUgd2luZG93IGlmIHRoZSB0ZXN0IGlzIGV4ZWN1dGVkIGFnYWluc3QgZXh0ZXJuYWwgY2xvdWQgcHJvdmlkZXIgaW5mcmFzdHJ1Y3R1cmVcclxuICAgICAgICAgICAgICAgIC8vIGFzIG1vc3Qgb2YgY2xvdWQgcHJvdmlkZXJzIGRvIG5vdCBzdXBwb3J0IHRoaXMgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbWF4aW1pemUgYnJvd3NlciB3aW5kb3dcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLm1heGltaXplV2luZG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5pdGlhbCBUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHtcclxuICAgICAgICAgICAgICAgICAgICAnaW1wbGljaXQnOiB0aGlzLndhaXRGb3JUaW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgICAgICdwYWdlTG9hZCc6IHRoaXMud2FpdEZvclRpbWVvdXRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVU5LTk9XTl9FUlJPUiwgZXJyLm1lc3NhZ2UsIHV0aWwuaW5zcGVjdChlcnIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IG1vZFV0aWxzLm92ZXJ3cml0ZVdkaW9Db21tYW5kcyh0aGlzLmRyaXZlcik7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlID0gZGVmZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gJ3Bhc3NlZCc7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5ycy5zdGVwcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucnMuc3RlcHMpICYmIHRoaXMucnMuc3RlcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkRmluZGVkID0gdGhpcy5ycy5zdGVwcy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZEZpbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlNBVUNFTEFCUykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsndXNlcm5hbWUnXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3NLZXkgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddWydhY2Nlc3NLZXknXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXNzZWQgPSBzdGF0dXMgPT09ICdQQVNTRUQnO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBcIntcXFwicGFzc2VkXFxcIjpcIitwYXNzZWQrXCJ9XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG15QWNjb3VudCA9IG5ldyBTYXVjZUxhYnMoeyB1c2VyOiB1c2VybmFtZSwga2V5OiBhY2Nlc3NLZXl9KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteUFjY291bnQudXBkYXRlSm9iKHVzZXJuYW1lLCBpZCwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnN0b3BKb2IodXNlcm5hbWUsIGlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5URVNUSU5HQk9UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLnBhc3NlZCA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuQlJPV1NFUlNUQUNLKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBudWxsICYmIFsnUEFTU0VEJywnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYW5jZWxlZCBvciBvdGhlciBzdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnLCBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy53ZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy53ZFByb2Mua2lsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLndkUHJvYyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gb25seSBpZiBubyBzZXNzaW9uIHRpbWVvdXQgYmVjYXVzZSBpdCB3aWxsIHRha2UgNSBtaW4gdG8gZXhlY3V0ZSBvdGhlcndpc2VcclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24gJiYgIXRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZGVsZXRlU2Vzc2lvbiBlcnJvcicsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cykge1xyXG4gICAgICAgIGlmIChzdGF0dXMgJiYgJ0ZBSUxFRCcgPT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoc3RhdHVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcG9zZUNvbnRpbnVlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMuZHJpdmVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgY2hyb21lZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCd0YXNra2lsbCAvSU0gY2hyb21lZHJpdmVyLmV4ZSAvRicsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBjaHJvbWVkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGVkZ2Vkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGZvciBub3dcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBncmVwUmVzdWx0ID0gZXhlY1N5bmMoXCJwZ3JlcCAtZCcgJyBtc2VkZ2Vkcml2ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0ICYmIHBncmVwUmVzdWx0LnRvU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBncmVwUmVzdWx0ID0gcGdyZXBSZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBncmVwUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjU3luYygna2lsbCAtOSAnICsgcGdyZXBSZXN1bHQsIHsgc3RkaW86IFsnaWdub3JlJywgJ2lnbm9yZScsICdpZ25vcmUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5yZXNvbHZlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pdGVyYXRpb25TdGFydCgpIHtcclxuICAgICAgICAvLyBjbGVhciB0cmFuc2FjdGlvbiBuYW1lIHNhdmVkIGluIHByZXZpb3VzIGl0ZXJhdGlvbiBpZiBhbnlcclxuICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pdGVyYXRpb25FbmQoZXJyb3IpIHtcclxuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IudHlwZSA9PT0gZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGJyb3dzZXIgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgPT09IHRydWUgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RCcm93c2VyTG9nKGxvZykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNsZWFyIHRyYW5zYWN0aW9ucyB0byBhdm9pZCBkdXBsaWNhdGUgbmFtZXMgYWNyb3NzIGl0ZXJhdGlvbnNcclxuICAgICAgICAvLyBhbHNvIHNob3VsZCB0aHJvdyBvbiBkdXBsaWNhdGUgbmFtZXMuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBubyB0cmFuc2FjdGlvbnMgc2V0IGlmIHRlc3QgZmFpbHMgYmVmb3JlIHdlYi50cmFuc2FjdGlvbiBjb21tYW5kXHJcbiAgICAgICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ycy5oYXIgPSB0aGlzLnRyYW5zYWN0aW9ucztcclxuICAgICAgICBjb25zdCBoYXNGYWlsZWQgPSBlcnJvciAhPT0gdW5kZWZpbmVkICYmIGVycm9yICE9PSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBhbGwgKHNjcmVlbnNob3QgYW5kIHRpdGxlKSBpbWFnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRXaW5kb3dIYW5kbGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVzKSAmJiBoYW5kbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRUb0ltYWdlID0gcmVxdWlyZSgnLi4vbGliL3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGVJbWFnZSA9IGF3YWl0IHRleHRUb0ltYWdlLmdlbmVyYXRlKHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGVJbWFnZSAmJiB0eXBlb2YgdGl0bGVJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2godGl0bGVJbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NhbnZhcyBvcGVyYXRpb24gZmFpbGVkLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBJZ25vcmUgY2FudmFzLXJlbGF0ZWQgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzLnB1c2goaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRJbWFnZSA9IGF3YWl0IG1lcmdlSW1hZ2VzKGltYWdlcywgeyBkaXJlY3Rpb246IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVyZ2VkSW1hZ2UgJiYgdHlwZW9mIG1lcmdlZEltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgxKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgyKScsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTbmFwc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TTkFQU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRQYWdlU291cmNlXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0UGFnZVNvdXJjZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBzYW5pdGl6ZUh0bWwocmV0dmFsLCBTQU5JVElaRV9IVE1MX09QVFMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZW1wdHkgbGluZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcmV0dmFsLnJlcGxhY2UoLyheWyBcXHRdKlxcbikvZ20sIFwiXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDEpJywgZXJyb3IpOyByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCAoMiknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCAoMyknLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90IGlubmVyIGVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2FkanVzdEJyb3dzZXJMb2cobG9nKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBicm93c2VyIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGltZTogbG9nLnRpbWVzdGFtcCxcclxuICAgICAgICAgICAgbXNnOiBsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgLy8gY29udmVydCBTRVZFUkUgbG9nIGxldmVsIHRvIEVSUk9SXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwgPT09ICdTRVZFUkUnID8gJ0VSUk9SJyA6IGxvZy5sZXZlbCxcclxuICAgICAgICAgICAgc3JjOiAnYnJvd3NlcidcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBGSVhNRTogVGhlcmUgaXMgYSBidWcgd2l0aCBJRS4gU2VlIHRoZSBjb21tZW50IHdpdGhpbiBmdW5jdGlvbiBib2R5LlxyXG4gICAgICpcclxuICAgICAqICBkb21Db250ZW50TG9hZGVkIChha2EgRmlyc3QgVmlzdWFsIFRpbWUpLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqICBsb2FkIChha2EgRnVsbCBMb2FkIFRpbWUpICAgICAgICAgICAgICAgLSBSZXByZXNlbnRzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbG9hZEV2ZW50U3RhcnQgYW5kIG5hdmlnYXRpb25TdGFydC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgcHJvY2Vzc2luZyBtb2RlbDpcclxuICAgICAqXHJcbiAgICAgKiAgMS4gbmF2aWdhdGlvblN0YXJ0ICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyByZXF1ZXN0ZWQgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDIuIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLSBOb3QgcmVsZXZhbnQgdG8gdXMuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9uYXZpZ2F0aW9uLXRpbWluZy8jcHJvY2VzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cclxuICAgICAqICAzLiBkb21Mb2FkaW5nICAgICAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgc3RhcnRzIHBhcnNpbmcgdGhlIGRvY3VtZW50LlxyXG4gICAgICogIDQuIGRvbUludGVyYWN0aXZlICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgZmluaXNoZWQgcGFyc2luZyB0aGUgZG9jdW1lbnQgYW5kIHRoZSB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBwYWdlLlxyXG4gICAgICogIDUuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ICAgLSBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gY29tcGxldGVseSBsb2FkZWQgYW5kIHBhcnNlZCBhbmQgZGVmZXJyZWQgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLiBcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmMgc2NyaXB0cywgaWYgYW55LCBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3R5bGVzaGVldHNbMV0sIGltYWdlcywgYW5kIHN1YmZyYW1lcyBtaWdodCBvciBtaWdodCBub3QgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSAtIFN0eWxlc2hlZXRzIC91c3VhbGx5LyBkZWZlciB0aGlzIGV2ZW50ISAtIGh0dHA6Ly9tb2xpbHkuZGUvd2VibG9nL2RvbWNvbnRlbnRsb2FkZWRcclxuICAgICAqICA2LiBkb21Db250ZW50TG9hZGVkRXZlbnRFbmQgICAgIC0gVGhlIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLiBFLmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJET00gZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcIik7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgKiAgNy4gZG9tQ29tcGxldGUgICAgICAgICAgICAgICAgICAtIFRoZSBET00gdHJlZSBpcyBjb21wbGV0ZWx5IGJ1aWx0LiBBc3luYyBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgOC4gbG9hZEV2ZW50U3RhcnQgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhdmUgZmluaXNoZWQgbG9hZGluZyBhbGwgdGhlIHJlc291cmNlcyBsaWtlIGltYWdlcywgc3dmLCBldGMuXHJcbiAgICAgKiAgOS4gbG9hZEV2ZW50RW5kICAgICAgICAgICAgICAgICAtIFRoZSBsb2FkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy5cclxuICAgICAqL1xyXG4gICAgX2dldFN0YXRzKGNvbW1hbmROYW1lKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mZXRjaFN0YXRzICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLl9pc0FjdGlvbihjb21tYW5kTmFtZSkpIHtcclxuICAgICAgICAgICAgdmFyIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgbG9hZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBzYW1lUGFnZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIGZvbGxvd2luZyBzaXR1YXRpb246XHJcbiAgICAgICAgICAgIC8vIGlmIG5hdmlnYXRlU3RhcnQgZXF1YWxzIHRvIHRoZSBvbmUgd2UgZ290IGZyb20gcHJldmlvdXMgYXR0ZW1wdCAod2UgbmVlZCB0byBzYXZlIGl0KVxyXG4gICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBhcmUgc3RpbGwgb24gdGhlIHNhbWUgcGFnZSBhbmQgZG9uJ3QgbmVlZCB0byByZWNvcmQgbG9hZC9kb21Db250ZW50TG9hZGVkIHRpbWVzXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypnbG9iYWwgd2luZG93Ki9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltaW5ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmV4ZWN1dGUoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5sb2FkRXZlbnRTdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgdGltaW5ncy5sb2FkRXZlbnRTdGFydCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZVBhZ2UgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lICYmIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPT0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydCA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID0gdGltaW5ncy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRFdmVudFN0YXJ0ID0gdGltaW5ncy5sb2FkRXZlbnRTdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWQgPSBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGxvYWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiBsb2FkRXZlbnRTdGFydCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4ZWN1dGVFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZXJyb3IgaW5zaWRlIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBleGVjdXRlRXJyb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZW91dDogMzAqMTAwMCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkbid0IGdldCB0aW1pbmdzLlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbmF2aWdhdGlvblN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNhbWVQYWdlID8ge30gOiB7IERvbUNvbnRlbnRMb2FkZWRFdmVudDogZG9tQ29udGVudExvYWRlZCwgTG9hZEV2ZW50OiBsb2FkIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBPcGVucyBuZXcgdHJhbnNhY3Rpb24uXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGhlIHRyYW5zYWN0aW9uIHdpbGwgcGVyc2lzdCB0aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgICAgIC8vIGxpbWl0IHRoZSBuYW1lIGxlbmd0aCAoc2luY2Ugd2UgY2FuJ3Qgc3RvcmUgdmFsdWVzIGxhcmdlciB0aGFuIDUxMkIgaW4gdGhlIGRhdGFiYXNlKVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnNsaWNlKDAsIDUxMik7XHJcblxyXG4gICAgICAgIGlmIChnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudHJhbnNhY3Rpb25zW25hbWVdICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjb25zdCBjb3VudGVyID0gT2JqZWN0LmtleXModGhpcy50cmFuc2FjdGlvbnMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zdGFydHNXaXRoKG5hbWUpKS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lKycgKCMnK2NvdW50ZXIrJyknO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IG1vZFV0aWxzLmdldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50U3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9nZXRIQVIoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dUeXBlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVzLmluY2x1ZGVzKCdwZXJmb3JtYW5jZScpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9ncygncGVyZm9ybWFuY2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpbiBvbmUgaW5zdGFuY2UsIGxvZ3Mgd2FzIG5vdCBpdGVyYWJsZSBmb3Igc29tZSByZWFzb24gLSBoZW5jZSB0aGUgZm9sbG93aW5nIGNoZWNrOlxyXG4gICAgICAgICAgICAgICAgaWYgKCFsb2dzIHx8IHR5cGVvZiBsb2dzW1N5bWJvbC5pdGVyYXRvcl0gIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignZ2V0SEFSOiBsb2dzIG5vdCBpdGVyYWJsZTogJyArIEpTT04uc3RyaW5naWZ5KGxvZ3MpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnT2JqID0gSlNPTi5wYXJzZShsb2cubWVzc2FnZSk7ICAgLy8gcmV0dXJuZWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzLnB1c2gobXNnT2JqLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGhhciA9IGhhckZyb21NZXNzYWdlcyhldmVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGhhcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBIQVI6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tXYWl0Rm9yQW5ndWxhcigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yQW5ndWxhcih0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclJvb3RTZWxlY3RvciwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJTb2Z0V2FpdCwgdGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQ3JlZGVudGlhbHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUF1dG9tYXRpb25DbGllbnQgPSBsYW1iZGFSZXN0Q2xpZW50LkF1dG9tYXRpb25DbGllbnQoXHJcbiAgICAgICAgICAgICAgICBsYW1iZGFDcmVkZW50aWFsc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1c19pbmQ6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50LnVwZGF0ZVNlc3Npb25CeUlkKHNlc3Npb25JZCwgcmVxdWVzdEJvZHksIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBMYW1iZGFUZXN0OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgdGIgPSBuZXcgVGVzdGluZ0JvdCh7XHJcbiAgICAgICAgICAgICAgICBhcGlfa2V5OiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhcGlfc2VjcmV0OiB0aGlzLndkaW9PcHRzLmtleVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdGVzdERhdGEgPSB7IFwidGVzdFtzdWNjZXNzXVwiIDogc3RhdHVzID09PSAnUEFTU0VEJyA/IFwiMVwiIDogXCIwXCIgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRiLnVwZGF0ZVRlc3QodGVzdERhdGEsIHNlc3Npb25JZCwgZnVuY3Rpb24oZXJyb3IsIHRlc3REZXRhaWxzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIFRlc3RpbmdCb3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keSA9IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BVVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxyXG4gICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnOiB0aGlzLndkaW9PcHRzLmtleSxcclxuICAgICAgICAgICAgICAgICAgICAnc2VuZEltbWVkaWF0ZWx5JzogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pc1NlbGVub2lkSHViKHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogYCR7c2VsZW5pdW1Vcmx9YCxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBqc29uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyLCByZXMsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggJiYgYm9keS5pbmRleE9mKCdZb3UgYXJlIHVzaW5nIFNlbGVub2lkJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB0aGUgdGVzdCBpcyBydW5uaW5nIGluc2lkZSBTZWxlbm9pZCwgdGhlbiBkb3dubG9hZCB0aGUgdmlkZW8gaWYgdGVzdCBoYXMgZmFpbGVkXHJcbiAgICBhc3luYyBfYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlY29yZFZpZGVvICYmICFoYXNGYWlsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2aWRlb0ZpbGVVcmwgPSBgJHt0aGlzLnNlbGVuaXVtVXJsQmFzZX0vdmlkZW8vJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke3RoaXMuc2Vzc2lvbklkfS5tcDRgO1xyXG4gICAgICAgIHRoaXMucnMuYXR0YWNobWVudHMucHVzaChtb2RVdGlscy5uZXdWaWRlb0F0dGFjaG1lbnQoZmlsZU5hbWUsIHZpZGVvRmlsZVVybCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtB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
|