badmfck-api-server 2.6.4 → 2.6.6
Sign up to get free protection for your applications and to get access to all the features.
@@ -87,7 +87,7 @@ async function Initializer(services) {
|
|
87
87
|
exports.Initializer = Initializer;
|
88
88
|
class APIService extends BaseService_1.BaseService {
|
89
89
|
static nextLogID = 0;
|
90
|
-
version = "2.6.
|
90
|
+
version = "2.6.6";
|
91
91
|
options;
|
92
92
|
monitor;
|
93
93
|
monitorIndexFile;
|
@@ -109,7 +109,7 @@ class APIService extends BaseService_1.BaseService {
|
|
109
109
|
console.warn("Service Monitor initialized");
|
110
110
|
console.warn("monitor links:");
|
111
111
|
for (let i of this.options.monitor) {
|
112
|
-
const hash = crypto_1.default.createHash("sha256").update(i.login + i.password
|
112
|
+
const hash = crypto_1.default.createHash("sha256").update(i.login + i.password).digest().toString("hex");
|
113
113
|
console.warn("Monitor link for: " + i.login + " -> /sm-" + hash);
|
114
114
|
}
|
115
115
|
exports.REQ_MONITOR_USERS.listener = async (req) => {
|
@@ -498,4 +498,4 @@ class APIService extends BaseService_1.BaseService {
|
|
498
498
|
}
|
499
499
|
}
|
500
500
|
exports.APIService = APIService;
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUV2QixpREFBNkM7QUFFN0MsK0NBQTJDO0FBaUMzQyxTQUFnQixpQkFBaUI7SUFDaEMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJO1FBQ1YsWUFBWSxFQUFFLE9BQU87UUFDckIsaUJBQWlCLEVBQUU7WUFDbEIsdUJBQXVCO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixTQUFTLEVBQUMsTUFBTTtRQUNoQixZQUFZLEVBQUUsVUFBVSxHQUE2QjtZQUNwRCxJQUFBLG9CQUFPLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sRUFBQyxVQUFTLEdBQU87WUFDdkIsSUFBQSxxQkFBUSxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCx1QkFBdUIsRUFBQyxLQUFLO1FBQzdCLFNBQVMsRUFBQyxFQUFFLEdBQUMsSUFBSSxHQUFDLElBQUk7UUFDdEIsV0FBVyxFQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFDLGFBQWEsQ0FBQztLQUNuRCxDQUFBO0FBQ0YsQ0FBQztBQW5CRCw4Q0FtQkM7QUFFWSxRQUFBLGtCQUFrQixHQUFzQyxJQUFJLG9CQUFHLENBQUMsU0FBUyxFQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEcsUUFBQSxZQUFZLEdBQXdDLElBQUksb0JBQUcsQ0FBQyxTQUFTLEVBQUMsY0FBYyxDQUFDLENBQUM7QUFDdEYsUUFBQSx1QkFBdUIsR0FBb0IsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3hGLFFBQUEsZUFBZSxHQUFvRCxJQUFJLG9CQUFHLENBQUMsU0FBUyxFQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEcsUUFBQSxpQkFBaUIsR0FBaUMsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3pGLFFBQUEsaUJBQWlCLEdBQW1DLElBQUksb0JBQUcsQ0FBQyxTQUFTLEVBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUV4RyxNQUFNLGNBQWMsR0FBVSxFQUFFLENBQUE7QUFDaEMsTUFBTSxXQUFXLEdBQVUsRUFBRSxDQUFBO0FBRXRCLEtBQUssVUFBVSxXQUFXLENBQUMsUUFBdUI7SUFFeEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHlCQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRTlCLEtBQUssSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFO1FBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFBQSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0tBQUU7SUFDM0UsS0FBSyxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7UUFBRSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtLQUFFO0FBQ3BELENBQUM7QUFORCxrQ0FNQztBQUVELE1BQWEsVUFBVyxTQUFRLHlCQUFXO0lBR2xDLE1BQU0sQ0FBQyxTQUFTLEdBQUMsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sR0FBRyxPQUFPLENBQUE7SUFDakIsT0FBTyxDQUFtQjtJQUMxQixPQUFPLENBQVM7SUFDaEIsZ0JBQWdCLENBQVE7SUFDeEIsT0FBTyxHQUFRLElBQUksSUFBSSxFQUFFLENBQUM7SUFDMUIsYUFBYSxHQUFDLENBQUMsQ0FBQztJQUNoQixNQUFNLEdBQUMsY0FBSSxDQUFBO0lBRW5CLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBRXJDLFlBQVksT0FBK0I7UUFDMUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUMsT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsSUFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLG1CQUFtQixHQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ25ELElBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUEsRUFBRSxDQUFBLEdBQUcsS0FBRyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUV0QyxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7WUFDeEQsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDOUIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQztnQkFDakMsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUN6RyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsVUFBVSxHQUFDLElBQUksQ0FBQyxDQUFBO2FBQzFEO1lBRUQseUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUMsRUFBRTtnQkFDekMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO2dCQUNqQixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDO29CQUN2QixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFDO3dCQUNqQyxNQUFNLElBQUksR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM3RixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNsQjtpQkFDRDtnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNmLENBQUMsQ0FBQTtTQUNEO1FBR0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksbUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUMsSUFBSSxxQkFBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQ25GLCtCQUF1QixDQUFDLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDbkUsQ0FBQztJQUdRLEtBQUssQ0FBQyxJQUFJO1FBRWxCLG9CQUFZLENBQUMsUUFBUSxHQUFDLEtBQUssRUFBQyxNQUFNLEVBQUEsRUFBRSxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEQsMEJBQWtCLENBQUMsUUFBUSxHQUFHLEtBQUssRUFBQyxNQUFNLEVBQUEsRUFBRTtZQUMzQyxNQUFNLEdBQUcsR0FBNEI7Z0JBQ3BDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUNwQixJQUFJLEVBQUUsQ0FBQztnQkFDUCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsRUFBRTtnQkFDWixLQUFLLEVBQUMsSUFBSTtnQkFDVixFQUFFLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRTthQUMxQixDQUFBO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDckIsSUFBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBQyxJQUFJO2dCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQ3BCLE9BQU8sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFBO1FBR0QseUJBQWlCLENBQUMsUUFBUSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUMsRUFBRTtZQUN6QyxLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDO2dCQUNuQyxJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQ3BCLFNBQVM7Z0JBQ1YsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFDO29CQUN4QixJQUFJLEVBQUUsR0FBRywyQkFBWSxDQUFDLGFBQWEsRUFBRSxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7b0JBQ2pELEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxHQUFHLENBQUMsQ0FBQTtvQkFDNUIsSUFBRyxFQUFFLEtBQUssR0FBRyxDQUFDLFFBQVEsRUFBQzt3QkFDdEIsR0FBRyxDQUFDLFlBQVksR0FBQyxJQUFJLENBQUM7d0JBQ3RCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTt3QkFDckMsSUFBRyxRQUFRLENBQUMsS0FBSzs0QkFDaEIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO3dCQUN2QixPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7cUJBQ3JCO2lCQUNEO2FBQ0Q7WUFDRCxPQUFPLEVBQUMsS0FBSyxFQUFDLHVCQUFhLENBQUMsZUFBZSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsVUFBVSxFQUFDLEdBQUcsRUFBQyxDQUFBO1FBQ3RFLENBQUMsQ0FBQTtRQUdELE1BQU0sR0FBRyxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFBO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLGNBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdEMsdUJBQWUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFDLE1BQU0sRUFBQSxFQUFFLEdBQUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxHQUFHLEVBQUMsSUFBSSxFQUFDLE1BQU0sRUFBQyxDQUFBLENBQUEsQ0FBQyxDQUFDO1FBRTVFLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUI7WUFDdEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFFN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDeEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUU5RCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUEsNEJBQVUsRUFBQztZQUNsQixZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxFQUFFO2dCQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUUsRUFBRSxFQUFDLEdBQUcsRUFBQztvQkFDNUMsS0FBSyxFQUFDLHVCQUFhLENBQUMsY0FBYztvQkFDbEMsSUFBSSxFQUFDLElBQUk7b0JBQ1QsVUFBVSxFQUFDLEdBQUc7aUJBQ2QsRUFBQyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDNUMsWUFBWSxFQUFFLElBQUk7WUFDbEIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBRXJDLFlBQVksRUFBQyxJQUFJO1NBQ2pCLENBQUMsQ0FBQyxDQUFBO1FBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBTyxFQUFDLEdBQU8sRUFBQyxJQUFRLEVBQUMsSUFBUSxFQUFDLEVBQUU7WUFFbEQsSUFBRyxDQUFDLEdBQUcsRUFBQztnQkFDUCxJQUFJLEVBQUUsQ0FBQztnQkFDUCxPQUFNO2FBQ047WUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLEdBQUcsTUFBTSwwQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQyxHQUFHLENBQUMsT0FBTyxHQUFDO2dCQUNYLE1BQU0sRUFBQyxHQUFHLENBQUMsTUFBTTtnQkFDakIsSUFBSSxFQUFDLEVBQUU7Z0JBQ1AsTUFBTSxFQUFDLEdBQUcsQ0FBQyxNQUFNO2FBQ2pCLENBQUE7WUFFRCxJQUFJLGFBQWEsR0FBQyx1QkFBYSxDQUFDLGVBQWUsQ0FBQztZQUNoRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUU7Z0JBQ3pHLGFBQWEsR0FBRyx1QkFBYSxDQUFDLGNBQWMsQ0FBQTthQUM1QztZQUdELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBRSxFQUFFLEVBQUMsSUFBSSxFQUFDO2dCQUM3QyxLQUFLLEVBQUMsYUFBYTtnQkFDbkIsSUFBSSxFQUFDLElBQUk7Z0JBQ1QsVUFBVSxFQUFDLEdBQUc7YUFDZCxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFFZCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sV0FBVyxHQUFHO1lBQ25CLE1BQU0sRUFBRSxDQUFDLE1BQVcsRUFBRSxRQUFhLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0UsUUFBUSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO1lBQ3BDLENBQUM7WUFDRCxXQUFXLEVBQUUsSUFBSTtTQUNqQixDQUFBO1FBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFBLGNBQUksRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBRzFCLDJCQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFckQsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBQztZQUNuQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLElBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDZCxTQUFTO1lBQ1YsS0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFDO2dCQUN4QixJQUFJLEVBQUUsR0FBRywyQkFBWSxDQUFDLGFBQWEsRUFBRSxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pELEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxHQUFHLENBQUMsQ0FBQTtnQkFJNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxHQUFHLEVBQUMsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3hCLElBQUksR0FBRyxHQUFpQyxJQUFJLENBQUM7b0JBQzdDLElBQUcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUM7d0JBQ3ZCLEdBQUcsR0FBRyxNQUFNLDBCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN6QyxHQUFHLENBQUMsT0FBTyxHQUFDOzRCQUNYLEdBQUcsRUFBQyxHQUFHLENBQUMsR0FBRzs0QkFDWCxNQUFNLEVBQUMsR0FBRyxDQUFDLE1BQU07NEJBQ2pCLElBQUksRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQ25DLE1BQU0sRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7eUJBQ3ZDLENBQUE7cUJBQ0Q7b0JBRUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxJQUFHLEVBQUU7d0JBRXpCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLElBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFDOzRCQUM3QyxLQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUM7Z0NBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUNyQjt5QkFDRDt3QkFFRCxNQUFNLFdBQVcsR0FBaUI7NEJBQ2pDLEdBQUcsRUFBQyxHQUFzQjs0QkFDMUIsTUFBTSxFQUFDLEdBQUcsQ0FBQyxNQUFNOzRCQUNqQixJQUFJLEVBQUMsR0FBRyxDQUFDLElBQUk7NEJBQ2IsTUFBTSxFQUFDLEdBQUcsQ0FBQyxNQUFNOzRCQUNqQixPQUFPLEVBQUMsR0FBRyxDQUFDLE9BQWM7NEJBQzFCLFFBQVEsRUFBQyxFQUFFOzRCQUNYLEtBQUssRUFBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUk7NEJBQ3ZCLE9BQU8sRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQzt5QkFDMUIsQ0FBQTt3QkFFRCxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFDOzRCQUMzQixJQUFHO2dDQUNILE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQ0FDdEUsSUFBRyxpQkFBaUI7b0NBQ25CLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQzs2QkFDbEQ7NEJBQUEsT0FBTSxDQUFDLEVBQUM7Z0NBQ1IsSUFBSSxPQUFPLEdBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtnQ0FDbEIsSUFBSSxLQUFLLEdBQW9CLFNBQVMsQ0FBQztnQ0FDdkMsSUFBRywwQkFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQztvQ0FDeEIsT0FBTyxHQUFFLENBQVMsQ0FBQyxPQUFPLENBQUE7b0NBQzFCLEtBQUssR0FBRyxDQUFDLENBQVEsQ0FBQyxDQUFDO2lDQUNuQjtnQ0FFRCxJQUFHLElBQUEsMkJBQVksRUFBQyxDQUFDLENBQUM7b0NBQ2pCLE9BQU8sR0FBSSxDQUFnQixDQUFDLE9BQU8sQ0FBQztnQ0FFckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLFVBQVUsRUFBQyxHQUFHLEVBQUMsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxXQUFXLENBQUMsQ0FBQztnQ0FDL0ssT0FBTzs2QkFDUDt5QkFDRDt3QkFFRCxJQUFJLE1BQU0sQ0FBQTt3QkFDVixJQUFHOzRCQUVGLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDOzRCQUM5QixJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQzs0QkFDbEMsSUFBRyxDQUFDLENBQUMsaUJBQWlCO2dDQUNyQixpQkFBaUIsR0FBQyxJQUFJLENBQUM7NEJBQ3hCLElBQUcsQ0FBQyxDQUFDLHFCQUFxQjtnQ0FDekIscUJBQXFCLEdBQUMsSUFBSSxDQUFDOzRCQUU1QixJQUFHLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7Z0NBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dDQUM1RCxJQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBQztvQ0FDOUIsSUFBRyxPQUFPLENBQUMsaUJBQWlCO3dDQUMzQixpQkFBaUIsR0FBQyxJQUFJLENBQUM7b0NBQ3hCLElBQUcsT0FBTyxDQUFDLHFCQUFxQjt3Q0FDL0IscUJBQXFCLEdBQUMsSUFBSSxDQUFDO2lDQUM1Qjs2QkFDRDs0QkFHRCxJQUFHLGlCQUFpQixFQUFDO2dDQUNwQixJQUFJLGlCQUFpQixDQUFDO2dDQUN0QixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFDO29DQUMzQixpQkFBaUIsR0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztvQ0FDdEUsSUFBRyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksQ0FBQyxxQkFBcUIsRUFBQzt3Q0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUMsaUJBQWlCLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsV0FBVyxDQUFDLENBQUM7d0NBQ3ZGLE9BQU87cUNBQ1A7b0NBQ0QsV0FBVyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO2lDQUNqRDs2QkFDRDs0QkFHRCxJQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTztnQ0FDcEIsV0FBVyxDQUFDLFFBQVEsR0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxDQUFBOzRCQUVqRCxNQUFNLFFBQVEsR0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7NEJBQzVDLElBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUM7Z0NBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBRSxFQUFFLEVBQUMsR0FBRyxFQUFDLFFBQVEsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxXQUFXLENBQUMsQ0FBQztnQ0FDOUUsT0FBTzs2QkFDUDs0QkFFRCxXQUFXLENBQUMsUUFBUSxHQUFDLFFBQVEsQ0FBQzs0QkFJOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQTt5QkFFckM7d0JBQUEsT0FBTSxDQUFDLEVBQUM7NEJBRVIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDakIsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87Z0NBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBOzRCQUN4QixJQUFHLElBQUksQ0FBQyxPQUFPO2dDQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBR3ZDLElBQUksSUFBSSxHQUFvQjtnQ0FDM0IsS0FBSyxFQUFDO29DQUNMLElBQUksRUFBQyxLQUFLO29DQUNWLE9BQU8sRUFBQyx1QkFBdUI7b0NBQy9CLFVBQVUsRUFBQyxHQUFHO29DQUNkLE9BQU8sRUFBQyxHQUFHLENBQUMsRUFBRTtpQ0FDZDs2QkFDRCxDQUFBOzRCQUVELElBQUcsMEJBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dDQUN2QixJQUFJLEdBQUcsRUFBQyxLQUFLLEVBQUMsQ0FBVyxFQUFDLENBQUE7NEJBRTNCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBRSxFQUFFLEVBQUMsR0FBRyxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxXQUFXLENBQUMsQ0FBQzs0QkFDMUUsT0FBTzt5QkFDUDt3QkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUUsRUFBRSxFQUFDLEdBQUcsRUFBQyxNQUFNLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzdFLENBQUMsQ0FBQTtvQkFFRCxPQUFPLEVBQUUsQ0FBQTtnQkFDVixDQUFDLENBQUMsQ0FBQzthQUVIO1NBQ0Q7UUFLRCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUUxQixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7WUFFdkIsSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUM7Z0JBRXZELElBQUcsR0FBRyxDQUFDLE1BQU0sS0FBRyxLQUFLLEVBQUM7b0JBRXJCLElBQUksY0FBYyxHQUFDLEtBQUssQ0FBQztvQkFDekIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQzt3QkFDakMsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTt3QkFDNUYsSUFBRyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLEVBQUM7NEJBQ3hDLGNBQWMsR0FBQyxJQUFJLENBQUM7NEJBQ3BCLE1BQU07eUJBQ047cUJBQ0Q7b0JBRUQsSUFBRyxjQUFjLEVBQUM7d0JBRWpCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQ3hCLElBQUc7NEJBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7Z0NBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUN4RixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBQyxXQUFXLENBQUMsQ0FBQTs0QkFDekMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7NEJBQ2hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3lCQUM1Qzt3QkFBQSxPQUFNLENBQUMsRUFBQzs0QkFDUixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUUsRUFBRSxFQUFDLEdBQUcsRUFBQztnQ0FDNUMsS0FBSyxFQUFDO29DQUNMLElBQUksRUFBQyxLQUFLO29DQUNWLE9BQU8sRUFBQyx1QkFBdUI7b0NBQy9CLE9BQU8sRUFBQyxHQUFHLENBQUMsRUFBRTtpQ0FDZDtnQ0FDRCxJQUFJLEVBQUMsSUFBSTtnQ0FDVCxVQUFVLEVBQUMsR0FBRzs2QkFDZCxFQUFDLEdBQUcsRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2hCO3dCQUNELE9BQU87cUJBQ1A7aUJBQ0Q7YUFDRDtZQUdELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBRSxFQUFFLEVBQUMsR0FBRyxFQUFDO2dCQUM1QyxLQUFLLEVBQUMsdUJBQWEsQ0FBQyxlQUFlO2dCQUNuQyxJQUFJLEVBQUMsSUFBSTtnQkFDVCxVQUFVLEVBQUMsR0FBRzthQUNkLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ3JDLElBQUEsb0JBQU8sRUFBQyxrQkFBa0IsRUFBQywwQkFBMEIsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBQyx1QkFBdUIsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ25KLENBQUMsQ0FBQyxDQUFBO0lBS0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBVSxFQUFDLEdBQVksRUFBQyxJQUEwQixFQUFDLFdBQWtCLEVBQUMsUUFBZ0IsRUFBQyxHQUFrQyxFQUFDLEdBQWtCO1FBRTlKLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUM7WUFDNUIsSUFBRztnQkFDRixJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLElBQUksRUFBQyxXQUFXLEVBQUMsUUFBUSxFQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzlFO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ1IsSUFBQSxxQkFBUSxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ2hDO1NBQ0Q7UUFFRCxJQUFHLDBCQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMxQixJQUFJLEdBQUcsRUFBQyxLQUFLLEVBQUMsSUFBYyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQTtRQUVsQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxhQUFhLENBQUE7UUFFL0MsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQTtRQUdyQyxJQUFHLEdBQUcsRUFBQztZQUNOLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtZQUM1QixHQUFHLENBQUMsT0FBTyxHQUFDLEdBQUcsQ0FBQztTQUNoQjtRQUVELElBQUcsSUFBSSxDQUFDLE9BQU87WUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRTNELElBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFDO1lBRXBDLElBQUcsR0FBRztnQkFDTCxHQUFHLENBQUMsS0FBSyxHQUFHLHNEQUFzRCxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7WUFDakYsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0RBQWtELEdBQUMsSUFBSSxDQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsQ0FBQTtZQUVyRyxJQUFHLElBQUksQ0FBQyxPQUFPO2dCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUV2QzthQUFJO1lBQ1YsSUFBRztnQkFFRixJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7b0JBRVosR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQSxFQUFFO3dCQUMzQixJQUFHLEdBQUcsRUFBQzs0QkFDTixJQUFHLEdBQUc7Z0NBQ0wsR0FBRyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBOzRCQUUxQyxJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVE7Z0NBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUM7Z0NBQ3pCLEtBQUssRUFBQyx1QkFBYSxDQUFDLGNBQWM7Z0NBQ2xDLElBQUksRUFBQyxJQUFJO2dDQUNULFVBQVUsRUFBQyxHQUFHOzZCQUNkLEVBQUMsV0FBVyxFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDN0I7b0JBRUYsQ0FBQyxDQUFDLENBQUE7b0JBRUYsT0FBTztpQkFDUDtnQkFFRCxJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUM7b0JBQ2hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1QixJQUFHLEdBQUc7d0JBQ0wsR0FBRyxDQUFDLFFBQVEsR0FBRyxFQUFDLFFBQVEsRUFBQyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUE7aUJBQ3hDO3FCQUFJO29CQUVKLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQzt3QkFDZixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPOzRCQUN4QixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDO29CQUVELElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBQyxFQUFFO3dCQUNqRSxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFBOzt3QkFFdEMsR0FBRyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQTtvQkFFdEMsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFDO3dCQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDbkIsSUFBRyxHQUFHOzRCQUNMLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDMUM7eUJBQ0c7d0JBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDZixJQUFHLEdBQUc7NEJBQ0wsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO3dCQUUxQyxJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBQzs0QkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7NEJBQzlDLElBQUcsR0FBRztnQ0FDTCxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO3lCQUNoQztxQkFDRDtpQkFDRDthQUNEO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ1IsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87b0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFHLEdBQUc7b0JBQ0wsR0FBRyxDQUFDLEtBQUssR0FBQyxxQkFBcUIsQ0FBQTtnQkFDaEMsSUFBRyxJQUFJLENBQUMsT0FBTztvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDN0M7U0FDRDtRQUdELElBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQy9CO2FBQUk7WUFDSixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLEdBQUc7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQy9CO0lBQ0MsQ0FBQztJQUdKLGVBQWUsQ0FBQyxJQUFRLEVBQUMsTUFBVyxFQUFDLEdBQVc7UUFFL0MsSUFBRyxDQUFDLEdBQUc7WUFDTixHQUFHLEdBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUM7WUFDM0IsSUFBRyxPQUFPLElBQUksS0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBQyxJQUFJO2dCQUM1QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxHQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUM7WUFDM0IsSUFBRyxDQUFDLE1BQU07Z0JBQ1QsTUFBTSxHQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNqQixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztnQkFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQTlmRixnQ0FnZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdheGlvcydcbmltcG9ydCB7IGlzTXlzcWxFcnJvciB9IGZyb20gJy4vTXlzcWxTZXJ2aWNlJ1xuaW1wb3J0IHsgTXlzcWxFcnJvciB9IGZyb20gJ215c3FsJ1xuaW1wb3J0IHsgU3RhdFNlcnZpY2UgfSBmcm9tICcuL1N0YXRTZXJ2aWNlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcbmV4cG9ydCBjb25zdCBSRVFfTU9OSVRPUl9VU0VSUzpSZXE8e2F1dGhvcml6YXRpb246c3RyaW5nfSxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfTU9OSVRPUl9VU0VSU1wiKTtcblxuY29uc3QgYWN0aXZlU2VydmljZXM6U3RyaW5nW109W11cbmNvbnN0IGVudHJ5UG9pbnRzOlN0cmluZ1tdPVtdXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBJbml0aWFsaXplcihzZXJ2aWNlczpJQmFzZVNlcnZpY2VbXSl7XG5cdC8vIGFkZCBzdGF0IHNlcnZpY2Vcblx0c2VydmljZXMucHVzaChuZXcgU3RhdFNlcnZpY2UoKSk7XG5cdFxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgYXdhaXQgaS5pbml0KCk7YWN0aXZlU2VydmljZXMucHVzaChpLmdldE5hbWUoKSkgfVxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgaS5hcHBsaWNhdGlvblJlYWR5KCkgfVxufVxuXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcblxuXHQvLyBORVQgTE9HXG5cdHByaXZhdGUgc3RhdGljIG5leHRMb2dJRD0wO1xuXHRwcml2YXRlIHZlcnNpb24gPSBcIjIuNi40XCJcblx0cHJpdmF0ZSBvcHRpb25zOkFQSVNlcnZpY2VPcHRpb25zO1xuXHRwcml2YXRlIG1vbml0b3I/Ok1vbml0b3Jcblx0cHJpdmF0ZSBtb25pdG9ySW5kZXhGaWxlPzpCdWZmZXJcblx0cHJpdmF0ZSBzdGFydGVkOkRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRwcml2YXRlIHJlcXVlc3RzQ291bnQ9MDtcblx0cHJpdmF0ZSBzZXJ2ZXI9aHR0cFxuXG5cdG5ldExvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT1bXTtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzpBUElTZXJ2aWNlT3B0aW9uc3xudWxsKSB7XG5cdFx0c3VwZXIoJ0hUVFAgU2VydmljZScpXG5cdFx0dGhpcy5vcHRpb25zPW9wdGlvbnMgPz8gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0KVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0PVtdO1xuXHRcdGNvbnN0IHNlbGYgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIrdGhpcy5vcHRpb25zLnBvcnQ7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5maW5kKHZhbD0+dmFsPT09c2VsZikpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QucHVzaCgpXG5cblx0XHRpZih0aGlzLm9wdGlvbnMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMubW9uaXRvci5sZW5ndGg+MCl7XG5cdFx0XHR0aGlzLm1vbml0b3I9bmV3IE1vbml0b3IoKTtcblx0XHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaCh0aGlzLm1vbml0b3IpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJTZXJ2aWNlIE1vbml0b3IgaW5pdGlhbGl6ZWRcIilcblx0XHRcdGNvbnNvbGUud2FybihcIm1vbml0b3IgbGlua3M6XCIpXG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCt0aGlzLnZlcnNpb24pLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihcIk1vbml0b3IgbGluayBmb3I6IFwiK2kubG9naW4rXCIgLT4gL3NtLVwiK2hhc2gpXHRcdFx0XHRcdFx0XG5cdFx0XHR9XG5cblx0XHRcdFJFUV9NT05JVE9SX1VTRVJTLmxpc3RlbmVyID0gYXN5bmMgKHJlcSk9Pntcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gW11cblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIik7XG5cdFx0XHRcdFx0XHRyZXN1bHQucHVzaChoYXNoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjcmVhdGUgbGl2ZW5lc3MsIHJlYWRpbmVzc1xuXHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaChuZXcgTGl2ZW5lc3ModGhpcy5zdGFydGVkKSxuZXcgUmVhZGluZXNzKHRoaXMuc3RhcnRlZCkpXG5cdFx0UkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQubGlzdGVuZXIgPSBhc3luYyAoKSA9PiB0aGlzLnJlcXVlc3RzQ291bnQ7XG5cdH1cblxuXG5cdG92ZXJyaWRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cblx0XHRSRVFfSFRUUF9MT0cubGlzdGVuZXI9YXN5bmMgaWdub3JlPT50aGlzLm5ldExvZztcblx0XHRSRVFfQ1JFQVRFX05FVF9MT0cubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9Pntcblx0XHRcdGNvbnN0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0gPSB7XG5cdFx0XHRcdGNyZWF0ZWQ6ICtuZXcgRGF0ZSgpLFxuXHRcdFx0XHR0aW1lOiAwLFxuXHRcdFx0XHRyZXF1ZXN0OiB7fSxcblx0XHRcdFx0cmVzcG9uc2U6IHt9LFxuXHRcdFx0XHRlcnJvcjpudWxsLFxuXHRcdFx0XHRpZDogQVBJU2VydmljZS5uZXh0TG9nSUQrK1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5uZXRMb2cucHVzaChsb2cpXG5cdFx0XHRpZih0aGlzLm5ldExvZy5sZW5ndGg+MTAwMClcblx0XHRcdFx0dGhpcy5uZXRMb2cuc2hpZnQoKVxuXHRcdFx0cmV0dXJuIGxvZztcblx0XHR9XG5cblx0XHQvLyBpbnRlcm5hbCBjYWxsXG5cdFx0UkVRX0lOVEVSTkFMX0NBTEwubGlzdGVuZXIgPSBhc3luYyAocmVxKT0+e1xuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0XHRpZighaSB8fCAhaS5lbmRwb2ludHMpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFx0aWYoZXAgPT09IHJlcS5lbmRwb2ludCl7XG5cdFx0XHRcdFx0XHRyZXEuaW50ZXJuYWxDYWxsPXRydWU7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGkuZXhlY3V0ZShyZXEpXG5cdFx0XHRcdFx0XHRpZihyZXNwb25zZS5lcnJvcilcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge2Vycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULGRhdGE6bnVsbCxodHRwU3RhdHVzOjQwNH1cblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGV4cHJlc3Ncblx0XHRjb25zdCBhcHAgPSBleHByZXNzKClcblx0XHRjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhcHApO1xuXG5cdFx0UkVRX0hUVFBfU0VSVkVSLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57cmV0dXJuIHtleHByZXNzOmFwcCxodHRwOnNlcnZlcn19O1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLmlzUHJvZHVjdGlvbkVudmlyb25tZW50KVxuXHRcdFx0YXBwLnNldChcImVudlwiLCdwcm9kdWN0aW9uJyk7XG5cblx0XHRhcHAudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiAnMTBtYicgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL2pzb25cblx0XHRhcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGxpbWl0OiAnMTBtYicsIGV4dGVuZGVkOiB0cnVlIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblxuXHRcdGFwcC51c2UoZmlsZVVwbG9hZCh7XG5cdFx0XHRsaW1pdEhhbmRsZXI6IChyZXEsIHJlcywgbmV4dCk9Pntcblx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkZJTEVfVE9PX0xBUkdFLFxuXHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRodHRwU3RhdHVzOjQxMyxcblx0XHRcdFx0fSwrbmV3IERhdGUoKSxyZXEucGF0aCk7XG5cdFx0XHR9LFxuXHRcdFx0bGltaXRzOiB7IGZpbGVTaXplOiB0aGlzLm9wdGlvbnMuZmlsZUxpbWl0IH0sXG5cdFx0XHR1c2VUZW1wRmlsZXM6IHRydWUsXG5cdFx0XHR1cmlEZWNvZGVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHR0ZW1wRmlsZURpcjogdGhpcy5vcHRpb25zLmZpbGVUZW1wRGlyLFxuXHRcdFx0Ly9zYWZlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0YWJvcnRPbkxpbWl0OnRydWVcblx0XHR9KSlcblxuXHRcdGFwcC51c2UoYXN5bmMgKGVycjphbnkscmVxOmFueSxyZXNwOmFueSxuZXh0OmFueSk9Pntcblx0XHRcdFxuXHRcdFx0aWYoIWVycil7XG5cdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRcdC8vcmVxdWVzdCBzdGFydCB0aW1lXG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdGNvbnN0IGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRkYXRhOlwiXCIsXG5cdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zXG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXNwb25zZUVycm9yPURlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNUO1xuXHRcdFx0aWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyLnN0YXR1cyA9PT0gNDAwICYmICdib2R5JyBpbiBlcnIgJiYgZXJyLnR5cGUgPT09ICdlbnRpdHkucGFyc2UuZmFpbGVkJykge1xuXHRcdFx0XHRyZXNwb25zZUVycm9yID0gRGVmYXVsdEVycm9ycy5KU09OX01BTEZPUk1FRFxuXHRcdFx0fVxuICAgICAgXG5cblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlc3Ase1xuXHRcdFx0XHRlcnJvcjpyZXNwb25zZUVycm9yLFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDAwXG5cdFx0XHR9LHRtZSxcIlwiLGxvZylcblxuXHRcdH0pXG5cblx0XHRjb25zdCBjb3JzT3B0aW9ucyA9IHtcblx0XHRcdG9yaWdpbjogKG9yaWdpbjogYW55LCBjYWxsYmFjazogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbklzV2hpdGVsaXN0ZWQgPSB0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuaW5jbHVkZXMob3JpZ2luKVxuXHRcdFx0XHRjYWxsYmFjayhudWxsLCBvcmlnaW5Jc1doaXRlbGlzdGVkKVxuXHRcdFx0fSxcblx0XHRcdGNyZWRlbnRpYWxzOiB0cnVlXG5cdFx0fVxuXHRcdGFwcC51c2UoY29ycyhjb3JzT3B0aW9ucykpXG5cblx0XHQvLyByZWdpc3RyYXRlIGVuZHBvaW50c1xuXHRcdEJhc2VFbmRwb2ludC5zZXRFbnRyeVBvaW50KHRoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQpXG5cdFx0XG5cdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0YXdhaXQgaS5pbml0KCk7XG5cdFx0XHRpZighaS5lbmRwb2ludHMpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcblxuXHRcdFx0XHQvLyBpbmNvbWluZyByZXF1ZXN0XG5cdFx0XHRcdGFwcC5hbGwoZXAsYXN5bmMgKHJlcSxyZXMpPT57XG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0c0NvdW50Kys7XG5cdFx0XHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRcdFx0bGV0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCA9IG51bGw7XG5cdFx0XHRcdFx0aWYoIWkuaWdub3JlSHR0cExvZ2dpbmcpe1xuXHRcdFx0XHRcdFx0bG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdFx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0XHRcdFx0dXJsOnJlcS51cmwsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5ib2R5KSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5wYXJhbXMpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXhlY3V0ZSA9IGFzeW5jICgpPT57XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJvZHkgPSByZXEuYm9keTtcblx0XHRcdFx0XHRcdGlmKHJlcS5xdWVyeSAmJiB0eXBlb2YgcmVxLnF1ZXJ5ID09PSBcIm9iamVjdFwiKXtcblx0XHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIHJlcS5xdWVyeSl7XG5cdFx0XHRcdFx0XHRcdFx0Ym9keVtpXT1yZXEucXVlcnlbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgaHR0cFJlcXVlc3Q6SFRUUFJlcXVlc3RWTyA9IHtcblx0XHRcdFx0XHRcdFx0cmF3OnJlcSBhcyBJbmNvbWluZ01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnJlcS5ib2R5LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtcyxcblx0XHRcdFx0XHRcdFx0aGVhZGVyczpyZXEuaGVhZGVycyBhcyBhbnksXG5cdFx0XHRcdFx0XHRcdGVuZHBvaW50OmVwLFxuXHRcdFx0XHRcdFx0XHRmaWxlczpyZXEuZmlsZXMgPz8gbnVsbCxcblx0XHRcdFx0XHRcdFx0cmVmZXJlcjpyZXEuZ2V0KFwiUmVmZXJlclwiKSxcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKXtcblx0XHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVwcm9kdWNlclJlc3VsdCA9IGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcihodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdGlmKHByZXByb2R1Y2VyUmVzdWx0KVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZXByb2R1Y2VyUmVzdWx0ID0gcHJlcHJvZHVjZXJSZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0XHRsZXQgZGV0YWlscz1gJHtlfWBcblx0XHRcdFx0XHRcdFx0XHRsZXQgc3RhY2s6SUVycm9yW118dW5kZWZpbmVkPXVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZSkpe1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlscz0oZSBhcyBhbnkpLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdHN0YWNrID0gW2UgYXMgYW55XTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihpc015c3FsRXJyb3IoZSkpXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzID0gKGUgYXMgTXlzcWxFcnJvcikubWVzc2FnZTtcblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7ZXJyb3I6e2NvZGU6MTAwMDIsbWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLHN0YWNrOnN0YWNrLGRldGFpbHM6ZGV0YWlsc30sZGF0YTpudWxsLGh0dHBTdGF0dXM6NTAwfSx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGV0IHJlc3VsdFxuXHRcdFx0XHRcdFx0dHJ5e1xuXG5cdFx0XHRcdFx0XHRcdGxldCBpZ25vcmVJbnRlcmNlcHRvciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRsZXQgYWxsb3dJbnRlcmNlcHRvckVycm9yID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGlmKGouaWdub3JlSW50ZXJjZXB0b3IpXG5cdFx0XHRcdFx0XHRcdFx0aWdub3JlSW50ZXJjZXB0b3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0aWYoai5hbGxvd0ludGVyY2VwdG9yRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0YWxsb3dJbnRlcmNlcHRvckVycm9yPXRydWU7XG5cblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGouaGFuZGxlciA9PT0gXCJvYmplY3RcIiApe1xuXHRcdFx0XHRcdFx0XHRcdC8vIHRyeSB0byBnZXQgaGFuZGxlciByZWxheWluZyBvbiBodHRwIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhbmRsZXIgPSBqLmhhbmRsZXJbaHR0cFJlcXVlc3QubWV0aG9kLnRvVXBwZXJDYXNlKCldO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBoYW5kbGVyID09PSBcIm9iamVjdFwiKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGhhbmRsZXIuaWdub3JlSW50ZXJjZXB0b3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZUludGVyY2VwdG9yPXRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihoYW5kbGVyLmFsbG93SW50ZXJjZXB0b3JFcnJvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YWxsb3dJbnRlcmNlcHRvckVycm9yPXRydWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgaW50ZXJjZXB0b3IgaWYgZXhpc3RzXG5cdFx0XHRcdFx0XHRcdGlmKGlnbm9yZUludGVyY2VwdG9yKXtcblx0XHRcdFx0XHRcdFx0XHRsZXQgaW50ZXJjZXB0b3JSZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLmludGVyY2VwdG9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdGludGVyY2VwdG9yUmVzdWx0PWF3YWl0IHRoaXMub3B0aW9ucy5pbnRlcmNlcHRvci5leGVjdXRlKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGludGVyY2VwdG9yUmVzdWx0LmVycm9yICYmICFhbGxvd0ludGVyY2VwdG9yRXJyb3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsaW50ZXJjZXB0b3JSZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LmludGVyY2VwdG9yUmVzdWx0ID0gaW50ZXJjZXB0b3JSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBQcmVjaGVjayBXSFk/XG5cdFx0XHRcdFx0XHRcdGlmKGkgPT09IHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVjaGVjaz17ZGF0YTp0aGlzLm9wdGlvbnMubW9uaXRvcn1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVjaGVjaz1hd2FpdCBpLnByZWNoZWNrKGh0dHBSZXF1ZXN0KVxuXHRcdFx0XHRcdFx0XHRpZihwcmVjaGVjayAmJiBwcmVjaGVjay5lcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHByZWNoZWNrLHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXByZWNoZWNrO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gSWYgaW50ZXJjZXB0b3IgaGFzIG5vIGVycm9ycywgZXhlY3V0ZSBtYWluIGhhbmRsZXJcblx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgaS5leGVjdXRlKGh0dHBSZXF1ZXN0KVxuXHRcdFx0XHRcdFx0XHQgXG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoZSlcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRmF0YWxFcnJvcihlcCk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjaGVjayBpZiBlcnJvciBpcyBJRXJyb3Jcblx0XHRcdFx0XHRcdFx0bGV0IGRhdGE6VHJhbnNmZXJQYWNrZXRWTyA9IHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzOmAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihlKSlcblx0XHRcdFx0XHRcdFx0XHRkYXRhID0ge2Vycm9yOmUgYXMgSUVycm9yfVxuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxkYXRhLHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGV4ZWN1dGUoKVxuXHRcdFx0XHR9KTsvLyBoYW5kbGUgaW5jb21pbmcgcmVxdWVzdFxuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFxuXG5cdFx0Ly8gZmluYWwgaGFuZGxlclxuXHRcdGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG5cdFx0XHRcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpXG5cblx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHQvL2NoZWNrIGlmIHJlcXVlc3RpbmcgbW9uaXRvclxuXHRcdFx0XHRpZihyZXEubWV0aG9kPT09XCJHRVRcIil7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0bGV0IG1vbml0b3JSZXF1ZXN0PWZhbHNlO1xuXHRcdFx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0XHRcdGlmKHJlcS5vcmlnaW5hbFVybC5lbmRzV2l0aChcIi9zbS1cIitoYXNoKSl7XG5cdFx0XHRcdFx0XHRcdG1vbml0b3JSZXF1ZXN0PXRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKG1vbml0b3JSZXF1ZXN0KXtcblx0XHRcdFx0XHRcdC8vIHNlbmQgaW5kZXggVGh1LCAxNiBOb3YgMjAyMyAyMzozMzozNSBHTVRcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRpZighdGhpcy5tb25pdG9ySW5kZXhGaWxlKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3JJbmRleEZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKF9fZGlybmFtZSxcIm1vbml0b3JcIixcImluZGV4Lmh0bWxcIikpO1xuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsXCJ0ZXh0L2h0bWxcIilcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsdGhpcy5tb25pdG9ySW5kZXhGaWxlLmJ5dGVMZW5ndGgpXG5cdFx0XHRcdFx0XHRcdHJlcy5zdGF0dXMoMjAwKS5zZW5kKHRoaXMubW9uaXRvckluZGV4RmlsZSk7XG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSx0bWUscmVxLnBhdGgpO1x0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0XG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwNFxuXHRcdFx0fSx0bWUscmVxLnBhdGgpO1xuXHRcdH0pXG5cblx0XHRzZXJ2ZXIubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KVxuXG5cdFx0LyphcHAubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KSovXG5cdH1cblxuXHRhc3luYyBzZW5kUmVzcG9uc2UocmVmOnN0cmluZyxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCxyZXE/OkhUVFBSZXF1ZXN0Vk8pe1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcil7XG5cdFx0XHR0cnl7XG5cdFx0XHRcdGRhdGEgPSBhd2FpdCB0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKHJlcSxyZXMsZGF0YSxyZXF1ZXN0VGltZSxlbmRwb2ludCxsb2cpO1xuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRsb2dFcnJvcihcIlBvc3Rwcm9kdWNlciBlcnJvclwiLGUpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpKVxuXHRcdFx0ZGF0YSA9IHtlcnJvcjpkYXRhIGFzIElFcnJvcixkYXRhOm51bGx9XG5cdFx0XG4gICAgICAgIGRhdGEucmVzcG9uc2VUaW1lID0gKCtuZXcgRGF0ZSgpKSAtIHJlcXVlc3RUaW1lO1xuICAgICAgICBkYXRhLmNvcmUgPSB0aGlzLnZlcnNpb25cbiAgICAgICAgZGF0YS5lbmRwb2ludCA9IGVuZHBvaW50ID8/IFwibm9fZW5kcG9pbnRcIlxuXHRcdFxuXHRcdGlmKHRoaXMub3B0aW9ucy5hcHBWZXJzaW9uKVxuXHRcdFx0ZGF0YS52ZXJzaW9uPXRoaXMub3B0aW9ucy5hcHBWZXJzaW9uXG5cblx0XHRcblx0XHRpZihsb2cpe1xuXHRcdFx0bG9nLnRpbWUgPSBkYXRhLnJlc3BvbnNlVGltZVxuXHRcdFx0bG9nLnJlZmVyZXI9cmVmO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlUmVzcG9uc2UoZGF0YS5lbmRwb2ludCxkYXRhLnJlc3BvbnNlVGltZSlcblxuICAgICAgICBpZihyZXMuZGVzdHJveWVkIHx8IHJlcy5jbG9zZWQpe1xuXG5cdFx0XHRpZihsb2cpXG5cdFx0XHRcdGxvZy5lcnJvciA9IFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZSBmb3I6IFwiK2RhdGEuZW5kcG9pbnRcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuICAgICAgICAgICAgXHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2U6IFwiK2RhdGEuZW5kcG9pbnQsZGF0YSlcbiAgICAgICAgICAgIFxuXHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG4gICAgICAgIH1lbHNle1xuXHRcdFx0dHJ5e1xuXG5cdFx0XHRcdGlmKGRhdGEuZmlsZSl7XG5cblx0XHRcdFx0XHRyZXMuc2VuZEZpbGUoZGF0YS5maWxlLGVycj0+e1xuXHRcdFx0XHRcdFx0aWYoZXJyKXtcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGVcblx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlZixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuQ0FOVF9TRU5EX0ZJTEUsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0scmVxdWVzdFRpbWUsZGF0YS5lbmRwb2ludCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9KVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihkYXRhLnJlZGlyZWN0KXtcblx0XHRcdFx0XHRyZXMucmVkaXJlY3QoZGF0YS5yZWRpcmVjdCk7XG5cdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0ge3JlZGlyZWN0OmRhdGEucmVkaXJlY3R9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vIHNldHVwIGhlYWRlcnNcblx0XHRcdFx0XHRpZihkYXRhLmhlYWRlcnMpe1xuXHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIGRhdGEuaGVhZGVycylcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihpLGRhdGEuaGVhZGVyc1tpXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXMgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzPjk5KVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGUgPSBkYXRhLmVycm9yLmh0dHBTdGF0dXNcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZT1kYXRhLmh0dHBTdGF0dXMgPz8gMjAwXG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoZGF0YS5yYXdSZXNwb25zZSl7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhLmRhdGEpXG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhKTtcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblxuXHRcdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiB0aGlzLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0XHRsb2cuZXJyb3IgPSBkYXRhLmVycm9yLm1lc3NhZ2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiLGUpO1xuXHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0bG9nLmVycm9yPVwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiXG5cdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHNob3cgbG9nXG5cdFx0aWYobG9nICYmIGxvZy5lcnJvciAmJiB0aGlzLm9wdGlvbnMub25FcnJvcil7XG5cdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihsb2cuZXJyb3IpXG5cdFx0fWVsc2V7XG5cdFx0XHRpZih0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nICYmIGxvZylcblx0XHRcdFx0dGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyhsb2cpXG5cdFx0fVxuICAgIH1cblxuXG5cdGNoZWNrRGF0YUxlbmd0aChkYXRhOmFueSxyZXN1bHQ/OmFueSxsdmw/Om51bWJlcik6YW55e1xuXHRcdFxuXHRcdGlmKCFsdmwpXG5cdFx0XHRsdmw9MDtcblxuXHRcdGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKHR5cGVvZiBkYXRhPT09XCJzdHJpbmdcIiAmJiBkYXRhLmxlbmd0aD4xMDI0KVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5zdWJzdHJpbmcoMCwxMDAwKStcIi4uLiAodG90YWw6XCIgKyBkYXRhLmxlbmd0aCArIFwiKVwiXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZighcmVzdWx0KVxuXHRcdFx0XHRyZXN1bHQ9e307XG5cdFx0XHRsZXQgYXJyY250ID0gMTAwO1xuXHRcdFx0Zm9yKGxldCBpIGluIGRhdGEpe1xuXHRcdFx0XHRyZXN1bHRbaV09dGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YVtpXSxyZXN1bHRbaV0sbHZsKzEpO1xuXHRcdFx0XHRhcnJjbnQtLTtcblx0XHRcdFx0aWYoYXJyY250PD0wKXtcblx0XHRcdFx0XHRyZXN1bHRbXCIuLi5cIl09XCIuLi4gdG90YWw6IFwiK0FycmF5LmlzQXJyYXkoZGF0YSk/ZGF0YS5sZW5ndGg6T2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQgPz8gbnVsbDtcblx0fVxuXG59XG4iXX0=
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUN2QixpREFBNkM7QUFFN0MsK0NBQTJDO0FBaUMzQyxTQUFnQixpQkFBaUI7SUFDaEMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJO1FBQ1YsWUFBWSxFQUFFLE9BQU87UUFDckIsaUJBQWlCLEVBQUU7WUFDbEIsdUJBQXVCO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixTQUFTLEVBQUMsTUFBTTtRQUNoQixZQUFZLEVBQUUsVUFBVSxHQUE2QjtZQUNwRCxJQUFBLG9CQUFPLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sRUFBQyxVQUFTLEdBQU87WUFDdkIsSUFBQSxxQkFBUSxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCx1QkFBdUIsRUFBQyxLQUFLO1FBQzdCLFNBQVMsRUFBQyxFQUFFLEdBQUMsSUFBSSxHQUFDLElBQUk7UUFDdEIsV0FBVyxFQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFDLGFBQWEsQ0FBQztLQUNuRCxDQUFBO0FBQ0YsQ0FBQztBQW5CRCw4Q0FtQkM7QUFFWSxRQUFBLGtCQUFrQixHQUFzQyxJQUFJ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Q0FBQztnQkFDVCxJQUFHLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDckYsTUFBTTtpQkFDTjthQUNEO1NBQ0Q7UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUE5ZkYsZ0NBZ2dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzLCB7IEFwcGxpY2F0aW9uLCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9CYXNlU2VydmljZSdcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQmFzZUVuZHBvaW50LCBJQmFzZUVuZHBvaW50IH0gZnJvbSAnLi9CYXNlRW5kcG9pbnQnXG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnMnXG5pbXBvcnQgeyBIVFRQUmVxdWVzdFZPLCBJRXJyb3IsIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tICcuL3N0cnVjdHVyZXMvSW50ZXJmYWNlcydcbmltcG9ydCB7UmVxfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tICcuL0xvZ1NlcnZpY2UnXG5pbXBvcnQgeyBNb25pdG9yIH0gZnJvbSAnLi9tb25pdG9yL01vbml0b3InXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IGZpbGVVcGxvYWQgZnJvbSAnZXhwcmVzcy1maWxldXBsb2FkJ1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiXG5pbXBvcnQgeyBMaXZlbmVzcyB9IGZyb20gJy4vcm91dGVzL0xpdmVuZXNzJ1xuaW1wb3J0IHsgUmVhZGluZXNzIH0gZnJvbSAnLi9yb3V0ZXMvUmVhZGluZXNzJ1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCdcbmltcG9ydCB7IGlzTXlzcWxFcnJvciB9IGZyb20gJy4vTXlzcWxTZXJ2aWNlJ1xuaW1wb3J0IHsgTXlzcWxFcnJvciB9IGZyb20gJ215c3FsJ1xuaW1wb3J0IHsgU3RhdFNlcnZpY2UgfSBmcm9tICcuL1N0YXRTZXJ2aWNlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcbmV4cG9ydCBjb25zdCBSRVFfTU9OSVRPUl9VU0VSUzpSZXE8e2F1dGhvcml6YXRpb246c3RyaW5nfSxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfTU9OSVRPUl9VU0VSU1wiKTtcblxuY29uc3QgYWN0aXZlU2VydmljZXM6U3RyaW5nW109W11cbmNvbnN0IGVudHJ5UG9pbnRzOlN0cmluZ1tdPVtdXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBJbml0aWFsaXplcihzZXJ2aWNlczpJQmFzZVNlcnZpY2VbXSl7XG5cdC8vIGFkZCBzdGF0IHNlcnZpY2Vcblx0c2VydmljZXMucHVzaChuZXcgU3RhdFNlcnZpY2UoKSk7XG5cdFxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgYXdhaXQgaS5pbml0KCk7YWN0aXZlU2VydmljZXMucHVzaChpLmdldE5hbWUoKSkgfVxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgaS5hcHBsaWNhdGlvblJlYWR5KCkgfVxufVxuXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcblxuXHQvLyBORVQgTE9HXG5cdHByaXZhdGUgc3RhdGljIG5leHRMb2dJRD0wO1xuXHRwcml2YXRlIHZlcnNpb24gPSBcIjIuNi42XCJcblx0cHJpdmF0ZSBvcHRpb25zOkFQSVNlcnZpY2VPcHRpb25zO1xuXHRwcml2YXRlIG1vbml0b3I/Ok1vbml0b3Jcblx0cHJpdmF0ZSBtb25pdG9ySW5kZXhGaWxlPzpCdWZmZXJcblx0cHJpdmF0ZSBzdGFydGVkOkRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRwcml2YXRlIHJlcXVlc3RzQ291bnQ9MDtcblx0cHJpdmF0ZSBzZXJ2ZXI9aHR0cFxuXG5cdG5ldExvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT1bXTtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzpBUElTZXJ2aWNlT3B0aW9uc3xudWxsKSB7XG5cdFx0c3VwZXIoJ0hUVFAgU2VydmljZScpXG5cdFx0dGhpcy5vcHRpb25zPW9wdGlvbnMgPz8gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0KVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0PVtdO1xuXHRcdGNvbnN0IHNlbGYgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIrdGhpcy5vcHRpb25zLnBvcnQ7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5maW5kKHZhbD0+dmFsPT09c2VsZikpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QucHVzaCgpXG5cblx0XHRpZih0aGlzLm9wdGlvbnMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMubW9uaXRvci5sZW5ndGg+MCl7XG5cdFx0XHR0aGlzLm1vbml0b3I9bmV3IE1vbml0b3IoKTtcblx0XHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaCh0aGlzLm1vbml0b3IpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJTZXJ2aWNlIE1vbml0b3IgaW5pdGlhbGl6ZWRcIilcblx0XHRcdGNvbnNvbGUud2FybihcIm1vbml0b3IgbGlua3M6XCIpXG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0Y29uc29sZS53YXJuKFwiTW9uaXRvciBsaW5rIGZvcjogXCIraS5sb2dpbitcIiAtPiAvc20tXCIraGFzaClcdFx0XHRcdFx0XHRcblx0XHRcdH1cblxuXHRcdFx0UkVRX01PTklUT1JfVVNFUlMubGlzdGVuZXIgPSBhc3luYyAocmVxKT0+e1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBbXVxuXHRcdFx0XHRpZih0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKTtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGhhc2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcCA9PT0gcmVxLmVuZHBvaW50KXtcblx0XHRcdFx0XHRcdHJlcS5pbnRlcm5hbENhbGw9dHJ1ZTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaS5leGVjdXRlKHJlcSlcblx0XHRcdFx0XHRcdGlmKHJlc3BvbnNlLmVycm9yKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7ZXJyb3I6RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1QsZGF0YTpudWxsLGh0dHBTdGF0dXM6NDA0fVxuXHRcdH1cblxuXHRcdC8vIGluaXRpYWxpemUgZXhwcmVzc1xuXHRcdGNvbnN0IGFwcCA9IGV4cHJlc3MoKVxuXHRcdGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFwcCk7XG5cblx0XHRSRVFfSFRUUF9TRVJWRVIubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9PntyZXR1cm4ge2V4cHJlc3M6YXBwLGh0dHA6c2VydmVyfX07XG5cblx0XHRpZih0aGlzLm9wdGlvbnMuaXNQcm9kdWN0aW9uRW52aXJvbm1lbnQpXG5cdFx0XHRhcHAuc2V0KFwiZW52XCIsJ3Byb2R1Y3Rpb24nKTtcblxuXHRcdGFwcC51c2UoZXhwcmVzcy5qc29uKHsgbGltaXQ6ICcxMG1iJyB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24vanNvblxuXHRcdGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgbGltaXQ6ICcxMG1iJywgZXh0ZW5kZWQ6IHRydWUgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuXG5cdFx0YXBwLnVzZShmaWxlVXBsb2FkKHtcblx0XHRcdGxpbWl0SGFuZGxlcjogKHJlcSwgcmVzLCBuZXh0KT0+e1xuXHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuRklMRV9UT09fTEFSR0UsXG5cdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdGh0dHBTdGF0dXM6NDEzLFxuXHRcdFx0XHR9LCtuZXcgRGF0ZSgpLHJlcS5wYXRoKTtcblx0XHRcdH0sXG5cdFx0XHRsaW1pdHM6IHsgZmlsZVNpemU6IHRoaXMub3B0aW9ucy5maWxlTGltaXQgfSxcblx0XHRcdHVzZVRlbXBGaWxlczogdHJ1ZSxcblx0XHRcdHVyaURlY29kZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdHRlbXBGaWxlRGlyOiB0aGlzLm9wdGlvbnMuZmlsZVRlbXBEaXIsXG5cdFx0XHQvL3NhZmVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHRhYm9ydE9uTGltaXQ6dHJ1ZVxuXHRcdH0pKVxuXG5cdFx0YXBwLnVzZShhc3luYyAoZXJyOmFueSxyZXE6YW55LHJlc3A6YW55LG5leHQ6YW55KT0+e1xuXHRcdFx0XG5cdFx0XHRpZighZXJyKXtcblx0XHRcdFx0bmV4dCgpO1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdFx0Ly9yZXF1ZXN0IHN0YXJ0IHRpbWVcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0Y29uc3QgbG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdGRhdGE6XCJcIixcblx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXNcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3BvbnNlRXJyb3I9RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1Q7XG5cdFx0XHRpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIiAmJiBlcnIuc3RhdHVzID09PSA0MDAgJiYgJ2JvZHknIGluIGVyciAmJiBlcnIudHlwZSA9PT0gJ2VudGl0eS5wYXJzZS5mYWlsZWQnKSB7XG5cdFx0XHRcdHJlc3BvbnNlRXJyb3IgPSBEZWZhdWx0RXJyb3JzLkpTT05fTUFMRk9STUVEXG5cdFx0XHR9XG4gICAgICBcblxuXHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzcCx7XG5cdFx0XHRcdGVycm9yOnJlc3BvbnNlRXJyb3IsXG5cdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0aHR0cFN0YXR1czo0MDBcblx0XHRcdH0sdG1lLFwiXCIsbG9nKVxuXG5cdFx0fSlcblxuXHRcdGNvbnN0IGNvcnNPcHRpb25zID0ge1xuXHRcdFx0b3JpZ2luOiAob3JpZ2luOiBhbnksIGNhbGxiYWNrOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luSXNXaGl0ZWxpc3RlZCA9IHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5pbmNsdWRlcyhvcmlnaW4pXG5cdFx0XHRcdGNhbGxiYWNrKG51bGwsIG9yaWdpbklzV2hpdGVsaXN0ZWQpXG5cdFx0XHR9LFxuXHRcdFx0Y3JlZGVudGlhbHM6IHRydWVcblx0XHR9XG5cdFx0YXBwLnVzZShjb3JzKGNvcnNPcHRpb25zKSlcblxuXHRcdC8vIHJlZ2lzdHJhdGUgZW5kcG9pbnRzXG5cdFx0QmFzZUVuZHBvaW50LnNldEVudHJ5UG9pbnQodGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludClcblx0XHRcblx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRhd2FpdCBpLmluaXQoKTtcblx0XHRcdGlmKCFpLmVuZHBvaW50cylcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRmb3IobGV0IGogb2YgaS5lbmRwb2ludHMpe1xuXHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFxuXG5cdFx0XHRcdC8vIGluY29taW5nIHJlcXVlc3Rcblx0XHRcdFx0YXBwLmFsbChlcCxhc3luYyAocmVxLHJlcyk9Pntcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzQ291bnQrKztcblx0XHRcdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdFx0XHRsZXQgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsID0gbnVsbDtcblx0XHRcdFx0XHRpZighaS5pZ25vcmVIdHRwTG9nZ2luZyl7XG5cdFx0XHRcdFx0XHRsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0XHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRcdFx0XHR1cmw6cmVxLnVybCxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6dGhpcy5jaGVja0RhdGFMZW5ndGgocmVxLmJvZHkpLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6dGhpcy5jaGVja0RhdGFMZW5ndGgocmVxLnBhcmFtcylcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBleGVjdXRlID0gYXN5bmMgKCk9PntcblxuXHRcdFx0XHRcdFx0Y29uc3QgYm9keSA9IHJlcS5ib2R5O1xuXHRcdFx0XHRcdFx0aWYocmVxLnF1ZXJ5ICYmIHR5cGVvZiByZXEucXVlcnkgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gcmVxLnF1ZXJ5KXtcblx0XHRcdFx0XHRcdFx0XHRib2R5W2ldPXJlcS5xdWVyeVtpXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBodHRwUmVxdWVzdDpIVFRQUmVxdWVzdFZPID0ge1xuXHRcdFx0XHRcdFx0XHRyYXc6cmVxIGFzIEluY29taW5nTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6cmVxLmJvZHksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zLFxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOnJlcS5oZWFkZXJzIGFzIGFueSxcblx0XHRcdFx0XHRcdFx0ZW5kcG9pbnQ6ZXAsXG5cdFx0XHRcdFx0XHRcdGZpbGVzOnJlcS5maWxlcyA/PyBudWxsLFxuXHRcdFx0XHRcdFx0XHRyZWZlcmVyOnJlcS5nZXQoXCJSZWZlcmVyXCIpLFxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIpe1xuXHRcdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZXByb2R1Y2VyUmVzdWx0ID0gYXdhaXQgdGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0aWYocHJlcHJvZHVjZXJSZXN1bHQpXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlcHJvZHVjZXJSZXN1bHQgPSBwcmVwcm9kdWNlclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBkZXRhaWxzPWAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdGxldCBzdGFjazpJRXJyb3JbXXx1bmRlZmluZWQ9dW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihlKSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzPShlIGFzIGFueSkubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhY2sgPSBbZSBhcyBhbnldO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGlzTXlzcWxFcnJvcihlKSlcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHMgPSAoZSBhcyBNeXNxbEVycm9yKS5tZXNzYWdlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsc3RhY2s6c3RhY2ssZGV0YWlsczpkZXRhaWxzfSxkYXRhOm51bGwsaHR0cFN0YXR1czo1MDB9LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0XG5cdFx0XHRcdFx0XHR0cnl7XG5cblx0XHRcdFx0XHRcdFx0bGV0IGlnbm9yZUludGVyY2VwdG9yID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGxldCBhbGxvd0ludGVyY2VwdG9yRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYoai5pZ25vcmVJbnRlcmNlcHRvcilcblx0XHRcdFx0XHRcdFx0XHRpZ25vcmVJbnRlcmNlcHRvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRpZihqLmFsbG93SW50ZXJjZXB0b3JFcnJvcilcblx0XHRcdFx0XHRcdFx0XHRhbGxvd0ludGVyY2VwdG9yRXJyb3I9dHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2Ygai5oYW5kbGVyID09PSBcIm9iamVjdFwiICl7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdHJ5IHRvIGdldCBoYW5kbGVyIHJlbGF5aW5nIG9uIGh0dHAgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFuZGxlciA9IGouaGFuZGxlcltodHRwUmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKV07XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGhhbmRsZXIgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaGFuZGxlci5pZ25vcmVJbnRlcmNlcHRvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWdub3JlSW50ZXJjZXB0b3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGhhbmRsZXIuYWxsb3dJbnRlcmNlcHRvckVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxvd0ludGVyY2VwdG9yRXJyb3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWFsbG93SW50ZXJjZXB0b3JFcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxpbnRlcmNlcHRvclJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QuaW50ZXJjZXB0b3JSZXN1bHQgPSBpbnRlcmNlcHRvclJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIFByZWNoZWNrIFdIWT9cblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IGRhdGEuZXJyb3IubWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIHJlc3BvbnNlXCIsZSk7XG5cdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRsb2cuZXJyb3I9XCJDYW4ndCBzZW5kIHJlc3BvbnNlXCJcblx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBsb2dcblx0XHRpZihsb2cgJiYgbG9nLmVycm9yICYmIHRoaXMub3B0aW9ucy5vbkVycm9yKXtcblx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGxvZy5lcnJvcilcblx0XHR9ZWxzZXtcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcblx0XHR9XG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
|
@@ -94,6 +94,8 @@ export declare class MysqlService extends BaseService {
|
|
94
94
|
static nextTransactionID: number;
|
95
95
|
transactions: ITransaction[];
|
96
96
|
maxTransactionWaitTime: number;
|
97
|
+
lastSuccessQueryTime: number;
|
98
|
+
pingInterval: number;
|
97
99
|
failReportFileStream: fs.WriteStream | null;
|
98
100
|
failReportFileStreamName: string | null;
|
99
101
|
failReportLastAccessTime: number;
|
@@ -58,6 +58,8 @@ class MysqlService extends BaseService_1.BaseService {
|
|
58
58
|
static nextTransactionID = 1;
|
59
59
|
transactions = [];
|
60
60
|
maxTransactionWaitTime = 1000 * 60 * 1;
|
61
|
+
lastSuccessQueryTime = 0;
|
62
|
+
pingInterval = 1000 * 60 * 5;
|
61
63
|
failReportFileStream = null;
|
62
64
|
failReportFileStreamName = null;
|
63
65
|
failReportLastAccessTime = 0;
|
@@ -88,8 +90,17 @@ class MysqlService extends BaseService_1.BaseService {
|
|
88
90
|
}
|
89
91
|
}
|
90
92
|
this.transactions = this.transactions.filter(i => !removedIDs.includes(i.id));
|
91
|
-
if (this.debug)
|
93
|
+
if (this.debug && count - this.transactions.length > 0)
|
92
94
|
console.log("Removed: ", count - this.transactions.length);
|
95
|
+
if (Date.now() - this.lastSuccessQueryTime > this.pingInterval) {
|
96
|
+
if (!this.pool)
|
97
|
+
return;
|
98
|
+
for (let i = 0; i < this.options.connectionLimit; i++) {
|
99
|
+
exports.REQ_MYSQL_QUERY.request({ query: "SELECT 1 @NOLIMIT", fields: [] });
|
100
|
+
if (this.debug)
|
101
|
+
console.log("Ping mysql on each connection in pool");
|
102
|
+
}
|
103
|
+
}
|
93
104
|
}, 1000 * 30);
|
94
105
|
setInterval(() => {
|
95
106
|
if (!this.failReportFileStream)
|
@@ -144,8 +155,14 @@ class MysqlService extends BaseService_1.BaseService {
|
|
144
155
|
console.log("Execute queries: ", data.length);
|
145
156
|
const result = await Promise.all(promises);
|
146
157
|
for (let i of result) {
|
158
|
+
if (i.error && i.error.code === "CONN_ERR") {
|
159
|
+
console.error("Connection error, was destroyed, recreate pool");
|
160
|
+
await this.recreatePool();
|
161
|
+
}
|
147
162
|
if (i.error && (i.error.fatal || i.error.throwable))
|
148
163
|
throw i.error;
|
164
|
+
if (!i.error)
|
165
|
+
this.lastSuccessQueryTime = Date.now();
|
149
166
|
}
|
150
167
|
return result;
|
151
168
|
};
|
@@ -216,7 +233,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
216
233
|
}
|
217
234
|
}
|
218
235
|
catch (e) {
|
219
|
-
(0, LogService_1.logError)("${MysqlService.js}->query error", e);
|
236
|
+
(0, LogService_1.logError)("${MysqlService.js}->TQUERY->query error", e);
|
220
237
|
}
|
221
238
|
}
|
222
239
|
}
|
@@ -317,7 +334,10 @@ class MysqlService extends BaseService_1.BaseService {
|
|
317
334
|
}
|
318
335
|
prepareCountQuery(query) {
|
319
336
|
let countQuery = query;
|
320
|
-
|
337
|
+
if (countQuery.indexOf("LIMIT") === -1)
|
338
|
+
countQuery = countQuery.substring(0, countQuery.indexOf("LIMIT"));
|
339
|
+
if (countQuery.indexOf("ORDER") !== -1)
|
340
|
+
countQuery = countQuery.substring(0, countQuery.indexOf("ORDER"));
|
321
341
|
countQuery = countQuery.substring(countQuery.indexOf("FROM"));
|
322
342
|
countQuery = "SELECT COUNT(1) as `count` " + countQuery;
|
323
343
|
return countQuery;
|
@@ -631,9 +651,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
631
651
|
});
|
632
652
|
}
|
633
653
|
async sendQuery(conn, query, resolve, rollback, throwable, calculateCount) {
|
634
|
-
let errCatched = false;
|
635
654
|
conn.on("error", async (err) => {
|
636
|
-
errCatched = true;
|
637
655
|
let rollbackError = null;
|
638
656
|
if (rollback)
|
639
657
|
rollbackError = (await this.queryAsync(conn, rollback)).err;
|
@@ -665,14 +683,27 @@ class MysqlService extends BaseService_1.BaseService {
|
|
665
683
|
if (rollback)
|
666
684
|
rollbackError = (await this.queryAsync(conn, rollback)).err;
|
667
685
|
try {
|
668
|
-
|
669
|
-
|
686
|
+
let doclose = false;
|
687
|
+
if (queryResult.err && queryResult.err.message) {
|
688
|
+
if (queryResult.err.message.toLowerCase().indexOf("can't add new command when connection is in closed state") !== -1) {
|
689
|
+
doclose = true;
|
690
|
+
}
|
691
|
+
}
|
692
|
+
if (doclose) {
|
693
|
+
conn.destroy();
|
694
|
+
conn.removeAllListeners();
|
695
|
+
queryResult.err.code = "CONN_ERR";
|
696
|
+
}
|
697
|
+
else {
|
698
|
+
conn.release();
|
699
|
+
conn.removeAllListeners();
|
700
|
+
}
|
670
701
|
}
|
671
702
|
catch (e) { }
|
672
703
|
let dup = false;
|
673
704
|
if (queryResult.err && queryResult.err.code && queryResult.err.code.toLowerCase().indexOf("er_dup_entry") !== -1)
|
674
705
|
dup = true;
|
675
|
-
(0, LogService_1.logError)("${MysqlService.js}->query error", queryResult.err);
|
706
|
+
(0, LogService_1.logError)("${MysqlService.js}->send query->query error", queryResult.err);
|
676
707
|
resolve({
|
677
708
|
error: { ...queryResult.err, throwable: throwable },
|
678
709
|
data: null,
|
@@ -680,13 +711,14 @@ class MysqlService extends BaseService_1.BaseService {
|
|
680
711
|
isDuplicateError: dup,
|
681
712
|
count: 0
|
682
713
|
});
|
714
|
+
return;
|
683
715
|
}
|
684
716
|
let count = 0;
|
685
717
|
if (calculateCount && query.indexOf("SELECT") === 0) {
|
686
718
|
let countQuery = this.prepareCountQuery(query);
|
687
719
|
const countQueryResult = await this.queryAsync(conn, countQuery);
|
688
720
|
if (countQueryResult.err)
|
689
|
-
(0, LogService_1.logError)("${MysqlService.js}->query error", countQueryResult.err);
|
721
|
+
(0, LogService_1.logError)("${MysqlService.js}->send query->count->query error", countQueryResult.err);
|
690
722
|
else {
|
691
723
|
if (countQueryResult.results && countQueryResult.results.length > 0) {
|
692
724
|
count = countQueryResult.results[0].count;
|
@@ -698,7 +730,7 @@ class MysqlService extends BaseService_1.BaseService {
|
|
698
730
|
conn.removeAllListeners();
|
699
731
|
}
|
700
732
|
catch (e) { }
|
701
|
-
const err =
|
733
|
+
const err = null;
|
702
734
|
resolve({
|
703
735
|
error: err,
|
704
736
|
data: queryResult.results,
|
@@ -770,4 +802,4 @@ const encrypt = (txt) => {
|
|
770
802
|
}
|
771
803
|
};
|
772
804
|
exports.default = MysqlService;
|
773
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEJoSSxNQUFNLFlBQVksR0FBQyxDQUFDLENBQUssRUFBaUIsRUFBRTtJQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUcsU0FBUyxJQUFJ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QUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL2ltcG9ydCBteXNxbCwgeyBGaWVsZEluZm8sIE15c3FsRXJyb3IsIFBvb2wsIFBvb2xDb25uZWN0aW9uIH0gZnJvbSBcIm15c3FsXCJcblxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi9CYXNlU2VydmljZVwiO1xuaW1wb3J0IFNpZ25hbCwgeyBSZXEgfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIjtcbmltcG9ydCB7IGNyZWF0ZUNpcGhlcml2LCBjcmVhdGVEZWNpcGhlcml2LCBjcmVhdGVIYXNoIH0gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCAqIGFzIG15c3FsIGZyb20gXCJteXNxbDIvcHJvbWlzZVwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IGNvbnN0IFNfTVlTUUxfU1RBUlRFRD1uZXcgU2lnbmFsPHZvaWQ+KClcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfUVVFUlkgPSBuZXcgUmVxPE15U3FsUXVlcnl8TXlTcWxRdWVyeVtdLE15c3FsUmVzdWx0W10+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9RVUVSWVwiKTtcbi8vZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUkFOU0FDVElPTiA9IG5ldyBSZXE8TXlTcWxRdWVyeVtdLE15c3FsUmVzdWx0Pih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05cIik7XG5cbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVEJFR0lOID0gbmV3IFJlcTx2b2lkLE15c3FsRXJyb3J8bnVtYmVyPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05fQkVHSU5HXCIpOyAvLyByZXR1cm4gdHJhbnNhY3Rpb24gaWQgb3IgbXlzcWwgZXJyb3JcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFFVRVJZPW5ldyBSZXE8e3F1ZXJ5Ok15U3FsUXVlcnksdGlkOm51bWJlcn0sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9BRERfT1BFUkFUSU9OXCIpOyAvLyB0aWQgbWVhbnMgdHJhbnNhY3Rpb24gaWRcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVENPTU1JVD1uZXcgUmVxPG51bWJlcixNeXNxbEVycm9yfG51bGw+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UQ09NTUlUXCIpOyAvLyB0aWRcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFJPTExCQUNLPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RST0xMQkFDS1wiKTsgLy8gdGlkXG5cbmV4cG9ydCBjb25zdCBleGVjdXRlUXVlcnkgPSBhc3luYyAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT49PntyZXR1cm4gYXdhaXQgUkVRX01ZU1FMX1FVRVJZLnJlcXVlc3QocXVlcnkpfVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsU2VydmljZU9wdGlvbnN7XG4gICAgY29ubmVjdGlvbkxpbWl0Om51bWJlcixcbiAgICBob3N0OnN0cmluZyxcbiAgICB1c2VyOnN0cmluZyxcbiAgICBwYXNzd29yZDpzdHJpbmcsXG4gICAgcG9ydDpudW1iZXIsXG4gICAgZGF0YWJhc2U6c3RyaW5nLCAgXG4gICAgcXVldWVMaW1pdD86bnVtYmVyLFxuICAgIHRyYW5zYWN0aW9uRmFpbFJlcG9ydD86KHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpPT52b2lkLFxuICAgIHRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj86c3RyaW5nLFxuICAgIGRlYnVnPzpib29sZWFuLFxuICAgIG5heFRyYW5zYWN0aW9uV2FpdFRpbWU/Om51bWJlcixcblx0bWlncmF0aW9ucz86e1xuXHRcdGRpcjpzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6KCk9PnZvaWRcblx0fXxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxFcnJvcntcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgZXJybm86IG51bWJlcixcbiAgICBzcWw6IHN0cmluZyxcbiAgICBuYW1lOnN0cmluZyxcbiAgICBtZXNzYWdlOnN0cmluZ1xuICAgIGZhdGFsPzpib29sZWFuLFxuICAgIHRocm93YWJsZTpib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBpc015c3FsRXJyb3I9KGU6YW55KTplIGlzIE15c3FsRXJyb3I9PntcbiAgICByZXR1cm4gZS5jb2RlIT09dW5kZWZpbmVkICYmIGUuZXJybm8hPT11bmRlZmluZWQgJiYgZS5zcWwhPT11bmRlZmluZWQgJiYgZS5uYW1lIT09dW5kZWZpbmVkICYmIGUubWVzc2FnZSE9PXVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFJlc3VsdHtcbiAgICBlcnJvcj86TXlzcWxFcnJvcnxudWxsLFxuICAgIHJvbGxiYWNrRXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICBpc0R1cGxpY2F0ZUVycm9yPzpib29sZWFuXG4gICAgZGF0YTphbnlcbiAgICBjb3VudDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeVNxbFF1ZXJ5e1xuICAgIHF1ZXJ5OnN0cmluZ1xuICAgIGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsXG4gICAgcm9sbGJhY2tRdWVyeT86c3RyaW5nfG51bGxcbiAgICB0cmFuc2FjdGlvbklEPzpudW1iZXJcbiAgICB0aHJvd2FibGU/OmJvb2xlYW5cbiAgICBjYWxjdWxhdGVDb3VudD86Ym9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZHtcbiAgICBuYW1lOnN0cmluZyxcbiAgICB2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsXG4gICAgc3lzdGVtPzpib29sZWFuLFxuICAgIGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLFxuICAgIGlnbm9yZUluVXBkYXRlPzpib29sZWFuXG4gICAgdXNlSW5SZXBsYWNlPzpib29sZWFuLFxuICAgIF9wYXJzZWRWYWx1ZT86c3RyaW5nfG51bWJlcnxib29sZWFufG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNhY3Rpb257XG4gICAgaWQ6bnVtYmVyXG4gICAgdGltZXN0YW1wOm51bWJlcixcbiAgICBjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLFxuICAgIHF1ZXJpZXM6e3NxbDpzdHJpbmcsc3RhdHVzOnN0cmluZ31bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZE9iamVjdCBleHRlbmRzIFJlY29yZDxzdHJpbmcsc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkfHtuYW1lPzpzdHJpbmd8bnVsbCx2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsc3lzdGVtPzpib29sZWFuLGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLGlnbm9yZUluVXBkYXRlPzpib29sZWFuLHVzZUluUmVwbGFjZT86Ym9vbGVhbn0+e1xuXG59XG4gICAgXG5cbi8qKlxuICogTXlzcWwgU2VydmljZXMsIGV4ZWN1dGUgcXVlcmllc1xuICogTXlTcWxRdWVyeS5xdWVyeTpcbiAqIEBmaWVsZHMgLSByZXBsYWNlZCBieSBmaWVsZCdzIG5hbWVzXG4gKiBAdmFsdWVzIC0gcmVwbGFjZWQgYnkgcGFyc2VkIHZhbHVlc1xuICogQG9udXBkYXRlIC0gcmVwYWxjZWQgYnkgcGFpciBmaWVsZCBuYW1lID0gdmFsdWVcbiAqIEBvbmR1cGxpY2F0ZSAtIHJlcGxhY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKi9cblxuZXhwb3J0IGNsYXNzIE15c3FsU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNle1xuXG4gICAgcmVjb25uZWN0aW9uVGltZW91dD0xMDAwKjM7XG4gICAgcmVjb25uZWN0aW5nPWZhbHNlO1xuICAgIHBvb2w6bXlzcWwuUG9vbHxudWxsPW51bGw7XG4gICAgb3B0aW9uczpNeXNxbFNlcnZpY2VPcHRpb25zO1xuICAgIHNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgIHRpbWVvdXRJRDphbnlcblxuICAgIGRlYnVnPWZhbHNlO1xuXG4gICAgcXVlcmllcz1bXTsgLy8gVE9ETzogU1RPUkUgUVVFUklFUyBTRU5UUyBCRUZPUkUgVEhFIFNFUlZJQ0UgSVMgU1RBUlRFRCFcbiAgICBzdGF0aWMgbmV4dFRyYW5zYWN0aW9uSUQ9MTtcbiAgICB0cmFuc2FjdGlvbnM6SVRyYW5zYWN0aW9uW109W11cblxuICAgIG1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSAxMDAwKjYwKjE7IC8vIDEgbWluIGFuZCBkZXRlbGV0ZSB0cmFuc2FjdGlvblxuXG4gICAgZmFpbFJlcG9ydEZpbGVTdHJlYW06ZnMuV3JpdGVTdHJlYW18bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZTpzdHJpbmd8bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZTpudW1iZXI9MDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwibXlzcWxcIik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIFxuXG4gICAgICAgIC8vIGRlY3J5cHQgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmhvc3Quc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmhvc3Quc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudXNlci5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51c2VyID0gZGVjcnlwdCh0aGlzLm9wdGlvbnMudXNlci5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhYmFzZSA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmRhdGFiYXNlLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXNzd29yZCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnBhc3N3b3JkLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLnBhc3N3b3JkXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9IHRydWVcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWUpXG4gICAgICAgICAgICB0aGlzLm1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSB0aGlzLm9wdGlvbnMubmF4VHJhbnNhY3Rpb25XYWl0VGltZTtcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSURzOm51bWJlcltdPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihub3ctaS50aW1lc3RhbXA+dGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJSZWxlYXNlIHRyYW5zYWN0aW9uIGNvbm5lY3Rpb24gZHVlIHRvIHRpbWVvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGksdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJRHMucHVzaChpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+IXJlbW92ZWRJRHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW1vdmVkOiBcIixjb3VudC10aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0sMTAwMCozMClcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYWZ0ZXIgMTUgbWluIG9mIGluYWN0aXZpdHksIGNsb3NlIGZpbGVcbiAgICAgICAgICAgIGlmKERhdGUubm93KCktdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU+MTAwMCo2MCoxNSl7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwxMDAwKjYwKjUpXG5cbiAgICAgICAgaWYob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKSl7XG4gICAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPXVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjcmVhdGUgdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZGlyXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZXhlY3V0ZVF1ZXJ5IChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPnsgcmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KSB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcblxuICAgICAgICAvLyBzZXR1cCBwcm9jZXNzIGV4aXQgaGFuZGxlcnMgaW50ZXJydXB0IChjdHJsK2MpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAvLyB0ZXJtaW5hdGUgKGtpbGwpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VydmljZVN0YXJ0ZWQ9ZmFsc2U7XG4gICAgICAgIGxldCBwb29sQ3JlYXRlZDpib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RpbmcgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICBwb29sQ3JlYXRlZCA9IGF3YWl0IHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICBpZighcG9vbENyZWF0ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhIFJldHJ5aW5nIGluIDMgc2Vjb25kcy4uLlwiKVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+c2V0VGltZW91dChyZXNvbHZlLDMwMDApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1FVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGEgPT57XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShkYXRhKSlcbiAgICAgICAgICAgICAgICBkYXRhPVtkYXRhXTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZGF0YSl7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGkucXVlcnksaS5maWVsZHMpO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5leGVjdXRlKHF1ZXJ5LGkucm9sbGJhY2tRdWVyeSA/PyBudWxsLGkudHJhbnNhY3Rpb25JRCA/PyAwLGkudGhyb3dhYmxlID8/IGZhbHNlLGkuY2FsY3VsYXRlQ291bnQgPz8gZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcmllczogXCIsZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICBpZihpLmVycm9yICYmIChpLmVycm9yLmZhdGFsIHx8IGkuZXJyb3IudGhyb3dhYmxlKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVEJFR0lOLmxpc3RlbmVyPWFzeW5jICgpPT57ICBcbiAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgIGlmKCFjb25uKVxuICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIk5PX1BPT0xcIixlcnJubzoxMDAwMDAsZmF0YWw6dHJ1ZSxzcWw6XCJcIixuYW1lOlwiTk9fUE9PTFwiLG1lc3NhZ2U6XCJNeXNxbCBwb29sIG5vdCBjcmVhdGVkXCIsdGhyb3dhYmxlOmZhbHNlfVxuXG4gICAgICAgICAgICAvLyBmaW5kIGNvbm4gaW4gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiWW91ciBjb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIkNPTk5fSU5fVFJYXCIsZXJybm86MTAwMDA1LGZhdGFsOnRydWUsdGhyb3dhYmxlOmZhbHNlLHNxbDpcIlwiLG5hbWU6XCJDT05OX0lOX1RSWFwiLG1lc3NhZ2U6XCJDb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCJ9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aWQgPSBNeXNxbFNlcnZpY2UubmV4dFRyYW5zYWN0aW9uSUQrKztcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCZWdpbiB0cmFuc2FjdGlvbiB3aXRoIGlkIFwiLHRpZClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGNvbm4uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4ucXVlcnkoXCJTVEFSVCBUUkFOU0FDVElPTlwiKTtcbiAgICAgICAgICAgICAgICAvL2NvbnN0IHJlcyA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRVQgYXV0b2NvbW1pdD0wXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gc3RhcnRlZFwiKVxuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oe2lkOnRpZCxjb25uOmNvbm4sdGltZXN0YW1wOkRhdGUubm93KCkscXVlcmllczpbe3NxbDpcIlNUQVJUIFRSQU5TQUNUSU9OXCIsc3RhdHVzOlwiZXJyb3JcIn1dfSlcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6dGlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIGNvbm46Y29ubixcbiAgICAgICAgICAgICAgICBxdWVyaWVzOltdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb25zIHBvb2w6IFwiLHRoaXMudHJhbnNhY3Rpb25zKVxuXG4gICAgICAgICAgICByZXR1cm4gdGlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBSRVFfTVlTUUxfVFFVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGE9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PWRhdGEudGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtlcnI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIixcbiAgICAgICAgICAgICAgICB9LGRhdGE6bnVsbCxyb2xsYmFja0Vycm9yOm51bGwsY291bnQ6MH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4LmlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgaWYoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnF1ZXJ5LmNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50UXVlcnkgPSB0aGlzLnByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdCAmJiBjb3VudFF1ZXJ5UmVzdWx0Lmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IChjb3VudFF1ZXJ5UmVzdWx0WzBdIGFzIGFueSkuY291bnQ7IC8vIHRvZG8gOiBjaGVjaywgcHJvYmFibHkgbm90IHdvcmtpbmcgKHdyb25nIGZpZWxkIG9yIHNtdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5xdWVyeSBlcnJvclwiLGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUXVlcnkgZXhlY3V0aW9uIHN0YXR1czpcIixlcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIilcblxuICAgICAgICAgICAgdHJ4LnF1ZXJpZXMucHVzaCh7c3FsOnF1ZXJ5LHN0YXR1czplcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIn0pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTpzcWxEYXRhP3NxbERhdGFbMF06bnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVFJPTExCQUNLLmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQ09NTUlULmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTpmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWl0IHRyYW5zYWN0aW9uOlwiLHRyeC5pZClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dGlkKTtcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIHBvb2w6XCIsdGhpcy50cmFuc2FjdGlvbnMgKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBhd2FpdCB0aGlzLmNvbW1pdCh0cngpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tbWl0KHRyeDpJVHJhbnNhY3Rpb24pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICBcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiQ09NTUlUXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbih0cng6SVRyYW5zYWN0aW9uLGRvbk5vdFJlbW92ZT86Ym9vbGVhbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgc3RhcnRlZFwiLHRyeC5jb25uLnRocmVhZElkKVxuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4ucm9sbGJhY2soKTtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIlJPTExCQUNLXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBpZighZG9uTm90UmVtb3ZlKVxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10cnguaWQpO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIGNvbXBsZXRlXCIsdHJ4LmNvbm4udGhyZWFkSWQpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJvbGxiYWNrIHRyYW5zYWN0aW9uXCIsdHJ4LnF1ZXJpZXMpXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4LFwicm9sbGJhY2tcIilcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5pc2hBcHAoKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hpbmcgbXlzcWwgc2VydmljZVwiKVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpXG4gICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oaSk7XG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgIH1cblxuICAgIHByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5OnN0cmluZyk6c3RyaW5ne1xuICAgICAgICBsZXQgY291bnRRdWVyeSA9IHF1ZXJ5O1xuICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoMCxjb3VudFF1ZXJ5LmluZGV4T2YoXCJMSU1JVFwiKSk7XG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZyhjb3VudFF1ZXJ5LmluZGV4T2YoXCJGUk9NXCIpKTtcbiAgICAgICAgY291bnRRdWVyeSA9IFwiU0VMRUNUIENPVU5UKDEpIGFzIGBjb3VudGAgXCIrY291bnRRdWVyeVxuICAgICAgICByZXR1cm4gY291bnRRdWVyeTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeC5xdWVyaWVzLG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubj8udGhyZWFkSWQpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4/LnRocmVhZElkKVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29ubmVjdGlvbiBub3QgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGlmKCFjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGBObyBjb25uZWN0aW9uIGNyZWF0ZWQhYClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgY2FudCBnZXQgY29ubmVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLy8gRG8gc2VuZCBxdWVyeVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUXVlcnkoY29ubixxdWVyeSxyZXNvbHZlLHJvbGxiYWNrUXVlcnksdGhyb3dhYmxlP3RydWU6ZmFsc2UsY2FsY3VsYXRlQ291bnQpO1xuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc31cIixlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWNyZWF0ZSBwb29sLCBjb25uZWN0aW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaWYoYCR7ZX1gLmluZGV4T2YoJ0VDT05OUkVGVVNFRCcpIT09LTEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOihlICYmIHR5cGVvZiBlID09PSBcIm9iamVjdFwiICYmIFwibWVzc2FnZVwiIGluIGUgYXMgYW55KT8oZSBhcyBhbnkpLm1lc3NhZ2U6XCJNeXNxbCBjYW50IGdldCBjb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbmRRdWVyeShjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyxyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyb2xsYmFjazpzdHJpbmd8bnVsbCx0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKXtcbiAgICAgICAgXG4gICAgICAgIGxldCBlcnJDYXRjaGVkPWZhbHNlO1xuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuICAgICAgICAgICAgZXJyQ2F0Y2hlZD10cnVlO1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWNhdGNoKGUpe31cbiAgICAgXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMyxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiK2VycixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cblxuXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgICBsZXQgZHVwPWZhbHNlO1xuICAgICAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xKVxuICAgICAgICAgICAgICAgIGR1cD10cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVFcnJvcjpkdXAsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmKGNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4sY291bnRRdWVyeSk7XG4gICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LmVycilcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixjb3VudFF1ZXJ5UmVzdWx0LmVycik7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKGNvdW50UXVlcnlSZXN1bHQucmVzdWx0cyAmJiBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50UXVlcnlSZXN1bHQucmVzdWx0c1swXS5jb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgLy8gaGFuZGxlIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgZXJyID0gcXVlcnlSZXN1bHQuZXJyP3suLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX06bnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICBkYXRhOnF1ZXJ5UmVzdWx0LnJlc3VsdHMsXG4gICAgICAgICAgICBjb3VudDpjb3VudFxuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLy8gQXN5bmMgcXVlcnkgd3JhcHBlciB0byBjb25uLnF1ZXJ5XG4gICAgYXN5bmMgcXVlcnlBc3luYyhjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyk6UHJvbWlzZTx7ZXJyOk15c3FsRXJyb3J8bnVsbCxyZXN1bHRzPzphbnl9PntcblxuICAgICAgICBsZXQgcmVzdWx0PW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICByZXR1cm4ge2Vycjp0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyOm51bGwsXG4gICAgICAgICAgICByZXN1bHRzOnJlc3VsdFswXSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU15c3FsUXVlcnlFcnJvcihlcnI6YW55LHRocm93YWJsZT86Ym9vbGVhbik6TXlzcWxFcnJvcntcbiAgICAgICAgaWYoZXJyICYmICB0eXBlb2YgZXJyPT09XCJvYmplY3RcIiAmJiBcImNvZGVcIiBpbiBlcnIgJiYgXCJlcnJub1wiIGluIGVyciAmJiBcInNxbFwiIGluIGVyciAmJiBcIm5hbWVcIiBpbiBlcnIgJiYgXCJtZXNzYWdlXCIgaW4gZXJyKXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzogZXJyLmVycm5vLFxuICAgICAgICAgICAgICAgICAgICBzcWw6IGVyci5zcWwsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ZXJyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogXCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAyLFxuICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNxbDogXCJubyBxdWVyeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6XCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiKyhlcnIpP2VycjpcIlwiLFxuICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmNvbnN0IHNlY3JldF9rZXk9XCJBS0xXa2FqdyVeJmRnd3FodyM5ODQ1M2kyM2JmazIzcm4ya25rbmdscmdqZWl0XCJcbmNvbnN0IHNlY3JldF9pdj1cInJ0aGFkcmZrMjNybjJrbiMqRk5LQUBndDQ0ZGYzdHNscmdqIyMhaXRcIlxuXG4vLyBHZW5lcmF0ZSBzZWNyZXQgaGFzaCB3aXRoIGNyeXB0byB0byB1c2UgZm9yIGVuY3J5cHRpb25cbmNvbnN0IGtleSA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfa2V5KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAzMilcbmNvbnN0IGl2ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9pdikuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpXG5cbmNvbnN0IGRlY3J5cHQgPShlbmNyeXB0ZWQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdik7XG4gICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCwgJ2JpbmFyeScsICd1dGY4Jyk7XG4gICAgICBkZWNyeXB0ZWQgKz0gZGVjaXBoZXIuZmluYWwoJ3V0ZjgnKTtcbiAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmNvbnN0IGVuY3J5cHQgPSAodHh0OnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgbGV0IGVuY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdiksXG4gICAgICBlbmNyeXB0ZWQgPSBlbmNpcGhlci51cGRhdGUodHh0LCAndXRmOCcsICdiaW5hcnknKTtcbiAgICAgIGVuY3J5cHRlZCArPSBlbmNpcGhlci5maW5hbCgnYmluYXJ5Jyk7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmluYXJ5JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeXNxbFNlcnZpY2U7Il19
|
805
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEJoSSxNQUFNLFlBQVksR0FBQyxDQUFDLENBQUssRUFBaUIsRUFBRTtJQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUcsU0FBUyxJQUFJ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Q0FBQyxFQUNyRCxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzlEO0lBQUEsT0FBTSxDQUFDLEVBQUM7UUFDTCxPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsa0JBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9pbXBvcnQgbXlzcWwsIHsgRmllbGRJbmZvLCBNeXNxbEVycm9yLCBQb29sLCBQb29sQ29ubmVjdGlvbiB9IGZyb20gXCJteXNxbFwiXG5cbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSBcIi4vQmFzZVNlcnZpY2VcIjtcbmltcG9ydCBTaWduYWwsIHsgUmVxIH0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCI7XG5pbXBvcnQgeyBjcmVhdGVDaXBoZXJpdiwgY3JlYXRlRGVjaXBoZXJpdiwgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tIFwiLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBteXNxbCBmcm9tIFwibXlzcWwyL3Byb21pc2VcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCBjb25zdCBTX01ZU1FMX1NUQVJURUQ9bmV3IFNpZ25hbDx2b2lkPigpXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1FVRVJZID0gbmV3IFJlcTxNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSxNeXNxbFJlc3VsdFtdPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfUVVFUllcIik7XG4vL2V4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFJBTlNBQ1RJT04gPSBuZXcgUmVxPE15U3FsUXVlcnlbXSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OXCIpO1xuXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RCRUdJTiA9IG5ldyBSZXE8dm9pZCxNeXNxbEVycm9yfG51bWJlcj4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0JFR0lOR1wiKTsgLy8gcmV0dXJuIHRyYW5zYWN0aW9uIGlkIG9yIG15c3FsIGVycm9yXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RRVUVSWT1uZXcgUmVxPHtxdWVyeTpNeVNxbFF1ZXJ5LHRpZDpudW1iZXJ9LE15c3FsUmVzdWx0Pih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05fQUREX09QRVJBVElPTlwiKTsgLy8gdGlkIG1lYW5zIHRyYW5zYWN0aW9uIGlkXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RDT01NSVQ9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVENPTU1JVFwiKTsgLy8gdGlkXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RST0xMQkFDSz1uZXcgUmVxPG51bWJlcixNeXNxbEVycm9yfG51bGw+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUk9MTEJBQ0tcIik7IC8vIHRpZFxuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVF1ZXJ5ID0gYXN5bmMgKHF1ZXJ5Ok15U3FsUXVlcnl8TXlTcWxRdWVyeVtdKTpQcm9taXNlPE15c3FsUmVzdWx0W10+PT57cmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KX1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFNlcnZpY2VPcHRpb25ze1xuICAgIGNvbm5lY3Rpb25MaW1pdDpudW1iZXIsXG4gICAgaG9zdDpzdHJpbmcsXG4gICAgdXNlcjpzdHJpbmcsXG4gICAgcGFzc3dvcmQ6c3RyaW5nLFxuICAgIHBvcnQ6bnVtYmVyLFxuICAgIGRhdGFiYXNlOnN0cmluZywgIFxuICAgIHF1ZXVlTGltaXQ/Om51bWJlcixcbiAgICB0cmFuc2FjdGlvbkZhaWxSZXBvcnQ/Oih0cng6SVRyYW5zYWN0aW9uLG1lc3NhZ2U6c3RyaW5nKT0+dm9pZCxcbiAgICB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXI/OnN0cmluZyxcbiAgICBkZWJ1Zz86Ym9vbGVhbixcbiAgICBuYXhUcmFuc2FjdGlvbldhaXRUaW1lPzpudW1iZXIsXG5cdG1pZ3JhdGlvbnM/Ontcblx0XHRkaXI6c3RyaW5nLFxuXHRcdGNhbGxiYWNrOigpPT52b2lkXG5cdH18bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsRXJyb3J7XG4gICAgY29kZTogc3RyaW5nLFxuICAgIGVycm5vOiBudW1iZXIsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgbmFtZTpzdHJpbmcsXG4gICAgbWVzc2FnZTpzdHJpbmdcbiAgICBmYXRhbD86Ym9vbGVhbixcbiAgICB0aHJvd2FibGU6Ym9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgaXNNeXNxbEVycm9yPShlOmFueSk6ZSBpcyBNeXNxbEVycm9yPT57XG4gICAgcmV0dXJuIGUuY29kZSE9PXVuZGVmaW5lZCAmJiBlLmVycm5vIT09dW5kZWZpbmVkICYmIGUuc3FsIT09dW5kZWZpbmVkICYmIGUubmFtZSE9PXVuZGVmaW5lZCAmJiBlLm1lc3NhZ2UhPT11bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxSZXN1bHR7XG4gICAgZXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICByb2xsYmFja0Vycm9yPzpNeXNxbEVycm9yfG51bGwsXG4gICAgaXNEdXBsaWNhdGVFcnJvcj86Ym9vbGVhblxuICAgIGRhdGE6YW55XG4gICAgY291bnQ6bnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlTcWxRdWVyeXtcbiAgICBxdWVyeTpzdHJpbmdcbiAgICBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW118TXlzcWxRdWVyeUZpZWxkT2JqZWN0LFxuICAgIHJvbGxiYWNrUXVlcnk/OnN0cmluZ3xudWxsXG4gICAgdHJhbnNhY3Rpb25JRD86bnVtYmVyXG4gICAgdGhyb3dhYmxlPzpib29sZWFuXG4gICAgY2FsY3VsYXRlQ291bnQ/OmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGR7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLFxuICAgIHN5c3RlbT86Ym9vbGVhbixcbiAgICBpZ25vcmVJbkluc2VydD86Ym9vbGVhbixcbiAgICBpZ25vcmVJblVwZGF0ZT86Ym9vbGVhblxuICAgIHVzZUluUmVwbGFjZT86Ym9vbGVhbixcbiAgICBfcGFyc2VkVmFsdWU/OnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zYWN0aW9ue1xuICAgIGlkOm51bWJlclxuICAgIHRpbWVzdGFtcDpudW1iZXIsXG4gICAgY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixcbiAgICBxdWVyaWVzOntzcWw6c3RyaW5nLHN0YXR1czpzdHJpbmd9W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGRPYmplY3QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHx7bmFtZT86c3RyaW5nfG51bGwsdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbixpZ25vcmVJbkluc2VydD86Ym9vbGVhbixpZ25vcmVJblVwZGF0ZT86Ym9vbGVhbix1c2VJblJlcGxhY2U/OmJvb2xlYW59PntcblxufVxuICAgIFxuXG4vKipcbiAqIE15c3FsIFNlcnZpY2VzLCBleGVjdXRlIHF1ZXJpZXNcbiAqIE15U3FsUXVlcnkucXVlcnk6XG4gKiBAZmllbGRzIC0gcmVwbGFjZWQgYnkgZmllbGQncyBuYW1lc1xuICogQHZhbHVlcyAtIHJlcGxhY2VkIGJ5IHBhcnNlZCB2YWx1ZXNcbiAqIEBvbnVwZGF0ZSAtIHJlcGFsY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKiBAb25kdXBsaWNhdGUgLSByZXBsYWNlZCBieSBwYWlyIGZpZWxkIG5hbWUgPSB2YWx1ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBNeXNxbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcblxuICAgIHJlY29ubmVjdGlvblRpbWVvdXQ9MTAwMCozO1xuICAgIHJlY29ubmVjdGluZz1mYWxzZTtcbiAgICBwb29sOm15c3FsLlBvb2x8bnVsbD1udWxsO1xuICAgIG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucztcbiAgICBzZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICB0aW1lb3V0SUQ6YW55XG5cbiAgICBkZWJ1Zz1mYWxzZTtcblxuICAgIHF1ZXJpZXM9W107IC8vIFRPRE86IFNUT1JFIFFVRVJJRVMgU0VOVFMgQkVGT1JFIFRIRSBTRVJWSUNFIElTIFNUQVJURUQhXG4gICAgc3RhdGljIG5leHRUcmFuc2FjdGlvbklEPTE7XG4gICAgdHJhbnNhY3Rpb25zOklUcmFuc2FjdGlvbltdPVtdXG5cbiAgICBtYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gMTAwMCo2MCoxOyAvLyAxIG1pbiBhbmQgZGV0ZWxldGUgdHJhbnNhY3Rpb25cbiAgICBsYXN0U3VjY2Vzc1F1ZXJ5VGltZSA9IDA7XG4gICAgcGluZ0ludGVydmFsID0gMTAwMCo2MCo1OyAvLyBlYWNoIDMwIG9mIGluYWN0aXZpdHkgc2Vjb25kc1xuXG4gICAgZmFpbFJlcG9ydEZpbGVTdHJlYW06ZnMuV3JpdGVTdHJlYW18bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZTpzdHJpbmd8bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZTpudW1iZXI9MDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwibXlzcWxcIik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIFxuXG4gICAgICAgIC8vIGRlY3J5cHQgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmhvc3Quc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmhvc3Quc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudXNlci5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51c2VyID0gZGVjcnlwdCh0aGlzLm9wdGlvbnMudXNlci5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhYmFzZSA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmRhdGFiYXNlLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXNzd29yZCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnBhc3N3b3JkLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLnBhc3N3b3JkXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9IHRydWVcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWUpXG4gICAgICAgICAgICB0aGlzLm1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSB0aGlzLm9wdGlvbnMubmF4VHJhbnNhY3Rpb25XYWl0VGltZTtcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSURzOm51bWJlcltdPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihub3ctaS50aW1lc3RhbXA+dGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJSZWxlYXNlIHRyYW5zYWN0aW9uIGNvbm5lY3Rpb24gZHVlIHRvIHRpbWVvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGksdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJRHMucHVzaChpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+IXJlbW92ZWRJRHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcgJiYgY291bnQtdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW1vdmVkOiBcIixjb3VudC10aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpXG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoRGF0ZS5ub3coKS10aGlzLmxhc3RTdWNjZXNzUXVlcnlUaW1lPnRoaXMucGluZ0ludGVydmFsKXtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5wb29sKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRE8gUElOR1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9MDtpPHRoaXMub3B0aW9ucy5jb25uZWN0aW9uTGltaXQ7aSsrKXtcbiAgICAgICAgICAgICAgICAgICAgUkVRX01ZU1FMX1FVRVJZLnJlcXVlc3Qoe3F1ZXJ5OlwiU0VMRUNUIDEgQE5PTElNSVRcIixmaWVsZHM6W119KVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQaW5nIG15c3FsIG9uIGVhY2ggY29ubmVjdGlvbiBpbiBwb29sXCIpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFxuICAgICAgICB9LDEwMDAqMzApXG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGFmdGVyIDE1IG1pbiBvZiBpbmFjdGl2aXR5LCBjbG9zZSBmaWxlXG4gICAgICAgICAgICBpZihEYXRlLm5vdygpLXRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lPjEwMDAqNjAqMTUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sMTAwMCo2MCo1KVxuXG4gICAgICAgIGlmKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcikpe1xuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj11bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY3JlYXRlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGRpclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGV4ZWN1dGVRdWVyeSAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT57IHJldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSkgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgLy8gc2V0dXAgcHJvY2VzcyBleGl0IGhhbmRsZXJzIGludGVycnVwdCAoY3RybCtjKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgLy8gdGVybWluYXRlIChraWxsKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdURVJNJyxhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgICAgICBsZXQgcG9vbENyZWF0ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlKCFwb29sQ3JlYXRlZCl7XG4gICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgcG9vbENyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgaWYoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMISBSZXRyeWluZyBpbiAzIHNlY29uZHMuLi5cIilcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldFRpbWVvdXQocmVzb2x2ZSwzMDAwKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9RVUVSWS5saXN0ZW5lcj1hc3luYyBkYXRhID0+e1xuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgICAgICAgICAgZGF0YT1bZGF0YV07XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGRhdGEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gTXlzcWxTZXJ2aWNlLnByZXBhcmVRdWVyeShpLnF1ZXJ5LGkuZmllbGRzKTtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZShxdWVyeSxpLnJvbGxiYWNrUXVlcnkgPz8gbnVsbCxpLnRyYW5zYWN0aW9uSUQgPz8gMCxpLnRocm93YWJsZSA/PyBmYWxzZSxpLmNhbGN1bGF0ZUNvdW50ID8/IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJpZXM6IFwiLGRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgaWYoaS5lcnJvciAmJiBpLmVycm9yLmNvZGU9PT1cIkNPTk5fRVJSXCIpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ29ubmVjdGlvbiBlcnJvciwgd2FzIGRlc3Ryb3llZCwgcmVjcmVhdGUgcG9vbFwiKVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKGkuZXJyb3IgJiYgKGkuZXJyb3IuZmF0YWwgfHwgaS5lcnJvci50aHJvd2FibGUpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBpLmVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYoIWkuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Y2Nlc3NRdWVyeVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQkVHSU4ubGlzdGVuZXI9YXN5bmMgKCk9PnsgIFxuICAgICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMucG9vbD8uZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgaWYoIWNvbm4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiTk9fUE9PTFwiLGVycm5vOjEwMDAwMCxmYXRhbDp0cnVlLHNxbDpcIlwiLG5hbWU6XCJOT19QT09MXCIsbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIix0aHJvd2FibGU6ZmFsc2V9XG5cbiAgICAgICAgICAgIC8vIGZpbmQgY29ubiBpbiB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYoaS5jb25uPT09Y29ubil7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJZb3VyIGNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiQ09OTl9JTl9UUlhcIixlcnJubzoxMDAwMDUsZmF0YWw6dHJ1ZSx0aHJvd2FibGU6ZmFsc2Usc3FsOlwiXCIsbmFtZTpcIkNPTk5fSU5fVFJYXCIsbWVzc2FnZTpcIkNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIn1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpZCA9IE15c3FsU2VydmljZS5uZXh0VHJhbnNhY3Rpb25JRCsrO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZ2luIHRyYW5zYWN0aW9uIHdpdGggaWQgXCIsdGlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gYXdhaXQgY29ubi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY29ubi5xdWVyeShcIlNUQVJUIFRSQU5TQUNUSU9OXCIpO1xuICAgICAgICAgICAgICAgIC8vY29uc3QgcmVzID0gYXdhaXQgY29ubi5xdWVyeShcIlNFVCBhdXRvY29tbWl0PTBcIik7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBzdGFydGVkXCIpXG5cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih7aWQ6dGlkLGNvbm46Y29ubix0aW1lc3RhbXA6RGF0ZS5ub3coKSxxdWVyaWVzOlt7c3FsOlwiU1RBUlQgVFJBTlNBQ1RJT05cIixzdGF0dXM6XCJlcnJvclwifV19KVxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDp0aWQsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOkRhdGUubm93KCksXG4gICAgICAgICAgICAgICAgY29ubjpjb25uLFxuICAgICAgICAgICAgICAgIHF1ZXJpZXM6W11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbnMgcG9vbDogXCIsdGhpcy50cmFuc2FjdGlvbnMpXG5cbiAgICAgICAgICAgIHJldHVybiB0aWQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFJFUV9NWVNRTF9UUVVFUlkubGlzdGVuZXI9YXN5bmMgZGF0YT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09ZGF0YS50aWQpO1xuICAgICAgICAgICAgaWYoIXRyeClcbiAgICAgICAgICAgICAgICByZXR1cm4ge2Vycjoge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgIH0sZGF0YTpudWxsLHJvbGxiYWNrRXJyb3I6bnVsbCxjb3VudDowfVxuXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IE15c3FsU2VydmljZS5wcmVwYXJlUXVlcnkoZGF0YS5xdWVyeS5xdWVyeSxkYXRhLnF1ZXJ5LmZpZWxkcyk7XG4gICAgICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgICAgICBsZXQgc3FsRGF0YSA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJ5IG9uIHRyYW5zYWN0aW9uOiBcIix0cnguaWQpXG5cbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBzcWxEYXRhID0gYXdhaXQgdHJ4LmNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgfWNhdGNoKGUpeyBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTt9XG5cbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBpZihlcnIpXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKGRhdGEucXVlcnkuY2FsY3VsYXRlQ291bnQgJiYgcXVlcnkuaW5kZXhPZihcIlNFTEVDVFwiKT09PTApe1xuICAgICAgICAgICAgICAgICAgICBsZXQgY291bnRRdWVyeSA9IHRoaXMucHJlcGFyZUNvdW50UXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdHJ4LmNvbm4ucXVlcnkoY291bnRRdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0ICYmIGNvdW50UXVlcnlSZXN1bHQubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gKGNvdW50UXVlcnlSZXN1bHRbMF0gYXMgYW55KS5jb3VudDsgLy8gdG9kbyA6IGNoZWNrLCBwcm9iYWJseSBub3Qgd29ya2luZyAod3JvbmcgZmllbGQgb3Igc210aClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPlRRVUVSWS0+cXVlcnkgZXJyb3JcIixlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlF1ZXJ5IGV4ZWN1dGlvbiBzdGF0dXM6XCIsZXJyP2Vyci5tZXNzYWdlOlwiY29tcGxldGVkXCIpXG5cbiAgICAgICAgICAgIHRyeC5xdWVyaWVzLnB1c2goe3NxbDpxdWVyeSxzdGF0dXM6ZXJyP2Vyci5tZXNzYWdlOlwiY29tcGxldGVkXCJ9KVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6c3FsRGF0YT9zcWxEYXRhWzBdOm51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6ZXJyLFxuICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1RST0xMQkFDSy5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVENPTU1JVC5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvbW1pdCB0cmFuc2FjdGlvbjpcIix0cnguaWQpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+aS5pZCE9PXRpZCk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBwb29sOlwiLHRoaXMudHJhbnNhY3Rpb25zIClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZXJyID0gYXdhaXQgdGhpcy5jb21taXQodHJ4KTtcblxuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbW1pdCh0cng6SVRyYW5zYWN0aW9uKTpQcm9taXNlPE15c3FsRXJyb3J8bnVsbD57XG4gICAgICAgXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIkNPTU1JVFwiKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVsZWFzZSgpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIH1cblxuICAgIGFzeW5jIHJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4OklUcmFuc2FjdGlvbixkb25Ob3RSZW1vdmU/OmJvb2xlYW4pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIHN0YXJ0ZWRcIix0cnguY29ubi50aHJlYWRJZClcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLnJvbGxiYWNrKCk7XG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5jb21taXQoKTtcbiAgICAgICAgICAgIC8vYXdhaXQgdHJ4LmNvbm4ucXVlcnkoXCJST0xMQkFDS1wiKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgaWYoIWRvbk5vdFJlbW92ZSlcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dHJ4LmlkKTtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSb2xsYmFjayBjb21wbGV0ZVwiLHRyeC5jb25uLnRocmVhZElkKVxuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCByb2xsYmFjayB0cmFuc2FjdGlvblwiLHRyeC5xdWVyaWVzKVxuICAgICAgICAgICAgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeCxcInJvbGxiYWNrXCIpXG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgYXN5bmMgZmluaXNoQXBwKCl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRmluaXNoaW5nIG15c3FsIHNlcnZpY2VcIilcbiAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKVxuICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGkpO1xuXG4gICAgICAgIGlmKHRoaXMucG9vbCl7XG4gICAgICAgICAgICB0cnl7YXdhaXQgdGhpcy5wb29sLmVuZCgpO31jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjbG9zZSBNWVNRTCBwb29sIVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSlcbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW09bnVsbDtcbiAgICB9XG5cbiAgICBwcmVwYXJlQ291bnRRdWVyeShxdWVyeTpzdHJpbmcpOnN0cmluZ3tcbiAgICAgICAgbGV0IGNvdW50UXVlcnkgPSBxdWVyeTtcblxuICAgICAgICAvLyBSRU1PVkUgTElNSVRcbiAgICAgICAgaWYoY291bnRRdWVyeS5pbmRleE9mKFwiTElNSVRcIik9PT0tMSlcbiAgICAgICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZygwLGNvdW50UXVlcnkuaW5kZXhPZihcIkxJTUlUXCIpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJFTU9WRSBPUkRFUiBcbiAgICAgICAgaWYoY291bnRRdWVyeS5pbmRleE9mKFwiT1JERVJcIikhPT0tMSlcbiAgICAgICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZygwLGNvdW50UXVlcnkuaW5kZXhPZihcIk9SREVSXCIpKVxuXG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZyhjb3VudFF1ZXJ5LmluZGV4T2YoXCJGUk9NXCIpKTtcbiAgICAgICAgXG5cbiAgICAgICAgY291bnRRdWVyeSA9IFwiU0VMRUNUIENPVU5UKDEpIGFzIGBjb3VudGAgXCIrY291bnRRdWVyeVxuICAgICAgICByZXR1cm4gY291bnRRdWVyeTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeC5xdWVyaWVzLG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubj8udGhyZWFkSWQpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4/LnRocmVhZElkKVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29ubmVjdGlvbiBub3QgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGlmKCFjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGBObyBjb25uZWN0aW9uIGNyZWF0ZWQhYClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgY2FudCBnZXQgY29ubmVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLy8gRG8gc2VuZCBxdWVyeVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRRdWVyeShjb25uLHF1ZXJ5LHJlc29sdmUscm9sbGJhY2tRdWVyeSx0aHJvd2FibGU/dHJ1ZTpmYWxzZSxjYWxjdWxhdGVDb3VudCk7XG5cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHJlY3JlYXRlIHBvb2wsIGNvbm5lY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBpZihgJHtlfWAuaW5kZXhPZignRUNPTk5SRUZVU0VEJykhPT0tMSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZVBvb2woKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6KGUgJiYgdHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgXCJtZXNzYWdlXCIgaW4gZSBhcyBhbnkpPyhlIGFzIGFueSkubWVzc2FnZTpcIk15c3FsIGNhbnQgZ2V0IGNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2VuZFF1ZXJ5KGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb24scXVlcnk6c3RyaW5nLHJlc29sdmU6KGRhdGE6TXlzcWxSZXN1bHQpPT52b2lkLHJvbGxiYWNrOnN0cmluZ3xudWxsLHRocm93YWJsZTpib29sZWFuLGNhbGN1bGF0ZUNvdW50OmJvb2xlYW4pe1xuICAgICAgICBcblxuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWNhdGNoKGUpe31cbiAgICAgXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMyxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiK2VycixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG5cbiAgICAgICAgICAgICAgICBsZXQgZG9jbG9zZT1mYWxzZVxuICAgICAgICAgICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVyciAmJiBxdWVyeVJlc3VsdC5lcnIubWVzc2FnZSl7XG4gICAgICAgICAgICAgICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVyci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImNhbid0IGFkZCBuZXcgY29tbWFuZCB3aGVuIGNvbm5lY3Rpb24gaXMgaW4gY2xvc2VkIHN0YXRlXCIpIT09LTEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jbG9zZT10cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoZG9jbG9zZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdC5lcnIuY29kZT1cIkNPTk5fRVJSXCI7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cblxuXG5cbiAgICAgICAgICAgIC8vIGRldGVybWluZSBkdXBsaWNhdGUgZXJyb3JcbiAgICAgICAgICAgIGxldCBkdXA9ZmFsc2U7XG4gICAgICAgICAgICBpZihxdWVyeVJlc3VsdC5lcnIgJiYgcXVlcnlSZXN1bHQuZXJyLmNvZGUgJiYgcXVlcnlSZXN1bHQuZXJyLmNvZGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiZXJfZHVwX2VudHJ5XCIpIT09LTEpXG4gICAgICAgICAgICAgICAgZHVwPXRydWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5zZW5kIHF1ZXJ5LT5xdWVyeSBlcnJvclwiLHF1ZXJ5UmVzdWx0LmVycik7XG5cbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOnsuLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBpc0R1cGxpY2F0ZUVycm9yOmR1cCxcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXR1cm47IC8vIFFVRVJZIEVSUk9SLCBSRVRVUk5cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmKGNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4sY291bnRRdWVyeSk7XG4gICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LmVycilcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+c2VuZCBxdWVyeS0+Y291bnQtPnF1ZXJ5IGVycm9yXCIsY291bnRRdWVyeVJlc3VsdC5lcnIpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMgJiYgY291bnRRdWVyeVJlc3VsdC5yZXN1bHRzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHNbMF0uY291bnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICAvLyBjbG9zZSBjb25uIG9uIHN1Y2Nlc3NcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICB9Y2F0Y2goZSl7fVxuXG4gICAgICAgIC8vIGhhbmRsZSBzdWNjZXNzXG4gICAgICAgIGNvbnN0IGVyciA9IG51bGw7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgZXJyb3I6ZXJyLFxuICAgICAgICAgICAgZGF0YTpxdWVyeVJlc3VsdC5yZXN1bHRzLFxuICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8vIEFzeW5jIHF1ZXJ5IHdyYXBwZXIgdG8gY29ubi5xdWVyeVxuICAgIGFzeW5jIHF1ZXJ5QXN5bmMoY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixxdWVyeTpzdHJpbmcpOlByb21pc2U8e2VycjpNeXNxbEVycm9yfG51bGwscmVzdWx0cz86YW55fT57XG5cbiAgICAgICAgbGV0IHJlc3VsdD1udWxsO1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgcmV0dXJuIHtlcnI6dGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycjpudWxsLFxuICAgICAgICAgICAgcmVzdWx0czpyZXN1bHRbMF0sXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZXJyOmFueSx0aHJvd2FibGU/OmJvb2xlYW4pOk15c3FsRXJyb3J7XG4gICAgICAgIGlmKGVyciAmJiAgdHlwZW9mIGVycj09PVwib2JqZWN0XCIgJiYgXCJjb2RlXCIgaW4gZXJyICYmIFwiZXJybm9cIiBpbiBlcnIgJiYgXCJzcWxcIiBpbiBlcnIgJiYgXCJuYW1lXCIgaW4gZXJyICYmIFwibWVzc2FnZVwiIGluIGVycil7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IGVyci5lcnJubyxcbiAgICAgICAgICAgICAgICAgICAgc3FsOiBlcnIuc3FsLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOmVyci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOmVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiUVVFUllfRVJSXCIsXG4gICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMixcbiAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzcWw6IFwibm8gcXVlcnlcIixcbiAgICAgICAgICAgICAgICBuYW1lOlwiUVVFUllfRVJSXCIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTpcIkVycm9yOiBcIisoZXJyKT9lcnI6XCJcIixcbiAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5jb25zdCBzZWNyZXRfa2V5PVwiQUtMV2thanclXiZkZ3dxaHcjOTg0NTNpMjNiZmsyM3JuMmtua25nbHJnamVpdFwiXG5jb25zdCBzZWNyZXRfaXY9XCJydGhhZHJmazIzcm4ya24jKkZOS0FAZ3Q0NGRmM3RzbHJnaiMjIWl0XCJcblxuLy8gR2VuZXJhdGUgc2VjcmV0IGhhc2ggd2l0aCBjcnlwdG8gdG8gdXNlIGZvciBlbmNyeXB0aW9uXG5jb25zdCBrZXkgPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VjcmV0X2tleSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMzIpXG5jb25zdCBpdiA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfaXYpLmRpZ2VzdCgnaGV4Jykuc3Vic3RyaW5nKDAsIDE2KVxuXG5jb25zdCBkZWNyeXB0ID0oZW5jcnlwdGVkOnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ2JpbmFyeScpO1xuICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleSwgaXYpO1xuICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQsICdiaW5hcnknLCAndXRmOCcpO1xuICAgICAgZGVjcnlwdGVkICs9IGRlY2lwaGVyLmZpbmFsKCd1dGY4Jyk7XG4gICAgICByZXR1cm4gZGVjcnlwdGVkO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jb25zdCBlbmNyeXB0ID0gKHR4dDpzdHJpbmcpOnN0cmluZ3xudWxsPT57XG4gIHRyeXtcbiAgICAgIGxldCBlbmNpcGhlciA9IGNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleSwgaXYpLFxuICAgICAgZW5jcnlwdGVkID0gZW5jaXBoZXIudXBkYXRlKHR4dCwgJ3V0ZjgnLCAnYmluYXJ5Jyk7XG4gICAgICBlbmNyeXB0ZWQgKz0gZW5jaXBoZXIuZmluYWwoJ2JpbmFyeScpO1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVuY3J5cHRlZCwgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXlzcWxTZXJ2aWNlOyJdfQ==
|