@cloudbase/auth 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/miniprogram/index.js +1 -1
- package/package.json +5 -5
- package/src/index.ts +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -2469,7 +2469,7 @@ var Auth = (function () {
|
|
|
2469
2469
|
gender: userInfo === null || userInfo === void 0 ? void 0 : userInfo.gender,
|
|
2470
2470
|
locale: userInfo === null || userInfo === void 0 ? void 0 : userInfo.locale,
|
|
2471
2471
|
uid: userInfo.uid,
|
|
2472
|
-
nickName: userInfo.nickName,
|
|
2472
|
+
nickName: userInfo.nickName || (userInfo === null || userInfo === void 0 ? void 0 : userInfo.name),
|
|
2473
2473
|
avatarUrl: userInfo.avatarUrl || userInfo.picture,
|
|
2474
2474
|
location: userInfo.location,
|
|
2475
2475
|
hasPassword: userInfo.hasPassword,
|
|
@@ -2871,4 +2871,4 @@ function registerAuth(app) {
|
|
|
2871
2871
|
}
|
|
2872
2872
|
}
|
|
2873
2873
|
exports.registerAuth = registerAuth;
|
|
2874
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLDBDQVV5QjtBQUN6QixxQ0FBMEM7QUFDMUMseUNBVW9CO0FBQ3BCLGlDQUFxRztBQUNyRyxrREFBNEM7QUFpQzVDLElBQU0sU0FBUyxHQUFHLGNBQU0sT0FBQSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFoRSxDQUFnRSxDQUFBO0FBbUN4RixJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUE7QUFrQjdCLElBQU0sa0JBQWtCLEdBQUcsVUFBQSxRQUFRLElBQUksT0FBQSxVQUFDLE1BQU07SUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsbUJBQW1CLHdCQUFPLE1BQU0sS0FBRSxTQUFTLEVBQUUsZ0NBQXdCLENBQUMsaUJBQWlCLElBQUcsQ0FBQTtBQUNqSCxDQUFDLEVBRnNDLENBRXRDLENBQUE7QUFPRDtJQXVCRSxjQUFZLE9BQXFCO1FBQ3ZCLElBQUEsS0FBSyxHQUFvQixPQUFPLE1BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBSVksNkJBQWMsR0FBM0I7OztnQkFDRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQVcsQ0FBQTtnQkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFXLENBQUE7Z0JBQ3ZELElBQUks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QUNILENBQUM7QUFORCxvQ0FNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZSwgSUNsb3VkYmFzZUNvbmZpZywgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VDYWNoZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY2FjaGUnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VSZXF1ZXN0IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZXF1ZXN0J1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQXV0aENvbmZpZywgSVVzZXIsIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IEF1dGhPcHRpb25zLCBDcmVkZW50aWFscyB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQge1xuICBDbG91ZGJhc2VPQXV0aCxcbiAgQVVUSF9BUElfUFJFRklYLFxuICBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIEVWRU5UUyxcbiAgQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIE9BVVRIX1RZUEUsXG4gIHdlQXBwSnd0RGVjb2RlQWxsLFxuICBBdXRoRXJyb3IsXG4gIGF1dGhNb2RlbHMsXG59IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQgeyB1c2VBdXRoQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcidcbmltcG9ydCB7XG4gIHByaW50V2FybixcbiAgdGhyb3dFcnJvcixcbiAgRVJST1JTLFxuICBDT01NVU5JVFlfU0lURV9VUkwsXG4gIGNhdGNoRXJyb3JzRGVjb3JhdG9yLFxuICBDbG91ZGJhc2VFdmVudEVtaXR0ZXIsXG4gIENsb3VkYmFzZUNhY2hlLFxuICBhZGFwdGVyRm9yV3hNcCxcbiAgdXNlRGVmYXVsdEFkYXB0ZXIsXG59IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgc2F2ZVRvQnJvd3NlclNlc3Npb24sIGdldEJyb3dzZXJTZXNzaW9uLCByZW1vdmVCcm93c2VyU2Vzc2lvbiwgYWRkVXJsU2VhcmNoIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBDb21tb25SZXMsXG4gIERlbGV0ZU1lUmVxLFxuICBHZXRDbGFpbXNSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBHZXRVc2VyUmVzLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIExpbmtJZGVudGl0eVJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgUmVhdXRoZW50aWNhdGVSZXMsXG4gIFJlc2VuZFJlcSxcbiAgUmVzZW5kUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIFNpZ25JbkFub255bW91c2x5UmVxLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgU2lnbkluUmVzLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25VcFJlcyxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJBdHRyaWJ1dGVzLFxuICBVcGRhdGVVc2VyUmVxLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgVmVyaWZ5T0F1dGhSZXEsXG4gIFZlcmlmeU90cFJlcSxcbn0gZnJvbSAnLi90eXBlJ1xuXG5jb25zdCBpc0Jyb3dzZXIgPSAoKSA9PiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG5cbmV4cG9ydCB0eXBlIHtcbiAgU2lnbkluUmVzLFxuICBHZXRVc2VyUmVzLFxuICBDb21tb25SZXMsXG4gIFNpZ25JbldpdGhPdHBSZXMsXG4gIFNpZ25Jbk9BdXRoUmVzLFxuICBHZXRDbGFpbXNSZXMsXG4gIFJlc2V0UGFzc3dvcmRGb3JFbWFpbFJlcyxcbiAgR2V0VXNlcklkZW50aXRpZXNSZXMsXG4gIExpbmtJZGVudGl0eVJlcyxcbiAgUmVhdXRoZW50aWNhdGVSZXMsXG4gIFJlc2VuZFJlcyxcbiAgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXMsXG4gIE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2ssXG4gIFNpZ25JbldpdGhQYXNzd29yZFJlcSxcbiAgU2lnbkluV2l0aElkVG9rZW5SZXEsXG4gIFNpZ25JbldpdGhPQXV0aFJlcSxcbiAgVmVyaWZ5T0F1dGhSZXEsXG4gIFZlcmlmeU90cFJlcSxcbiAgTGlua0lkZW50aXR5UmVxLFxuICBVbmxpbmtJZGVudGl0eVJlcSxcbiAgVXBkYXRlVXNlclJlcSxcbiAgU2lnbkluV2l0aE90cFJlcSxcbiAgUmVzZXRQYXNzd29yZEZvck9sZFJlcSxcbiAgUmVzZW5kUmVxLFxuICBTZXRTZXNzaW9uUmVxLFxuICBEZWxldGVNZVJlcSxcbiAgU2lnblVwUmVzLFxufSBmcm9tICcuL3R5cGUnXG5cbmRlY2xhcmUgY29uc3QgY2xvdWRiYXNlOiBJQ2xvdWRiYXNlXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuY29uc3QgQ09NUE9ORU5UX05BTUUgPSAnYXV0aCdcblxuaW50ZXJmYWNlIFVzZXJJbmZvIHtcbiAgdWlkPzogc3RyaW5nXG4gIGdlbmRlcj86IHN0cmluZ1xuICBwaWN0dXJlPzogc3RyaW5nXG4gIGVtYWlsPzogc3RyaW5nXG4gIGVtYWlsX3ZlcmlmaWVkPzogYm9vbGVhblxuICBwaG9uZV9udW1iZXI/OiBzdHJpbmdcbiAgdXNlcm5hbWU/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgem9uZWluZm8/OiBzdHJpbmdcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHN1Yj86IHN0cmluZ1xuICBjcmVhdGVkX2Zyb20/OiBzdHJpbmdcbn1cblxuY29uc3Qgb25DcmVkZW50aWFsc0Vycm9yID0gZXZlbnRCdXMgPT4gKHBhcmFtcykgPT4ge1xuICBldmVudEJ1cy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IC4uLnBhcmFtcywgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgfSlcbn1cblxuaW50ZXJmYWNlIElVc2VyT3B0aW9ucyB7XG4gIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbn1cblxuZXhwb3J0IGNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XG4gIHB1YmxpYyB1aWQ/OiBzdHJpbmdcbiAgcHVibGljIGdlbmRlcj86IHN0cmluZ1xuICBwdWJsaWMgcGljdHVyZT86IHN0cmluZ1xuICBwdWJsaWMgZW1haWw/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsVmVyaWZpZWQ/OiBib29sZWFuXG4gIHB1YmxpYyBwaG9uZU51bWJlcj86IHN0cmluZ1xuICBwdWJsaWMgdXNlcm5hbWU/OiBzdHJpbmcgLy8g55So5oi35ZCN56ew77yM6ZW/5bqmIDUtMjQg5L2N77yM5pSv5oyB5a2X56ym5Lit6Iux5paH44CB5pWw5a2X44CB54m55q6K5a2X56ym77yI5LuF5pSv5oyBXy3vvInvvIzkuI3mlK/mjIHkuK3mlodcbiAgcHVibGljIG5hbWU/OiBzdHJpbmdcbiAgcHVibGljIHByb3ZpZGVycz86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIHByb3ZpZGVyVXNlcklkPzogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICB9W11cbiAgcHVibGljIGJpcnRoZGF0ZT86IHN0cmluZ1xuICBwdWJsaWMgem9uZWluZm8/OiBzdHJpbmdcbiAgcHVibGljIGxvY2FsZT86IHN0cmluZ1xuICBwdWJsaWMgc3ViPzogc3RyaW5nXG4gIHB1YmxpYyBjcmVhdGVkRnJvbT86IHN0cmluZ1xuXG4gIHByaXZhdGUgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoIC8vIENsb3VkYmFzZU9BdXRoIOexu+Wei1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElVc2VyT3B0aW9ucykge1xuICAgIGNvbnN0IHsgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnNldFVzZXJJbmZvKClcbiAgfVxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxJbmZvKCkge1xuICAgIHRoaXMudWlkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1aWQnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmdlbmRlciA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZ2VuZGVyJykgYXMgc3RyaW5nXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZW1haWwnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3VzZXJuYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5uYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCduYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5iaXJ0aGRhdGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2JpcnRoZGF0ZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuem9uZWluZm8gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3pvbmVpbmZvJykgYXMgc3RyaW5nXG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2xvY2FsZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuc3ViID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdzdWInKSBhcyBzdHJpbmdcbiAgICB0aGlzLmNyZWF0ZWRGcm9tID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdjcmVhdGVkX2Zyb20nKSBhcyBzdHJpbmdcbiAgICB0aGlzLnByb3ZpZGVycyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncHJvdmlkZXJzJykgYXMgYW55XG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lvILmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mb0FzeW5jKCkge1xuICAgIHRoaXMudWlkID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VpZCcpXG4gICAgdGhpcy5nZW5kZXIgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygnZ2VuZGVyJylcbiAgICB0aGlzLnBpY3R1cmUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3BpY3R1cmUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2VtYWlsJylcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygndXNlcm5hbWUnKVxuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOeUqOaIt+S/oeaBr1xuICAgKiBAcGFyYW0gdXNlckluZm9cbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOeUqOaIt+S/oeaBr+S4reaYr+WQpuWMheWQq+mdnuazleWAvCcsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdXBkYXRlKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJQcm9maWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc3QgeyBuYW1lLCBnZW5kZXIsIGF2YXRhclVybCwgcHJvdmluY2UsIGNvdW50cnksIGNpdHkgfSA9IHVzZXJJbmZvXG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRVc2VyUHJvZmlsZSh7IC4uLnVzZXJJbmZvIH0pXG5cbiAgICB0aGlzLnNldExvY2FsVXNlckluZm8obmV3VXNlckluZm8pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51cGRhdGVVc2VyQmFzaWNJbmZvKHsgLi4ucGFyYW1zIH0pXG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDlr4bnoIFcbiAgICogQHBhcmFtIG5ld1Bhc3N3b3JkXG4gICAqIEBwYXJhbSBvbGRQYXNzd29yZFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+abtOaWsOWvhueggeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnVwZGF0ZVBhc3N3b3JkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDMgLSDmlrDlr4bnoIHkuK3mmK/lkKbljIXlkKvpnZ7ms5XlrZfnrKYnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIHVwZGF0ZVBhc3N3b3JkKG5ld1Bhc3N3b3JkOiBzdHJpbmcsIG9sZFBhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlUGFzc3dvcmRCeU9sZCh7XG4gICAgICBvbGRfcGFzc3dvcmQ6IG9sZFBhc3N3b3JkLFxuICAgICAgbmV3X3Bhc3N3b3JkOiBuZXdQYXNzd29yZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOeUqOaIt+WQjVxuICAgKiBAcGFyYW0gdXNlcm5hbWVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDnlKjmiLflkI3lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVVc2VybmFtZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG55So5oi35ZCN5a+G56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1c2VybmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAndXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlKHtcbiAgICAgIHVzZXJuYW1lLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog5Yi35paw5pys5Zyw55So5oi35L+h5oGv44CC5b2T55So5oi35Zyo5YW25LuW5a6i5oi356uv5pu05paw55So5oi35L+h5oGv5LmL5ZCO77yM5Y+v5Lul6LCD55So5q2k5o6l5Y+j5ZCM5q2l5pu05paw5LmL5ZCO55qE5L+h5oGv44CCXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5Yi35paw5pys5Zyw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIucmVmcmVzaCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaChwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5PzogYW55IH0pOiBQcm9taXNlPGF1dGhNb2RlbHMuVXNlckluZm8+IHtcbiAgICBjb25zdCBuZXdVc2VySW5mbyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFVzZXJJbmZvKHBhcmFtcylcbiAgICBpZiAoKG5ld1VzZXJJbmZvIGFzIGFueSkuY29kZSA9PT0gJ0lOVkFMSURfQUNDRVNTX1RPS0VOJykge1xuICAgICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKHt9KVxuICAgICAgdGhyb3cgbmV3VXNlckluZm9cbiAgICB9XG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICAgIHJldHVybiBuZXdVc2VySW5mb1xuICB9XG5cbiAgcHVibGljIGdldExvY2FsVXNlckluZm8oa2V5Pzogc3RyaW5nKTogc3RyaW5nIHwgYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5jYWNoZS5nZXRTdG9yZSh1c2VySW5mb0tleSlcblxuICAgIGlmICgha2V5KSByZXR1cm4gdXNlckluZm8gfHwge31cblxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwdWJsaWMgc2V0TG9jYWxVc2VySW5mbyh1c2VySW5mbzogYW55KSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgdGhpcy5jYWNoZS5zZXRTdG9yZSh1c2VySW5mb0tleSwgdXNlckluZm8pXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldExvY2FsVXNlckluZm9Bc3luYyhrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNhY2hlLmdldFN0b3JlQXN5bmModXNlckluZm9LZXkpXG4gICAgcmV0dXJuIHVzZXJJbmZvW2tleV1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlckluZm8oKSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNhY2hlLmdldFN0b3JlKHVzZXJJbmZvS2V5KVxuICAgIDtbXG4gICAgICAndWlkJyxcbiAgICAgICdlbWFpbCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnZ2VuZGVyJyxcbiAgICAgICdwaWN0dXJlJyxcbiAgICAgICdlbWFpbF92ZXJpZmllZCcsXG4gICAgICAncGhvbmVfbnVtYmVyJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ3pvbmVpbmZvJyxcbiAgICAgICdsb2NhbGUnLFxuICAgICAgJ3N1YicsXG4gICAgICAnY3JlYXRlZF9mcm9tJyxcbiAgICAgICdwcm92aWRlcnMnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgICdjcmVhdGVkX2F0JyxcbiAgICBdLmZvckVhY2goKGluZm9LZXkpID0+IHtcbiAgICAgIHRoaXNbaW5mb0tleV0gPSB1c2VySW5mb1tpbmZvS2V5XVxuICAgIH0pXG4gIH1cbn1cbmludGVyZmFjZSBJTG9naW5TdGF0ZU9wdGlvbnMgZXh0ZW5kcyBJVXNlck9wdGlvbnMge1xuICBlbnZJZDogc3RyaW5nXG59XG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSBpbXBsZW1lbnRzIElMb2dpblN0YXRlIHtcbiAgcHVibGljIHVzZXI6IFVzZXJcbiAgcHVibGljIG9hdXRoTG9naW5TdGF0ZTogYW55XG5cbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aFxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJTG9naW5TdGF0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGVudklkLCBjYWNoZSwgb2F1dGhJbnN0YW5jZSB9ID0gb3B0aW9uc1xuICAgIGlmICghZW52SWQpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAnZW52SWQgaXMgbm90IGRlZmluZWQnKVxuICAgIH1cbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcih7XG4gICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgIG9hdXRoSW5zdGFuY2UsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0xvY2FsU3RhdGUoKSB7XG4gICAgdGhpcy5vYXV0aExvZ2luU3RhdGUgPSB0aGlzLm9hdXRoSW5zdGFuY2U/LmF1dGhBcGkuaGFzTG9naW5TdGF0ZVN5bmMoKVxuICAgIHRoaXMudXNlci5jaGVja0xvY2FsSW5mbygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbFN0YXRlQXN5bmMoKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIGF3YWl0IHRoaXMudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgfVxufVxuXG5jbGFzcyBBdXRoIHtcbiAgcmVhZG9ubHkgY29uZmlnOiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1xuICBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aFxuICByZWFkb25seSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIHByaXZhdGUgbGlzdGVuZXJzOiBNYXA8c3RyaW5nLCBTZXQ8T25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjaz4+ID0gbmV3IE1hcCgpXG4gIHByaXZhdGUgaGFzTGlzdGVuZXJTZXRVcCA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJQ2xvdWRiYXNlQXV0aENvbmZpZyAmIHtcbiAgICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gICAgcmVxdWVzdD86IElDbG91ZGJhc2VSZXF1ZXN0XG4gICAgcnVudGltZT86IHN0cmluZ1xuICB9LCkge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gY29uZmlnLm9hdXRoSW5zdGFuY2VcbiAgICB0aGlzLmNhY2hlID0gY29uZmlnLmNhY2hlXG4gICAgdGhpcy5pbml0KClcbiAgICB0aGlzLnNldEFjY2Vzc0tleSgpXG4gIH1cblxuICAvKipcbiAgICog57uR5a6a5omL5py65Y+3XG4gICAqIEBwYXJhbSBwaG9uZU51bWJlclxuICAgKiBAcGFyYW0gcGhvbmVDb2RlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a5omL5py65Y+35aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kUGhvbmVOdW1iZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huefreS/oemqjOivgeeggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZFBob25lTnVtYmVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kUGhvbmVSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmVkaXRDb250YWN0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDop6Pnu5HkuInmlrnnu5HlrppcbiAgICogQHBhcmFtIGxvZ2luVHlwZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+ino+mZpOS4ieaWuee7keWumuWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudW5iaW5kUHJvdmlkZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjei0puaIt+aYr+WQpuW3sue7j+S4juatpOeZu+W9leaWueW8j+ino+e7kScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdW5iaW5kUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlVuYmluZFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51bmJpbmRQcm92aWRlcihwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw6YKu566x5Zyw5Z2AXG4gICAqIEBwYXJhbSBlbWFpbFxuICAgKiBAcGFyYW0gc3Vkb190b2tlblxuICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uX3Rva2VuXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a6YKu566x5Zyw5Z2A5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kRW1haWwoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6humCrueuseWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYmluZEVtYWlsKHBhcmFtczogYXV0aE1vZGVscy5CaW5kRW1haWxSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmVkaXRDb250YWN0KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiB2ZXJpZnlcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlZlcmlmeVJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfpqozor4HnoIHpqozor4HlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnZlcmlmeSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5KHBhcmFtczogYXV0aE1vZGVscy5WZXJpZnlSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlZlcmlmeVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W6aqM6K+B56CBXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBVc2VyXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W6aqM6K+B56CB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRWZXJpZmljYXRpb24oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huaJi+acuumqjOivgeeggS/pgq7nrrHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFZlcmlmaWNhdGlvbihcbiAgICBwYXJhbXM6IGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVxdWVzdCxcbiAgICBvcHRpb25zPzogeyB3aXRoQ2FwdGNoYTogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcywgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5ZCM5q2lXG4gICAqL1xuICBnZXQgY3VycmVudFVzZXIoKSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgLy8gYXN5bmMgc3RvcmFnZeeahOW5s+WPsOiwg+eUqOatpEFQSeaPkOekulxuICAgICAgcHJpbnRXYXJuKFxuICAgICAgICBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICAgICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRDdXJyZW50VXNlciBpbnN0ZWFkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSB0aGlzLmhhc0xvZ2luU3RhdGUoKVxuXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIHJldHVybiBsb2dpblN0YXRlLnVzZXIgfHwgbnVsbFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjeeZu+W9leeahOeUqOaIt+S/oeaBry3lvILmraVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldEN1cnJlbnRVc2VyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPChhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikgfCBudWxsPiB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IHVzZXJJbmZvID0gbG9naW5TdGF0ZS51c2VyLmdldExvY2FsVXNlckluZm8oKSBhcyBhdXRoTW9kZWxzLlVzZXJJbmZvXG4gICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gICAgICByZXR1cm4geyAuLi5sb2dpblN0YXRlLnVzZXIsIC4uLnVzZXJJbmZvIH0gYXMgdW5rbm93biBhcyBhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPlxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOWMv+WQjeeZu+W9lVxuICAvLyAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgLy8gICogQG1lbWJlcm9mIEF1dGhcbiAgLy8gICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfljL/lkI3nmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KGRhdGE6IHtcbiAgLy8gICBwcm92aWRlcl90b2tlbj86IHN0cmluZ1xuICAvLyB9ID0ge30sKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KGRhdGEpXG4gIC8vIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo/ljL/lkI3nmbvlvZXlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHlJbld4KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseUluV3goe1xuICAgIHVzZVd4Q2xvdWQsXG4gIH06IHtcbiAgICB1c2VXeENsb3VkPzogYm9vbGVhblxuICB9ID0ge30pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KFxuICAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSh1bmRlZmluZWQsIHsgYXN5bmNSZWZyZXNoVXNlcjogdHJ1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+e7keWumk9wZW5JRFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo/nu5HlrppPcGVuSUTlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuYmluZE9wZW5JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZE9wZW5JZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdvcGVuX2lkJyxcbiAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB3eC5sb2dpbih7XG4gICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZVcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFVuaW9uSWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVbmlvbklkKCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gd3hJbmZvPy5hcHBJZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ3VuaW9uX2lkJyxcbiAgICAgICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbiB9ID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgaWYgKCFwcm92aWRlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVySWQsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChzaWduSW5SZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9le+8jOebruWJjeWPquaUr+aMgeWFqOaJmOeuoeaJi+acuuWPt+aOiOadg+eZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICflsI/nqIvluo/miYvmnLrlj7fmjojmnYPnmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo/miYvmnLrlj7fmjojmnYPnmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFBob25lQXV0aCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFBob25lQXV0aCh7IHBob25lQ29kZSA9ICcnIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAvLyAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAvLyAgIH1cbiAgLy8gICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuICAvLyAgIGNvbnN0IHByb3ZpZGVySW5mbyA9IHtcbiAgLy8gICAgIHByb3ZpZGVyX3BhcmFtczogeyBwcm92aWRlcl9jb2RlX3R5cGU6ICdwaG9uZScgfSxcbiAgLy8gICAgIHByb3ZpZGVyX2lkOiB3eEluZm8uYXBwSWQsXG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCB3eC5sb2dpbigpXG4gIC8vICAgOyhwcm92aWRlckluZm8gYXMgYW55KS5wcm92aWRlcl9jb2RlID0gY29kZVxuXG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIGxldCBwcm92aWRlclRva2VuID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHByb3ZpZGVySW5mbylcbiAgLy8gICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgLy8gICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAvLyAgICAgfVxuXG4gIC8vICAgICBwcm92aWRlclRva2VuID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHtcbiAgLy8gICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4ucHJvdmlkZXJfdG9rZW4sXG4gIC8vICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8uYXBwSWQsXG4gIC8vICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAvLyAgICAgICAgIGNvZGU6IHBob25lQ29kZSxcbiAgLy8gICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdwaG9uZScsXG4gIC8vICAgICAgIH0sXG4gIC8vICAgICB9KVxuICAvLyAgICAgaWYgKHByb3ZpZGVyVG9rZW4uZXJyb3JfY29kZSkge1xuICAvLyAgICAgICB0aHJvdyBwcm92aWRlclRva2VuXG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcih7XG4gIC8vICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLnByb3ZpZGVyX3Rva2VuLFxuICAvLyAgICAgfSlcblxuICAvLyAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAvLyAgICAgICB0aHJvdyBzaWduSW5SZXNcbiAgLy8gICAgIH1cbiAgLy8gICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgdGhyb3cgZXJyb3JcbiAgLy8gICB9XG5cbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo/nn63kv6Hpqozor4HnoIHnmbvpmYZcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn55+t5L+h6aqM6K+B56CB55m76ZmGJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqP55+t5L+h6aqM6K+B56CB55m76ZmGJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhTbXMoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhTbXMoe1xuICAgIHZlcmlmaWNhdGlvbkluZm8gPSB7IHZlcmlmaWNhdGlvbl9pZDogJycsIGlzX3VzZXI6IGZhbHNlIH0sXG4gICAgdmVyaWZpY2F0aW9uQ29kZSA9ICcnLFxuICAgIHBob25lTnVtID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgdmVyaWZpY2F0aW9uSW5mbyxcbiAgICAgICAgdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgICAgYmluZEluZm8sXG4gICAgICAgIHVzZXJuYW1lOiBwaG9uZU51bSxcbiAgICAgICAgbG9naW5UeXBlOiAnc21zJyxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOmCrueusemqjOivgeeggeeZu+mZhlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfpgq7nrrHpqozor4HnoIHnmbvpmYYnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobpgq7nrrHnmbvpmYYnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aEVtYWlsKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoRW1haWwoe1xuICAgIHZlcmlmaWNhdGlvbkluZm8gPSB7IHZlcmlmaWNhdGlvbl9pZDogJycsIGlzX3VzZXI6IGZhbHNlIH0sXG4gICAgdmVyaWZpY2F0aW9uQ29kZSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICAgIGVtYWlsID0gJycsXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgdmVyaWZpY2F0aW9uSW5mbyxcbiAgICAgICAgdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgICAgYmluZEluZm8sXG4gICAgICAgIHVzZXJuYW1lOiBlbWFpbCxcbiAgICAgICAgbG9naW5UeXBlOiAnZW1haWwnLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6K6+572u6I635Y+W6Ieq5a6a5LmJ55m75b2VIHRpY2tldCDlh73mlbBcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkdldEN1c3RvbVNpZ25UaWNrZXRGbn0gZ2V0VGlja0ZuXG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuOiBhdXRoTW9kZWxzLkdldEN1c3RvbVNpZ25UaWNrZXRGbik6IHZvaWQge1xuICAgIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbilcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfoh6rlrprkuYnnmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoboh6rlrprkuYnnmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICAnICAzIC0gdGlja2V0IOaYr+WQpuW9kuWxnuS6juW9k+WJjeeOr+WigycsXG4gIC8vICAgICAnICA0IC0g5Yib5bu6IHRpY2tldCDnmoToh6rlrprkuYnnmbvlvZXnp4HpkqXmmK/lkKbov4fmnJ8nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQoKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpXG4gIC8vICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNpZ25JblJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW4ocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JblJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW4ocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduVXBSZXF1ZXN0fSBwYXJhbXNcbiAgLy8gICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gIC8vICAqIEBtZW1iZXJvZiBBdXRoXG4gIC8vICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn5rOo5YaM5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5oyH5a6a55m75b2V5pa55byPJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25VcCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnblVwKHBhcmFtczogYXV0aE1vZGVscy5TaWduVXBSZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAocGFyYW1zKVxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruWvhueggVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2V0UGFzc3dvcmRSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5qOA5rWL55So5oi35ZCN5piv5ZCm5bey57uP5Y2g55SoXG4gICAqIEBwYXJhbSB1c2VybmFtZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+aYr+WQpuiiq+WNoOeUqOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuaXNVc2VybmFtZVJlZ2lzdGVyZWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGlzVXNlcm5hbWVSZWdpc3RlcmVkKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICd1c2VybmFtZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBjb25zdCB7IGV4aXN0IH0gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5jaGVja0lmVXNlckV4aXN0KHsgdXNlcm5hbWUgfSlcbiAgICByZXR1cm4gZXhpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnmbvlvZXmgIEt5ZCM5q2lXG4gICAqL1xuICBwdWJsaWMgaGFzTG9naW5TdGF0ZSgpOiBMb2dpblN0YXRlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2FjaGUubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgLy8gYXN5bmMgc3RvcmFnZeeahOW5s+WPsOiwg+eUqOatpEFQSeaPkOekulxuICAgICAgcHJpbnRXYXJuKFxuICAgICAgICBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICAgICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRMb2dpblN0YXRlIGluc3RlYWQnLFxuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICBpZiAob2F1dGhMb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBsb2dpblN0YXRlXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeW8guatpVxuICAgKiDmraRBUEnkuLrlhbzlrrnlvILmraVzdG9yYWdl55qE5bmz5Y+wXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W5pys5Zyw55m75b2V5oCB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRMb2dpblN0YXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCkge1xuICAgIGxldCBvYXV0aExvZ2luU3RhdGUgPSBudWxsXG5cbiAgICB0cnkge1xuICAgICAgb2F1dGhMb2dpblN0YXRlID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0TG9naW5TdGF0ZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5piv5ZCm5bey55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLmdldFVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VySW5mbygpOiBQcm9taXNlPChhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKVxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluW+ruaQreaPkuS7tueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRXZWRhVXNlckluZm8oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFdlZGFVc2VySW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRXZWRhVXNlckluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KSB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIGF3YWl0IChsb2dpblN0YXRlLnVzZXIgYXMgVXNlcikudXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqXG4gICAqIGdldEF1dGhIZWFkZXIg5YW85a655aSE55CGXG4gICAqIOi/lOWbnuepuuWvueixoVxuICAgKi9cbiAgcHVibGljIGdldEF1dGhIZWFkZXIoKToge30ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0F1dGguZ2V0QXV0aEhlYWRlciBBUEkg5bey5bqf5byDJylcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIC8qKlxuICAgKiDkuLrlt7LmnInotKbmiLfnu5HnrKzkuInmlrnotKbmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a56ys5LiJ5pa555m75b2V5pa55byP5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kV2l0aFByb3ZpZGVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDmraTotKbmiLfmmK/lkKblt7Lnu4/nu5HlrprmraTnrKzkuInmlrknLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOafpeivoueUqOaIt1xuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3R9IGFwcGVuZGVkX3BhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJQcm9maWxlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeVVzZXIocXVlcnlPYmo6IGF1dGhNb2RlbHMuUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuUXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnF1ZXJ5VXNlclByb2ZpbGUocXVlcnlPYmopXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgY29uc3Qgb2F1dGhBY2Nlc3NUb2tlblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuZ2V0QWNjZXNzVG9rZW4oKVxuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NUb2tlbjogb2F1dGhBY2Nlc3NUb2tlblJlcyxcbiAgICAgIGVudjogdGhpcy5jb25maWcuZW52LFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGF0Y2hQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5QYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5QYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5wYXRjaFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFdlY2hhdChwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFdlY2hhdChwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuR3JhbnRUb2tlblJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFRva2VuKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtczogYXV0aE1vZGVscy5HZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc2V0UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLlJlc2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlc2V0UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRldmljZUF1dGhvcml6ZShwYXJhbXM6IGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5EZXZpY2VBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZXZpY2VBdXRob3JpemUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHN1ZG8ocGFyYW1zOiBhdXRoTW9kZWxzLlN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlN1ZG9SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zdWRvKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVNZShwYXJhbXM6IGF1dGhNb2RlbHMuV2l0aFN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmRlbGV0ZU1lKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlcnMoKTogUHJvbWlzZTxhdXRoTW9kZWxzLlByb3ZpZGVyc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVycygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpblNjb3BlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2dpbkdyb3VwcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmxvZ2luR3JvdXBzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkxvZ2luU3RhdGVDaGFuZ2VkKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5vbihFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgLy8gZ2V0TG9naW5TdGF0ZeS8mumHjeWkjeinpuWPkWdldENyZWRlbnRpYWxz77yM5a+86Ie05q275b6q546v77yM5omA5LulZ2V0Q3JlZGVudGlhbHPlh7rplJnkuI3lho3lh7rlj5FnZXRMb2dpblN0YXRlXG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gcGFyYW1zPy5kYXRhPy5ldmVudFR5cGUgIT09IExPR0lOX1NUQVRFX0NIQU5HRURfVFlQRS5DUkVERU5USUFMU19FUlJPUiA/IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpIDoge31cbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgeyAuLi5wYXJhbXMsIC4uLmxvZ2luU3RhdGUgfSlcbiAgICB9KVxuICAgIC8vIOeri+WIu+aJp+ihjOS4gOasoeWbnuiwg1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgbG9naW5TdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlvLrliLbliLfmlrB0b2tlblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuRm9yY2UocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucmVmcmVzaFRva2VuRm9yY2UocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlui6q+S7veS/oeaBr1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0Q3JlZGVudGlhbHMoKVxuICB9XG4gIC8qKlxuICAgKiDlhpnlhaXouqvku73kv6Hmga9cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpIHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlui6q+S7vea6kOexu+WeiycsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0UHJvdmlkZXJTdWJUeXBlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlclN1YlR5cGUoKTogUHJvbWlzZTxhdXRoTW9kZWxzLlByb3ZpZGVyU3ViVHlwZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlclN1YlR5cGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNhcHRjaGFEYXRhKHBhcmFtczogeyBzdGF0ZTogc3RyaW5nOyByZWRpcmVjdF91cmk/OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5jcmVhdGVDYXB0Y2hhRGF0YShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdmVyaWZ5Q2FwdGNoYURhdGEocGFyYW1zOiB7IHRva2VuOiBzdHJpbmc7IGtleTogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5Q2FwdGNoYURhdGEocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtUXJDb2RlKHBhcmFtczogYXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0TWluaVByb2dyYW1Db2RlKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXM6IGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubW9kaWZ5UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFVzZXJCZWhhdmlvckxvZyhwYXJhbXM6IGF1dGhNb2RlbHMuR2V0VXNlckJlaGF2aW9yTG9nKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldFVzZXJCZWhhdmlvckxvZ1Jlcz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIHNtcy9lbWFpbCDpqozor4HnoIHnmbvlvZUv5rOo5YaM77yM6YC76L6R5LiA6Ie05pS25pWbXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICB1c2VybmFtZTogcmF3VXNlcm5hbWUgPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgICBsb2dpblR5cGUgPSAnJyxcbiAgfToge1xuICAgIHZlcmlmaWNhdGlvbkluZm8/OiBhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlXG4gICAgdmVyaWZpY2F0aW9uQ29kZT86IHN0cmluZ1xuICAgIHVzZXJuYW1lPzogc3RyaW5nXG4gICAgYmluZEluZm8/OiBhbnlcbiAgICBsb2dpblR5cGU/OiBzdHJpbmdcbiAgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyAxLiDpqozor4Hpqozor4HnoIFcbiAgICAgIGNvbnN0IHZlcmlmeVJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgfSlcblxuICAgICAgaWYgKCh2ZXJpZnlSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICB0aHJvdyB2ZXJpZnlSZXNcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgY29uc3QgeyB2ZXJpZmljYXRpb25fdG9rZW4gfSA9IHZlcmlmeVJlc1xuXG4gICAgICAvLyDmiYvmnLrnmbvlvZXlj4LmlbBcbiAgICAgIGxldCB1c2VybmFtZSA9IC9eXFwrXFxkezEsM31cXHMrLy50ZXN0KHJhd1VzZXJuYW1lKSA/IHJhd1VzZXJuYW1lIDogYCs4NiAke3Jhd1VzZXJuYW1lfWBcbiAgICAgIGxldCBzaWduVXBQYXJhbTogYW55ID0geyBwaG9uZV9udW1iZXI6IHVzZXJuYW1lIH1cblxuICAgICAgLy8g6YKu566x55m75b2V5Y+C5pWwXG4gICAgICBpZiAobG9naW5UeXBlID09PSAnZW1haWwnKSB7XG4gICAgICAgIHVzZXJuYW1lID0gcmF3VXNlcm5hbWVcbiAgICAgICAgc2lnblVwUGFyYW0gPSB7IGVtYWlsOiB1c2VybmFtZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIOagueaNruaYr+WQpuW3sue7j+aYr+eUqOaIt++8jOWIhuWIq+i1sOeZu+W9leaIluazqOWGjOmAu+i+kVxuICAgICAgaWYgKHZlcmlmaWNhdGlvbkluZm8uaXNfdXNlcikge1xuICAgICAgICAvLyDnp4HmnInljJbnjq/looPmiJbogIXoh6rlrprkuYnlupTnlKjotbB2MeeJiOacrOeahOiAgemAu+i+kVxuICAgICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW4oe1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgc2lnbkluUmVzXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmluZEluZm8pIHtcbiAgICAgICAgICBjb25zdCBiaW5kUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuYmluZFdpdGhQcm92aWRlcih7XG4gICAgICAgICAgICBwcm92aWRlcl90b2tlbjogKGJpbmRJbmZvIGFzIGFueSk/LnByb3ZpZGVyVG9rZW4sXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmICgoYmluZFJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBiaW5kUmVzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDoh6rlrprkuYnlupTnlKjotbBzaWduVXDpgLvovpFcbiAgICAgICAgY29uc3Qgc2lnblVwUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHtcbiAgICAgICAgICAuLi5zaWduVXBQYXJhbSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgcHJvdmlkZXJfdG9rZW46IChiaW5kSW5mbyBhcyBhbnkpPy5wcm92aWRlcklkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgoc2lnblVwUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBzaWduVXBSZXNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVMb2dpblN0YXRlKFxuICAgIHBhcmFtcz86IHsgdmVyc2lvbj86IHN0cmluZzsgcXVlcnk/OiBhbnkgfSxcbiAgICBvcHRpb25zPzogeyBhc3luY1JlZnJlc2hVc2VyPzogYm9vbGVhbjsgdXNlckluZm8/OiBhbnkgfSxcbiAgKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICB9KVxuXG4gICAgYXdhaXQgbG9naW5TdGF0ZS5jaGVja0xvY2FsU3RhdGVBc3luYygpXG5cbiAgICBpZiAob3B0aW9ucz8udXNlckluZm8pIHtcbiAgICAgIGxvZ2luU3RhdGUudXNlci5zZXRMb2NhbFVzZXJJbmZvKG9wdGlvbnMudXNlckluZm8pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRpb25zPy5hc3luY1JlZnJlc2hVc2VyKSB7XG4gICAgICAgIGxvZ2luU3RhdGUudXNlci5yZWZyZXNoKHBhcmFtcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGxvZ2luU3RhdGUudXNlci5yZWZyZXNoKHBhcmFtcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyBldmVudFR5cGU6IExPR0lOX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdOX0lOIH0pXG5cbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfSU4gfSlcbiAgICByZXR1cm4gbG9naW5TdGF0ZVxuICB9XG5cbiAgYXN5bmMgc2V0QWNjZXNzS2V5KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5hY2Nlc3NLZXkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoe1xuICAgICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5jb25maWcuYWNjZXNzS2V5LFxuICAgICAgICAgIHRva2VuX3R5cGU6ICdCZWFyZXInLFxuICAgICAgICAgIHNjb3BlOiAnYWNjZXNzS2V5JyxcbiAgICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZSgrbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpKSxcbiAgICAgICAgICBleHBpcmVzX2luOiArbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdhY2Nlc3NLZXkgZXJyb3I6ICcsIGVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT0gbmV3IGF1dGggYXBpIG1ldGhvZHMgbWVyZ2VkIGJlbG93ID09PT09PT09PT1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbmFub255bW91c2x5XG4gICAqIFNpZ24gaW4gYSB1c2VyIGFub255bW91c2x5LlxuICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBhdXRoLnNpZ25JbkFub255bW91c2x5KCk7XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkocGFyYW1zOiBTaWduSW5Bbm9ueW1vdXNseVJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KHBhcmFtcylcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ251cFxuICAgKiBTaWduIHVwIGEgbmV3IHVzZXIgd2l0aCBlbWFpbCBvciBwaG9uZSB1c2luZyBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLiBJZiB0aGUgYWNjb3VudCBub3QgZXhpc3QsIGEgbmV3IGFjY291bnQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnblVwUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnblVwKHBhcmFtczogYXV0aE1vZGVscy5TaWduVXBSZXF1ZXN0ICYgeyBwaG9uZT86IHN0cmluZyB9KTogUHJvbWlzZTxTaWduVXBSZXM+IHtcbiAgICBpZiAocGFyYW1zLnBob25lX251bWJlciB8fCBwYXJhbXMudmVyaWZpY2F0aW9uX2NvZGUgfHwgcGFyYW1zLnZlcmlmaWNhdGlvbl90b2tlbiB8fCBwYXJhbXMucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKCkgYXMgYW55XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcy5lbWFpbCA/IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9LClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B55+t5L+h6aqM6K+B56CBXG4gICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuUmVzID0gYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogbWVzc2FnZUlkIHx8IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAvLyDnrKzlm5vmraXvvJrms6jlhozlubbnmbvlvZXmiJbnm7TmjqXnmbvlvZVcbiAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35bey57uP5a2Y5Zyo77yM55u05o6l55m75b2VXG4gICAgICAgICAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICAgICAgICAgICAgICB1c2VybmFtZTogcGFyYW1zLmVtYWlsIHx8IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM5rOo5YaM55So5oi3XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSlcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5lbWFpbFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBob25lXG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAgIC4uLihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSksXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbm91dFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRoLnNpZ25PdXQoKTtcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgc2lnbk91dChwYXJhbXM/OiBhdXRoTW9kZWxzLlNpZ25vdXRSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5TaWdub3V0UmVzcG9uc2UgJiB7IGRhdGE6IE9iamVjdDsgZXJyb3I6IEF1dGhFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbk91dChwYXJhbXMpXG4gICAgICBhd2FpdCB0aGlzLmNhY2hlLnJlbW92ZVN0b3JlQXN5bmModXNlckluZm9LZXkpXG4gICAgICB0aGlzLnNldEFjY2Vzc0tleSgpXG5cbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05fT1VUIH0pXG5cbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9PVVQgfSlcblxuICAgICAgLy8gcmVz6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAgIHJldHVybiB7IC4uLnJlcywgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1vbmF1dGhzdGF0ZWNoYW5nZVxuICAgKiBSZWNlaXZlIGEgbm90aWZpY2F0aW9uIGV2ZXJ5IHRpbWUgYW4gYXV0aCBldmVudCBoYXBwZW5zLlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHJldHVybnMgUHJvbWlzZTx7IGRhdGE6IHsgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfSwgZXJyb3I6IEVycm9yIHwgbnVsbCB9PlxuICAgKi9cbiAgb25BdXRoU3RhdGVDaGFuZ2UoY2FsbGJhY2s6IE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJTZXRVcCkge1xuICAgICAgdGhpcy5zZXR1cExpc3RlbmVycygpXG4gICAgICB0aGlzLmhhc0xpc3RlbmVyU2V0VXAgPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KVxuXG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZXQoaWQsIG5ldyBTZXQoKSlcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVycy5nZXQoaWQpIS5hZGQoY2FsbGJhY2spXG5cbiAgICAvLyDov5Tlm54gU3Vic2NyaXB0aW9uIOWvueixoVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgIGlkLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzLmxpc3RlbmVycy5nZXQoaWQpXG4gICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrKVxuICAgICAgICAgIGlmIChjYWxsYmFja3Muc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGlkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogeyBzdWJzY3JpcHRpb24gfSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbndpdGhwYXNzd29yZFxuICAgKiBMb2cgaW4gYW4gZXhpc3RpbmcgdXNlciB3aXRoIGFuIGVtYWlsIGFuZCBwYXNzd29yZCBvciBwaG9uZSBhbmQgcGFzc3dvcmQgb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aFBhc3N3b3JkKHBhcmFtczogU2lnbkluV2l0aFBhc3N3b3JkUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadXNlcm5hbWUvZW1haWwvcGhvbmXkuInpgInkuIDvvIxwYXNzd29yZOW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUoXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgW1sndXNlcm5hbWUnXSwgWydlbWFpbCddLCBbJ3Bob25lJ11dLFxuICAgICAgICAnWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgdXNlcm5hbWUsIGVtYWlsLCBvciBwaG9uZScsXG4gICAgICApXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwYXNzd29yZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW4oe1xuICAgICAgICB1c2VybmFtZTogcGFyYW1zLnVzZXJuYW1lIHx8IHBhcmFtcy5lbWFpbCB8fCB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSksXG4gICAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3dvcmQsXG4gICAgICAgIC4uLihwYXJhbXMuaXNfZW5jcnlwdCA/IHsgaXNFbmNyeXB0OiB0cnVlLCB2ZXJzaW9uOiAndjInIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aGlkdG9rZW5cbiAgICog56ys5LiJ5pa55bmz5Y+w55m75b2V44CC5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM5Lya5qC55o2u5LqR5byA5Y+R5bmz5Y+wLeeZu+W9leaWueW8j+S4reWvueW6lOi6q+S7vea6kOeahOeZu+W9leaooeW8j+mFjee9ru+8jOWIpOaWreaYr+WQpuiHquWKqOazqOWGjFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aElkVG9rZW4ocGFyYW1zOiBTaWduSW5XaXRoSWRUb2tlblJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnRva2Vu5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICB0b2tlbjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Rva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcGFyYW1zLnRva2VuLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbndpdGhvdHBcbiAgICogTG9nIGluIGEgdXNlciB1c2luZyBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluV2l0aE90cFJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPdHAocGFyYW1zOiBTaWduSW5XaXRoT3RwUmVxKTogUHJvbWlzZTxTaWduSW5XaXRoT3RwUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmVtYWls5oiWcGhvbmXlv4XloavlhbbkuIBcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKHBhcmFtcywgW1snZW1haWwnXSwgWydwaG9uZSddXSwgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlcicpXG5cbiAgICAgIC8vIOesrOS4gOatpe+8muWPkemAgemqjOivgeeggeW5tuWtmOWCqCB2ZXJpZmljYXRpb25JbmZvXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24ocGFyYW1zLmVtYWlsID8geyBlbWFpbDogcGFyYW1zLmVtYWlsIH0gOiB7IHBob25lX251bWJlcjogdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIH0sKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICBzZXNzaW9uOiBudWxsLFxuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4gdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqoznrKzkuInmlrnlubPlj7DmjojmnYPnmbvlvZXlm57osINcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHZlcmlmeU9BdXRoKHBhcmFtcz86IFZlcmlmeU9BdXRoUmVxKTogUHJvbWlzZTxTaWduSW5SZXMgfCBMaW5rSWRlbnRpdHlSZXM+IHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7fVxuICAgIHRyeSB7XG4gICAgICAvLyDlm57osIPoh7MgcHJvdmlkZXJfcmVkaXJlY3RfdXJpIOWcsOWdgO+8iHVybCBxdWVyeeS4reaQuuW4piDmjojmnYNjb2Rl77yMc3RhdGXnrYnlj4LmlbDvvInvvIzmraTml7bmo4Dmn6Ugc3RhdGUg5piv5ZCm56ym5ZCI6aKE5pyf77yI5aaCIOiHquW3seiuvue9rueahCB3eF9vcGVuKVxuICAgICAgY29uc3QgY29kZSA9IHBhcmFtcz8uY29kZSB8fCB1dGlscy5nZXRRdWVyeSgnY29kZScpXG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcmFtcz8uc3RhdGUgfHwgdXRpbHMuZ2V0UXVlcnkoJ3N0YXRlJylcblxuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaY29kZeWSjHN0YXRl5b+F5aGrXG4gICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ0NvZGUgaXMgcmVxdWlyZWQnIH0pIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnU3RhdGUgaXMgcmVxdWlyZWQnIH0pIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0QnJvd3NlclNlc3Npb24oc3RhdGUpXG4gICAgICBkYXRhLnR5cGUgPSBjYWNoZURhdGE/LnR5cGVcblxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBwYXJhbXM/LnByb3ZpZGVyIHx8IGNhY2hlRGF0YT8ucHJvdmlkZXIgfHwgdXRpbHMuZ2V0UXVlcnkoJ3Byb3ZpZGVyJylcblxuICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSkgfVxuICAgICAgfVxuXG4gICAgICAvLyBzdGF0ZeespuWQiOmihOacn++8jOWImeiOt+WPluivpeS4ieaWueW5s+WPsHRva2VuXG4gICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuOiB0b2tlbiB9ID0gYXdhaXQgdGhpcy5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXIsXG4gICAgICAgIHByb3ZpZGVyX3JlZGlyZWN0X3VyaTogbG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWUsIC8vIOaMh+WumuS4ieaWueW5s+WPsOi3s+WbnueahCB1cmwg5Zyw5Z2AXG4gICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsIC8vIOesrOS4ieaWueW5s+WPsOi3s+i9rOWbnumhtemdouaXtu+8jHVybCBwYXJhbSDkuK3mkLrluKbnmoQgY29kZSDlj4LmlbBcbiAgICAgIH0pXG5cbiAgICAgIGxldCByZXM6IFNpZ25JblJlcyB8IExpbmtJZGVudGl0eVJlc1xuXG4gICAgICBpZiAoY2FjaGVEYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSkge1xuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS50b0JpbmRJZGVudGl0eSh7IHByb3ZpZGVyX3Rva2VuOiB0b2tlbiwgcHJvdmlkZXIsIGZpcmVFdmVudDogdHJ1ZSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6YCa6L+HIHByb3ZpZGVyX3Rva2VuIOS7heeZu+W9leaIlueZu+W9leW5tuazqOWGjO+8iOS4juS6keW8gOWPkeW5s+WPsC3nmbvlvZXmlrnlvI8t6Lqr5Lu95rqQ55m75b2V5qih5byP6YWN572u5pyJ5YWz77yJXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aElkVG9rZW4oe1xuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KVxuICAgICAgICByZXMuZGF0YSA9IHsgLi4uZGF0YSwgLi4ucmVzLmRhdGEgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbFNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24/LnNlYXJjaClcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgnY29kZScpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ3N0YXRlJylcbiAgICAgIGFkZFVybFNlYXJjaChcbiAgICAgICAgY2FjaGVEYXRhPy5zZWFyY2ggPT09IHVuZGVmaW5lZCA/IGA/JHtsb2NhbFNlYXJjaC50b1N0cmluZygpfWAgOiBjYWNoZURhdGE/LnNlYXJjaCxcbiAgICAgICAgY2FjaGVEYXRhPy5oYXNoIHx8IGxvY2F0aW9uLmhhc2gsXG4gICAgICApXG4gICAgICByZW1vdmVCcm93c2VyU2Vzc2lvbihzdGF0ZSlcblxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aG9hdXRoXG4gICAqIOeUn+aIkOesrOS4ieaWueW5s+WPsOaOiOadgyBVcmkg77yI5aaC5b6u5L+h5LqM57u056CB5omr56CB5o6I5p2D572R6aG177yJXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5PQXV0aFJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPQXV0aChwYXJhbXM6IFNpZ25JbldpdGhPQXV0aFJlcSk6IFByb21pc2U8U2lnbkluT0F1dGhSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yacHJvdmlkZXLlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHByb3ZpZGVyOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBocmVmID0gcGFyYW1zLm9wdGlvbnM/LnJlZGlyZWN0VG8gfHwgbG9jYXRpb24uaHJlZlxuXG4gICAgICBjb25zdCB1cmxPYmplY3QgPSBuZXcgVVJMKGhyZWYpXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyX3JlZGlyZWN0X3VyaSA9IHVybE9iamVjdC5vcmlnaW4gKyB1cmxPYmplY3QucGF0aG5hbWVcblxuICAgICAgY29uc3Qgc3RhdGUgPSBwYXJhbXMub3B0aW9ucz8uc3RhdGUgfHwgYHByZC0ke3BhcmFtcy5wcm92aWRlcn0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KVxuICAgICAgICAuc2xpY2UoMil9YFxuXG4gICAgICBjb25zdCB7IHVyaSB9ID0gYXdhaXQgdGhpcy5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgcHJvdmlkZXJfcmVkaXJlY3RfdXJpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIOWvuSBVUkwg6L+b6KGM6Kej56CBXG4gICAgICBjb25zdCBkZWNvZGVkVXJpID0gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSlcblxuICAgICAgLy8g5ZCI5bm26aKd5aSW55qE5p+l6K+i5Y+C5pWwXG4gICAgICBsZXQgZmluYWxVcmkgPSBkZWNvZGVkVXJpXG5cbiAgICAgIGlmIChwYXJhbXMub3B0aW9ucz8ucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChkZWNvZGVkVXJpKVxuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMub3B0aW9ucy5xdWVyeVBhcmFtcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgZmluYWxVcmkgPSB1cmwudG9TdHJpbmcoKVxuICAgICAgfVxuXG4gICAgICBzYXZlVG9Ccm93c2VyU2Vzc2lvbihzdGF0ZSwge1xuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBzZWFyY2g6IHVybE9iamVjdC5zZWFyY2gsXG4gICAgICAgIGhhc2g6IHVybE9iamVjdC5oYXNoLFxuICAgICAgICB0eXBlOiBwYXJhbXMub3B0aW9ucz8udHlwZSB8fCBPQVVUSF9UWVBFLlNJR05fSU4sXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgIXBhcmFtcy5vcHRpb25zPy5za2lwQnJvd3NlclJlZGlyZWN0KSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oZmluYWxVcmkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXJsOiBmaW5hbFVyaSwgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXRjbGFpbXNcbiAgYXN5bmMgZ2V0Q2xhaW1zKCk6IFByb21pc2U8R2V0Q2xhaW1zUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4gfSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSB3ZUFwcEp3dERlY29kZUFsbChhY2Nlc3NUb2tlbilcbiAgICAgIHJldHVybiB7IGRhdGE6IHBhcnNlZFRva2VuLCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtcmVzZXRwYXNzd29yZGZvcmVtYWlsXG4gICAqIOmAmui/hyBlbWFpbCDmiJbmiYvmnLrlj7fph43nva7lr4bnoIFcbiAgICogQHBhcmFtIGVtYWlsT3JQaG9uZSDpgq7nrrHmiJbmiYvmnLrlj7dcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZXNldFBhc3N3b3JkRm9yRW1haWxSZXM+XG4gICAqL1xuICBhc3luYyByZXNldFBhc3N3b3JkRm9yRW1haWwoXG4gICAgZW1haWxPclBob25lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgcmVkaXJlY3RUbz86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPFJlc2V0UGFzc3dvcmRGb3JFbWFpbFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbE9yUGhvbmXlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoXG4gICAgICAgIHsgZW1haWxPclBob25lIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBlbWFpbE9yUGhvbmU6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdFbWFpbCBvciBwaG9uZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgY29uc3QgeyByZWRpcmVjdFRvIH0gPSBvcHRpb25zIHx8IHt9XG5cbiAgICAgIC8vIOWIpOaWreaYr+mCrueusei/mOaYr+aJi+acuuWPt1xuICAgICAgY29uc3QgaXNFbWFpbCA9IGVtYWlsT3JQaG9uZS5pbmNsdWRlcygnQCcpXG4gICAgICBsZXQgdmVyaWZpY2F0aW9uUGFyYW1zOiB7IGVtYWlsPzogc3RyaW5nOyBwaG9uZV9udW1iZXI/OiBzdHJpbmcgfVxuXG4gICAgICBpZiAoaXNFbWFpbCkge1xuICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IGVtYWlsOiBlbWFpbE9yUGhvbmUgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5q2j6KeE5YyW5omL5py65Y+3XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShlbWFpbE9yUGhvbmUpXG4gICAgICAgIHZlcmlmaWNhdGlvblBhcmFtcyA9IHsgcGhvbmVfbnVtYmVyOiBmb3JtYXR0ZWRQaG9uZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIOesrOS4gOatpe+8muWPkemAgemqjOivgeeggeW5tuWtmOWCqCB2ZXJpZmljYXRpb25JbmZvXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odmVyaWZpY2F0aW9uUGFyYW1zKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdXBkYXRlVXNlcjogYXN5bmMgKGF0dHJpYnV0ZXM6IFVwZGF0ZVVzZXJBdHRyaWJ1dGVzKTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICBub25jZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ05vbmNlIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgICBwYXNzd29yZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIOesrOS4ieatpe+8muW+heeUqOaIt+i+k+WFpeWujOmqjOivgeeggeS5i+WQju+8jOmqjOivgemqjOivgeeggVxuICAgICAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25Ub2tlblJlcyA9IGF3YWl0IHRoaXMudmVyaWZ5KHtcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlc2V0UGFzc3dvcmQoe1xuICAgICAgICAgICAgICAgIGVtYWlsOiBpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBob25lX251bWJlcjogIWlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbmV3X3Bhc3N3b3JkOiBhdHRyaWJ1dGVzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHtcbiAgICAgICAgICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuUEFTU1dPUkRfUkVDT1ZFUlksXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zaWduSW5XaXRoUGFzc3dvcmQoe1xuICAgICAgICAgICAgICAgIGVtYWlsOiBpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBob25lOiAhaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZiAocmVkaXJlY3RUbyAmJiBpc0Jyb3dzZXIoKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24ocmVkaXJlY3RUbylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YCa6L+H5pen5a+G56CB6YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBuZXdfcGFzc3dvcmRcbiAgICogQHBhcmFtIG9sZF9wYXNzd29yZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvck9sZChwYXJhbXM6IFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlUGFzc3dvcmRCeU9sZCh7XG4gICAgICAgIG9sZF9wYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCxcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdmVyaWZ5b3RwXG4gICAqIExvZyBpbiBhIHVzZXIgZ2l2ZW4gYSBVc2VyIHN1cHBsaWVkIE9UUCBhbmQgdmVyaWZpY2F0aW9uSWQgcmVjZWl2ZWQgdGhyb3VnaCBtb2JpbGUgb3IgZW1haWwuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyB2ZXJpZnlPdHAocGFyYW1zOiBWZXJpZnlPdHBSZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHR5cGUgfSA9IHBhcmFtc1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadG9rZW7lkox2ZXJpZmljYXRpb25JbmZv5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICB0b2tlbjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Rva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICBtZXNzYWdlSWQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdtZXNzYWdlSWQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoWydwaG9uZV9jaGFuZ2UnLCAnZW1haWxfY2hhbmdlJ10uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogcGFyYW1zLm1lc3NhZ2VJZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogcGFyYW1zLnRva2VuLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICAgIHZlcmlmaWNhdGlvbkluZm86IHsgdmVyaWZpY2F0aW9uX2lkOiBwYXJhbXMubWVzc2FnZUlkLCBpc191c2VyOiB0cnVlIH0sXG4gICAgICAgICAgdmVyaWZpY2F0aW9uQ29kZTogcGFyYW1zLnRva2VuLFxuICAgICAgICAgIHVzZXJuYW1lOiBwYXJhbXMuZW1haWwgfHwgdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIHx8ICcnLFxuICAgICAgICAgIGxvZ2luVHlwZTogcGFyYW1zLmVtYWlsID8gJ2VtYWlsJyA6ICdwaG9uZScsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldFNlc3Npb25cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiwgcmVmcmVzaGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldENyZWRlbnRpYWxzKClcblxuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2FjY2Vzc0tleScpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBudWxsIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IHsgLi4uY3JlZGVudGlhbHMsIHVzZXIgfSwgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtcmVmcmVzaHNlc3Npb25cbiAgICog5peg6K666L+H5pyf54q25oCB5aaC5L2V77yM6YO96L+U5Zue5LiA5Liq5paw55qE5Lya6K+dXG4gICAqIEBwYXJhbSByZWZyZXNoX3Rva2VuXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaFNlc3Npb24ocmVmcmVzaF90b2tlbj86IHN0cmluZyk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICBjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaF90b2tlbiB8fCBjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuXG4gICAgICBjb25zdCBuZXdUb2tlbnMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnJlZnJlc2hUb2tlbihjcmVkZW50aWFscylcbiAgICAgIGNvbnN0IHsgZGF0YTogeyB1c2VyIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uOiB7IC4uLm5ld1Rva2VucywgdXNlciB9IH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyXG4gICAqIOWmguaenOWtmOWcqOeOsOacieS8muivne+8jOWImeiOt+WPluW9k+WJjeeUqOaIt+ivpue7huS/oeaBr1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXM+XG4gICAqL1xuICBhc3luYyBnZXRVc2VyKCk6IFByb21pc2U8R2V0VXNlclJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy5jb252ZXJ0VG9Vc2VyKGF3YWl0IHRoaXMuZ2V0VXNlckluZm8oKSlcbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDliLfmlrDnlKjmiLfkv6Hmga9cbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyByZWZyZXNoVXNlcigpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmN1cnJlbnRVc2VyLnJlZnJlc2goKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdXBkYXRldXNlclxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXMgfCBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcz5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVVzZXIocGFyYW1zOiBVcGRhdGVVc2VyUmVxKTogUHJvbWlzZTxHZXRVc2VyUmVzIHwgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77ya6Iez5bCR5pyJ5LiA5Liq5pu05paw5a2X5q616KKr5o+Q5L6bXG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IE9iamVjdC5rZXlzKHBhcmFtcykuc29tZShrZXkgPT4gcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNba2V5XSAhPT0gbnVsbCAmJiBwYXJhbXNba2V5XSAhPT0gJycsKVxuICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ0F0IGxlYXN0IG9uZSBmaWVsZCBtdXN0IGJlIHByb3ZpZGVkIGZvciB1cGRhdGUnIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZW1haWwsIHBob25lLCAuLi5yZXN0UGFyYW1zIH0gPSBwYXJhbXNcblxuICAgICAgLy8g5qOA5p+l5piv5ZCm6ZyA6KaB5pu05pawIGVtYWlsIOaIliBwaG9uZVxuICAgICAgY29uc3QgbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA9IGVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IG5lZWRzUGhvbmVWZXJpZmljYXRpb24gPSBwaG9uZSAhPT0gdW5kZWZpbmVkXG5cbiAgICAgIGxldCBleHRyYVJlcyA9IHt9XG5cbiAgICAgIGlmIChuZWVkc0VtYWlsVmVyaWZpY2F0aW9uIHx8IG5lZWRzUGhvbmVWZXJpZmljYXRpb24pIHtcbiAgICAgICAgLy8g6ZyA6KaB5Y+R6YCB6aqM6K+B56CBXG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25QYXJhbXM6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lX251bWJlcj86IHN0cmluZyB9XG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25UeXBlOiAnZW1haWxfY2hhbmdlJyB8ICdwaG9uZV9jaGFuZ2UnXG5cbiAgICAgICAgaWYgKG5lZWRzRW1haWxWZXJpZmljYXRpb24pIHtcbiAgICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfVxuICAgICAgICAgIHZlcmlmaWNhdGlvblR5cGUgPSAnZW1haWxfY2hhbmdlJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpXG4gICAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZFBob25lIH1cbiAgICAgICAgICB2ZXJpZmljYXRpb25UeXBlID0gJ3Bob25lX2NoYW5nZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWPkemAgemqjOivgeeggVxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odmVyaWZpY2F0aW9uUGFyYW1zKVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3RQYXJhbXMpLmxlbmd0aCA+IDAgJiYgKGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhyZXN0UGFyYW1zKSlcblxuICAgICAgICBleHRyYVJlcyA9IHtcbiAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHZlcmlmeVBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmU/OiBzdHJpbmc7IHRva2VuOiBzdHJpbmcgfSk6IFByb21pc2U8R2V0VXNlclJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKHZlcmlmeVBhcmFtcy5lbWFpbCAmJiBwYXJhbXMuZW1haWwgPT09IHZlcmlmeVBhcmFtcy5lbWFpbCkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdlbWFpbF9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcmlmeVBhcmFtcy5waG9uZSAmJiBwYXJhbXMucGhvbmUgPT09IHZlcmlmeVBhcmFtcy5waG9uZSkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwaG9uZV9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6IHBhcmFtcy5waG9uZSxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgcGhvbmU6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHZlcmlmaWNhdGlvblR5cGUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5lbWFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHBob25lOiAhbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5waG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B5oiQ5Yqf5ZCO5pu05paw55So5oi35L+h5oGvXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHVzZXIgfSxcbiAgICAgICAgICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlVTRVJfVVBEQVRFRCB9KVxuXG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDkuI3pnIDopoHpqozor4HvvIznm7TmjqXmm7TmlrBcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogeyB1c2VyIH0sXG4gICAgICB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlVTRVJfVVBEQVRFRCB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIC4uLmV4dHJhUmVzIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyaWRlbnRpdGllc1xuICAgKiDojrflj5bmiYDmnInouqvku73mupBcbiAgICogQHJldHVybnMgUHJvbWlzZTxHZXRVc2VySWRlbnRpdGllc1Jlcz5cbiAgICovXG4gIGFzeW5jIGdldFVzZXJJZGVudGl0aWVzKCk6IFByb21pc2U8R2V0VXNlcklkZW50aXRpZXNSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJzKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyBpZGVudGl0aWVzOiBwcm92aWRlcnM/LmRhdGE/LmZpbHRlcih2ID0+ICEhdi5iaW5kKSBhcyB1bmtub3duIGFzIEdldFVzZXJJZGVudGl0aWVzUmVzWydkYXRhJ11bJ2lkZW50aXRpZXMnXSB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtbGlua2lkZW50aXR5XG4gICAqIOe7keWumui6q+S7vea6kOWIsOW9k+WJjeeUqOaIt1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8TGlua0lkZW50aXR5UmVzPlxuICAgKi9cbiAgYXN5bmMgbGlua0lkZW50aXR5KHBhcmFtczogTGlua0lkZW50aXR5UmVxKTogUHJvbWlzZTxMaW5rSWRlbnRpdHlSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yacHJvdmlkZXLlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHByb3ZpZGVyOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhPQXV0aCh7XG4gICAgICAgIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFksXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXVubGlua2lkZW50aXR5XG4gICAqIOino+e7kei6q+S7vea6kFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8Q29tbW9uUmVzPlxuICAgKi9cbiAgYXN5bmMgdW5saW5rSWRlbnRpdHkocGFyYW1zOiBVbmxpbmtJZGVudGl0eVJlcSk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnByb3ZpZGVy5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwcm92aWRlcjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudW5iaW5kUHJvdmlkZXIoeyBwcm92aWRlcl9pZDogcGFyYW1zLnByb3ZpZGVyIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtcmVhdXRoZW50aWNhdGlvblxuICAgKiDph43mlrDorqTor4FcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZWF1dGhlbnRpY2F0ZVJlcz5cbiAgICovXG4gIGFzeW5jIHJlYXV0aGVudGljYXRlKCk6IFByb21pc2U8UmVhdXRoZW50aWNhdGVSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHVzZXIgfSxcbiAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKVxuXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZSh1c2VyLCBbWydlbWFpbCcsICdwaG9uZSddXSwgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlcicpXG4gICAgICBjb25zdCB1c2VySW5mbyA9IHVzZXIuZW1haWwgPyB7IGVtYWlsOiB1c2VyLmVtYWlsIH0gOiB7IHBob25lX251bWJlcjogdGhpcy5mb3JtYXRQaG9uZSh1c2VyLnBob25lKSB9XG5cbiAgICAgIC8vIOesrOS4gOatpe+8muWPkemAgemqjOivgeeggeW5tuWtmOWCqCB2ZXJpZmljYXRpb25JbmZvXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odXNlckluZm8pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAvLyDnrKzkuozmraXvvJrnrYnlvoXnlKjmiLfovpPlhaXpqozor4HnoIHvvIjpgJrov4cgUHJvbWlzZSDljIXoo4XnlKjmiLfovpPlhaXkuovku7bvvIlcbiAgICAgICAgICB1cGRhdGVVc2VyOiBhc3luYyAoYXR0cmlidXRlczogVXBkYXRlVXNlckF0dHJpYnV0ZXMpOiBQcm9taXNlPFNpZ25JblJlcz4gPT4ge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhhdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICAgIG5vbmNlOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnTm9uY2UgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMucGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAvLyDnrKzkuInmraXvvJrlvoXnlKjmiLfovpPlhaXlrozpqozor4HnoIHkuYvlkI7vvIzpqozor4Hpqozor4HnoIFcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25Ub2tlblJlcyA9IGF3YWl0IHRoaXMudmVyaWZ5KHtcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogYXR0cmlidXRlcy5ub25jZSxcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgLy8g56ys5Zub5q2l77ya6I635Y+WIHN1ZG9fdG9rZW5cbiAgICAgICAgICAgICAgICBjb25zdCBzdWRvUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3Vkbyh7XG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0UGFzc3dvcmQoe1xuICAgICAgICAgICAgICAgICAgbmV3X3Bhc3N3b3JkOiBhdHRyaWJ1dGVzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgc3Vkb190b2tlbjogc3Vkb1Jlcy5zdWRvX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uSW5mbyxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNvZGU6IGF0dHJpYnV0ZXMubm9uY2UsXG4gICAgICAgICAgICAgICAgICAuLi51c2VySW5mbyxcbiAgICAgICAgICAgICAgICAgIGxvZ2luVHlwZTogdXNlckluZm8uZW1haWwgPyAnZW1haWwnIDogJ3Bob25lJyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlc2VuZFxuICAgKiDph43mlrDlj5HpgIHpqozor4HnoIFcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFJlc2VuZFJlcz5cbiAgICovXG4gIGFzeW5jIHJlc2VuZChwYXJhbXM6IFJlc2VuZFJlcSk6IFByb21pc2U8UmVzZW5kUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmVtYWls5oiWcGhvbmXlv4XloavlhbbkuIBcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKHBhcmFtcywgW1snZW1haWwnXSwgWydwaG9uZSddXSwgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlcicpXG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhcmFtcy50eXBlID09PSAnc2lnbnVwJyA/ICdBTlknIDogJ1VTRVInXG4gICAgICBjb25zdCBkYXRhOiB7IGVtYWlsPzogc3RyaW5nOyBwaG9uZV9udW1iZXI/OiBzdHJpbmc7IHRhcmdldDogJ1VTRVInIHwgJ0FOWScgfSA9IHsgdGFyZ2V0IH1cbiAgICAgIGlmICgnZW1haWwnIGluIHBhcmFtcykge1xuICAgICAgICBkYXRhLmVtYWlsID0gcGFyYW1zLmVtYWlsXG4gICAgICB9XG5cbiAgICAgIGlmICgncGhvbmUnIGluIHBhcmFtcykge1xuICAgICAgICBkYXRhLnBob25lX251bWJlciA9IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKVxuICAgICAgfVxuXG4gICAgICAvLyDph43mlrDlj5HpgIHpqozor4HnoIFcbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JZCB9ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VmVyaWZpY2F0aW9uKGRhdGEpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHsgbWVzc2FnZUlkOiB2ZXJpZmljYXRpb25JZCB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpLFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2V0c2Vzc2lvblxuICAgKiDkvb/nlKhhY2Nlc3NfdG9rZW7lkoxyZWZyZXNoX3Rva2Vu5p2l6K6+572u5Lya6K+dXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzZXRTZXNzaW9uKHBhcmFtczogU2V0U2Vzc2lvblJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ0FjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1JlZnJlc2ggdG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnJlZnJlc2hUb2tlbihwYXJhbXMsIHsgdGhyb3dFcnJvcjogdHJ1ZSB9KVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTiB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1leGNoYW5nZWNvZGVmb3JzZXNzaW9uXG4gIGFzeW5jIGV4Y2hhbmdlQ29kZUZvclNlc3Npb24oKSB7XG4gICAgLy9cbiAgfVxuXG4gIC8qKlxuICAgKiDliKDpmaTlvZPliY3nlKjmiLdcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgZGVsZXRlVXNlcihwYXJhbXM6IERlbGV0ZU1lUmVxKTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHsgc3Vkb190b2tlbiB9ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG5cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmRlbGV0ZU1lKHsgc3Vkb190b2tlbiB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6Lez6L2s57O757uf6buY6K6k55m75b2V6aG1XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVG9EZWZhdWx0TG9naW5QYWdlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIGFzeW5jIHRvRGVmYXVsdExvZ2luUGFnZShwYXJhbXM6IGF1dGhNb2RlbHMuVG9EZWZhdWx0TG9naW5QYWdlID0ge30pOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdWZXJzaW9uID0gcGFyYW1zLmNvbmZpZ192ZXJzaW9uIHx8ICdlbnYnXG4gICAgICBjb25zdCBxdWVyeSA9IE9iamVjdC5rZXlzKHBhcmFtcy5xdWVyeSB8fCB7fSlcbiAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke3BhcmFtcy5xdWVyeVtrZXldfWApXG4gICAgICAgIC5qb2luKCcmJylcblxuICAgICAgaWYgKGFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgICB3eC5uYXZpZ2F0ZVRvKHsgdXJsOiBgL3BhY2thZ2VzLyR3ZF9zeXN0ZW0vcGFnZXMvbG9naW4vaW5kZXgke3F1ZXJ5ID8gYD8ke3F1ZXJ5fWAgOiAnJ31gIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZWRpcmVjdFVyaSA9IHBhcmFtcy5yZWRpcmVjdF91cmkgfHwgd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTChyZWRpcmVjdFVyaSlcbiAgICAgICAgY29uc3QgbG9naW5QYWdlID0gYCR7dXJsT2JqLm9yaWdpbn0vX19hdXRoLz9hcHBfaWQ9JHtwYXJhbXMuYXBwX2lkIHx8ICcnfSZlbnZfaWQ9JHt0aGlzLmNvbmZpZy5lbnZ9JmNsaWVudF9pZD0ke1xuICAgICAgICAgIHRoaXMuY29uZmlnLmNsaWVudElkIHx8IHRoaXMuY29uZmlnLmVudlxuICAgICAgICB9JmNvbmZpZ192ZXJzaW9uPSR7Y29uZmlnVmVyc2lvbn0mcmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX0ke3F1ZXJ5ID8gYCYke3F1ZXJ5fWAgOiAnJ31gXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbG9naW5QYWdlXG4gICAgICB9XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6Ieq5a6a5LmJ55m75b2VXG4gICAqIEBwYXJhbSBnZXRUaWNrRm4gKCkgPT4gUHJvbWlzZTxzdHJpbmc+LCDojrflj5boh6rlrprkuYnnmbvlvZUgdGlja2V0IOeahOWHveaVsFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldChnZXRUaWNrRm4/OiBhdXRoTW9kZWxzLkdldEN1c3RvbVNpZ25UaWNrZXRGbik6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgaWYgKGdldFRpY2tGbikge1xuICAgICAgdGhpcy5zZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm4pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKVxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgLy8gbG9naW5TdGF0Zei/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgICByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPcGVuSWQoeyB1c2VXeENsb3VkID0gdHJ1ZSB9ID0ge30pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKFxuICAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyBhcyBDcmVkZW50aWFscylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgLy8gbG9naW5TdGF0Zei/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgICByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo/miYvmnLrlj7fmjojmnYPnmbvlvZXvvIznm67liY3lj6rmlK/mjIHlhajmiZjnrqHmiYvmnLrlj7fmjojmnYPnmbvlvZVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhQaG9uZUF1dGgoeyBwaG9uZUNvZGUgPSAnJyB9KTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ3d4IGFwaSB1bmRlZmluZWQnIH0pIH1cbiAgICB9XG4gICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICBjb25zdCBwcm92aWRlckluZm8gPSB7XG4gICAgICBwcm92aWRlcl9wYXJhbXM6IHsgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnIH0sXG4gICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAgIH1cblxuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgd3gubG9naW4oKVxuICAgIDsocHJvdmlkZXJJbmZvIGFzIGFueSkucHJvdmlkZXJfY29kZSA9IGNvZGVcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwcm92aWRlckluZm8pXG4gICAgICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgICAgIH1cblxuICAgICAgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnBhdGNoUHJvdmlkZXJUb2tlbih7XG4gICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLnByb3ZpZGVyX3Rva2VuLFxuICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICBjb2RlOiBwaG9uZUNvZGUsXG4gICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAgICAgfVxuXG4gICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgICAgIH0pXG5cbiAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgc2lnbkluUmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgLy8gbG9naW5TdGF0Zei/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQaG9uZShwaG9uZTogc3RyaW5nKSB7XG4gICAgaWYgKCEvXFxzKy8udGVzdChwaG9uZSkgJiYgL15cXCtcXGR7MSwzfVxcZCsvLnRlc3QocGhvbmUpKSB7XG4gICAgICByZXR1cm4gcGhvbmUucmVwbGFjZSgvXihcXCtcXGR7MSwyfSkoXFxkKykkLywgJyQxICQyJylcbiAgICB9XG4gICAgcmV0dXJuIC9eXFwrXFxkezEsM31cXHMrLy50ZXN0KHBob25lKSA/IHBob25lIDogYCs4NiAke3Bob25lfWBcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5TGlzdGVuZXJzKGV2ZW50LCBzZXNzaW9uLCBpbmZvKTogT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgoY2FsbGJhY2tzKSA9PiB7XG4gICAgICBjYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhldmVudCwgc2Vzc2lvbiwgaW5mbylcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBhdXRoIHN0YXRlIGNoYW5nZSBjYWxsYmFjazonLCBlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cExpc3RlbmVycygpIHtcbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8ub24oRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSBwYXJhbXM/LmRhdGE/LmV2ZW50XG4gICAgICBjb25zdCBpbmZvID0gcGFyYW1zPy5kYXRhPy5pbmZvXG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgc2Vzc2lvbiB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKGV2ZW50LCBzZXNzaW9uLCBpbmZvKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb1VzZXIodXNlckluZm86IGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB7XG4gICAgaWYgKCF1c2VySW5mbykgcmV0dXJuIG51bGxcblxuICAgIC8vIOS8mOWFiOS9v+eUqCB1c2VySW5mbyDkuK3nmoTmlbDmja7vvIhWMyBBUEnvvIlcbiAgICBjb25zdCBlbWFpbCA9IHVzZXJJbmZvPy5lbWFpbCB8fCAnJ1xuICAgIGNvbnN0IHBob25lID0gdXNlckluZm8/LnBob25lX251bWJlciB8fCAnJ1xuICAgIGNvbnN0IHVzZXJJZCA9IHVzZXJJbmZvPy5zdWIgfHwgdXNlckluZm8/LnVpZCB8fCAnJ1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB1c2VySWQsXG4gICAgICBhdWQ6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgIHJvbGU6IHVzZXJJbmZvLmdyb3Vwcz8ubWFwPy4oZ3JvdXAgPT4gKHR5cGVvZiBncm91cCA9PT0gJ3N0cmluZycgPyBncm91cCA6IGdyb3VwLmlkKSksXG4gICAgICBlbWFpbDogZW1haWwgfHwgJycsXG4gICAgICBlbWFpbF9jb25maXJtZWRfYXQ6IHVzZXJJbmZvPy5lbWFpbF92ZXJpZmllZCA/IHVzZXJJbmZvLmNyZWF0ZWRfYXQgOiB1c2VySW5mby5jcmVhdGVkX2F0LFxuICAgICAgcGhvbmUsXG4gICAgICBwaG9uZV9jb25maXJtZWRfYXQ6IHBob25lID8gdXNlckluZm8uY3JlYXRlZF9hdCA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbmZpcm1lZF9hdDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIGxhc3Rfc2lnbl9pbl9hdDogKHVzZXJJbmZvIGFzIGFueSkubGFzdF9zaWduX2luX2F0LFxuICAgICAgYXBwX21ldGFkYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyOiB1c2VySW5mby5sb2dpblR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJ2Nsb3VkYmFzZScsXG4gICAgICAgIHByb3ZpZGVyczogW3VzZXJJbmZvLmxvZ2luVHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnY2xvdWRiYXNlJ10sXG4gICAgICB9LFxuICAgICAgdXNlcl9tZXRhZGF0YToge1xuICAgICAgICAvLyBWMyBBUEkg55So5oi35L+h5oGvXG4gICAgICAgIG5hbWU6IHVzZXJJbmZvPy5uYW1lLFxuICAgICAgICBwaWN0dXJlOiB1c2VySW5mbz8ucGljdHVyZSxcbiAgICAgICAgdXNlcm5hbWU6IHVzZXJJbmZvPy51c2VybmFtZSwgLy8g55So5oi35ZCN56ew77yM6ZW/5bqmIDUtMjQg5L2N77yM5pSv5oyB5a2X56ym5Lit6Iux5paH44CB5pWw5a2X44CB54m55q6K5a2X56ym77yI5LuF5pSv5oyBXy3vvInvvIzkuI3mlK/mjIHkuK3mlodcbiAgICAgICAgZ2VuZGVyOiB1c2VySW5mbz8uZ2VuZGVyLFxuICAgICAgICBsb2NhbGU6IHVzZXJJbmZvPy5sb2NhbGUsXG4gICAgICAgIC8vIFYyIEFQSSDlhbzlrrnvvIjkvb/nlKggYW55IOmBv+WFjeexu+Wei+mUmeivr++8iVxuICAgICAgICB1aWQ6IHVzZXJJbmZvLnVpZCxcbiAgICAgICAgbmlja05hbWU6IHVzZXJJbmZvLm5pY2tOYW1lLFxuICAgICAgICBhdmF0YXJVcmw6IHVzZXJJbmZvLmF2YXRhclVybCB8fCB1c2VySW5mby5waWN0dXJlLFxuICAgICAgICBsb2NhdGlvbjogdXNlckluZm8ubG9jYXRpb24sXG4gICAgICAgIGhhc1Bhc3N3b3JkOiB1c2VySW5mby5oYXNQYXNzd29yZCxcbiAgICAgIH0sXG4gICAgICBpZGVudGl0aWVzOlxuICAgICAgICB1c2VySW5mbz8ucHJvdmlkZXJzPy5tYXAocCA9PiAoe1xuICAgICAgICAgIGlkOiBwLmlkIHx8ICcnLFxuICAgICAgICAgIGlkZW50aXR5X2lkOiBwLmlkIHx8ICcnLFxuICAgICAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICAgICAgICBpZGVudGl0eV9kYXRhOiB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogcC5pZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX3VzZXJfaWQ6IHAucHJvdmlkZXJfdXNlcl9pZCxcbiAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3ZpZGVyOiBwLmlkIHx8ICdjbG91ZGJhc2UnLFxuICAgICAgICAgIGNyZWF0ZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICAgICAgdXBkYXRlZF9hdDogdXNlckluZm8udXBkYXRlZF9hdCxcbiAgICAgICAgICBsYXN0X3NpZ25faW5fYXQ6ICh1c2VySW5mbyBhcyBhbnkpLmxhc3Rfc2lnbl9pbl9hdCxcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgY3JlYXRlZF9hdDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIHVwZGF0ZWRfYXQ6IHVzZXJJbmZvLnVwZGF0ZWRfYXQsXG4gICAgICBpc19hbm9ueW1vdXM6IHVzZXJJbmZvLm5hbWUgPT09ICdhbm9ueW1vdXMnLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlj4LmlbDmoKHpqozovoXliqnmlrnms5VcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQYXJhbXMocGFyYW1zOiBhbnksIHJ1bGVzOiB7IFtrZXk6IHN0cmluZ106IHsgcmVxdWlyZWQ/OiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB9KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBydWxlXSBvZiBPYmplY3QuZW50cmllcyhydWxlcykpIHtcbiAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmIChwYXJhbXM/LltrZXldID09PSB1bmRlZmluZWQgfHwgcGFyYW1zPy5ba2V5XSA9PT0gbnVsbCB8fCBwYXJhbXM/LltrZXldID09PSAnJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6IHJ1bGUubWVzc2FnZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozlv4Xloavlj4LmlbDnu4TvvIjoh7PlsJHmnInkuIDkuKrlj4LmlbDlv4XpobvmnInlgLzvvIlcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBdExlYXN0T25lKHBhcmFtczogYW55LCBmaWVsZEdyb3Vwczogc3RyaW5nW11bXSwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGFzVmFsdWUgPSBmaWVsZEdyb3Vwcy5zb21lKGdyb3VwID0+IGdyb3VwLnNvbWUoZmllbGQgPT4gcGFyYW1zPy5bZmllbGRdICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zPy5bZmllbGRdICE9PSBudWxsICYmIHBhcmFtcz8uW2ZpZWxkXSAhPT0gJycpLClcblxuICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlIH0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0KCk6IFByb21pc2U8eyBlcnJvcjogRXJyb3IgfCBudWxsIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5JTklUSUFMX1NFU1NJT04gfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNoZWNraW5nIGZvciBleGlzdGluZyBjcmVkZW50aWFsc1xuICAgIH1cblxuICAgIHJldHVybiB7IGVycm9yOiBudWxsIH1cbiAgfVxufVxuXG50eXBlIFRJbml0QXV0aE9wdGlvbnMgPSBQaWNrPElDbG91ZGJhc2VBdXRoQ29uZmlnLCAncmVnaW9uJyB8ICdwZXJzaXN0ZW5jZScgfCAnaTE4bicgfCAnYWNjZXNzS2V5JyB8ICd1c2VXeENsb3VkJz4gJlxuUGFydGlhbDxBdXRoT3B0aW9ucz4gJiB7XG4gIGRldGVjdFNlc3Npb25JblVybD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXV0aEluc3RhbmNlKFxuICBjb25maWc6IFRJbml0QXV0aE9wdGlvbnMgJiB7IHNka1ZlcnNpb24/OiBzdHJpbmcgfSxcbiAgb3B0aW9ucz86IHtcbiAgICBjbGllbnRJZDogSUNsb3VkYmFzZUNvbmZpZ1snY2xpZW50SWQnXVxuICAgIGVudjogSUNsb3VkYmFzZUNvbmZpZ1snZW52J11cbiAgICBhcGlPcmlnaW46IHN0cmluZ1xuICAgIGNhY2hlPzogSUNsb3VkYmFzZUNhY2hlXG4gICAgcGxhdGZvcm0/OiBJQ2xvdWRiYXNlWydwbGF0Zm9ybSddXG4gICAgYXBwPzogSUNsb3VkYmFzZVxuICAgIGRlYnVnPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RlYnVnJ11cbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1snZGV0ZWN0U2Vzc2lvbkluVXJsJ11cbiAgfSxcbikge1xuICBjb25zdCB7IHJlZ2lvbiA9ICdhcC1zaGFuZ2hhaScsIGkxOG4sIGFjY2Vzc0tleSwgdXNlV3hDbG91ZCB9ID0gY29uZmlnXG4gIGNvbnN0IHBsYXRmb3JtID0gb3B0aW9ucz8ucGxhdGZvcm0gfHwgKHVzZURlZmF1bHRBZGFwdGVyLmJpbmQob3B0aW9ucykoKSBhcyBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvKVxuICBjb25zdCB7IHJ1bnRpbWUsIGFkYXB0ZXIgfSA9IHBsYXRmb3JtXG5cbiAgY29uc3QgeyBlbnYsIGNsaWVudElkLCBkZWJ1ZywgY2FjaGUsIGFwcDogY2xvdWRiYXNlIH0gPSBvcHRpb25zIHx8IHt9XG4gIGxldCB7IGFwaU9yaWdpbiB9ID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoIWFwaU9yaWdpbikge1xuICAgIGFwaU9yaWdpbiA9IGBodHRwczovLyR7ZW52fS4ke3JlZ2lvbn0udGNiLWFwaS50ZW5jZW50Y2xvdWRhcGkuY29tYFxuICB9XG5cbiAgY29uc3QgY29tbW9uT3B0cyA9IHtcbiAgICBlbnYsXG4gICAgY2xpZW50SWQsXG4gICAgaTE4bixcbiAgICBhY2Nlc3NLZXksXG4gICAgdXNlV3hDbG91ZCxcbiAgICBldmVudEJ1czogbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpLFxuICB9XG5cbiAgY29uc3Qgb2F1dGhJbnN0YW5jZSA9IG5ldyBDbG91ZGJhc2VPQXV0aCh1c2VBdXRoQWRhcHRlcih7XG4gICAgLi4uY29tbW9uT3B0cyxcbiAgICBhcGlPcmlnaW4sXG4gICAgYXBpUGF0aDogY29uZmlnPy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAvLyBAdG9kbyDku6XkuIvmnIDlpb3otbBhZGFwdG9y5aSE55CG77yM55uu5YmNb2F1dGjmqKHlnZfmsqHmjIlhZGFwdG9y5o6l5Y+j6K6+6K6hXG4gICAgc3RvcmFnZTogY29uZmlnPy5zdG9yYWdlLFxuICAgIGJhc2VSZXF1ZXN0OiBjb25maWc/LmJhc2VSZXF1ZXN0LFxuICAgIHJlcXVlc3Q6IGNvbmZpZz8ucmVxdWVzdCxcbiAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBjb25maWc/LmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgY2FwdGNoYU9wdGlvbnM6IGNvbmZpZz8uY2FwdGNoYU9wdGlvbnMsXG4gICAgd3hDbG91ZDogY29uZmlnPy53eENsb3VkLFxuICAgIGFkYXB0ZXIsXG4gICAgb25DcmVkZW50aWFsc0Vycm9yOiBvbkNyZWRlbnRpYWxzRXJyb3IoY29tbW9uT3B0cy5ldmVudEJ1cyksXG4gICAgaGVhZGVyczogeyAnWC1TREstVmVyc2lvbic6IGBAY2xvdWRiYXNlL2pzLXNkay8ke2NvbmZpZy5zZGtWZXJzaW9ufWAsIC4uLihjb25maWcuaGVhZGVycyB8fCB7fSkgfSxcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IGNvbmZpZy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgZGVidWcsXG4gIH0pLClcblxuICBjb25zdCBhdXRoSW5zdGFuY2UgPSBuZXcgQXV0aCh7XG4gICAgLi4uY29tbW9uT3B0cyxcbiAgICByZWdpb24sXG4gICAgcGVyc2lzdGVuY2U6IGNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICBkZWJ1ZyxcbiAgICBjYWNoZTpcbiAgICAgIGNhY2hlIHx8IG5ldyBDbG91ZGJhc2VDYWNoZSh7XG4gICAgICAgIHBlcnNpc3RlbmNlOiBjb25maWcucGVyc2lzdGVuY2UsXG4gICAgICAgIGtleXM6IHsgdXNlckluZm9LZXk6IGB1c2VyX2luZm9fJHtlbnZ9YCB9LFxuICAgICAgICBwbGF0Zm9ybUluZm86IHBsYXRmb3JtLFxuICAgICAgfSksXG4gICAgcnVudGltZTogcnVudGltZSB8fCAnd2ViJyxcbiAgICBfZnJvbUFwcDogY2xvdWRiYXNlLFxuICAgIG9hdXRoSW5zdGFuY2UsXG4gIH0pXG5cbiAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIHdpdGggdXNlciBpbmZvIGNhbGxiYWNrXG4gIC8vIFRoaXMgaGFuZGxlcyBPQXV0aCBjYWxsYmFjayBVUkwgZGV0ZWN0aW9uIGFuZCBjcmVhdGVzIGxvZ2luIHN0YXRlIGF0b21pY2FsbHlcbiAgb2F1dGhJbnN0YW5jZS5pbml0aWFsaXplU2Vzc2lvbihhc3luYyAoZGF0YSwgZXJyb3IpID0+IHtcbiAgICBpZiAoIWRhdGEpIHJldHVyblxuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5TSUdOX0lOKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29tbW9uT3B0cy5ldmVudEJ1cy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHtcbiAgICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOLFxuICAgICAgICAgIGluZm86IHsgLi4uZGF0YSwgZXJyb3IgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS51c2VyKSB7XG4gICAgICAgIC8vIOS9v+eUqOW3suiOt+WPlueahCB1c2VyIOS/oeaBr+WIm+W7uiBMb2dpblN0YXRl77yM5aSN55SoIGNyZWF0ZUxvZ2luU3RhdGUg6YC76L6RXG4gICAgICAgIC8vIOS9hui3s+i/hyByZWZyZXNoKCkg6YG/5YWN5YaN5qyh6K+35rGCIEFQSSDlr7zoh7TmrbvplIFcbiAgICAgICAgYXV0aEluc3RhbmNlLmNyZWF0ZUxvZ2luU3RhdGUoe30sIHsgdXNlckluZm86IGRhdGEudXNlciB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFkpIHtcbiAgICAgIGNvbW1vbk9wdHMuZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgIGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4geyBhdXRoSW5zdGFuY2UsIG9hdXRoSW5zdGFuY2UgfVxufVxuXG5jb25zdCBOQU1FU1BBQ0UgPSAnYXV0aCdcblxuY29uc3QgY29tcG9uZW50OiBJQ2xvdWRiYXNlQ29tcG9uZW50ID0ge1xuICBuYW1lOiBDT01QT05FTlRfTkFNRSxcbiAgbmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gIGVudGl0eShjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgY29uc3QgYXV0aCA9IGZ1bmN0aW9uIChjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy5hdXRoSW5zdGFuY2UgJiYgIWNvbmZpZykge1xuICAgICAgICAvLyBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICAgIH1cblxuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHtcbiAgICAgICAgcmVnaW9uOiAnJyxcbiAgICAgICAgcGVyc2lzdGVuY2U6ICdsb2NhbCcsXG4gICAgICAgIGFwaVBhdGg6IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYWRhcHRlciB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgICAgLy8g5aaC5LiN5piO56Gu5oyH5a6acGVyc2lzdGVuY2XliJnkvJjlhYjlj5blkITlubPlj7BhZGFwdGVy6aaW6YCJ77yM5YW25qyhbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBuZXdQZXJzaXN0ZW5jZSA9IGNvbmZpZy5wZXJzaXN0ZW5jZSB8fCBhZGFwdGVyLnByaW1hcnlTdG9yYWdlXG4gICAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgbmV3UGVyc2lzdGVuY2UgIT09IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHsgcGVyc2lzdGVuY2U6IG5ld1BlcnNpc3RlbmNlIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH0gPSBnZW5lcmF0ZUF1dGhJbnN0YW5jZShcbiAgICAgICAge1xuICAgICAgICAgIHd4Q2xvdWQ6IHRoaXMuY29uZmlnLnd4Q2xvdWQsXG4gICAgICAgICAgc3RvcmFnZTogdGhpcy5jb25maWcuc3RvcmFnZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcGVyc2lzdGVuY2U6IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICAgIGkxOG46IHRoaXMuY29uZmlnLmkxOG4sXG4gICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXksXG4gICAgICAgICAgdXNlV3hDbG91ZDogdGhpcy5jb25maWcudXNlV3hDbG91ZCxcbiAgICAgICAgICBzZGtWZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiB0aGlzLmNvbmZpZy5hdXRoPy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICAgICAgYXBpT3JpZ2luOiB0aGlzLnJlcXVlc3QuZ2V0QmFzZUVuZFBvaW50KHRoaXMuY29uZmlnLmVuZFBvaW50TW9kZSB8fCAnQ0xPVURfQVBJJyksXG4gICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgICAgYXBwOiB0aGlzLFxuICAgICAgICAgIGRlYnVnOiB0aGlzLmNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgICB0aGlzLmF1dGhJbnN0YW5jZSA9IGF1dGhJbnN0YW5jZVxuXG4gICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoUHJvdG8gPSBhdXRoLmNhbGwodGhpcywgY29uZmlnKVxuICAgIE9iamVjdC5hc3NpZ24oYXV0aCwgYXV0aFByb3RvKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhdXRoLCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXV0aFByb3RvKSlcbiAgICB0aGlzW05BTUVTUEFDRV0gPSBhdXRoXG4gICAgcmV0dXJuIGF1dGhcbiAgfSxcbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IHsgVXNlckluZm8sIEF1dGggfVxuLyoqXG4gKiBAYXBpIOaJi+WKqOazqOWGjOiHs2Nsb3VkYmFzZSBhcHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXV0aChhcHA6IFBpY2s8SUNsb3VkYmFzZSwgJ3JlZ2lzdGVyQ29tcG9uZW50Jz4pIHtcbiAgdHJ5IHtcbiAgICBhcHAucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKGUpXG4gIH1cbn1cbiJdfQ==
|
|
2874
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLDBDQVV5QjtBQUN6QixxQ0FBMEM7QUFDMUMseUNBVW9CO0FBQ3BCLGlDQUFxRztBQUNyRyxrREFBNEM7QUFpQzVDLElBQU0sU0FBUyxHQUFHLGNBQU0sT0FBQSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFoRSxDQUFnRSxDQUFBO0FBbUN4RixJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUE7QUFrQjdCLElBQU0sa0JBQWtCLEdBQUcsVUFBQSxRQUFRLElBQUksT0FBQSxVQUFDLE1BQU07SUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsbUJBQW1CLHdCQUFPLE1BQU0sS0FBRSxTQUFTLEVBQUUsZ0NBQXdCLENBQUMsaUJBQWlCLElBQUcsQ0FBQTtBQUNqSCxDQUFDLEVBRnNDLENBRXRDLENBQUE7QUFPRDtJQXVCRSxjQUFZLE9BQXFCO1FBQ3ZCLElBQUEsS0FBSyxHQUFvQixPQUFPLE1BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQixDQUFDO0lBSVksNkJBQWMsR0FBM0I7OztnQkFDRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQVcsQ0FBQTtnQkFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFXLENBQUE7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBVyxDQUFBO2dCQUN6RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQVcsQ0FBQTtnQkFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQVksQ0FBQTtnQkFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFXLENBQUE7Z0JBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBVyxDQUFBO2dCQUMzRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQVcsQ0FBQTtnQkFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFXLENBQUE7Z0JBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBVyxDQUFBO2dCQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQVcsQ0FBQTtnQkFDdkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFXLENBQUE7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBVyxDQUFBO2dCQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQVEsQ0FBQTs7OztLQUMzRDtJQUlZLGtDQUFtQixHQUFoQzs7Ozs7O3dCQUNFLEtBQUEsSUFBSSxDQUFBO3dCQUFPLFdBQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFBOzt3QkFBbEQsR0FBSyxHQUFHLEdBQUcsU0FBdUMsQ0FBQTt3QkFDbEQsS0FBQSxJQUFJLENBQUE7d0JBQVUsV0FBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUE7O3dCQUF4RCxHQUFLLE1BQU0sR0FBRyxTQUEwQyxDQUFBO3dCQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQVcsQ0FBQTt3QkFDekQsS0FBQSxJQUFJLENBQUE7d0JBQVMsV0FBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUE7O3dCQUF0RCxHQUFLLEtBQUssR0FBRyxTQUF5QyxDQUFBO3dCQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBWSxDQUFBO3dCQUN2RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQVcsQ0FBQTt3QkFDbEUsS0FBQSxJQUFJLENBQUE7d0JBQVksV0FBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUE7O3dCQUE1RCxHQUFLLFFBQVEsR0FBRyxTQUE0QyxDQUFBO3dCQUM1RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQVcsQ0FBQTt3QkFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFXLENBQUE7d0JBQzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBVyxDQUFBO3dCQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQVcsQ0FBQTt3QkFDdkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFXLENBQUE7d0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBVyxDQUFBO3dCQUNsRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQVEsQ0FBQTs7Ozs7S0FDM0Q7SUFlWSxxQkFBTSxHQUFOLFVBQU8sUUFBZ0M7Ozs7OzRCQUU5QixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGNBQWMsY0FBTSxRQUFRLEVBQUcsRUFBQTs7d0JBQTlFLFdBQVcsR0FBRyxTQUFnRTt3QkFFcEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFBOzs7OztLQUNuQztJQUVZLGtDQUFtQixHQUFoQyxVQUFpQyxNQUE2Qzs7Ozs0QkFDNUUsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsY0FBTSxNQUFNLEVBQUcsRUFBQTs7d0JBQW5FLFNBQW1FLENBQUE7d0JBQ25FLFdBQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFBOzt3QkFBcEIsU0FBb0IsQ0FBQTs7Ozs7S0FDckI7SUFnQk0sNkJBQWMsR0FBZCxVQUFlLFdBQW1CLEVBQUUsV0FBbUI7UUFDNUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxZQUFZLEVBQUUsV0FBVztZQUN6QixZQUFZLEVBQUUsV0FBVztTQUMxQixDQUFDLENBQUE7SUFDSixDQUFDO0lBZU0sNkJBQWMsR0FBZCxVQUFlLFFBQWdCO1FBQ3BDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUEsc0JBQVUsRUFBQyxrQkFBTSxDQUFDLGNBQWMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFBO1NBQy9EO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFFBQVEsVUFBQTtTQUNULENBQUMsQ0FBQTtJQUNKLENBQUM7SUFhWSxzQkFBTyxHQUFQLFVBQVEsTUFBMEM7Ozs7OzRCQUN6QyxXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBQTs7d0JBQWxFLFdBQVcsR0FBRyxTQUFvRDt3QkFDeEUsSUFBSyxXQUFtQixDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRTs0QkFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFBOzRCQUN6QixNQUFNLFdBQVcsQ0FBQTt5QkFDbEI7d0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFBO3dCQUNsQyxXQUFPLFdBQVcsRUFBQTs7OztLQUNuQjtJQUVNLCtCQUFnQixHQUF2QixVQUF3QixHQUFZO1FBQzFCLElBQUEsV0FBVyxHQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFwQixDQUFvQjtRQUN2QyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUVqRCxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sUUFBUSxJQUFJLEVBQUUsQ0FBQTtRQUUvQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0lBRU0sK0JBQWdCLEdBQXZCLFVBQXdCLFFBQWE7UUFDM0IsSUFBQSxXQUFXLEdBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQXBCLENBQW9CO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUMxQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQUVhLG9DQUFxQixHQUFuQyxVQUFvQyxHQUFXOzs7Ozs7d0JBQ3JDLFdBQVcsR0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBcEIsQ0FBb0I7d0JBQ3RCLFdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUE7O3dCQUF0RCxRQUFRLEdBQUcsU0FBMkM7d0JBQzVELFdBQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFBOzs7O0tBQ3JCO0lBRU8sMEJBQVcsR0FBbkI7UUFBQSxpQkFzQkM7UUFyQlMsSUFBQSxXQUFXLEdBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQXBCLENBQW9CO1FBQ3ZDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUNoRDtRQUFBO1lBQ0MsS0FBSztZQUNMLE9BQU87WUFDUCxNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLFdBQVc7WUFDWCxVQUFVO1lBQ1YsUUFBUTtZQUNSLEtBQUs7WUFDTCxjQUFjO1lBQ2QsV0FBVztZQUNYLFVBQVU7WUFDVixZQUFZO1NBQ2IsQ0FBQyxPQUFPLENBQUMsVUFBQyxPQUFPO1lBQ2hCLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBeEhZO1FBVFosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVixtQ0FBbUM7Z0JBQ25DLG9CQUFvQjtnQkFDcEIsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7OztzQ0FNRDtJQXFCTTtRQVROLElBQUEsZ0NBQW9CLEVBQUM7WUFDcEIsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDViwyQ0FBMkM7Z0JBQzNDLG9CQUFvQjtnQkFDcEIsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7Ozs4Q0FNRDtJQWVNO1FBVE4sSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsU0FBUztZQUNoQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDViwyQ0FBMkM7Z0JBQzNDLHdCQUF3QjtnQkFDeEIsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7Ozs4Q0FTRDtJQWFZO1FBUlosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsWUFBWTtZQUNuQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVixvQ0FBb0M7Z0JBQ3BDLHNLQUE2Qiw4QkFBa0IsQ0FBRTthQUNsRDtTQUNGLENBQUM7Ozs7dUNBU0Q7SUE4Q0gsV0FBQztDQUFBLEFBM01ELElBMk1DO0FBSUQ7SUFPRSxvQkFBWSxPQUEyQjtRQUM3QixJQUFBLEtBQUssR0FBMkIsT0FBTyxNQUFsQyxFQUFFLEtBQUssR0FBb0IsT0FBTyxNQUEzQixFQUFFLGFBQWEsR0FBSyxPQUFPLGNBQVosQ0FBWTtRQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsSUFBQSxzQkFBVSxFQUFDLGtCQUFNLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUE7U0FDMUQ7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtRQUVsQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixhQUFhLGVBQUE7U0FDZCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU0sb0NBQWUsR0FBdEI7O1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVZLHlDQUFvQixHQUFqQzs7Ozs7NEJBQ0UsV0FBTSxDQUFBLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFBLEVBQUE7O3dCQUFqRCxTQUFpRCxDQUFBO3dCQUNqRCxXQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBQTs7d0JBQXJDLFNBQXFDLENBQUE7Ozs7O0tBQ3RDO0lBQ0gsaUJBQUM7QUFBRCxDQUFDLEFBOUJELElBOEJDO0FBOUJZLGdDQUFVO0FBZ0N2QjtJQU9FLGNBQVksTUFJWDtRQVBPLGNBQVMsR0FBZ0QsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUNsRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUE7UUFPOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFBO1FBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDWCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDckIsQ0FBQztJQWdCWSw4QkFBZSxHQUFmLFVBQWdCLE1BQW1DOzs7Z0JBQzlELFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDdEQ7SUFlWSw2QkFBYyxHQUFkLFVBQWUsTUFBd0M7OztnQkFDbEUsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUN6RDtJQWlCTSx3QkFBUyxHQUFULFVBQVUsTUFBbUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQWlCWSxxQkFBTSxHQUFOLFVBQU8sTUFBZ0M7OztnQkFDbEQsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUNqRDtJQWlCWSw4QkFBZSxHQUFmLFVBQ1gsTUFBeUMsRUFDekMsT0FBa0M7OztnQkFFbEMsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFBOzs7S0FDbkU7SUFLRCxzQkFBSSw2QkFBVzthQUFmO1lBQ0UsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7Z0JBRS9CLElBQUEscUJBQVMsRUFDUCxrQkFBTSxDQUFDLGlCQUFpQixFQUN4QixnRkFBZ0YsQ0FDakYsQ0FBQTtnQkFDRCxPQUFNO2FBQ1A7WUFFRCxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7WUFFdkMsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsT0FBTyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQTthQUMvQjtZQUNELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQzs7O09BQUE7SUFhWSw2QkFBYyxHQUFkOzs7Ozs0QkFDUSxXQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQTs7d0JBQXZDLFVBQVUsR0FBRyxTQUEwQjs2QkFDekMsVUFBVSxFQUFWLGNBQVU7d0JBQ04sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQXlCLENBQUE7d0JBQzFFLFdBQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFBOzt3QkFBM0MsU0FBMkMsQ0FBQTt3QkFDM0MsV0FBTyxzQkFBSyxVQUFVLENBQUMsSUFBSSxHQUFLLFFBQVEsQ0FBb0QsRUFBQTs0QkFFOUYsV0FBTyxJQUFJLEVBQUE7Ozs7S0FDWjtJQXFDWSxvQ0FBcUIsR0FBckIsVUFBc0IsRUFJN0I7WUFKNkIscUJBSS9CLEVBQUUsS0FBQSxFQUhKLFVBQVUsZ0JBQUE7Ozs7Ozs7d0JBSVYsSUFBSSxDQUFDLDBCQUFjLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzdCLE1BQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUE7eUJBQ2hDO3dCQUNLLE1BQU0sR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxXQUFXLENBQUE7d0JBRTVDLFFBQVEsR0FBRyxVQUFPLElBQUk7Ozs7O3dDQUN0QixNQUFNLEdBQXNELFNBQVMsQ0FBQTt3Q0FDckUsV0FBVyxHQUE0QixTQUFTLENBQUE7Ozs7d0NBR3pDLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQzFEO2dEQUNFLFdBQVcsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSztnREFDMUIsYUFBYSxFQUFFLElBQUk7Z0RBQ25CLGVBQWUsRUFBRTtvREFDZixrQkFBa0IsRUFBRSxTQUFTO29EQUM3QixLQUFLLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUs7aURBQ3JCOzZDQUNGLEVBQ0QsVUFBVSxDQUNYLEVBQUE7O3dDQVZELE1BQU0sR0FBRyxTQVVSLENBQUE7d0NBRUQsSUFBSSxDQUFDLE1BQWMsYUFBZCxNQUFNLHVCQUFOLE1BQU0sQ0FBVSxVQUFVLEtBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFOzRDQUN6RCxNQUFNLE1BQU0sQ0FBQTt5Q0FDYjt3Q0FFYSxXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUM5RCxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQ3pDLFVBQVUsQ0FDWCxFQUFBOzt3Q0FIRCxXQUFXLEdBQUcsU0FHYixDQUFBO3dDQUVELElBQUssV0FBbUIsYUFBbkIsV0FBVyx1QkFBWCxXQUFXLENBQVUsVUFBVSxFQUFFOzRDQUNwQyxNQUFNLFdBQVcsQ0FBQTt5Q0FDbEI7Ozs7d0NBRUQsTUFBTSxPQUFLLENBQUE7Ozs7NkJBRWQsQ0FBQTt3QkFFRCxXQUFNLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07Z0NBQ2hDLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0NBQ1AsT0FBTyxFQUFFLFVBQU8sR0FBcUI7Ozs7OztvREFFakMsV0FBTSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFBOztvREFBeEIsU0FBd0IsQ0FBQTtvREFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBOzs7O29EQUViLE1BQU0sQ0FBQyxPQUFLLENBQUMsQ0FBQTs7Ozs7eUNBRWhCO29DQUNELElBQUksRUFBRSxVQUFDLEdBQVE7d0NBQ2IsSUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLE1BQU0sQ0FBQyxDQUNuQzt3Q0FBQyxLQUFhLENBQUMsSUFBSSxHQUFHLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxLQUFLLENBQUE7d0NBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQ0FDZixDQUFDO2lDQUNGLENBQUMsQ0FBQTs0QkFDSixDQUFDLENBQUMsRUFBQTs7d0JBaEJGLFNBZ0JFLENBQUE7d0JBRUYsV0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBQTs7OztLQUNwRTtJQWdCWSx5QkFBVSxHQUFWOzs7Ozs7O3dCQUNYLElBQUksQ0FBQywwQkFBYyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUM3QixNQUFNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO3lCQUNoQzt3QkFDSyxNQUFNLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsV0FBVyxDQUFBO3dCQUU1QyxRQUFRLEdBQUcsVUFBTyxJQUFJOzs7Ozt3Q0FDdEIsTUFBTSxHQUFzRCxTQUFTLENBQUE7Ozs7d0NBRzlELFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0RBQzNELFdBQVcsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSztnREFDMUIsYUFBYSxFQUFFLElBQUk7Z0RBQ25CLGVBQWUsRUFBRTtvREFDZixrQkFBa0IsRUFBRSxTQUFTO29EQUM3QixLQUFLLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUs7aURBQ3JCOzZDQUNGLENBQUMsRUFBQTs7d0NBUEYsTUFBTSxHQUFHLFNBT1AsQ0FBQTt3Q0FFRixJQUFJLENBQUMsTUFBYyxhQUFkLE1BQU0sdUJBQU4sTUFBTSxDQUFVLFVBQVUsS0FBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7NENBQ3pELE1BQU0sTUFBTSxDQUFBO3lDQUNiO3dDQUVELFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUE7O3dDQUE1RixTQUE0RixDQUFBOzs7O3dDQUU1RixNQUFNLE9BQUssQ0FBQTs7Ozs2QkFFZCxDQUFBO3dCQUVELFdBQU0sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtnQ0FDaEMsRUFBRSxDQUFDLEtBQUssQ0FBQztvQ0FDUCxPQUFPLEVBQUUsVUFBTyxHQUFxQjs7Ozs7O29EQUVqQyxXQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUE7O29EQUF4QixTQUF3QixDQUFBO29EQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Ozs7b0RBRWIsTUFBTSxDQUFDLE9BQUssQ0FBQyxDQUFBOzs7Ozt5Q0FFaEI7b0NBQ0QsSUFBSSxFQUFFLFVBQUMsR0FBUTt3Q0FDYixJQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxDQUFDLENBQ25DO3dDQUFDLEtBQWEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQTt3Q0FDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO29DQUNmLENBQUM7aUNBQ0YsQ0FBQyxDQUFBOzRCQUNKLENBQUMsQ0FBQyxFQUFBOzt3QkFoQkYsU0FnQkUsQ0FBQTt3QkFFRixXQUFNOzs7O0tBQ1A7SUFnQlksZ0NBQWlCLEdBQWpCOzs7Ozs7O3dCQUNYLElBQUksQ0FBQywwQkFBYyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUM3QixNQUFNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO3lCQUNoQzs7Ozt3QkFFQyxXQUFNLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxFQUFFLE1BQU07Z0NBQ2hDLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQTtnQ0FDbEQsRUFBRSxDQUFDLEtBQUssQ0FBQztvQ0FDUCxPQUFPLEVBQUUsVUFBTyxHQUFxQjs7Ozs7b0RBQzdCLFVBQVUsR0FBRyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFBOzs7O29EQUVmLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7NERBQ2pFLGFBQWEsRUFBRSxHQUFHLENBQUMsSUFBSTs0REFDdkIsV0FBVyxFQUFFLFVBQVU7NERBQ3ZCLGVBQWUsRUFBRTtnRUFDZixrQkFBa0IsRUFBRSxVQUFVO2dFQUM5QixLQUFLLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUs7NkRBQ3JCO3lEQUNGLENBQUMsRUFBQTs7b0RBUEksTUFBTSxHQUFHLFNBT2I7b0RBRXNCLGFBQWEsR0FBSyxNQUFNLGVBQVgsQ0FBVztvREFFaEQsSUFBSSxDQUFDLGFBQWEsRUFBRTt3REFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO3dEQUNkLFdBQU07cURBQ1A7b0RBRWlCLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7NERBQ3BFLFdBQVcsRUFBRSxVQUFVOzREQUN2QixjQUFjLEVBQUUsYUFBYTt5REFDOUIsQ0FBQyxFQUFBOztvREFISSxTQUFTLEdBQUcsU0FHaEI7b0RBRUYsSUFBSyxTQUFpQixhQUFqQixTQUFTLHVCQUFULFNBQVMsQ0FBVSxVQUFVLEVBQUU7d0RBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTt3REFDakIsV0FBTTtxREFDUDtvREFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Ozs7b0RBRWIsTUFBTSxDQUFDLE9BQUssQ0FBQyxDQUFBOzs7Ozt5Q0FFaEI7b0NBQ0QsSUFBSSxFQUFFLFVBQUMsR0FBUTt3Q0FDYixJQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxDQUFDLENBQ25DO3dDQUFDLEtBQWEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQTt3Q0FDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO29DQUNmLENBQUM7aUNBQ0YsQ0FBQyxDQUFBOzRCQUNKLENBQUMsQ0FBQyxFQUFBOzt3QkExQ0YsU0EwQ0UsQ0FBQTs7Ozt3QkFFRixNQUFNLE9BQUssQ0FBQTs0QkFHYixXQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFBOzs7O0tBQy9CO0lBMkVZLDRCQUFhLEdBQWIsVUFBYyxFQUsxQjtZQUpDLHdCQUEwRCxFQUExRCxnQkFBZ0IsbUJBQUcsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBQSxFQUMxRCx3QkFBcUIsRUFBckIsZ0JBQWdCLG1CQUFHLEVBQUUsS0FBQSxFQUNyQixnQkFBYSxFQUFiLFFBQVEsbUJBQUcsRUFBRSxLQUFBLEVBQ2IsZ0JBQW9CLEVBQXBCLFFBQVEsbUJBQUcsU0FBUyxLQUFBOzs7Z0JBRXBCLElBQUk7b0JBQ0YsV0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7NEJBQzdCLGdCQUFnQixrQkFBQTs0QkFDaEIsZ0JBQWdCLGtCQUFBOzRCQUNoQixRQUFRLFVBQUE7NEJBQ1IsUUFBUSxFQUFFLFFBQVE7NEJBQ2xCLFNBQVMsRUFBRSxLQUFLO3lCQUNqQixDQUFDLEVBQUE7aUJBQ0g7Z0JBQUMsT0FBTyxLQUFLLEVBQUU7b0JBQ2QsTUFBTSxLQUFLLENBQUE7aUJBQ1o7Ozs7S0FDRjtJQWdCWSw4QkFBZSxHQUFmLFVBQWdCLEVBSzVCO1lBSkMsd0JBQTBELEVBQTFELGdCQUFnQixtQkFBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFBLEVBQzFELHdCQUFxQixFQUFyQixnQkFBZ0IsbUJBQUcsRUFBRSxLQUFBLEVBQ3JCLGdCQUFvQixFQUFwQixRQUFRLG1CQUFHLFNBQVMsS0FBQSxFQUNwQixhQUFVLEVBQVYsS0FBSyxtQkFBRyxFQUFFLEtBQUE7OztnQkFFVixJQUFJO29CQUNGLFdBQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDOzRCQUM3QixnQkFBZ0Isa0JBQUE7NEJBQ2hCLGdCQUFnQixrQkFBQTs0QkFDaEIsUUFBUSxVQUFBOzRCQUNSLFFBQVEsRUFBRSxLQUFLOzRCQUNmLFNBQVMsRUFBRSxPQUFPO3lCQUNuQixDQUFDLEVBQUE7aUJBQ0g7Z0JBQUMsT0FBTyxLQUFLLEVBQUU7b0JBQ2QsTUFBTSxLQUFLLENBQUE7aUJBQ1o7Ozs7S0FDRjtJQU9NLGdDQUFpQixHQUF4QixVQUF5QixTQUEyQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBNkJZLHFCQUFNLEdBQW5CLFVBQW9CLE1BQWdDOzs7OzRCQUNsRCxXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQTs7d0JBQS9DLFNBQStDLENBQUE7d0JBQy9DLFdBQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7O0tBQ3JDO0lBNEJZLDBCQUFXLEdBQXhCLFVBQXlCLE1BQXFDOzs7Z0JBQzVELFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDdEQ7SUFjWSxtQ0FBb0IsR0FBcEIsVUFBcUIsUUFBZ0I7Ozs7Ozt3QkFDaEQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7NEJBQ2hDLElBQUEsc0JBQVUsRUFBQyxrQkFBTSxDQUFDLGNBQWMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFBO3lCQUMvRDt3QkFFaUIsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsVUFBQSxFQUFFLENBQUMsRUFBQTs7d0JBQXpFLEtBQUssR0FBSyxDQUFBLFNBQStELENBQUEsTUFBcEU7d0JBQ2IsV0FBTyxLQUFLLEVBQUE7Ozs7S0FDYjtJQUtNLDRCQUFhLEdBQXBCOztRQUNFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBRS9CLElBQUEscUJBQVMsRUFDUCxrQkFBTSxDQUFDLGlCQUFpQixFQUN4QiwrRUFBK0UsQ0FDaEYsQ0FBQTtZQUNELE9BQU07U0FDUDtRQUVELElBQU0sZUFBZSxHQUFHLE1BQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDdkUsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ2xDLENBQUMsQ0FBQTtZQUNGLE9BQU8sVUFBVSxDQUFBO1NBQ2xCO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBY1ksNEJBQWEsR0FBYjs7Ozs7O3dCQUNQLGVBQWUsR0FBRyxJQUFJLENBQUE7Ozs7d0JBR04sV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBQTs7d0JBQWxFLGVBQWUsR0FBRyxTQUFnRCxDQUFBOzs7O3dCQUVsRSxXQUFPLElBQUksRUFBQTs7d0JBR2IsSUFBSSxlQUFlLEVBQUU7NEJBQ2IsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDO2dDQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO2dDQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0NBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTs2QkFDbEMsQ0FBQyxDQUFBOzRCQUNGLFdBQU8sVUFBVSxFQUFBO3lCQUNsQjt3QkFFRCxXQUFPLElBQUksRUFBQTs7OztLQUNaO0lBV1ksMEJBQVcsR0FBWDs7O2dCQUNYLFdBQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFBOzs7S0FDN0I7SUFXWSw4QkFBZSxHQUFmOzs7Z0JBQ1gsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBQTs7O0tBQ3BEO0lBRVksa0NBQW1CLEdBQWhDLFVBQWlDLE1BQTZDOzs7Ozs0QkFDekQsV0FBTSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUE7O3dCQUF2QyxVQUFVLEdBQUcsU0FBMEI7NkJBQ3pDLFVBQVUsRUFBVixjQUFVO3dCQUNaLFdBQU8sVUFBVSxDQUFDLElBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBQTs7d0JBQTNELFNBQTJELENBQUE7OzRCQUU3RCxXQUFNOzs7O0tBQ1A7SUFNTSw0QkFBYSxHQUFwQjtRQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQUMzQyxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFpQlksK0JBQWdCLEdBQWhCLFVBQWlCLE1BQTBDOzs7Z0JBQ3RFLFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUMzRDtJQVFZLHdCQUFTLEdBQXRCLFVBQXVCLFFBQTRDOzs7Z0JBQ2pFLFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUE7OztLQUM3RDtJQUVZLDZCQUFjLEdBQTNCOzs7Ozs0QkFDOEIsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsRUFBQTs7d0JBQTVFLG1CQUFtQixHQUFHLFNBQXNEO3dCQUNsRixXQUFPO2dDQUNMLFdBQVcsRUFBRSxtQkFBbUI7Z0NBQ2hDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7NkJBQ3JCLEVBQUE7Ozs7S0FDRjtJQUVZLGlDQUFrQixHQUEvQixVQUFnQyxNQUE0Qzs7O2dCQUMxRSxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDN0Q7SUFFWSxpQ0FBa0IsR0FBL0IsVUFBZ0MsTUFBNEM7OztnQkFDMUUsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBQTs7O0tBQzdEO0lBRVksaUNBQWtCLEdBQS9CLFVBQWdDLE1BQTRDOzs7OzRCQUMxRSxXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzt3QkFBM0QsU0FBMkQsQ0FBQTt3QkFDM0QsV0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUE7Ozs7S0FDckM7SUFFWSwrQkFBZ0IsR0FBN0IsVUFBOEIsTUFBZ0I7UUFBaEIsdUJBQUEsRUFBQSxXQUFnQjs7Ozs0QkFDNUMsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBQTs7d0JBQXpELFNBQXlELENBQUE7d0JBQ3pELFdBQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7O0tBQ3JDO0lBRVkseUJBQVUsR0FBdkIsVUFBd0IsTUFBb0M7Ozs7NEJBQzFELFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFBOzt3QkFBbkQsU0FBbUQsQ0FBQTt3QkFDbkQsV0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBQTs7OztLQUMvQjtJQUVZLHFDQUFzQixHQUFuQyxVQUFvQyxNQUFnRDs7O2dCQUNsRixXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDakU7SUFFWSw0QkFBYSxHQUExQixVQUEyQixNQUF1Qzs7O2dCQUNoRSxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBQTs7O0tBQ3hEO0lBRVksOEJBQWUsR0FBNUIsVUFBNkIsTUFBeUM7OztnQkFDcEUsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUMxRDtJQUVZLG1CQUFJLEdBQWpCLFVBQWtCLE1BQThCOzs7Z0JBQzlDLFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDL0M7SUFFWSx1QkFBUSxHQUFyQixVQUFzQixNQUFrQzs7O2dCQUN0RCxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBQTs7O0tBQ25EO0lBRVksMkJBQVksR0FBekI7OztnQkFDRSxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFBOzs7S0FDakQ7SUFFWSx5QkFBVSxHQUF2Qjs7O2dCQUNFLFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUE7OztLQUMvQztJQUVZLDBCQUFXLEdBQXhCOzs7Z0JBQ0UsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBQTs7O0tBQ2hEO0lBRVksa0NBQW1CLEdBQWhDLFVBQWlDLFFBQWtCOzs7Ozs7Ozt3QkFDakQsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsMENBQUUsRUFBRSxDQUFDLGNBQU0sQ0FBQyxtQkFBbUIsRUFBRSxVQUFPLE1BQU07Ozs7Ozs2Q0FFN0MsQ0FBQSxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksMENBQUUsU0FBUyxNQUFLLGdDQUF3QixDQUFDLGlCQUFpQixDQUFBLEVBQXRFLGNBQXNFO3dDQUFHLFdBQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFBOzt3Q0FBMUIsS0FBQSxTQUEwQixDQUFBOzs7d0NBQUcsS0FBQSxFQUFFLENBQUE7Ozt3Q0FBckgsVUFBVSxLQUEyRzt3Q0FDM0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLHdCQUFPLE1BQU0sR0FBSyxVQUFVLEVBQUcsQ0FBQTs7Ozs2QkFDbEQsQ0FBQyxDQUFBO3dCQUVpQixXQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBQTs7d0JBQXZDLFVBQVUsR0FBRyxTQUEwQjt3QkFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7Ozs7O0tBQ2hDO0lBT1ksZ0NBQWlCLEdBQTlCLFVBQStCLE1BQTRCOzs7Z0JBQ3pELFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUM1RDtJQU1ZLDZCQUFjLEdBQTNCOzs7Z0JBQ0UsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBQTs7O0tBQ25EO0lBSVksNkJBQWMsR0FBM0IsVUFBNEIsV0FBd0I7Ozs7NEJBQ2xELFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFBOzt3QkFBakUsU0FBaUUsQ0FBQTs7Ozs7S0FDbEU7SUFVWSxpQ0FBa0IsR0FBbEI7OztnQkFDWCxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUE7OztLQUN2RDtJQUVZLGdDQUFpQixHQUE5QixVQUErQixNQUFnRDs7O2dCQUM3RSxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDNUQ7SUFFWSxnQ0FBaUIsR0FBOUIsVUFBK0IsTUFBc0M7OztnQkFDbkUsV0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBQTs7O0tBQzVEO0lBRVksbUNBQW9CLEdBQWpDLFVBQWtDLE1BQThDOzs7Z0JBQzlFLFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUM3RDtJQUVZLHlDQUEwQixHQUF2QyxVQUF3QyxNQUFvRDs7O2dCQUMxRixXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDckU7SUFFWSw2QkFBYyxHQUEzQixVQUE0QixNQUE2Qzs7O2dCQUN2RSxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBQTs7O0tBQ3pEO0lBRVkseUNBQTBCLEdBQXZDLFVBQXdDLE1BQW9EOzs7Z0JBQzFGLFdBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLEVBQUE7OztLQUNyRTtJQUVZLGlDQUFrQixHQUEvQixVQUFnQyxNQUFxQzs7O2dCQUNuRSxXQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFBOzs7S0FDN0Q7SUFLWSxpQ0FBa0IsR0FBL0IsVUFBZ0MsRUFZL0I7WUFYQyx3QkFBMEQsRUFBMUQsZ0JBQWdCLG1CQUFHLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUEsRUFDMUQsd0JBQXFCLEVBQXJCLGdCQUFnQixtQkFBRyxFQUFFLEtBQUEsRUFDckIsZ0JBQTBCLEVBQWhCLFdBQVcsbUJBQUcsRUFBRSxLQUFBLEVBQzFCLGdCQUFvQixFQUFwQixRQUFRLG1CQUFHLFNBQVMsS0FBQSxFQUNwQixpQkFBYyxFQUFkLFNBQVMsbUJBQUcsRUFBRSxLQUFBOzs7Ozs7O3dCQVVNLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dDQUN4RCxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsZUFBZTtnQ0FDakQsaUJBQWlCLEVBQUUsZ0JBQWdCOzZCQUNwQyxDQUFDLEVBQUE7O3dCQUhJLFNBQVMsR0FBRyxTQUdoQjt3QkFFRixJQUFLLFNBQWlCLGFBQWpCLFNBQVMsdUJBQVQsU0FBUyxDQUFVLFVBQVUsRUFBRTs0QkFDbEMsTUFBTSxTQUFTLENBQUE7eUJBQ2hCO3dCQUdPLGtCQUFrQixHQUFLLFNBQVMsbUJBQWQsQ0FBYzt3QkFHcEMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBTyxXQUFXLENBQUUsQ0FBQTt3QkFDakYsV0FBVyxHQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFBO3dCQUdqRCxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUU7NEJBQ3pCLFFBQVEsR0FBRyxXQUFXLENBQUE7NEJBQ3RCLFdBQVcsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQTt5QkFDbEM7NkJBR0csZ0JBQWdCLENBQUMsT0FBTyxFQUF4QixjQUF3Qjt3QkFFUixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQ0FDeEQsUUFBUSxVQUFBO2dDQUNSLGtCQUFrQixvQkFBQTs2QkFDbkIsQ0FBQyxFQUFBOzt3QkFISSxTQUFTLEdBQUcsU0FHaEI7d0JBRUYsSUFBSyxTQUFpQixhQUFqQixTQUFTLHVCQUFULFNBQVMsQ0FBVSxVQUFVLEVBQUU7NEJBQ2xDLE1BQU0sU0FBUyxDQUFBO3lCQUNoQjs2QkFFRyxRQUFRLEVBQVIsY0FBUTt3QkFDTSxXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2dDQUNoRSxjQUFjLEVBQUcsUUFBZ0IsYUFBaEIsUUFBUSx1QkFBUixRQUFRLENBQVUsYUFBYTs2QkFDakQsQ0FBQyxFQUFBOzt3QkFGSSxPQUFPLEdBQUcsU0FFZDt3QkFFRixJQUFLLE9BQWUsYUFBZixPQUFPLHVCQUFQLE9BQU8sQ0FBVSxVQUFVLEVBQUU7NEJBQ2hDLE1BQU0sT0FBTyxDQUFBO3lCQUNkOzs7NEJBSWUsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLHVCQUNwRCxXQUFXLEtBQ2Qsa0JBQWtCLG9CQUFBLEVBQ2xCLGNBQWMsRUFBRyxRQUFnQixhQUFoQixRQUFRLHVCQUFSLFFBQVEsQ0FBVSxVQUFVLElBQzdDLEVBQUE7O3dCQUpJLFNBQVMsR0FBRyxTQUloQjt3QkFFRixJQUFLLFNBQWlCLGFBQWpCLFNBQVMsdUJBQVQsU0FBUyxDQUFVLFVBQVUsRUFBRTs0QkFDbEMsTUFBTSxTQUFTLENBQUE7eUJBQ2hCOzs0QkFHSCxXQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFBOzs7d0JBRTlCLE1BQU0sT0FBSyxDQUFBOzs7OztLQUVkO0lBRUssK0JBQWdCLEdBQXRCLFVBQ0UsTUFBMEMsRUFDMUMsT0FBd0Q7Ozs7Ozs7d0JBRWxELFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQzs0QkFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRzs0QkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLOzRCQUNqQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7eUJBQ2xDLENBQUMsQ0FBQTt3QkFFRixXQUFNLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxFQUFBOzt3QkFBdkMsU0FBdUMsQ0FBQTs2QkFFbkMsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsUUFBUSxDQUFBLEVBQWpCLGNBQWlCO3dCQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTs7OzZCQUU5QyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxnQkFBZ0IsQ0FBQSxFQUF6QixjQUF5Qjt3QkFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7OzRCQUUvQixXQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFBOzt3QkFBckMsU0FBcUMsQ0FBQTs7O3dCQUl6QyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSwwQ0FBRSxJQUFJLENBQUMsY0FBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsU0FBUyxFQUFFLGdDQUF3QixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7d0JBRXZHLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxjQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsK0JBQXVCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTt3QkFDbkcsV0FBTyxVQUFVLEVBQUE7Ozs7S0FDbEI7SUFFSywyQkFBWSxHQUFsQjs7O2dCQUNFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQ3pCLElBQUk7d0JBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUM7NEJBQ3RELFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7NEJBQ25DLFVBQVUsRUFBRSxRQUFROzRCQUNwQixLQUFLLEVBQUUsV0FBVzs0QkFDbEIsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7NEJBQy9DLFVBQVUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRTt5QkFDdEMsQ0FBQyxDQUFBO3FCQUNIO29CQUFDLE9BQU8sS0FBSyxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUE7cUJBQ3pDO2lCQUNGOzs7O0tBQ0Y7SUFXSyxnQ0FBaUIsR0FBdkIsVUFBd0IsTUFBNEI7Ozs7Ozs7d0JBRWhELFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUE7O3dCQUExRCxTQUEwRCxDQUFBO3dCQUN2QyxXQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFBOzt3QkFBMUMsVUFBVSxHQUFHLFNBQTZCO3dCQUViLFdBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFBOzt3QkFBbEQsS0FBMkIsQ0FBQSxTQUF1QixDQUFBLEtBQTVCLEVBQXRCLHFCQUFvQixFQUFFLEtBQUEsRUFBZCxPQUFPLGFBQUE7d0JBR3ZCLGlDQUFhLFVBQWtCLEtBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxTQUFBLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFFOzs7d0JBRXJGLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsT0FBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFRSyxxQkFBTSxHQUFaLFVBQWEsTUFBcUQ7Ozs7Ozs7NkJBQzVELENBQUEsTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsaUJBQWlCLElBQUksTUFBTSxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUEsRUFBckcsY0FBcUc7d0JBQ3ZHLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFBOzt3QkFBL0MsU0FBK0MsQ0FBQTt3QkFDL0MsV0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQVMsRUFBQTs7O3dCQUlyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsa0RBQWtELENBQUMsQ0FBQTt3QkFHbEYsV0FBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxFQUFBOzt3QkFBekkscUJBQW1CLFNBQXNIO3dCQUUvSSxXQUFPO2dDQUNMLElBQUksRUFBRTtvQ0FFSixTQUFTLEVBQUUsVUFBTyxFQUF1RDs0Q0FBckQsS0FBSyxXQUFBLEVBQUUsaUJBQTRDLEVBQTVDLFNBQVMsbUJBQUcsa0JBQWdCLENBQUMsZUFBZSxLQUFBOzs7Ozs7O3dEQUd0QyxXQUFNLElBQUksQ0FBQyxNQUFNLENBQUM7Z0VBQzdDLGVBQWUsRUFBRSxTQUFTLElBQUksa0JBQWdCLENBQUMsZUFBZTtnRUFDOUQsaUJBQWlCLEVBQUUsS0FBSzs2REFDekIsQ0FBQyxFQUFBOzt3REFISSxvQkFBb0IsR0FBRyxTQUczQjs2REFJRSxrQkFBZ0IsQ0FBQyxPQUFPLEVBQXhCLGNBQXdCO3dEQUMxQixXQUFNLElBQUksQ0FBQyxNQUFNLENBQUM7Z0VBQ2hCLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnRUFDeEQsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCOzZEQUM1RCxDQUFDLEVBQUE7O3dEQUhGLFNBR0UsQ0FBQTs7O3dEQUdJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTt3REFDL0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO3dEQUNqQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUE7d0RBRWpCLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxnQ0FDbEMsSUFBSSxHQUNKLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQzlGLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDLGtCQUFrQixFQUMzRCxpQkFBaUIsRUFBRSxLQUFLLElBQ3hCLEVBQUE7O3dEQUxGLFNBS0UsQ0FBQTt3REFDRixXQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFBOzt3REFBN0IsU0FBNkIsQ0FBQTs7NERBR0ksV0FBTSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUE7O3dEQUFsRCxLQUEyQixDQUFBLFNBQXVCLENBQUEsS0FBNUIsRUFBdEIscUJBQW9CLEVBQUUsS0FBQSxFQUFkLE9BQU8sYUFBQTt3REFFdkIsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sU0FBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0RBRTdELFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7cUNBRW5EO2lDQUNGO2dDQUNELEtBQUssRUFBRSxJQUFJOzZCQUNaLEVBQUE7Ozt3QkFFRCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBUUssc0JBQU8sR0FBYixVQUFjLE1BQWtDOzs7Ozs7Ozt3QkFFcEMsV0FBVyxHQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFwQixDQUFvQjt3QkFDM0IsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUE7O3dCQUF0RCxHQUFHLEdBQUcsU0FBZ0Q7d0JBQzVELFdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBQTs7d0JBQTlDLFNBQThDLENBQUE7d0JBQzlDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTt3QkFFbkIsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLGNBQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxnQ0FBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO3dCQUV4RyxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSwwQ0FBRSxJQUFJLENBQUMsY0FBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLCtCQUF1QixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBR3BHLGlDQUFZLEdBQUcsS0FBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUU7Ozt3QkFFeEMsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQVFELGdDQUFpQixHQUFqQixVQUFrQixRQUFtQztRQUFyRCxpQkFnQ0M7UUEvQkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtTQUM3QjtRQUVELElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFckMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7U0FDbEM7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7UUFHckMsSUFBTSxZQUFZLEdBQUc7WUFDbkIsRUFBRSxJQUFBO1lBQ0YsUUFBUSxVQUFBO1lBQ1IsV0FBVyxFQUFFO2dCQUNYLElBQU0sU0FBUyxHQUFHLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2dCQUN4QyxJQUFJLFNBQVMsRUFBRTtvQkFDYixTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUMxQixJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO3dCQUN4QixLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtxQkFDMUI7aUJBQ0Y7WUFDSCxDQUFDO1NBQ0YsQ0FBQTtRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsRUFBRSxZQUFZLGNBQUEsRUFBRTtTQUN2QixDQUFBO0lBQ0gsQ0FBQztJQVFLLGlDQUFrQixHQUF4QixVQUF5QixNQUE2Qjs7Ozs7Ozt3QkFHbEQsSUFBSSxDQUFDLGtCQUFrQixDQUNyQixNQUFNLEVBQ04sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUNwQyxtREFBbUQsQ0FDcEQsQ0FBQTt3QkFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTs0QkFDMUIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7eUJBQzlELENBQUMsQ0FBQTt3QkFFRixXQUFNLElBQUksQ0FBQyxNQUFNLFlBQ2YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDM0UsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQ3RCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ2hFLEVBQUE7O3dCQUpGLFNBSUUsQ0FBQTt3QkFDaUMsV0FBTSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUE7O3dCQUFsRCxLQUEyQixDQUFBLFNBQXVCLENBQUEsS0FBNUIsRUFBdEIscUJBQW9CLEVBQUUsS0FBQSxFQUFkLE9BQU8sYUFBQTt3QkFFdkIsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sU0FBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRTdELFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFRSyxnQ0FBaUIsR0FBdkIsVUFBd0IsTUFBNEI7Ozs7Ozs7d0JBR2hELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFOzRCQUMxQixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTt5QkFDeEQsQ0FBQyxDQUFBO3dCQUVGLFdBQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dDQUM1QixjQUFjLEVBQUUsTUFBTSxDQUFDLEtBQUs7NkJBQzdCLENBQUMsRUFBQTs7d0JBRkYsU0FFRSxDQUFBO3dCQUNpQyxXQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQTs7d0JBQWxELEtBQTJCLENBQUEsU0FBdUIsQ0FBQSxLQUE1QixFQUF0QixxQkFBb0IsRUFBRSxLQUFBLEVBQWQsT0FBTyxhQUFBO3dCQUV2QixXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxTQUFBLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUE7Ozt3QkFFN0QsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQVFLLDRCQUFhLEdBQW5CLFVBQW9CLE1BQXdCOzs7Ozs7Ozt3QkFHeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLGtEQUFrRCxDQUFDLENBQUE7d0JBR2xGLFdBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUUsRUFBQTs7d0JBQXpJLHFCQUFtQixTQUFzSDt3QkFFL0ksV0FBTztnQ0FDTCxJQUFJLEVBQUU7b0NBQ0osSUFBSSxFQUFFLElBQUk7b0NBQ1YsT0FBTyxFQUFFLElBQUk7b0NBRWIsU0FBUyxFQUFFLFVBQU8sRUFBdUQ7NENBQXJELEtBQUssV0FBQSxFQUFFLGlCQUE0QyxFQUE1QyxTQUFTLG1CQUFHLGtCQUFnQixDQUFDLGVBQWUsS0FBQTs7O2dEQUEyQixXQUFBLElBQUksQ0FBQyxTQUFTLENBQUM7d0RBQy9HLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzt3REFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO3dEQUNuQixLQUFLLE9BQUE7d0RBQ0wsU0FBUyxXQUFBO3FEQUNWLENBQUMsRUFBQTs7O3FDQUFBO2lDQUNIO2dDQUNELEtBQUssRUFBRSxJQUFJOzZCQUNaLEVBQUE7Ozt3QkFFRCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBT0ssMEJBQVcsR0FBakIsVUFBa0IsTUFBdUI7Ozs7Ozt3QkFDakMsSUFBSSxHQUFRLEVBQUUsQ0FBQTs7Ozt3QkFHWixJQUFJLEdBQUcsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxLQUFJLGlCQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO3dCQUM3QyxLQUFLLEdBQUcsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxLQUFJLGlCQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFBO3dCQUd0RCxJQUFJLENBQUMsSUFBSSxFQUFFOzRCQUNULFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUE7eUJBQzNFO3dCQUVELElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ1YsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsRUFBQTt5QkFDNUU7d0JBRUssU0FBUyxHQUFHLElBQUEseUJBQWlCLEVBQUMsS0FBSyxDQUFDLENBQUE7d0JBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLElBQUksQ0FBQTt3QkFFckIsUUFBUSxHQUFHLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFFBQVEsTUFBSSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsUUFBUSxDQUFBLElBQUksaUJBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUE7d0JBRXRGLElBQUksQ0FBQyxRQUFRLEVBQUU7NEJBQ2IsV0FBTyxFQUFFLElBQUksTUFBQSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLEVBQUE7eUJBQzNFO3dCQUdpQyxXQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQ0FDOUQsV0FBVyxFQUFFLFFBQVE7Z0NBQ3JCLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVE7Z0NBQzFELGFBQWEsRUFBRSxJQUFJOzZCQUNwQixDQUFDLEVBQUE7O3dCQUpzQixLQUFLLEdBQUssQ0FBQSxTQUloQyxDQUFBLGVBSjJCO3dCQU16QixHQUFHLFNBQTZCLENBQUE7NkJBRWhDLENBQUEsU0FBUyxDQUFDLElBQUksS0FBSyxrQkFBVSxDQUFDLGFBQWEsQ0FBQSxFQUEzQyxjQUEyQzt3QkFDdkMsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLFFBQVEsVUFBQSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFBOzt3QkFBM0csR0FBRyxHQUFHLFNBQXFHLENBQUE7OzRCQUdyRyxXQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDakMsS0FBSyxPQUFBO3lCQUNOLENBQUMsRUFBQTs7d0JBRkYsR0FBRyxHQUFHLFNBRUosQ0FBQTt3QkFDRixHQUFHLENBQUMsSUFBSSx5QkFBUSxJQUFJLEdBQUssR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFBOzs7d0JBRy9CLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsTUFBTSxDQUFDLENBQUE7d0JBQ3pELFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7d0JBQzFCLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7d0JBQzNCLElBQUEsb0JBQVksRUFDVixDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxNQUFNLE1BQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsTUFBTSxFQUNsRixDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxJQUFJLEtBQUksUUFBUSxDQUFDLElBQUksQ0FDakMsQ0FBQTt3QkFDRCxJQUFBLDRCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUUzQixXQUFPLEdBQUcsRUFBQTs7O3dCQUVWLFdBQU8sRUFBRSxJQUFJLE1BQUEsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRS9DO0lBUUssOEJBQWUsR0FBckIsVUFBc0IsTUFBMEI7Ozs7Ozs7O3dCQUc1QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTs0QkFDMUIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7eUJBQzlELENBQUMsQ0FBQTt3QkFFSSxJQUFJLEdBQUcsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxPQUFPLDBDQUFFLFVBQVUsS0FBSSxRQUFRLENBQUMsSUFBSSxDQUFBO3dCQUVsRCxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBRXpCLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQTt3QkFFN0QsS0FBSyxHQUFHLENBQUEsTUFBQSxNQUFNLENBQUMsT0FBTywwQ0FBRSxLQUFLLEtBQUksY0FBTyxNQUFNLENBQUMsUUFBUSxjQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDOzZCQUN4RixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQTt3QkFFRyxXQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztnQ0FDaEQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dDQUM1QixxQkFBcUIsdUJBQUE7Z0NBQ3JCLEtBQUssT0FBQTs2QkFDTixDQUFDLEVBQUE7O3dCQUpNLEdBQUcsR0FBSyxDQUFBLFNBSWQsQ0FBQSxJQUpTO3dCQU9MLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQTt3QkFHdEMsUUFBUSxHQUFHLFVBQVUsQ0FBQTt3QkFFekIsSUFBSSxNQUFBLE1BQU0sQ0FBQyxPQUFPLDBDQUFFLFdBQVcsRUFBRTs0QkFDekIsUUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTs0QkFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQVk7b0NBQVgsR0FBRyxRQUFBLEVBQUUsS0FBSyxRQUFBO2dDQUM3RCxLQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7NEJBQ2xDLENBQUMsQ0FBQyxDQUFBOzRCQUNGLFFBQVEsR0FBRyxLQUFHLENBQUMsUUFBUSxFQUFFLENBQUE7eUJBQzFCO3dCQUVELElBQUEsNEJBQW9CLEVBQUMsS0FBSyxFQUFFOzRCQUMxQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7NEJBQ3pCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTs0QkFDeEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJOzRCQUNwQixJQUFJLEVBQUUsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxPQUFPLDBDQUFFLElBQUksS0FBSSxrQkFBVSxDQUFDLE9BQU87eUJBQ2pELENBQUMsQ0FBQTt3QkFFRixJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQSxNQUFBLE1BQU0sQ0FBQyxPQUFPLDBDQUFFLG1CQUFtQixDQUFBLEVBQUU7NEJBQ3ZELE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO3lCQUNqQzt3QkFFRCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTs7O3dCQUUxRSxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBR0ssd0JBQVMsR0FBZjs7Ozs7Ozt3QkFFNEIsV0FBTSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUE7O3dCQUEzQyxXQUFXLEdBQUssQ0FBQSxTQUEyQixDQUFBLFlBQWhDO3dCQUNiLFdBQVcsR0FBRyxJQUFBLHlCQUFpQixFQUFDLFdBQVcsQ0FBQyxDQUFBO3dCQUNsRCxXQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUE7Ozt3QkFFekMsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQVFLLG9DQUFxQixHQUEzQixVQUNFLFlBQW9CLEVBQ3BCLE9BQWlDOzs7Ozs7Ozt3QkFJL0IsSUFBSSxDQUFDLGNBQWMsQ0FDakIsRUFBRSxZQUFZLGNBQUEsRUFBRSxFQUNoQjs0QkFDRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRTt5QkFDeEUsQ0FDRixDQUFBO3dCQUVPLGVBQWUsQ0FBQSxPQUFPLElBQUksRUFBRSxDQUFBLFdBQWxCLENBQWtCO3dCQUc5QixZQUFVLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBQ3RDLGtCQUFrQixTQUEyQyxDQUFBO3dCQUVqRSxJQUFJLFNBQU8sRUFBRTs0QkFDWCxrQkFBa0IsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQTt5QkFDN0M7NkJBQU07NEJBRUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7NEJBQ3JELGtCQUFrQixHQUFHLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxDQUFBO3lCQUN0RDt3QkFHd0IsV0FBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUE7O3dCQUFqRSxxQkFBbUIsU0FBOEM7d0JBRXZFLFdBQU87Z0NBQ0wsSUFBSSxFQUFFO29DQUVKLFVBQVUsRUFBRSxVQUFPLFVBQWdDOzs7Ozs7b0RBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO3dEQUM5QixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTt3REFDdkQsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7cURBQzlELENBQUMsQ0FBQTs7OztvREFHNkIsV0FBTSxJQUFJLENBQUMsTUFBTSxDQUFDOzREQUM3QyxlQUFlLEVBQUUsa0JBQWdCLENBQUMsZUFBZTs0REFDakQsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEtBQUs7eURBQ3BDLENBQUMsRUFBQTs7b0RBSEksb0JBQW9CLEdBQUcsU0FHM0I7b0RBRUYsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7NERBQzdDLEtBQUssRUFBRSxTQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUzs0REFDekMsWUFBWSxFQUFFLENBQUMsU0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7NERBQ2pELFlBQVksRUFBRSxVQUFVLENBQUMsUUFBUTs0REFDakMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCO3lEQUM1RCxDQUFDLEVBQUE7O29EQUxGLFNBS0UsQ0FBQTtvREFFRixNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSwwQ0FBRSxJQUFJLENBQUMsY0FBTSxDQUFDLGtCQUFrQixFQUFFO3dEQUNwRCxLQUFLLEVBQUUsK0JBQXVCLENBQUMsaUJBQWlCO3FEQUNqRCxDQUFDLENBQUE7b0RBRVUsV0FBTSxJQUFJLENBQUMsa0JBQWtCLENBQUM7NERBQ3hDLEtBQUssRUFBRSxTQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUzs0REFDekMsS0FBSyxFQUFFLENBQUMsU0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7NERBQzFDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTt5REFDOUIsQ0FBQyxFQUFBOztvREFKSSxHQUFHLEdBQUcsU0FJVjtvREFFRixJQUFJLFlBQVUsSUFBSSxTQUFTLEVBQUUsRUFBRTt3REFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBVSxDQUFDLENBQUE7cURBQ25DO29EQUVELFdBQU8sR0FBRyxFQUFBOzs7b0RBRVYsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7O3lDQUVuRDtpQ0FDRjtnQ0FDRCxLQUFLLEVBQUUsSUFBSTs2QkFDWixFQUFBOzs7d0JBRUQsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQVFLLGtDQUFtQixHQUF6QixVQUEwQixNQUE4Qjs7Ozs7Ozt3QkFFcEQsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztnQ0FDbkQsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dDQUNqQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7NkJBQ2xDLENBQUMsRUFBQTs7d0JBSEYsU0FHRSxDQUFBO3dCQUVpQyxXQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQTs7d0JBQWxELEtBQTJCLENBQUEsU0FBdUIsQ0FBQSxLQUE1QixFQUF0QixxQkFBb0IsRUFBRSxLQUFBLEVBQWQsT0FBTyxhQUFBO3dCQUV2QixXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxTQUFBLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUE7Ozt3QkFFN0QsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQVFLLHdCQUFTLEdBQWYsVUFBZ0IsTUFBb0I7Ozs7Ozs7d0JBRXhCLElBQUksR0FBSyxNQUFNLEtBQVgsQ0FBVzt3QkFFdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7NEJBQzFCLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFOzRCQUN2RCxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRTt5QkFDaEUsQ0FBQyxDQUFBOzZCQUVFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBL0MsY0FBK0M7d0JBQ2pELFdBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQztnQ0FDaEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dDQUNqQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsS0FBSzs2QkFDaEMsQ0FBQyxFQUFBOzt3QkFIRixTQUdFLENBQUE7OzRCQUVGLFdBQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDOzRCQUM1QixnQkFBZ0IsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7NEJBQ3RFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxLQUFLOzRCQUM5QixRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFOzRCQUM5RCxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO3lCQUM1QyxDQUFDLEVBQUE7O3dCQUxGLFNBS0UsQ0FBQTs7NEJBRytCLFdBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFBOzt3QkFBbEQsS0FBMkIsQ0FBQSxTQUF1QixDQUFBLEtBQTVCLEVBQXRCLHFCQUFvQixFQUFFLEtBQUEsRUFBZCxPQUFPLGFBQUE7d0JBRXZCLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLFNBQUEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTs7O3dCQUU3RCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBT0sseUJBQVUsR0FBaEI7Ozs7Ozs7d0JBRXFDLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUE7O3dCQUFqRixXQUFXLEdBQWdCLFNBQXNEO3dCQUV2RixJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFOzRCQUNyRCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTt5QkFDaEQ7d0JBRStCLFdBQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFBOzt3QkFBNUMsS0FBd0IsQ0FBQSxTQUFvQixDQUFBLEtBQXpCLEVBQW5CLHFCQUFpQixFQUFFLEtBQUEsRUFBWCxJQUFJLFVBQUE7d0JBRXBCLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLHdCQUFPLFdBQVcsS0FBRSxJQUFJLE1BQUEsR0FBRSxFQUFFLElBQUksTUFBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRXpFLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFRSyw2QkFBYyxHQUFwQixVQUFxQixhQUFzQjs7Ozs7Ozt3QkFFTixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxFQUFBOzt3QkFBbEcsV0FBVyxHQUFnQixTQUF1RTt3QkFDeEcsV0FBVyxDQUFDLGFBQWEsR0FBRyxhQUFhLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQTt3QkFDcEQsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUE7O3dCQUEzRSxTQUFTLEdBQUcsU0FBK0Q7d0JBQ2pELFdBQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFBOzt3QkFBNUMsS0FBd0IsQ0FBQSxTQUFvQixDQUFBLEtBQXpCLEVBQW5CLHFCQUFpQixFQUFFLEtBQUEsRUFBWCxJQUFJLFVBQUE7d0JBRXBCLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLE1BQUEsRUFBRSxPQUFPLHdCQUFPLFNBQVMsS0FBRSxJQUFJLE1BQUEsR0FBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRXZFLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFPSyxzQkFBTyxHQUFiOzs7Ozs7O3dCQUVpQixLQUFBLElBQUksQ0FBQyxhQUFhLENBQUE7d0JBQUMsV0FBTSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUE7O3dCQUFsRCxJQUFJLEdBQUcsU0FBQSxJQUFJLEdBQWUsU0FBd0IsRUFBQzt3QkFDekQsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksTUFBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRXRDLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFNSywwQkFBVyxHQUFqQjs7Ozs7Ozt3QkFFSSxXQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUE7O3dCQUFoQyxTQUFnQyxDQUFBO3dCQUVHLFdBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFBOzt3QkFBbEQsS0FBMkIsQ0FBQSxTQUF1QixDQUFBLEtBQTVCLEVBQXRCLHFCQUFvQixFQUFFLEtBQUEsRUFBZCxPQUFPLGFBQUE7d0JBQ3ZCLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLFNBQUEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTs7O3dCQUU3RCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBUUsseUJBQVUsR0FBaEIsVUFBaUIsTUFBcUI7Ozs7Ozs7Ozt3QkFHNUIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQXZFLENBQXVFLENBQUUsQ0FBQTt3QkFDMUgsSUFBSSxDQUFDLFFBQVEsRUFBRTs0QkFDYixNQUFNLElBQUksaUJBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsRUFBRSxDQUFDLENBQUE7eUJBQ25GO3dCQUVPLEtBQUssR0FBMkIsTUFBTSxNQUFqQyxFQUFFLEtBQUssR0FBb0IsTUFBTSxNQUExQixFQUFLLFVBQVUsVUFBSyxNQUFNLEVBQXhDLGtCQUErQixDQUFGLENBQVc7d0JBR3hDLDJCQUF5QixLQUFLLEtBQUssU0FBUyxDQUFBO3dCQUM1QyxzQkFBc0IsR0FBRyxLQUFLLEtBQUssU0FBUyxDQUFBO3dCQUU5QyxRQUFRLEdBQUcsRUFBRSxDQUFBOzZCQUViLENBQUEsd0JBQXNCLElBQUksc0JBQXNCLENBQUEsRUFBaEQsY0FBZ0Q7d0JBRTlDLGtCQUFrQixTQUEyQyxDQUFBO3dCQUdqRSxJQUFJLHdCQUFzQixFQUFFOzRCQUMxQixrQkFBa0IsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7NEJBQzVDLGtCQUFnQixHQUFHLGNBQWMsQ0FBQTt5QkFDbEM7NkJBQU07NEJBRUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBOzRCQUNyRCxrQkFBa0IsR0FBRyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsQ0FBQTs0QkFDckQsa0JBQWdCLEdBQUcsY0FBYyxDQUFBO3lCQUNsQzt3QkFHd0IsV0FBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUE7O3dCQUFqRSxxQkFBbUIsU0FBOEM7d0JBRXZFLEtBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO2lDQUFsQyxjQUFrQzt3QkFBSyxXQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBQTs7d0JBQTNDLEtBQUEsQ0FBQyxTQUEwQyxDQUFDLENBQUE7Ozt3QkFBbEYsR0FBa0Y7d0JBRWxGLFFBQVEsR0FBRzs0QkFDVCxTQUFTLEVBQUUsa0JBQWdCLENBQUMsZUFBZTs0QkFDM0MsU0FBUyxFQUFFLFVBQU8sWUFBK0Q7Ozs7Ozs7aURBRXpFLENBQUEsWUFBWSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUEsRUFBekQsY0FBeUQ7NENBRTNELFdBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztvREFDbkIsSUFBSSxFQUFFLGNBQWM7b0RBQ3BCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztvREFDbkIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO29EQUN6QixTQUFTLEVBQUUsa0JBQWdCLENBQUMsZUFBZTtpREFDNUMsQ0FBQyxFQUFBOzs0Q0FMRixTQUtFLENBQUE7NENBQ0YsV0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUE7OzRDQUF2RCxTQUF1RCxDQUFBOzs7aURBQzlDLENBQUEsWUFBWSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUEsRUFBekQsY0FBeUQ7NENBRWxFLFdBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztvREFDbkIsSUFBSSxFQUFFLGNBQWM7b0RBQ3BCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztvREFDbkIsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO29EQUN6QixTQUFTLEVBQUUsa0JBQWdCLENBQUMsZUFBZTtpREFDNUMsQ0FBQyxFQUFBOzs0Q0FMRixTQUtFLENBQUE7NENBQ0YsV0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFBOzs0Q0FBekUsU0FBeUUsQ0FBQTs7Z0RBRXpFLFdBQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnREFDbkIsSUFBSSxFQUFFLGtCQUFnQjtnREFDdEIsS0FBSyxFQUFFLHdCQUFzQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dEQUN4RCxLQUFLLEVBQUUsQ0FBQyx3QkFBc0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztnREFDekQsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO2dEQUN6QixTQUFTLEVBQUUsa0JBQWdCLENBQUMsZUFBZTs2Q0FDNUMsQ0FBQyxFQUFBOzs0Q0FORixTQU1FLENBQUE7NENBRUYsV0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUE7OzRDQUF0QyxTQUFzQyxDQUFBOztnREFLcEMsV0FBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUE7OzRDQURkLFNBQ04sQ0FBQSxTQUFvQixDQUFBLFVBRFY7NENBRWQsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLGNBQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSwrQkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFBOzRDQUV0RyxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxRQUFBLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUE7Ozs0Q0FFdEMsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7O2lDQUVuRDt5QkFDRixDQUFBOzs0QkFHRCxXQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsRUFBQTs7d0JBQXRDLFNBQXNDLENBQUE7OzRCQUlwQyxXQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBQTs7d0JBRGQsSUFBSSxHQUNWLENBQUEsU0FBb0IsQ0FBQSxVQURWO3dCQUVkLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxjQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsK0JBQXVCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTt3QkFFdEcsV0FBTyxFQUFFLElBQUksYUFBSSxJQUFJLE1BQUEsSUFBSyxRQUFRLENBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUE7Ozt3QkFFbkQsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQU9LLGdDQUFpQixHQUF2Qjs7Ozs7Ozs7d0JBRXNCLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUE7O3dCQUEzRCxTQUFTLEdBQUcsU0FBK0M7d0JBRWpFLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBQSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsSUFBSSwwQ0FBRSxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBUixDQUFRLENBQTBELEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUE7Ozt3QkFFN0ksV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzs7OztLQUVuRDtJQVFLLDJCQUFZLEdBQWxCLFVBQW1CLE1BQXVCOzs7Ozs7O3dCQUd0QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTs0QkFDMUIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUU7eUJBQzlELENBQUMsQ0FBQTt3QkFFRixXQUFNLElBQUksQ0FBQyxlQUFlLENBQUM7Z0NBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQ0FDekIsT0FBTyxFQUFFO29DQUNQLElBQUksRUFBRSxrQkFBVSxDQUFDLGFBQWE7aUNBQy9COzZCQUNGLENBQUMsRUFBQTs7d0JBTEYsU0FLRSxDQUFBO3dCQUVGLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTs7O3dCQUUzRCxXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBUUssNkJBQWMsR0FBcEIsVUFBcUIsTUFBeUI7Ozs7Ozs7d0JBRzFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFOzRCQUMxQixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRTt5QkFDOUQsQ0FBQyxDQUFBO3dCQUVGLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFBOzt3QkFBakYsU0FBaUYsQ0FBQTt3QkFFakYsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRWhDLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFPSyw2QkFBYyxHQUFwQjs7Ozs7Ozs7d0JBSVEsV0FBTSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUE7O3dCQURkLElBQUksR0FDVixDQUFBLFNBQW9CLENBQUEsVUFEVjt3QkFHZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxrREFBa0QsQ0FBQyxDQUFBO3dCQUNqRyxhQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQTt3QkFHM0UsV0FBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVEsQ0FBQyxFQUFBOzt3QkFBdkQscUJBQW1CLFNBQW9DO3dCQUU3RCxXQUFPO2dDQUNMLElBQUksRUFBRTtvQ0FFSixVQUFVLEVBQUUsVUFBTyxVQUFnQzs7Ozs7b0RBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO3dEQUM5QixLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtxREFDeEQsQ0FBQyxDQUFBOzs7O3lEQUVJLFVBQVUsQ0FBQyxRQUFRLEVBQW5CLGNBQW1CO29EQUVRLFdBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQzs0REFDN0MsZUFBZSxFQUFFLGtCQUFnQixDQUFDLGVBQWU7NERBQ2pELGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxLQUFLO3lEQUNwQyxDQUFDLEVBQUE7O29EQUhJLG9CQUFvQixHQUFHLFNBRzNCO29EQUdjLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDOzREQUNwRCxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxrQkFBa0I7eURBQzVELENBQUMsRUFBQTs7b0RBRkksT0FBTyxHQUFHLFNBRWQ7b0RBRUYsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7NERBQzNDLFlBQVksRUFBRSxVQUFVLENBQUMsUUFBUTs0REFDakMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO3lEQUMvQixDQUFDLEVBQUE7O29EQUhGLFNBR0UsQ0FBQTs7d0RBRUYsV0FBTSxJQUFJLENBQUMsa0JBQWtCLHFCQUMzQixnQkFBZ0Isb0JBQUEsRUFDaEIsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLEtBQUssSUFDL0IsVUFBUSxLQUNYLFNBQVMsRUFBRSxVQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFDN0MsRUFBQTs7b0RBTEYsU0FLRSxDQUFBOzt3REFHK0IsV0FBTSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUE7O29EQUFsRCxLQUEyQixDQUFBLFNBQXVCLENBQUEsS0FBNUIsRUFBdEIscUJBQW9CLEVBQUUsS0FBQSxFQUFkLE9BQU8sYUFBQTtvREFFdkIsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sU0FBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7b0RBRTdELFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozt5Q0FFbkQ7aUNBQ0Y7Z0NBQ0QsS0FBSyxFQUFFLElBQUk7NkJBQ1osRUFBQTs7O3dCQUVELFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFRSyxxQkFBTSxHQUFaLFVBQWEsTUFBaUI7Ozs7Ozs7d0JBRzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxrREFBa0QsQ0FBQyxDQUFBO3dCQUVyRyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO3dCQUNsRCxJQUFJLEdBQXNFLEVBQUUsTUFBTSxRQUFBLEVBQUUsQ0FBQTt3QkFDMUYsSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFOzRCQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUE7eUJBQzFCO3dCQUVELElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRTs0QkFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTt5QkFDbkQ7d0JBRzJDLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFBOzt3QkFBekUsY0FBYyxHQUFLLENBQUEsU0FBc0QsQ0FBQSxnQkFBM0Q7d0JBRXZDLFdBQU87Z0NBQ0wsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQ0FDbkMsS0FBSyxFQUFFLElBQUk7NkJBQ1osRUFBQTs7O3dCQUVELFdBQU87Z0NBQ0wsSUFBSSxFQUFFLEVBQUU7Z0NBQ1IsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUM7NkJBQzVCLEVBQUE7Ozs7O0tBRUo7SUFRSyx5QkFBVSxHQUFoQixVQUFpQixNQUFxQjs7Ozs7Ozs7d0JBRWxDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFOzRCQUMxQixZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRTs0QkFDckUsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUU7eUJBQ3hFLENBQUMsQ0FBQTt3QkFFRixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBQTs7d0JBQWhGLFNBQWdGLENBQUE7d0JBRTdDLFdBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFBOzt3QkFBbEQsS0FBMkIsQ0FBQSxTQUF1QixDQUFBLEtBQTVCLEVBQXRCLHFCQUFvQixFQUFFLEtBQUEsRUFBZCxPQUFPLGFBQUE7d0JBRXZCLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxjQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsK0JBQXVCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTt3QkFFbkcsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sU0FBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRTdELFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFHSyxxQ0FBc0IsR0FBNUI7Ozs7OztLQUVDO0lBT0sseUJBQVUsR0FBaEIsVUFBaUIsTUFBbUI7Ozs7Ozs7d0JBRWhDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFOzRCQUMxQixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRTt5QkFDOUQsQ0FBQyxDQUFBO3dCQUVxQixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBQTs7d0JBQTVELFVBQVUsR0FBSyxDQUFBLFNBQTZDLENBQUEsV0FBbEQ7d0JBRWxCLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxZQUFBLEVBQUUsQ0FBQyxFQUFBOzt3QkFBekQsU0FBeUQsQ0FBQTt3QkFFekQsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFBOzs7d0JBRWhDLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsUUFBSyxDQUFDLEVBQUUsRUFBQTs7Ozs7S0FFbkQ7SUFPSyxpQ0FBa0IsR0FBeEIsVUFBeUIsTUFBMEM7UUFBMUMsdUJBQUEsRUFBQSxXQUEwQzs7OztnQkFDakUsSUFBSTtvQkFDSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUE7b0JBQzlDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO3lCQUMxQyxHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxVQUFHLEdBQUcsY0FBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFFLEVBQTdCLENBQTZCLENBQUM7eUJBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFFWixJQUFJLDBCQUFjLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzVCLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsZ0RBQXlDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBSSxLQUFLLENBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLEVBQUUsQ0FBQyxDQUFBO3FCQUM1Rjt5QkFBTTt3QkFDQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTt3QkFDekQsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO3dCQUM3QixTQUFTLEdBQUcsVUFBRyxNQUFNLENBQUMsTUFBTSw2QkFBbUIsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLHFCQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyx3QkFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLDZCQUN0QixhQUFhLDJCQUFpQixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsU0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQUksS0FBSyxDQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxDQUFBO3dCQUM3RyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUE7cUJBQ2pDO29CQUNELFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTtpQkFDakM7Z0JBQUMsT0FBTyxLQUFLLEVBQUU7b0JBQ2QsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFBO2lCQUNqRDs7OztLQUNGO0lBT0sscUNBQXNCLEdBQTVCLFVBQTZCLFNBQTRDOzs7Ozs7d0JBQ3ZFLElBQUksU0FBUyxFQUFFOzRCQUNiLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTt5QkFDbEM7Ozs7d0JBR0MsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxFQUFBOzt3QkFBekQsU0FBeUQsQ0FBQTt3QkFDdEMsV0FBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBQTs7d0JBQTFDLFVBQVUsR0FBRyxTQUE2Qjt3QkFFYixXQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQTs7d0JBQWxELEtBQTJCLENBQUEsU0FBdUIsQ0FBQSxLQUE1QixFQUF0QixxQkFBb0IsRUFBRSxLQUFBLEVBQWQsT0FBTyxhQUFBO3dCQUd2QixpQ0FBYSxVQUFrQixLQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sU0FBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBRTs7O3dCQUVyRixXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBT0ssK0JBQWdCLEdBQXRCLFVBQXVCLEVBQTBCO1lBQTFCLHFCQUF3QixFQUFFLEtBQUEsRUFBeEIsa0JBQWlCLEVBQWpCLFVBQVUsbUJBQUcsSUFBSSxLQUFBOzs7Ozs7O3dCQUN4QyxJQUFJLENBQUMsMEJBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRTs0QkFDN0IsTUFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQTt5QkFDaEM7d0JBQ0ssTUFBTSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQTt3QkFFNUMsUUFBUSxHQUFHLFVBQU8sSUFBSTs7Ozs7d0NBQ3RCLE1BQU0sR0FBc0QsU0FBUyxDQUFBO3dDQUNyRSxXQUFXLEdBQTRCLFNBQVMsQ0FBQTs7Ozt3Q0FHekMsV0FBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDMUQ7Z0RBQ0UsV0FBVyxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLO2dEQUMxQixhQUFhLEVBQUUsSUFBSTtnREFDbkIsZUFBZSxFQUFFO29EQUNmLGtCQUFrQixFQUFFLFNBQVM7b0RBQzdCLEtBQUssRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSztpREFDckI7NkNBQ0YsRUFDRCxVQUFVLENBQ1gsRUFBQTs7d0NBVkQsTUFBTSxHQUFHLFNBVVIsQ0FBQTt3Q0FFRCxJQUFJLENBQUMsTUFBYyxhQUFkLE1BQU0sdUJBQU4sTUFBTSxDQUFVLFVBQVUsS0FBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7NENBQ3pELE1BQU0sTUFBTSxDQUFBO3lDQUNiO3dDQUVhLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQy9ELEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFDekMsVUFBVSxDQUNYLEVBQUE7O3dDQUhELFdBQVcsR0FBRyxTQUdiLENBQUE7d0NBRUQsSUFBSyxXQUFtQixhQUFuQixXQUFXLHVCQUFYLFdBQVcsQ0FBVSxVQUFVLEVBQUU7NENBQ3BDLE1BQU0sV0FBVyxDQUFBO3lDQUNsQjs7Ozt3Q0FFRCxNQUFNLFFBQUssQ0FBQTs0Q0FFYixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUEwQixDQUFDLEVBQUE7O3dDQUFoRixTQUFnRixDQUFBOzs7OzZCQUNqRixDQUFBOzs7O3dCQUdDLFdBQU0sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtnQ0FDaEMsRUFBRSxDQUFDLEtBQUssQ0FBQztvQ0FDUCxPQUFPLEVBQUUsVUFBTyxHQUFxQjs7Ozs7O29EQUVqQyxXQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUE7O29EQUF4QixTQUF3QixDQUFBO29EQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Ozs7b0RBRWIsTUFBTSxDQUFDLFFBQUssQ0FBQyxDQUFBOzs7Ozt5Q0FFaEI7b0NBQ0QsSUFBSSxFQUFFLFVBQUMsR0FBUTt3Q0FDYixJQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsTUFBTSxDQUFDLENBQ25DO3dDQUFDLEtBQWEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLEtBQUssQ0FBQTt3Q0FDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO29DQUNmLENBQUM7aUNBQ0YsQ0FBQyxDQUFBOzRCQUNKLENBQUMsQ0FBQyxFQUFBOzt3QkFoQkYsU0FnQkUsQ0FBQTt3QkFFaUIsV0FBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBQTs7d0JBQTFDLFVBQVUsR0FBRyxTQUE2Qjt3QkFFYixXQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBQTs7d0JBQWxELEtBQTJCLENBQUEsU0FBdUIsQ0FBQSxLQUE1QixFQUF0QixxQkFBb0IsRUFBRSxLQUFBLEVBQWQsT0FBTyxhQUFBO3dCQUd2QixpQ0FBYSxVQUFrQixLQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sU0FBQSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksS0FBRTs7O3dCQUVyRixXQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxpQkFBUyxDQUFDLFFBQUssQ0FBQyxFQUFFLEVBQUE7Ozs7O0tBRW5EO0lBT0ssa0NBQW1CLEdBQXpCLFVBQTBCLEVBQWtCO1lBQWhCLGlCQUFjLEVBQWQsU0FBUyxtQkFBRyxFQUFFLEtBQUE7Ozs7Ozt3QkFDeEMsSUFBSSxDQUFDLDBCQUFjLENBQUMsT0FBTyxFQUFFLEVBQUU7NEJBQzdCLFdBQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLGlCQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUE7eUJBQzNFO3dCQUNLLE1BQU0sR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxXQUFXLENBQUE7d0JBQzVDLFlBQVksR0FBRzs0QkFDbkIsZUFBZSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFOzRCQUNoRCxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUs7eUJBQzFCLENBQUE7d0JBRWdCLFdBQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFBOzt3QkFBekIsSUFBSSxHQUFLLENBQUEsU0FBZ0IsQ0FBQSxLQUFyQjt3QkFDVixZQUFvQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7Ozs7d0JBR3JCLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUE7O3dCQUFqRixhQUFhLEdBQUcsU0FBaUU7d0JBQ3JGLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRTs0QkFDNUIsTUFBTSxhQUFhLENBQUE7eUJBQ3BCO3dCQUVlLFdBQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7Z0NBQ2xFLGNBQWMsRUFBRSxhQUFhLENBQUMsY0FBYztnQ0FDNUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dDQUN6QixlQUFlLEVBQUU7b0NBQ2YsSUFBSSxFQUFFLFNBQVM7b0NBQ2Ysa0JBQWtCLEVBQUUsT0FBTztpQ0FDNUI7NkJBQ0YsQ0FBQyxFQUFBOzt3QkFQRixhQUFhLEdBQUcsU0FPZCxDQUFBO3dCQUNGLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRTs0QkFDNUIsTUFBTSxhQUFhLENBQUE7eUJBQ3BCO3dCQUVpQixXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2dDQUNwRSxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7NkJBQzdDLENBQUMsRUFBQTs7d0JBRkksU0FBUyxHQUFHLFNBRWhCO3dCQUVGLElBQUssU0FBaUIsYUFBakIsU0FBUyx1QkFBVCxTQUFTLENBQVUsVUFBVSxFQUFFOzRCQUNsQyxNQUFNLFNBQVMsQ0FBQTt5QkFDaEI7Ozs7d0JBRUQsV0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksaUJBQVMsQ0FBQyxRQUFLLENBQUMsRUFBRSxFQUFBOzRCQUcvQixXQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFBOzt3QkFBMUMsVUFBVSxHQUFHLFNBQTZCO3dCQUViLFdBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFBOzt3QkFBbEQsS0FBMkIsQ0FBQSxTQUF1QixDQUFBLEtBQTVCLEVBQXRCLHFCQUFvQixFQUFFLEtBQUEsRUFBZCxPQUFPLGFBQUE7d0JBR3ZCLGlDQUFhLFVBQWtCLEtBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxTQUFBLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFFOzs7O0tBQ3RGO0lBRU8sMEJBQVcsR0FBbkIsVUFBb0IsS0FBYTtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQTtTQUNwRDtRQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFPLEtBQUssQ0FBRSxDQUFBO0lBQzdELENBQUM7SUFFTyw4QkFBZSxHQUF2QixVQUF3QixLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUk7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQyxTQUFTO1lBQy9CLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBQyxRQUFRO2dCQUN6QixJQUFJO29CQUNGLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO2lCQUMvQjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxFQUFFLEtBQUssQ0FBQyxDQUFBO2lCQUM3RDtZQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVPLDZCQUFjLEdBQXRCO1FBQUEsaUJBVUM7O1FBVEMsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsMENBQUUsRUFBRSxDQUFDLGNBQU0sQ0FBQyxrQkFBa0IsRUFBRSxVQUFPLE1BQU07Ozs7Ozt3QkFDekQsS0FBSyxHQUFHLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksMENBQUUsS0FBSyxDQUFBO3dCQUMzQixJQUFJLEdBQUcsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSwwQ0FBRSxJQUFJLENBQUE7d0JBRzNCLFdBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFBOzt3QkFEakIsT0FBTyxHQUNiLENBQUEsU0FBdUIsQ0FBQSxhQURWO3dCQUdqQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7Ozs7YUFDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLDRCQUFhLEdBQXJCLFVBQXNCLFFBQTZDOztRQUNqRSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRzFCLElBQU0sS0FBSyxHQUFHLENBQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEtBQUssS0FBSSxFQUFFLENBQUE7UUFDbkMsSUFBTSxLQUFLLEdBQUcsQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsWUFBWSxLQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFNLE1BQU0sR0FBRyxDQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxHQUFHLE1BQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEdBQUcsQ0FBQSxJQUFJLEVBQUUsQ0FBQTtRQUVuRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLE1BQU07WUFDVixHQUFHLEVBQUUsZUFBZTtZQUNwQixJQUFJLEVBQUUsTUFBQSxNQUFBLFFBQVEsQ0FBQyxNQUFNLDBDQUFFLEdBQUcsbURBQUcsVUFBQSxLQUFLLElBQUksT0FBQSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQTlDLENBQThDLENBQUM7WUFDckYsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xCLGtCQUFrQixFQUFFLENBQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGNBQWMsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDeEYsS0FBSyxPQUFBO1lBQ0wsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNELFlBQVksRUFBRSxRQUFRLENBQUMsVUFBVTtZQUNqQyxlQUFlLEVBQUcsUUFBZ0IsQ0FBQyxlQUFlO1lBQ2xELFlBQVksRUFBRTtnQkFDWixRQUFRLEVBQUUsQ0FBQSxNQUFBLFFBQVEsQ0FBQyxTQUFTLDBDQUFFLFdBQVcsRUFBRSxLQUFJLFdBQVc7Z0JBQzFELFNBQVMsRUFBRSxDQUFDLENBQUEsTUFBQSxRQUFRLENBQUMsU0FBUywwQ0FBRSxXQUFXLEVBQUUsS0FBSSxXQUFXLENBQUM7YUFDOUQ7WUFDRCxhQUFhLEVBQUU7Z0JBRWIsSUFBSSxFQUFFLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxJQUFJO2dCQUNwQixPQUFPLEVBQUUsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE9BQU87Z0JBQzFCLFFBQVEsRUFBRSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsUUFBUTtnQkFDNUIsTUFBTSxFQUFFLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxNQUFNO2dCQUN4QixNQUFNLEVBQUUsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLE1BQU07Z0JBRXhCLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDakIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEtBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLElBQUksQ0FBQTtnQkFDN0MsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLE9BQU87Z0JBQ2pELFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO2FBQ2xDO1lBQ0QsVUFBVSxFQUNSLENBQUEsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsU0FBUywwQ0FBRSxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDO2dCQUM3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO2dCQUNkLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7Z0JBQ3ZCLE9BQU8sRUFBRSxNQUFNO2dCQUNmLGFBQWEsRUFBRTtvQkFDYixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ2pCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7b0JBQ3BDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtpQkFDYjtnQkFDRCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxXQUFXO2dCQUM3QixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQy9CLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDL0IsZUFBZSxFQUFHLFFBQWdCLENBQUMsZUFBZTthQUNuRCxDQUFDLEVBYjRCLENBYTVCLENBQUMsS0FBSSxFQUFFO1lBQ1gsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUMvQixZQUFZLEVBQUUsUUFBUSxDQUFDLElBQUksS0FBSyxXQUFXO1NBQzVDLENBQUE7SUFDSCxDQUFDO0lBS08sNkJBQWMsR0FBdEIsVUFBdUIsTUFBVyxFQUFFLEtBQWlFO1FBQ25HLEtBQTBCLFVBQXFCLEVBQXJCLEtBQUEsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBckIsY0FBcUIsRUFBckIsSUFBcUIsRUFBRTtZQUF0QyxJQUFBLFdBQVcsRUFBVixHQUFHLFFBQUEsRUFBRSxJQUFJLFFBQUE7WUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUcsR0FBRyxDQUFDLE1BQUssU0FBUyxJQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFHLEdBQUcsQ0FBQyxNQUFLLElBQUksSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRyxHQUFHLENBQUMsTUFBSyxFQUFFLENBQUMsRUFBRTtnQkFDcEcsTUFBTSxJQUFJLGlCQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7YUFDL0M7U0FDRjtJQUNILENBQUM7SUFLTyxpQ0FBa0IsR0FBMUIsVUFBMkIsTUFBVyxFQUFFLFdBQXVCLEVBQUUsT0FBZTtRQUM5RSxJQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFHLEtBQUssQ0FBQyxNQUFLLFNBQVMsSUFBSSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRyxLQUFLLENBQUMsTUFBSyxJQUFJLElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUcsS0FBSyxDQUFDLE1BQUssRUFBRSxFQUFuRixDQUFtRixDQUFDLEVBQXhHLENBQXdHLENBQUUsQ0FBQTtRQUVySixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxJQUFJLGlCQUFTLENBQUMsRUFBRSxPQUFPLFNBQUEsRUFBRSxDQUFDLENBQUE7U0FDakM7SUFDSCxDQUFDO0lBRWEsbUJBQUksR0FBbEI7Ozs7Ozs7O3dCQUVxQyxXQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxFQUFBOzt3QkFBbEcsV0FBVyxHQUFnQixTQUF1RTt3QkFDeEcsSUFBSSxXQUFXLEVBQUU7NEJBQ2YsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLGNBQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEtBQUssRUFBRSwrQkFBdUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFBO3lCQUMxRzs7Ozs7NEJBS0gsV0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBQTs7OztLQUN2QjtJQTNuRVk7UUFUWixJQUFBLGdDQUFvQixFQUFDO1lBQ3BCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLDhDQUE4QztnQkFDOUMsd0JBQXdCO2dCQUN4QixzS0FBNkIsOEJBQWtCLENBQUU7YUFDbEQ7U0FDRixDQUFDOzs7OytDQUdEO0lBZVk7UUFUWixJQUFBLGdDQUFvQixFQUFDO1lBQ3BCLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLDZDQUE2QztnQkFDN0Msd0JBQXdCO2dCQUN4QixzS0FBNkIsOEJBQWtCLENBQUU7YUFDbEQ7U0FDRixDQUFDOzs7OzhDQUdEO0lBaUJNO1FBVE4sSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVix3Q0FBd0M7Z0JBQ3hDLHVCQUF1QjtnQkFDdkIsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7Ozt5Q0FHRDtJQWlCWTtRQVRaLElBQUEsZ0NBQW9CLEVBQUM7WUFDcEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsUUFBUSxFQUFFO2dCQUNSLFVBQVU7Z0JBQ1YscUNBQXFDO2dCQUNyQywyQkFBMkI7Z0JBQzNCLHNLQUE2Qiw4QkFBa0IsQ0FBRTthQUNsRDtTQUNGLENBQUM7Ozs7c0NBR0Q7SUFpQlk7UUFUWixJQUFBLGdDQUFvQixFQUFDO1lBQ3BCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLDhDQUE4QztnQkFDOUMsMkJBQTJCO2dCQUMzQixzS0FBNkIsOEJBQWtCLENBQUU7YUFDbEQ7U0FDRixDQUFDOzs7OytDQU1EO0lBa0NZO1FBUlosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDViw2Q0FBNkM7Z0JBQzdDLHNLQUE2Qiw4QkFBa0IsQ0FBRTthQUNsRDtTQUNGLENBQUM7Ozs7OENBU0Q7SUFxQ1k7UUFUWixJQUFBLGdDQUFvQixFQUFDO1lBQ3BCLEtBQUssRUFBRSxXQUFXO1lBQ2xCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLHFCQUFxQjtnQkFDckIsb0RBQW9EO2dCQUNwRCxzS0FBNkIsOEJBQWtCLENBQUU7YUFDbEQ7U0FDRixDQUFDOzs7O3FEQWdFRDtJQWdCWTtRQVRaLElBQUEsZ0NBQW9CLEVBQUM7WUFDcEIsS0FBSyxFQUFFLGVBQWU7WUFDdEIsUUFBUSxFQUFFO2dCQUNSLFVBQVU7Z0JBQ1YsOEJBQThCO2dCQUM5Qix5Q0FBeUM7Z0JBQ3pDLHNLQUE2Qiw4QkFBa0IsQ0FBRTthQUNsRDtTQUNGLENBQUM7Ozs7MENBaUREO0lBZ0JZO1FBVFosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsa0JBQWtCO1lBQ3pCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLCtCQUErQjtnQkFDL0IsZ0RBQWdEO2dCQUNoRCxzS0FBNkIsOEJBQWtCLENBQUU7YUFDbEQ7U0FDRixDQUFDOzs7O2lEQXNERDtJQTJFWTtRQVRaLElBQUEsZ0NBQW9CLEVBQUM7WUFDcEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsUUFBUSxFQUFFO2dCQUNSLFVBQVU7Z0JBQ1YsMkJBQTJCO2dCQUMzQiw0Q0FBNEM7Z0JBQzVDLHNLQUE2Qiw4QkFBa0IsQ0FBRTthQUNsRDtTQUNGLENBQUM7Ozs7NkNBa0JEO0lBZ0JZO1FBVFosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsU0FBUztZQUNoQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVixxQkFBcUI7Z0JBQ3JCLDhDQUE4QztnQkFDOUMsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7OzsrQ0FrQkQ7SUFxRlk7UUFSWixJQUFBLGdDQUFvQixFQUFDO1lBQ3BCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLG1EQUFtRDtnQkFDbkQsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7OztvREFRRDtJQXVDWTtRQVJaLElBQUEsZ0NBQW9CLEVBQUM7WUFDcEIsS0FBSyxFQUFFLFdBQVc7WUFDbEIsUUFBUSxFQUFFO2dCQUNSLFVBQVU7Z0JBQ1YsNENBQTRDO2dCQUM1QyxzS0FBNkIsOEJBQWtCLENBQUU7YUFDbEQ7U0FDRixDQUFDOzs7OzZDQW9CRDtJQVdZO1FBVFosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVixhQUFhO2dCQUNiLDBDQUEwQztnQkFDMUMsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7OzsyQ0FHRDtJQVdZO1FBVFosSUFBQSxnQ0FBb0IsRUFBQztZQUNwQixLQUFLLEVBQUUsY0FBYztZQUNyQixRQUFRLEVBQUU7Z0JBQ1IsVUFBVTtnQkFDVixhQUFhO2dCQUNiLDhDQUE4QztnQkFDOUMsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7OzsrQ0FHRDtJQWtDWTtRQVRaLElBQUEsZ0NBQW9CLEVBQUM7WUFDcEIsS0FBSyxFQUFFLGFBQWE7WUFDcEIsUUFBUSxFQUFFO2dCQUNSLFVBQVU7Z0JBQ1YsK0NBQStDO2dCQUMvQyxxQkFBcUI7Z0JBQ3JCLHNLQUE2Qiw4QkFBa0IsQ0FBRTthQUNsRDtTQUNGLENBQUM7Ozs7Z0RBR0Q7SUFxSFk7UUFSWixJQUFBLGdDQUFvQixFQUFDO1lBQ3BCLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFFBQVEsRUFBRTtnQkFDUixVQUFVO2dCQUNWLGlEQUFpRDtnQkFDakQsc0tBQTZCLDhCQUFrQixDQUFFO2FBQ2xEO1NBQ0YsQ0FBQzs7OztrREFHRDtJQWsxQ0gsV0FBQztDQUFBLEFBN3BFRCxJQTZwRUM7QUF3S2tCLG9CQUFJO0FBakt2QixTQUFnQixvQkFBb0IsQ0FDbEMsTUFBa0QsRUFDbEQsT0FTQztJQVhILGlCQTJGQztJQTlFUyxJQUFBLEtBQXdELE1BQU0sT0FBeEMsRUFBdEIsTUFBTSxtQkFBRyxhQUFhLEtBQUEsRUFBRSxJQUFJLEdBQTRCLE1BQU0sS0FBbEMsRUFBRSxTQUFTLEdBQWlCLE1BQU0sVUFBdkIsRUFBRSxVQUFVLEdBQUssTUFBTSxXQUFYLENBQVc7SUFDdEUsSUFBTSxRQUFRLEdBQUcsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsUUFBUSxLQUFLLDZCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBNkIsQ0FBQTtJQUMzRixJQUFBLE9BQU8sR0FBYyxRQUFRLFFBQXRCLEVBQUUsT0FBTyxHQUFLLFFBQVEsUUFBYixDQUFhO0lBRS9CLElBQUEsS0FBa0QsT0FBTyxJQUFJLEVBQUUsRUFBN0QsR0FBRyxTQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsS0FBSyxXQUFBLEVBQUUsS0FBSyxXQUFBLEVBQU8sU0FBUyxTQUFrQixDQUFBO0lBQy9ELElBQUEsU0FBUyxHQUFLLENBQUEsT0FBTyxJQUFJLEVBQUUsQ0FBQSxVQUFsQixDQUFrQjtJQUNqQyxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsU0FBUyxHQUFHLGtCQUFXLEdBQUcsY0FBSSxNQUFNLGlDQUE4QixDQUFBO0tBQ25FO0lBRUQsSUFBTSxVQUFVLEdBQUc7UUFDakIsR0FBRyxLQUFBO1FBQ0gsUUFBUSxVQUFBO1FBQ1IsSUFBSSxNQUFBO1FBQ0osU0FBUyxXQUFBO1FBQ1QsVUFBVSxZQUFBO1FBQ1YsUUFBUSxFQUFFLElBQUksaUNBQXFCLEVBQUU7S0FDdEMsQ0FBQTtJQUVELElBQU0sYUFBYSxHQUFHLElBQUksc0JBQWMsQ0FBQyxJQUFBLHdCQUFjLHdCQUNsRCxVQUFVLEtBQ2IsU0FBUyxXQUFBLEVBQ1QsT0FBTyxFQUFFLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sS0FBSSx1QkFBZSxFQUUzQyxPQUFPLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFDeEIsV0FBVyxFQUFFLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxXQUFXLEVBQ2hDLE9BQU8sRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsT0FBTyxFQUN4QixtQkFBbUIsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsbUJBQW1CLEVBQ2hELGNBQWMsRUFBRSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsY0FBYyxFQUN0QyxPQUFPLEVBQUUsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sRUFDeEIsT0FBTyxTQUFBLEVBQ1Asa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUMzRCxPQUFPLGFBQUksZUFBZSxFQUFFLDRCQUFxQixNQUFNLENBQUMsVUFBVSxDQUFFLElBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxHQUMvRixrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQzdDLEtBQUssT0FBQSxJQUNMLENBQUUsQ0FBQTtJQUVKLElBQU0sWUFBWSxHQUFHLElBQUksSUFBSSx1QkFDeEIsVUFBVSxLQUNiLE1BQU0sUUFBQSxFQUNOLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUMvQixLQUFLLE9BQUEsRUFDTCxLQUFLLEVBQ0gsS0FBSyxJQUFJLElBQUksMEJBQWMsQ0FBQztZQUMxQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7WUFDL0IsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLG9CQUFhLEdBQUcsQ0FBRSxFQUFFO1lBQ3pDLFlBQVksRUFBRSxRQUFRO1NBQ3ZCLENBQUMsRUFDSixPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFDekIsUUFBUSxFQUFFLFNBQVMsRUFDbkIsYUFBYSxlQUFBLElBQ2IsQ0FBQTtJQUlGLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFPLElBQUksRUFBRSxLQUFLOztZQUNoRCxJQUFJLENBQUMsSUFBSTtnQkFBRSxXQUFNO1lBRWpCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDcEMsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBTSxDQUFDLGtCQUFrQixFQUFFO3dCQUNsRCxLQUFLLEVBQUUsK0JBQXVCLENBQUMsU0FBUzt3QkFDeEMsSUFBSSx3QkFBTyxJQUFJLEtBQUUsS0FBSyxPQUFBLEdBQUU7cUJBQ3pCLENBQUMsQ0FBQTtpQkFDSDtxQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBR3BCLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7aUJBQzNEO2FBQ0Y7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFVLENBQUMsYUFBYSxFQUFFO2dCQUNqRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFNLENBQUMsa0JBQWtCLEVBQUU7b0JBQ2xELEtBQUssRUFBRSwrQkFBdUIsQ0FBQyxhQUFhO29CQUM1QyxJQUFJLHdCQUFPLElBQUksS0FBRSxLQUFLLE9BQUEsR0FBRTtpQkFDekIsQ0FBQyxDQUFBO2FBQ0g7OztTQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8sRUFBRSxZQUFZLGNBQUEsRUFBRSxhQUFhLGVBQUEsRUFBRSxDQUFBO0FBQ3hDLENBQUM7QUEzRkQsb0RBMkZDO0FBRUQsSUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFBO0FBRXhCLElBQU0sU0FBUyxHQUF3QjtJQUNyQyxJQUFJLEVBQUUsY0FBYztJQUNwQixTQUFTLEVBQUUsU0FBUztJQUNwQixNQUFNLFlBQUMsTUFBeUI7UUFDOUIsSUFBTSxJQUFJLEdBQUcsVUFBVSxNQUF5Qjs7WUFDOUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUVoQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7YUFDekI7WUFFRCxNQUFNLEdBQUcsTUFBTSxJQUFJO2dCQUNqQixNQUFNLEVBQUUsRUFBRTtnQkFDVixXQUFXLEVBQUUsT0FBTztnQkFDcEIsT0FBTyxFQUFFLHVCQUFlO2FBQ3pCLENBQUE7WUFDTyxJQUFBLE9BQU8sR0FBSyxJQUFJLENBQUMsUUFBUSxRQUFsQixDQUFrQjtZQUVqQyxJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUE7WUFDbkUsSUFBSSxjQUFjLElBQUksY0FBYyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7YUFDbkQ7WUFFSyxJQUFBLEtBQWtDLG9CQUFvQixxQkFFeEQsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQ3pCLE1BQU0sS0FDVCxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUNoQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUN4QixrQkFBa0IsRUFBRSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSwwQ0FBRSxrQkFBa0IsS0FFMUQ7Z0JBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztnQkFDcEIsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtnQkFDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQztnQkFDaEYsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDekIsQ0FDRixFQXJCTyxZQUFZLGtCQUFBLEVBQUUsYUFBYSxtQkFxQmxDLENBQUE7WUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtZQUVsQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtZQUVoQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDMUIsQ0FBQyxDQUFBO1FBRUQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDOUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUE7UUFDdEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0NBQ0YsQ0FBQTtBQUVELElBQUk7SUFHRixTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDdkM7QUFBQyxPQUFPLENBQUMsRUFBRSxHQUFFO0FBTWQsU0FBZ0IsWUFBWSxDQUFDLEdBQTBDO0lBQ3JFLElBQUk7UUFDRixHQUFHLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7S0FDakM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7QUFDSCxDQUFDO0FBTkQsb0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDbG91ZGJhc2UsIElDbG91ZGJhc2VDb25maWcsIElDbG91ZGJhc2VQbGF0Zm9ybUluZm8gfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ2FjaGUgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2NhY2hlJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlUmVxdWVzdCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvcmVxdWVzdCdcbmltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZUF1dGhDb25maWcsIElVc2VyLCBJTG9naW5TdGF0ZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvYXV0aCdcbmltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZUNvbXBvbmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY29tcG9uZW50J1xuaW1wb3J0IHR5cGUgeyBBdXRoT3B0aW9ucywgQ3JlZGVudGlhbHMgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHtcbiAgQ2xvdWRiYXNlT0F1dGgsXG4gIEFVVEhfQVBJX1BSRUZJWCxcbiAgTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBFVkVOVFMsXG4gIEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBPQVVUSF9UWVBFLFxuICB3ZUFwcEp3dERlY29kZUFsbCxcbiAgQXV0aEVycm9yLFxuICBhdXRoTW9kZWxzLFxufSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHsgdXNlQXV0aEFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXInXG5pbXBvcnQge1xuICBwcmludFdhcm4sXG4gIHRocm93RXJyb3IsXG4gIEVSUk9SUyxcbiAgQ09NTVVOSVRZX1NJVEVfVVJMLFxuICBjYXRjaEVycm9yc0RlY29yYXRvcixcbiAgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyLFxuICBDbG91ZGJhc2VDYWNoZSxcbiAgYWRhcHRlckZvcld4TXAsXG4gIHVzZURlZmF1bHRBZGFwdGVyLFxufSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IHNhdmVUb0Jyb3dzZXJTZXNzaW9uLCBnZXRCcm93c2VyU2Vzc2lvbiwgcmVtb3ZlQnJvd3NlclNlc3Npb24sIGFkZFVybFNlYXJjaCB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuaW1wb3J0IHtcbiAgQ29tbW9uUmVzLFxuICBEZWxldGVNZVJlcSxcbiAgR2V0Q2xhaW1zUmVzLFxuICBHZXRVc2VySWRlbnRpdGllc1JlcyxcbiAgR2V0VXNlclJlcyxcbiAgTGlua0lkZW50aXR5UmVxLFxuICBMaW5rSWRlbnRpdHlSZXMsXG4gIE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2ssXG4gIFJlYXV0aGVudGljYXRlUmVzLFxuICBSZXNlbmRSZXEsXG4gIFJlc2VuZFJlcyxcbiAgUmVzZXRQYXNzd29yZEZvckVtYWlsUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yT2xkUmVxLFxuICBTZXRTZXNzaW9uUmVxLFxuICBTaWduSW5Bbm9ueW1vdXNseVJlcSxcbiAgU2lnbkluT0F1dGhSZXMsXG4gIFNpZ25JblJlcyxcbiAgU2lnbkluV2l0aElkVG9rZW5SZXEsXG4gIFNpZ25JbldpdGhPQXV0aFJlcSxcbiAgU2lnbkluV2l0aE90cFJlcSxcbiAgU2lnbkluV2l0aE90cFJlcyxcbiAgU2lnbkluV2l0aFBhc3N3b3JkUmVxLFxuICBTaWduVXBSZXMsXG4gIFVubGlua0lkZW50aXR5UmVxLFxuICBVcGRhdGVVc2VyQXR0cmlidXRlcyxcbiAgVXBkYXRlVXNlclJlcSxcbiAgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXMsXG4gIFZlcmlmeU9BdXRoUmVxLFxuICBWZXJpZnlPdHBSZXEsXG59IGZyb20gJy4vdHlwZSdcblxuY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5leHBvcnQgdHlwZSB7XG4gIFNpZ25JblJlcyxcbiAgR2V0VXNlclJlcyxcbiAgQ29tbW9uUmVzLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgR2V0Q2xhaW1zUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBMaW5rSWRlbnRpdHlSZXMsXG4gIFJlYXV0aGVudGljYXRlUmVzLFxuICBSZXNlbmRSZXMsXG4gIFVwZGF0ZVVzZXJXaXRoVmVyaWZpY2F0aW9uUmVzLFxuICBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25JbldpdGhJZFRva2VuUmVxLFxuICBTaWduSW5XaXRoT0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVxLFxuICBWZXJpZnlPdHBSZXEsXG4gIExpbmtJZGVudGl0eVJlcSxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJSZXEsXG4gIFNpZ25JbldpdGhPdHBSZXEsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFJlc2VuZFJlcSxcbiAgU2V0U2Vzc2lvblJlcSxcbiAgRGVsZXRlTWVSZXEsXG4gIFNpZ25VcFJlcyxcbn0gZnJvbSAnLi90eXBlJ1xuXG5kZWNsYXJlIGNvbnN0IGNsb3VkYmFzZTogSUNsb3VkYmFzZVxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ2F1dGgnXG5cbmludGVyZmFjZSBVc2VySW5mbyB7XG4gIHVpZD86IHN0cmluZ1xuICBnZW5kZXI/OiBzdHJpbmdcbiAgcGljdHVyZT86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW5cbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgYmlydGhkYXRlPzogc3RyaW5nXG4gIHpvbmVpbmZvPzogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBzdWI/OiBzdHJpbmdcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nXG59XG5cbmNvbnN0IG9uQ3JlZGVudGlhbHNFcnJvciA9IGV2ZW50QnVzID0+IChwYXJhbXMpID0+IHtcbiAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyAuLi5wYXJhbXMsIGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLkNSRURFTlRJQUxTX0VSUk9SIH0pXG59XG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyIGltcGxlbWVudHMgSVVzZXIge1xuICBwdWJsaWMgdWlkPzogc3RyaW5nXG4gIHB1YmxpYyBnZW5kZXI/OiBzdHJpbmdcbiAgcHVibGljIHBpY3R1cmU/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsPzogc3RyaW5nXG4gIHB1YmxpYyBlbWFpbFZlcmlmaWVkPzogYm9vbGVhblxuICBwdWJsaWMgcGhvbmVOdW1iZXI/OiBzdHJpbmdcbiAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gIHB1YmxpYyBwcm92aWRlcnM/OiB7XG4gICAgaWQ/OiBzdHJpbmdcbiAgICBwcm92aWRlclVzZXJJZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgfVtdXG4gIHB1YmxpYyBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgcHVibGljIHpvbmVpbmZvPzogc3RyaW5nXG4gIHB1YmxpYyBsb2NhbGU/OiBzdHJpbmdcbiAgcHVibGljIHN1Yj86IHN0cmluZ1xuICBwdWJsaWMgY3JlYXRlZEZyb20/OiBzdHJpbmdcblxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aCAvLyBDbG91ZGJhc2VPQXV0aCDnsbvlnotcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJVXNlck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mbygpIHtcbiAgICB0aGlzLnVpZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygndWlkJykgYXMgc3RyaW5nXG4gICAgdGhpcy5nZW5kZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2dlbmRlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMucGljdHVyZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGljdHVyZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWwgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1c2VybmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbEluZm9Bc3luYygpIHtcbiAgICB0aGlzLnVpZCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCd1aWQnKVxuICAgIHRoaXMuZ2VuZGVyID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2dlbmRlcicpXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCdlbWFpbCcpXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VzZXJuYW1lJylcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ25hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmJpcnRoZGF0ZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnYmlydGhkYXRlJykgYXMgc3RyaW5nXG4gICAgdGhpcy56b25laW5mbyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnem9uZWluZm8nKSBhcyBzdHJpbmdcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbG9jYWxlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5zdWIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3N1YicpIGFzIHN0cmluZ1xuICAgIHRoaXMuY3JlYXRlZEZyb20gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2NyZWF0ZWRfZnJvbScpIGFzIHN0cmluZ1xuICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwcm92aWRlcnMnKSBhcyBhbnlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHVzZXJJbmZvXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDnlKjmiLfkv6Hmga/kuK3mmK/lkKbljIXlkKvpnZ7ms5XlgLwnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1c2VySW5mbzogYXV0aE1vZGVscy5Vc2VyUHJvZmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnN0IHsgbmFtZSwgZ2VuZGVyLCBhdmF0YXJVcmwsIHByb3ZpbmNlLCBjb3VudHJ5LCBjaXR5IH0gPSB1c2VySW5mb1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0VXNlclByb2ZpbGUoeyAuLi51c2VySW5mbyB9KVxuXG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlVXNlckJhc2ljSW5mbyh7IC4uLnBhcmFtcyB9KVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw5a+G56CBXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkUGFzc3dvcmRcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDlr4bnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVQYXNzd29yZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAzIC0g5paw5a+G56CB5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVQYXNzd29yZChuZXdQYXNzd29yZDogc3RyaW5nLCBvbGRQYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgb2xkX3Bhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgIG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLflkI1cbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35ZCN5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlVXNlcm5hbWUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6hueUqOaIt+WQjeWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZSh7XG4gICAgICB1c2VybmFtZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+OAguW9k+eUqOaIt+WcqOWFtuS7luWuouaIt+err+abtOaWsOeUqOaIt+S/oeaBr+S5i+WQju+8jOWPr+S7peiwg+eUqOatpOaOpeWPo+WQjOatpeabtOaWsOS5i+WQjueahOS/oeaBr+OAglxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+WIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnJlZnJlc2goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHJlZnJlc2gocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJJbmZvPiB7XG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VySW5mbyhwYXJhbXMpXG4gICAgaWYgKChuZXdVc2VySW5mbyBhcyBhbnkpLmNvZGUgPT09ICdJTlZBTElEX0FDQ0VTU19UT0tFTicpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyh7fSlcbiAgICAgIHRocm93IG5ld1VzZXJJbmZvXG4gICAgfVxuICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyhuZXdVc2VySW5mbylcbiAgICByZXR1cm4gbmV3VXNlckluZm9cbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbFVzZXJJbmZvKGtleT86IHN0cmluZyk6IHN0cmluZyB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG5cbiAgICBpZiAoIWtleSkgcmV0dXJuIHVzZXJJbmZvIHx8IHt9XG5cbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHVibGljIHNldExvY2FsVXNlckluZm8odXNlckluZm86IGFueSkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIHRoaXMuY2FjaGUuc2V0U3RvcmUodXNlckluZm9LZXksIHVzZXJJbmZvKVxuICAgIHRoaXMuc2V0VXNlckluZm8oKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMb2NhbFVzZXJJbmZvQXN5bmMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jYWNoZS5nZXRTdG9yZUFzeW5jKHVzZXJJbmZvS2V5KVxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJJbmZvKCkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5jYWNoZS5nZXRTdG9yZSh1c2VySW5mb0tleSlcbiAgICA7W1xuICAgICAgJ3VpZCcsXG4gICAgICAnZW1haWwnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAncGljdHVyZScsXG4gICAgICAnZW1haWxfdmVyaWZpZWQnLFxuICAgICAgJ3Bob25lX251bWJlcicsXG4gICAgICAnYmlydGhkYXRlJyxcbiAgICAgICd6b25laW5mbycsXG4gICAgICAnbG9jYWxlJyxcbiAgICAgICdzdWInLFxuICAgICAgJ2NyZWF0ZWRfZnJvbScsXG4gICAgICAncHJvdmlkZXJzJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAnY3JlYXRlZF9hdCcsXG4gICAgXS5mb3JFYWNoKChpbmZvS2V5KSA9PiB7XG4gICAgICB0aGlzW2luZm9LZXldID0gdXNlckluZm9baW5mb0tleV1cbiAgICB9KVxuICB9XG59XG5pbnRlcmZhY2UgSUxvZ2luU3RhdGVPcHRpb25zIGV4dGVuZHMgSVVzZXJPcHRpb25zIHtcbiAgZW52SWQ6IHN0cmluZ1xufVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUgaW1wbGVtZW50cyBJTG9naW5TdGF0ZSB7XG4gIHB1YmxpYyB1c2VyOiBVc2VyXG4gIHB1YmxpYyBvYXV0aExvZ2luU3RhdGU6IGFueVxuXG4gIHByaXZhdGUgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcHJpdmF0ZSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUxvZ2luU3RhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBlbnZJZCwgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICBpZiAoIWVudklkKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2VudklkIGlzIG5vdCBkZWZpbmVkJylcbiAgICB9XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy51c2VyID0gbmV3IFVzZXIoe1xuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2hlY2tMb2NhbFN0YXRlKCkge1xuICAgIHRoaXMub2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxTdGF0ZUFzeW5jKCkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5nZXRMb2dpblN0YXRlKClcbiAgICBhd2FpdCB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gIH1cbn1cblxuY2xhc3MgQXV0aCB7XG4gIHJlYWRvbmx5IGNvbmZpZzogSUNsb3VkYmFzZUF1dGhDb25maWdcbiAgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcmVhZG9ubHkgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBwcml2YXRlIGxpc3RlbmVyczogTWFwPHN0cmluZywgU2V0PE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2s+PiA9IG5ldyBNYXAoKVxuICBwcml2YXRlIGhhc0xpc3RlbmVyU2V0VXAgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSUNsb3VkYmFzZUF1dGhDb25maWcgJiB7XG4gICAgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICAgIHJlcXVlc3Q/OiBJQ2xvdWRiYXNlUmVxdWVzdFxuICAgIHJ1bnRpbWU/OiBzdHJpbmdcbiAgfSwpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ1xuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IGNvbmZpZy5vYXV0aEluc3RhbmNlXG4gICAgdGhpcy5jYWNoZSA9IGNvbmZpZy5jYWNoZVxuICAgIHRoaXMuaW5pdCgpXG4gICAgdGhpcy5zZXRBY2Nlc3NLZXkoKVxuICB9XG5cbiAgLyoqXG4gICAqIOe7keWumuaJi+acuuWPt1xuICAgKiBAcGFyYW0gcGhvbmVOdW1iZXJcbiAgICogQHBhcmFtIHBob25lQ29kZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuaJi+acuuWPt+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFBob25lTnVtYmVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobnn63kv6Hpqozor4HnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRQaG9uZU51bWJlcihwYXJhbXM6IGF1dGhNb2RlbHMuQmluZFBob25lUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5lZGl0Q29udGFjdChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6Kej57uR5LiJ5pa557uR5a6aXG4gICAqIEBwYXJhbSBsb2dpblR5cGVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfop6PpmaTkuInmlrnnu5HlrprlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnVuYmluZFByb3ZpZGVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3otKbmiLfmmK/lkKblt7Lnu4/kuI7mraTnmbvlvZXmlrnlvI/op6Pnu5EnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVuYmluZFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5VbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudW5iaW5kUHJvdmlkZXIocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOmCrueuseWcsOWdgFxuICAgKiBAcGFyYW0gZW1haWxcbiAgICogQHBhcmFtIHN1ZG9fdG9rZW5cbiAgICogQHBhcmFtIHZlcmlmaWNhdGlvbl90b2tlblxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumumCrueuseWcsOWdgOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZEVtYWlsKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobpgq7nrrHlr4bnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGJpbmRFbWFpbChwYXJhbXM6IGF1dGhNb2RlbHMuQmluZEVtYWlsUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5lZGl0Q29udGFjdChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogdmVyaWZ5XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5WZXJpZnlSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5WZXJpZnlSZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBVc2VyXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6aqM6K+B56CB6aqM6K+B5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS52ZXJpZnkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huaJi+acuumqjOivgeeggS/pgq7nrrHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHZlcmlmeShwYXJhbXM6IGF1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5WZXJpZnlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlumqjOivgeeggVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlumqjOivgeeggeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0VmVyaWZpY2F0aW9uKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24oXG4gICAgcGFyYW1zOiBhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3QsXG4gICAgb3B0aW9ucz86IHsgd2l0aENhcHRjaGE6IGJvb2xlYW4gfSxcbiAgKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihwYXJhbXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRVc2VyKCkge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0Q3VycmVudFVzZXIgaW5zdGVhZCcsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gdGhpcy5oYXNMb2dpblN0YXRlKClcblxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICByZXR1cm4gbG9naW5TdGF0ZS51c2VyIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRDdXJyZW50VXNlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudFVzZXIoKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCB1c2VySW5mbyA9IGxvZ2luU3RhdGUudXNlci5nZXRMb2NhbFVzZXJJbmZvKCkgYXMgYXV0aE1vZGVscy5Vc2VySW5mb1xuICAgICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLmNoZWNrTG9jYWxJbmZvQXN5bmMoKVxuICAgICAgcmV0dXJuIHsgLi4ubG9naW5TdGF0ZS51c2VyLCAuLi51c2VySW5mbyB9IGFzIHVua25vd24gYXMgYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj5cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiDljL/lkI3nmbvlvZVcbiAgLy8gICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gIC8vICAqIEBtZW1iZXJvZiBBdXRoXG4gIC8vICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn5Yy/5ZCN55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5Yy/5ZCN55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbkFub255bW91c2x5KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseShkYXRhOiB7XG4gIC8vICAgcHJvdmlkZXJfdG9rZW4/OiBzdHJpbmdcbiAgLy8gfSA9IHt9LCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAvLyBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5Bbm9ueW1vdXNseShkYXRhKVxuICAvLyByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDljL/lkI3nmbvlvZVcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5bCP56iL5bqP5Yy/5ZCN55m75b2V5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5Yy/5ZCN55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbkFub255bW91c2x5SW5XeCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHlJbld4KHtcbiAgICB1c2VXeENsb3VkLFxuICB9OiB7XG4gICAgdXNlV3hDbG91ZD86IGJvb2xlYW5cbiAgfSA9IHt9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cblxuICAgIGNvbnN0IG1haW5GdW5jID0gYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdvcGVuX2lkJyxcbiAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgocmVzdWx0IGFzIGFueSk/LmVycm9yX2NvZGUgfHwgIXJlc3VsdC5wcm92aWRlcl90b2tlbikge1xuICAgICAgICAgIHRocm93IHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5Bbm9ueW1vdXNseShcbiAgICAgICAgICB7IHByb3ZpZGVyX3Rva2VuOiByZXN1bHQucHJvdmlkZXJfdG9rZW4gfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChjcmVkZW50aWFscyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgY3JlZGVudGlhbHNcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB3eC5sb2dpbih7XG4gICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUodW5kZWZpbmVkLCB7IGFzeW5jUmVmcmVzaFVzZXI6IHRydWUgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo/nu5HlrppPcGVuSURcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5bCP56iL5bqP57uR5a6aT3BlbklE5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLmJpbmRPcGVuSWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRPcGVuSWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cblxuICAgIGNvbnN0IG1haW5GdW5jID0gYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgocmVzdWx0IGFzIGFueSk/LmVycm9yX2NvZGUgfHwgIXJlc3VsdC5wcm92aWRlcl90b2tlbikge1xuICAgICAgICAgIHRocm93IHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuYmluZFdpdGhQcm92aWRlcih7IHByb3ZpZGVyX3Rva2VuOiByZXN1bHQucHJvdmlkZXJfdG9rZW4gfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd3gubG9naW4oe1xuICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo91bmlvbklk6Z2Z6buY55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZXlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo91bmlvbklk6Z2Z6buY55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhVbmlvbklkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoVW5pb25JZCgpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuICAgICAgICB3eC5sb2dpbih7XG4gICAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJZCA9IHd4SW5mbz8uYXBwSWRcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZTogcmVzLmNvZGUsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVySWQsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICd1bmlvbl9pZCcsXG4gICAgICAgICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGNvbnN0IHsgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4gfSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIGlmICghcHJvdmlkZXJUb2tlbikge1xuICAgICAgICAgICAgICAgIHJlamVjdChyZXN1bHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc2lnbkluUmVzKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo/miYvmnLrlj7fmjojmnYPnmbvlvZXvvIznm67liY3lj6rmlK/mjIHlhajmiZjnrqHmiYvmnLrlj7fmjojmnYPnmbvlvZVcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn5bCP56iL5bqP5omL5py65Y+35o6I5p2D55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqP5omL5py65Y+35o6I5p2D55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhQaG9uZUF1dGgoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbldpdGhQaG9uZUF1dGgoeyBwaG9uZUNvZGUgPSAnJyB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgLy8gICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgLy8gICB9XG4gIC8vICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgLy8gICBjb25zdCBwcm92aWRlckluZm8gPSB7XG4gIC8vICAgICBwcm92aWRlcl9wYXJhbXM6IHsgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnIH0sXG4gIC8vICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgd3gubG9naW4oKVxuICAvLyAgIDsocHJvdmlkZXJJbmZvIGFzIGFueSkucHJvdmlkZXJfY29kZSA9IGNvZGVcblxuICAvLyAgIHRyeSB7XG4gIC8vICAgICBsZXQgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwcm92aWRlckluZm8pXG4gIC8vICAgICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gIC8vICAgICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgLy8gICAgIH1cblxuICAvLyAgICAgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnBhdGNoUHJvdmlkZXJUb2tlbih7XG4gIC8vICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLnByb3ZpZGVyX3Rva2VuLFxuICAvLyAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAvLyAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgLy8gICAgICAgICBjb2RlOiBwaG9uZUNvZGUsXG4gIC8vICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnLFxuICAvLyAgICAgICB9LFxuICAvLyAgICAgfSlcbiAgLy8gICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgLy8gICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAvLyAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgLy8gICAgIH0pXG5cbiAgLy8gICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgLy8gICAgICAgdGhyb3cgc2lnbkluUmVzXG4gIC8vICAgICB9XG4gIC8vICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgLy8gICAgIHRocm93IGVycm9yXG4gIC8vICAgfVxuXG4gIC8vICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP55+t5L+h6aqM6K+B56CB55m76ZmGXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoU21zKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoU21zKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBwaG9uZU51bSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogcGhvbmVOdW0sXG4gICAgICAgIGxvZ2luVHlwZTogJ3NtcycsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgq7nrrHpqozor4HnoIHnmbvpmYZcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6YKu566x6aqM6K+B56CB55m76ZmGJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6YKu566x55m76ZmGJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEVtYWlsKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgICBlbWFpbCA9ICcnLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogZW1haWwsXG4gICAgICAgIGxvZ2luVHlwZTogJ2VtYWlsJyxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruiOt+WPluiHquWumuS5ieeZu+W9lSB0aWNrZXQg5Ye95pWwXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm59IGdldFRpY2tGblxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm4pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn6Ieq5a6a5LmJ55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6Ieq5a6a5LmJ55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgJyAgMyAtIHRpY2tldCDmmK/lkKblvZLlsZ7kuo7lvZPliY3njq/looMnLFxuICAvLyAgICAgJyAgNCAtIOWIm+W7uiB0aWNrZXQg55qE6Ieq5a6a5LmJ55m75b2V56eB6ZKl5piv5ZCm6L+H5pyfJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAvLyAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKVxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKlxuICAvLyAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnblVwUmVxdWVzdH0gcGFyYW1zXG4gIC8vICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAvLyAgKiBAbWVtYmVyb2YgQXV0aFxuICAvLyAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+azqOWGjOWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huaMh+WumueZu+W9leaWueW8jycsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduVXAoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XG4gIC8vICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHBhcmFtcylcbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDorr7nva7lr4bnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOajgOa1i+eUqOaIt+WQjeaYr+WQpuW3sue7j+WNoOeUqFxuICAgKiBAcGFyYW0gdXNlcm5hbWVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfmmK/lkKbooqvljaDnlKjlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmlzVXNlcm5hbWVSZWdpc3RlcmVkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBpc1VzZXJuYW1lUmVnaXN0ZXJlZCh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiB1c2VybmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAndXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBleGlzdCB9ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY2hlY2tJZlVzZXJFeGlzdCh7IHVzZXJuYW1lIH0pXG4gICAgcmV0dXJuIGV4aXN0XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGhhc0xvZ2luU3RhdGUoKTogTG9naW5TdGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0TG9naW5TdGF0ZSBpbnN0ZWFkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeZu+W9leaAgS3lvILmraVcbiAgICog5q2kQVBJ5Li65YW85a655byC5q2lc3RvcmFnZeeahOW5s+WPsFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluacrOWcsOeZu+W9leaAgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0TG9naW5TdGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpIHtcbiAgICBsZXQgb2F1dGhMb2dpblN0YXRlID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8oKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VyKClcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5blvq7mkK3mj5Lku7bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDmmK/lkKblt7LnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuZ2V0V2VkYVVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRXZWRhVXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0V2VkYVVzZXJJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCkge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBhd2FpdCAobG9naW5TdGF0ZS51c2VyIGFzIFVzZXIpLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBdXRoSGVhZGVyIOWFvOWuueWkhOeQhlxuICAgKiDov5Tlm57nqbrlr7nosaFcbiAgICovXG4gIHB1YmxpYyBnZXRBdXRoSGVhZGVyKCk6IHt9IHtcbiAgICBjb25zb2xlLmVycm9yKCdBdXRoLmdldEF1dGhIZWFkZXIgQVBJIOW3suW6n+W8gycpXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICog5Li65bey5pyJ6LSm5oi357uR56ys5LiJ5pa56LSm5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuesrOS4ieaWueeZu+W9leaWueW8j+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFdpdGhQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5q2k6LSm5oi35piv5ZCm5bey57uP57uR5a6a5q2k56ys5LiJ5pa5JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmn6Xor6LnlKjmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0fSBhcHBlbmRlZF9wYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyKHF1ZXJ5T2JqOiBhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5xdWVyeVVzZXJQcm9maWxlKHF1ZXJ5T2JqKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IG9hdXRoQWNjZXNzVG9rZW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IG9hdXRoQWNjZXNzVG9rZW5SZXMsXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhXZWNoYXQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50VG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRUb2tlbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5SZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGV2aWNlQXV0aG9yaXplKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogYXV0aE1vZGVscy5TdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5TdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBhdXRoTW9kZWxzLldpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5TY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpbkdyb3VwcygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25Mb2dpblN0YXRlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8ub24oRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIC8vIGdldExvZ2luU3RhdGXkvJrph43lpI3op6blj5FnZXRDcmVkZW50aWFsc++8jOWvvOiHtOatu+W+queOr++8jOaJgOS7pWdldENyZWRlbnRpYWxz5Ye66ZSZ5LiN5YaN5Ye65Y+RZ2V0TG9naW5TdGF0ZVxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IHBhcmFtcz8uZGF0YT8uZXZlbnRUeXBlICE9PSBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgPyBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKSA6IHt9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHsgLi4ucGFyYW1zLCAuLi5sb2dpblN0YXRlIH0pXG4gICAgfSlcbiAgICAvLyDnq4vliLvmiafooYzkuIDmrKHlm57osINcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gIH1cblxuICAvKipcbiAgICog5by65Yi25Yi35pawdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bouqvku73kv6Hmga9cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldENyZWRlbnRpYWxzKClcbiAgfVxuICAvKipcbiAgICog5YaZ5YWl6Lqr5Lu95L+h5oGvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bouqvku73mupDnsbvlnosnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFByb3ZpZGVyU3ViVHlwZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJTdWJUeXBlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YShwYXJhbXM6IHsgc3RhdGU6IHN0cmluZzsgcmVkaXJlY3RfdXJpPzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtczogeyB0b2tlbjogc3RyaW5nOyBrZXk6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZShwYXJhbXM6IGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBhdXRoTW9kZWxzLkdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2dSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBzbXMvZW1haWwg6aqM6K+B56CB55m75b2VL+azqOWGjO+8jOmAu+i+keS4gOiHtOaUtuaVm1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgdXNlcm5hbWU6IHJhd1VzZXJuYW1lID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgbG9naW5UeXBlID0gJycsXG4gIH06IHtcbiAgICB2ZXJpZmljYXRpb25JbmZvPzogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZVxuICAgIHZlcmlmaWNhdGlvbkNvZGU/OiBzdHJpbmdcbiAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgIGJpbmRJbmZvPzogYW55XG4gICAgbG9naW5UeXBlPzogc3RyaW5nXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgLy8gMS4g6aqM6K+B6aqM6K+B56CBXG4gICAgICBjb25zdCB2ZXJpZnlSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkoe1xuICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICgodmVyaWZ5UmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgdmVyaWZ5UmVzXG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uX3Rva2VuIH0gPSB2ZXJpZnlSZXNcblxuICAgICAgLy8g5omL5py655m75b2V5Y+C5pWwXG4gICAgICBsZXQgdXNlcm5hbWUgPSAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChyYXdVc2VybmFtZSkgPyByYXdVc2VybmFtZSA6IGArODYgJHtyYXdVc2VybmFtZX1gXG4gICAgICBsZXQgc2lnblVwUGFyYW06IGFueSA9IHsgcGhvbmVfbnVtYmVyOiB1c2VybmFtZSB9XG5cbiAgICAgIC8vIOmCrueuseeZu+W9leWPguaVsFxuICAgICAgaWYgKGxvZ2luVHlwZSA9PT0gJ2VtYWlsJykge1xuICAgICAgICB1c2VybmFtZSA9IHJhd1VzZXJuYW1lXG4gICAgICAgIHNpZ25VcFBhcmFtID0geyBlbWFpbDogdXNlcm5hbWUgfVxuICAgICAgfVxuXG4gICAgICAvLyAyLiDmoLnmja7mmK/lkKblt7Lnu4/mmK/nlKjmiLfvvIzliIbliKvotbDnmbvlvZXmiJbms6jlhozpgLvovpFcbiAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgLy8g56eB5pyJ5YyW546v5aKD5oiW6ICF6Ieq5a6a5LmJ5bqU55So6LWwdjHniYjmnKznmoTogIHpgLvovpFcbiAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25JblJlc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpbmRJbmZvKSB7XG4gICAgICAgICAgY29uc3QgYmluZFJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoe1xuICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW46IChiaW5kSW5mbyBhcyBhbnkpPy5wcm92aWRlclRva2VuLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoKGJpbmRSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgdGhyb3cgYmluZFJlc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6Ieq5a6a5LmJ5bqU55So6LWwc2lnblVw6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25VcFJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcCh7XG4gICAgICAgICAgLi4uc2lnblVwUGFyYW0sXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHNpZ25VcFJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgc2lnblVwUmVzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlTG9naW5TdGF0ZShcbiAgICBwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5PzogYW55IH0sXG4gICAgb3B0aW9ucz86IHsgYXN5bmNSZWZyZXNoVXNlcj86IGJvb2xlYW47IHVzZXJJbmZvPzogYW55IH0sXG4gICk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgfSlcblxuICAgIGF3YWl0IGxvZ2luU3RhdGUuY2hlY2tMb2NhbFN0YXRlQXN5bmMoKVxuXG4gICAgaWYgKG9wdGlvbnM/LnVzZXJJbmZvKSB7XG4gICAgICBsb2dpblN0YXRlLnVzZXIuc2V0TG9jYWxVc2VySW5mbyhvcHRpb25zLnVzZXJJbmZvKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucz8uYXN5bmNSZWZyZXNoVXNlcikge1xuICAgICAgICBsb2dpblN0YXRlLnVzZXIucmVmcmVzaChwYXJhbXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIucmVmcmVzaChwYXJhbXMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9JTiB9KVxuXG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOIH0pXG4gICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgfVxuXG4gIGFzeW5jIHNldEFjY2Vzc0tleSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWNjZXNzS2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKHtcbiAgICAgICAgICBhY2Nlc3NfdG9rZW46IHRoaXMuY29uZmlnLmFjY2Vzc0tleSxcbiAgICAgICAgICB0b2tlbl90eXBlOiAnQmVhcmVyJyxcbiAgICAgICAgICBzY29wZTogJ2FjY2Vzc0tleScsXG4gICAgICAgICAgZXhwaXJlc19hdDogbmV3IERhdGUoK25ldyBEYXRlKCkgKyArbmV3IERhdGUoKSksXG4gICAgICAgICAgZXhwaXJlc19pbjogK25ldyBEYXRlKCkgKyArbmV3IERhdGUoKSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignYWNjZXNzS2V5IGVycm9yOiAnLCBlcnJvcilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09IG5ldyBhdXRoIGFwaSBtZXRob2RzIG1lcmdlZCBiZWxvdyA9PT09PT09PT09XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW5hbm9ueW1vdXNseVxuICAgKiBTaWduIGluIGEgdXNlciBhbm9ueW1vdXNseS5cbiAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgYXV0aC5zaWduSW5Bbm9ueW1vdXNseSgpO1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zICBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbkFub255bW91c2x5KHBhcmFtczogU2lnbkluQW5vbnltb3VzbHlSZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5Bbm9ueW1vdXNseShwYXJhbXMpXG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAgIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWdudXBcbiAgICogU2lnbiB1cCBhIG5ldyB1c2VyIHdpdGggZW1haWwgb3IgcGhvbmUgdXNpbmcgYSBvbmUtdGltZSBwYXNzd29yZCAoT1RQKS4gSWYgdGhlIGFjY291bnQgbm90IGV4aXN0LCBhIG5ldyBhY2NvdW50IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25VcFJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCAmIHsgcGhvbmU/OiBzdHJpbmcgfSk6IFByb21pc2U8U2lnblVwUmVzPiB7XG4gICAgaWYgKHBhcmFtcy5waG9uZV9udW1iZXIgfHwgcGFyYW1zLnZlcmlmaWNhdGlvbl9jb2RlIHx8IHBhcmFtcy52ZXJpZmljYXRpb25fdG9rZW4gfHwgcGFyYW1zLnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAocGFyYW1zKVxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpIGFzIGFueVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaZW1haWzmiJZwaG9uZeW/heWhq+WFtuS4gFxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUocGFyYW1zLCBbWydlbWFpbCddLCBbJ3Bob25lJ11dLCAnWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyJylcblxuICAgICAgLy8g56ys5LiA5q2l77ya5Y+R6YCB6aqM6K+B56CB5bm25a2Y5YKoIHZlcmlmaWNhdGlvbkluZm9cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkluZm8gPSBhd2FpdCB0aGlzLmdldFZlcmlmaWNhdGlvbihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSwpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAvLyDnrKzkuozmraXvvJrnrYnlvoXnlKjmiLfovpPlhaXpqozor4HnoIHvvIjpgJrov4cgUHJvbWlzZSDljIXoo4XnlKjmiLfovpPlhaXkuovku7bvvIlcbiAgICAgICAgICB2ZXJpZnlPdHA6IGFzeW5jICh7IHRva2VuLCBtZXNzYWdlSWQgPSB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCB9KTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIOesrOS4ieatpe+8muW+heeUqOaIt+i+k+WFpeWujOmqjOivgeeggeS5i+WQju+8jOmqjOivgeefreS/oemqjOivgeeggVxuICAgICAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25Ub2tlblJlcyA9IGF3YWl0IHRoaXMudmVyaWZ5KHtcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IG1lc3NhZ2VJZCB8fCB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdG9rZW4sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgLy8g56ys5Zub5q2l77ya5rOo5YaM5bm255m75b2V5oiW55u05o6l55m75b2VXG4gICAgICAgICAgICAgIC8vIOWmguaenOeUqOaIt+W3sue7j+WtmOWcqO+8jOebtOaOpeeZu+W9lVxuICAgICAgICAgICAgICBpZiAodmVyaWZpY2F0aW9uSW5mby5pc191c2VyKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaWduSW4oe1xuICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy5lbWFpbCB8fCB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSksXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOeUqOaIt+S4jeWtmOWcqO+8jOazqOWGjOeUqOaIt1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpXG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGEuZW1haWxcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5waG9uZVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHtcbiAgICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgICAuLi4ocGFyYW1zLmVtYWlsID8geyBlbWFpbDogcGFyYW1zLmVtYWlsIH0gOiB7IHBob25lX251bWJlcjogdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIH0pLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25vdXRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aC5zaWduT3V0KCk7XG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIHNpZ25PdXQocGFyYW1zPzogYXV0aE1vZGVscy5TaWdub3V0UmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuU2lnbm91dFJlc3BvbnNlICYgeyBkYXRhOiBPYmplY3Q7IGVycm9yOiBBdXRoRXJyb3IgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25PdXQocGFyYW1zKVxuICAgICAgYXdhaXQgdGhpcy5jYWNoZS5yZW1vdmVTdG9yZUFzeW5jKHVzZXJJbmZvS2V5KVxuICAgICAgdGhpcy5zZXRBY2Nlc3NLZXkoKVxuXG4gICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyBldmVudFR5cGU6IExPR0lOX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdOX09VVCB9KVxuXG4gICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfT1VUIH0pXG5cbiAgICAgIC8vIHJlc+i/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgICByZXR1cm4geyAuLi5yZXMsIGRhdGE6IHt9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtb25hdXRoc3RhdGVjaGFuZ2VcbiAgICogUmVjZWl2ZSBhIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGFuIGF1dGggZXZlbnQgaGFwcGVucy5cbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIFByb21pc2U8eyBkYXRhOiB7IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIH0sIGVycm9yOiBFcnJvciB8IG51bGwgfT5cbiAgICovXG4gIG9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrOiBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVyU2V0VXApIHtcbiAgICAgIHRoaXMuc2V0dXBMaXN0ZW5lcnMoKVxuICAgICAgdGhpcy5oYXNMaXN0ZW5lclNldFVwID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNilcblxuICAgIGlmICghdGhpcy5saXN0ZW5lcnMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuc2V0KGlkLCBuZXcgU2V0KCkpXG4gICAgfVxuXG4gICAgdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKSEuYWRkKGNhbGxiYWNrKVxuXG4gICAgLy8g6L+U5ZueIFN1YnNjcmlwdGlvbiDlr7nosaFcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB7XG4gICAgICBpZCxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgdW5zdWJzY3JpYmU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKVxuICAgICAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFjaylcbiAgICAgICAgICBpZiAoY2FsbGJhY2tzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmRlbGV0ZShpZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHsgc3Vic2NyaXB0aW9uIH0sXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRocGFzc3dvcmRcbiAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgd2l0aCBhbiBlbWFpbCBhbmQgcGFzc3dvcmQgb3IgcGhvbmUgYW5kIHBhc3N3b3JkIG9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhQYXNzd29yZChwYXJhbXM6IFNpZ25JbldpdGhQYXNzd29yZFJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnVzZXJuYW1lL2VtYWlsL3Bob25l5LiJ6YCJ5LiA77yMcGFzc3dvcmTlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIFtbJ3VzZXJuYW1lJ10sIFsnZW1haWwnXSwgWydwaG9uZSddXSxcbiAgICAgICAgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHVzZXJuYW1lLCBlbWFpbCwgb3IgcGhvbmUnLFxuICAgICAgKVxuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc2lnbkluKHtcbiAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy51c2VybmFtZSB8fCBwYXJhbXMuZW1haWwgfHwgdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpLFxuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICAuLi4ocGFyYW1zLmlzX2VuY3J5cHQgPyB7IGlzRW5jcnlwdDogdHJ1ZSwgdmVyc2lvbjogJ3YyJyB9IDoge30pLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbndpdGhpZHRva2VuXG4gICAqIOesrOS4ieaWueW5s+WPsOeZu+W9leOAguWmguaenOeUqOaIt+S4jeWtmOWcqO+8jOS8muagueaNruS6keW8gOWPkeW5s+WPsC3nmbvlvZXmlrnlvI/kuK3lr7nlupTouqvku73mupDnmoTnmbvlvZXmqKHlvI/phY3nva7vvIzliKTmlq3mmK/lkKboh6rliqjms6jlhoxcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhJZFRva2VuKHBhcmFtczogU2lnbkluV2l0aElkVG9rZW5SZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJp0b2tlbuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgdG9rZW46IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdUb2tlbiBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgcHJvdmlkZXJfdG9rZW46IHBhcmFtcy50b2tlbixcbiAgICAgIH0pXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRob3RwXG4gICAqIExvZyBpbiBhIHVzZXIgdXNpbmcgYSBvbmUtdGltZSBwYXNzd29yZCAoT1RQKS5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JbldpdGhPdHBSZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoT3RwKHBhcmFtczogU2lnbkluV2l0aE90cFJlcSk6IFByb21pc2U8U2lnbkluV2l0aE90cFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcy5lbWFpbCA/IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9LClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVzZXI6IG51bGwsXG4gICAgICAgICAgc2Vzc2lvbjogbnVsbCxcbiAgICAgICAgICAvLyDnrKzkuozmraXvvJrnrYnlvoXnlKjmiLfovpPlhaXpqozor4HnoIHvvIjpgJrov4cgUHJvbWlzZSDljIXoo4XnlKjmiLfovpPlhaXkuovku7bvvIlcbiAgICAgICAgICB2ZXJpZnlPdHA6IGFzeW5jICh7IHRva2VuLCBtZXNzYWdlSWQgPSB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCB9KTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgIGVtYWlsOiBwYXJhbXMuZW1haWwsXG4gICAgICAgICAgICBwaG9uZTogcGFyYW1zLnBob25lLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qCh6aqM56ys5LiJ5pa55bmz5Y+w5o6I5p2D55m75b2V5Zue6LCDXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyB2ZXJpZnlPQXV0aChwYXJhbXM/OiBWZXJpZnlPQXV0aFJlcSk6IFByb21pc2U8U2lnbkluUmVzIHwgTGlua0lkZW50aXR5UmVzPiB7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge31cbiAgICB0cnkge1xuICAgICAgLy8g5Zue6LCD6IezIHByb3ZpZGVyX3JlZGlyZWN0X3VyaSDlnLDlnYDvvIh1cmwgcXVlcnnkuK3mkLrluKYg5o6I5p2DY29kZe+8jHN0YXRl562J5Y+C5pWw77yJ77yM5q2k5pe25qOA5p+lIHN0YXRlIOaYr+WQpuespuWQiOmihOacn++8iOWmgiDoh6rlt7Horr7nva7nmoQgd3hfb3BlbilcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXJhbXM/LmNvZGUgfHwgdXRpbHMuZ2V0UXVlcnkoJ2NvZGUnKVxuICAgICAgY29uc3Qgc3RhdGUgPSBwYXJhbXM/LnN0YXRlIHx8IHV0aWxzLmdldFF1ZXJ5KCdzdGF0ZScpXG5cbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmNvZGXlkoxzdGF0ZeW/heWhq1xuICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdDb2RlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ1N0YXRlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdldEJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuICAgICAgZGF0YS50eXBlID0gY2FjaGVEYXRhPy50eXBlXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gcGFyYW1zPy5wcm92aWRlciB8fCBjYWNoZURhdGE/LnByb3ZpZGVyIHx8IHV0aWxzLmdldFF1ZXJ5KCdwcm92aWRlcicpXG5cbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0pIH1cbiAgICAgIH1cblxuICAgICAgLy8gc3RhdGXnrKblkIjpooTmnJ/vvIzliJnojrflj5bor6XkuInmlrnlubPlj7B0b2tlblxuICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogdG9rZW4gfSA9IGF3YWl0IHRoaXMuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lLCAvLyDmjIflrprkuInmlrnlubPlj7Dot7Plm57nmoQgdXJsIOWcsOWdgFxuICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLCAvLyDnrKzkuInmlrnlubPlj7Dot7Povazlm57pobXpnaLml7bvvIx1cmwgcGFyYW0g5Lit5pC65bim55qEIGNvZGUg5Y+C5pWwXG4gICAgICB9KVxuXG4gICAgICBsZXQgcmVzOiBTaWduSW5SZXMgfCBMaW5rSWRlbnRpdHlSZXNcblxuICAgICAgaWYgKGNhY2hlRGF0YS50eXBlID09PSBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFkpIHtcbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudG9CaW5kSWRlbnRpdHkoeyBwcm92aWRlcl90b2tlbjogdG9rZW4sIHByb3ZpZGVyLCBmaXJlRXZlbnQ6IHRydWUgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOmAmui/hyBwcm92aWRlcl90b2tlbiDku4XnmbvlvZXmiJbnmbvlvZXlubbms6jlhozvvIjkuI7kupHlvIDlj5HlubPlj7At55m75b2V5pa55byPLei6q+S7vea6kOeZu+W9leaooeW8j+mFjee9ruacieWFs++8iVxuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLnNpZ25JbldpdGhJZFRva2VuKHtcbiAgICAgICAgICB0b2tlbixcbiAgICAgICAgfSlcbiAgICAgICAgcmVzLmRhdGEgPSB7IC4uLmRhdGEsIC4uLnJlcy5kYXRhIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYWxTZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uPy5zZWFyY2gpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ2NvZGUnKVxuICAgICAgbG9jYWxTZWFyY2guZGVsZXRlKCdzdGF0ZScpXG4gICAgICBhZGRVcmxTZWFyY2goXG4gICAgICAgIGNhY2hlRGF0YT8uc2VhcmNoID09PSB1bmRlZmluZWQgPyBgPyR7bG9jYWxTZWFyY2gudG9TdHJpbmcoKX1gIDogY2FjaGVEYXRhPy5zZWFyY2gsXG4gICAgICAgIGNhY2hlRGF0YT8uaGFzaCB8fCBsb2NhdGlvbi5oYXNoLFxuICAgICAgKVxuICAgICAgcmVtb3ZlQnJvd3NlclNlc3Npb24oc3RhdGUpXG5cbiAgICAgIHJldHVybiByZXNcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbndpdGhvYXV0aFxuICAgKiDnlJ/miJDnrKzkuInmlrnlubPlj7DmjojmnYMgVXJpIO+8iOWmguW+ruS/oeS6jOe7tOeggeaJq+eggeaOiOadg+e9kemhte+8iVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluT0F1dGhSZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoT0F1dGgocGFyYW1zOiBTaWduSW5XaXRoT0F1dGhSZXEpOiBQcm9taXNlPFNpZ25Jbk9BdXRoUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnByb3ZpZGVy5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwcm92aWRlcjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgY29uc3QgaHJlZiA9IHBhcmFtcy5vcHRpb25zPy5yZWRpcmVjdFRvIHx8IGxvY2F0aW9uLmhyZWZcblxuICAgICAgY29uc3QgdXJsT2JqZWN0ID0gbmV3IFVSTChocmVmKVxuXG4gICAgICBjb25zdCBwcm92aWRlcl9yZWRpcmVjdF91cmkgPSB1cmxPYmplY3Qub3JpZ2luICsgdXJsT2JqZWN0LnBhdGhuYW1lXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gcGFyYW1zLm9wdGlvbnM/LnN0YXRlIHx8IGBwcmQtJHtwYXJhbXMucHJvdmlkZXJ9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNilcbiAgICAgICAgLnNsaWNlKDIpfWBcblxuICAgICAgY29uc3QgeyB1cmkgfSA9IGF3YWl0IHRoaXMuZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaSh7XG4gICAgICAgIHByb3ZpZGVyX2lkOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgIHByb3ZpZGVyX3JlZGlyZWN0X3VyaSxcbiAgICAgICAgc3RhdGUsXG4gICAgICB9KVxuXG4gICAgICAvLyDlr7kgVVJMIOi/m+ihjOino+eggVxuICAgICAgY29uc3QgZGVjb2RlZFVyaSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmkpXG5cbiAgICAgIC8vIOWQiOW5tumineWklueahOafpeivouWPguaVsFxuICAgICAgbGV0IGZpbmFsVXJpID0gZGVjb2RlZFVyaVxuXG4gICAgICBpZiAocGFyYW1zLm9wdGlvbnM/LnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZGVjb2RlZFVyaSlcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocGFyYW1zLm9wdGlvbnMucXVlcnlQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KGtleSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGZpbmFsVXJpID0gdXJsLnRvU3RyaW5nKClcbiAgICAgIH1cblxuICAgICAgc2F2ZVRvQnJvd3NlclNlc3Npb24oc3RhdGUsIHtcbiAgICAgICAgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgc2VhcmNoOiB1cmxPYmplY3Quc2VhcmNoLFxuICAgICAgICBoYXNoOiB1cmxPYmplY3QuaGFzaCxcbiAgICAgICAgdHlwZTogcGFyYW1zLm9wdGlvbnM/LnR5cGUgfHwgT0FVVEhfVFlQRS5TSUdOX0lOLFxuICAgICAgfSlcblxuICAgICAgaWYgKGlzQnJvd3NlcigpICYmICFwYXJhbXMub3B0aW9ucz8uc2tpcEJyb3dzZXJSZWRpcmVjdCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGZpbmFsVXJpKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVybDogZmluYWxVcmksIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZ2V0Y2xhaW1zXG4gIGFzeW5jIGdldENsYWltcygpOiBQcm9taXNlPEdldENsYWltc1Jlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGFjY2Vzc1Rva2VuIH0gPSBhd2FpdCB0aGlzLmdldEFjY2Vzc1Rva2VuKClcbiAgICAgIGNvbnN0IHBhcnNlZFRva2VuID0gd2VBcHBKd3REZWNvZGVBbGwoYWNjZXNzVG9rZW4pXG4gICAgICByZXR1cm4geyBkYXRhOiBwYXJzZWRUb2tlbiwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlc2V0cGFzc3dvcmRmb3JlbWFpbFxuICAgKiDpgJrov4cgZW1haWwg5oiW5omL5py65Y+36YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBlbWFpbE9yUGhvbmUg6YKu566x5oiW5omL5py65Y+3XG4gICAqIEByZXR1cm5zIFByb21pc2U8UmVzZXRQYXNzd29yZEZvckVtYWlsUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvckVtYWlsKFxuICAgIGVtYWlsT3JQaG9uZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IHJlZGlyZWN0VG8/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTxSZXNldFBhc3N3b3JkRm9yRW1haWxSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaZW1haWxPclBob25l5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgICB7IGVtYWlsT3JQaG9uZSB9LFxuICAgICAgICB7XG4gICAgICAgICAgZW1haWxPclBob25lOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnRW1haWwgb3IgcGhvbmUgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHsgcmVkaXJlY3RUbyB9ID0gb3B0aW9ucyB8fCB7fVxuXG4gICAgICAvLyDliKTmlq3mmK/pgq7nrrHov5jmmK/miYvmnLrlj7dcbiAgICAgIGNvbnN0IGlzRW1haWwgPSBlbWFpbE9yUGhvbmUuaW5jbHVkZXMoJ0AnKVxuICAgICAgbGV0IHZlcmlmaWNhdGlvblBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nIH1cblxuICAgICAgaWYgKGlzRW1haWwpIHtcbiAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBlbWFpbDogZW1haWxPclBob25lIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRQaG9uZSA9IHRoaXMuZm9ybWF0UGhvbmUoZW1haWxPclBob25lKVxuICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IHBob25lX251bWJlcjogZm9ybWF0dGVkUGhvbmUgfVxuICAgICAgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHZlcmlmaWNhdGlvblBhcmFtcylcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHVwZGF0ZVVzZXI6IGFzeW5jIChhdHRyaWJ1dGVzOiBVcGRhdGVVc2VyQXR0cmlidXRlcyk6IFByb21pc2U8U2lnbkluUmVzPiA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgbm9uY2U6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdOb25jZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQYXNzd29yZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyDnrKzkuInmraXvvJrlvoXnlKjmiLfovpPlhaXlrozpqozor4HnoIHkuYvlkI7vvIzpqozor4Hpqozor4HnoIFcbiAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogYXR0cmlidXRlcy5ub25jZSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwaG9uZV9udW1iZXI6ICFpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlBBU1NXT1JEX1JFQ09WRVJZLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICBlbWFpbDogaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwaG9uZTogIWlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IGF0dHJpYnV0ZXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VG8gJiYgaXNCcm93c2VyKCkpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHJlZGlyZWN0VG8pXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOmAmui/h+aXp+WvhueggemHjee9ruWvhueggVxuICAgKiBAcGFyYW0gbmV3X3Bhc3N3b3JkXG4gICAqIEBwYXJhbSBvbGRfcGFzc3dvcmRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHJlc2V0UGFzc3dvcmRGb3JPbGQocGFyYW1zOiBSZXNldFBhc3N3b3JkRm9yT2xkUmVxKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgICBvbGRfcGFzc3dvcmQ6IHBhcmFtcy5vbGRfcGFzc3dvcmQsXG4gICAgICAgIG5ld19wYXNzd29yZDogcGFyYW1zLm5ld19wYXNzd29yZCxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXZlcmlmeW90cFxuICAgKiBMb2cgaW4gYSB1c2VyIGdpdmVuIGEgVXNlciBzdXBwbGllZCBPVFAgYW5kIHZlcmlmaWNhdGlvbklkIHJlY2VpdmVkIHRocm91Z2ggbW9iaWxlIG9yIGVtYWlsLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5T3RwKHBhcmFtczogVmVyaWZ5T3RwUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB0eXBlIH0gPSBwYXJhbXNcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnRva2Vu5ZKMdmVyaWZpY2F0aW9uSW5mb+W/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgdG9rZW46IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdUb2tlbiBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgbWVzc2FnZUlkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnbWVzc2FnZUlkIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKFsncGhvbmVfY2hhbmdlJywgJ2VtYWlsX2NoYW5nZSddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5KHtcbiAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHBhcmFtcy5tZXNzYWdlSWQsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IHBhcmFtcy50b2tlbixcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgICB2ZXJpZmljYXRpb25JbmZvOiB7IHZlcmlmaWNhdGlvbl9pZDogcGFyYW1zLm1lc3NhZ2VJZCwgaXNfdXNlcjogdHJ1ZSB9LFxuICAgICAgICAgIHZlcmlmaWNhdGlvbkNvZGU6IHBhcmFtcy50b2tlbixcbiAgICAgICAgICB1c2VybmFtZTogcGFyYW1zLmVtYWlsIHx8IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB8fCAnJyxcbiAgICAgICAgICBsb2dpblR5cGU6IHBhcmFtcy5lbWFpbCA/ICdlbWFpbCcgOiAncGhvbmUnLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXRTZXNzaW9uXG4gICAqIFJldHVybnMgdGhlIHNlc3Npb24sIHJlZnJlc2hpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIGdldFNlc3Npb24oKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5nZXRDcmVkZW50aWFscygpXG5cbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgY3JlZGVudGlhbHMuc2NvcGUgPT09ICdhY2Nlc3NLZXknKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbnVsbCB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyB1c2VyIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiB7IC4uLmNyZWRlbnRpYWxzLCB1c2VyIH0sIHVzZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlZnJlc2hzZXNzaW9uXG4gICAqIOaXoOiuuui/h+acn+eKtuaAgeWmguS9le+8jOmDvei/lOWbnuS4gOS4quaWsOeahOS8muivnVxuICAgKiBAcGFyYW0gcmVmcmVzaF90b2tlblxuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hTZXNzaW9uKHJlZnJlc2hfdG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW4gfHwgY3JlZGVudGlhbHMucmVmcmVzaF90b2tlblxuICAgICAgY29uc3QgbmV3VG9rZW5zID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICBjb25zdCB7IGRhdGE6IHsgdXNlciB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciwgc2Vzc2lvbjogeyAuLi5uZXdUb2tlbnMsIHVzZXIgfSB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZ2V0dXNlclxuICAgKiDlpoLmnpzlrZjlnKjnjrDmnInkvJror53vvIzliJnojrflj5blvZPliY3nlKjmiLfor6bnu4bkv6Hmga9cbiAgICogQHJldHVybnMgUHJvbWlzZTxHZXRVc2VyUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0VXNlcigpOiBQcm9taXNlPEdldFVzZXJSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlciA9IHRoaXMuY29udmVydFRvVXNlcihhd2FpdCB0aGlzLmdldFVzZXJJbmZvKCkpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Yi35paw55So5oi35L+h5oGvXG4gICAqIEByZXR1cm5zIFByb21pc2U8Q29tbW9uUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaFVzZXIoKTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jdXJyZW50VXNlci5yZWZyZXNoKClcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXVwZGF0ZXVzZXJcbiAgICog5pu05paw55So5oi35L+h5oGvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxHZXRVc2VyUmVzIHwgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXM+XG4gICAqL1xuICBhc3luYyB1cGRhdGVVc2VyKHBhcmFtczogVXBkYXRlVXNlclJlcSk6IFByb21pc2U8R2V0VXNlclJlcyB8IFVwZGF0ZVVzZXJXaXRoVmVyaWZpY2F0aW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8muiHs+WwkeacieS4gOS4quabtOaWsOWtl+auteiiq+aPkOS+m1xuICAgICAgY29uc3QgaGFzVmFsdWUgPSBPYmplY3Qua2V5cyhwYXJhbXMpLnNvbWUoa2V5ID0+IHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zW2tleV0gIT09IG51bGwgJiYgcGFyYW1zW2tleV0gIT09ICcnLClcbiAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdBdCBsZWFzdCBvbmUgZmllbGQgbXVzdCBiZSBwcm92aWRlZCBmb3IgdXBkYXRlJyB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGVtYWlsLCBwaG9uZSwgLi4ucmVzdFBhcmFtcyB9ID0gcGFyYW1zXG5cbiAgICAgIC8vIOajgOafpeaYr+WQpumcgOimgeabtOaWsCBlbWFpbCDmiJYgcGhvbmVcbiAgICAgIGNvbnN0IG5lZWRzRW1haWxWZXJpZmljYXRpb24gPSBlbWFpbCAhPT0gdW5kZWZpbmVkXG4gICAgICBjb25zdCBuZWVkc1Bob25lVmVyaWZpY2F0aW9uID0gcGhvbmUgIT09IHVuZGVmaW5lZFxuXG4gICAgICBsZXQgZXh0cmFSZXMgPSB7fVxuXG4gICAgICBpZiAobmVlZHNFbWFpbFZlcmlmaWNhdGlvbiB8fCBuZWVkc1Bob25lVmVyaWZpY2F0aW9uKSB7XG4gICAgICAgIC8vIOmcgOimgeWPkemAgemqjOivgeeggVxuICAgICAgICBsZXQgdmVyaWZpY2F0aW9uUGFyYW1zOiB7IGVtYWlsPzogc3RyaW5nOyBwaG9uZV9udW1iZXI/OiBzdHJpbmcgfVxuICAgICAgICBsZXQgdmVyaWZpY2F0aW9uVHlwZTogJ2VtYWlsX2NoYW5nZScgfCAncGhvbmVfY2hhbmdlJ1xuXG4gICAgICAgIGlmIChuZWVkc0VtYWlsVmVyaWZpY2F0aW9uKSB7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBlbWFpbDogcGFyYW1zLmVtYWlsIH1cbiAgICAgICAgICB2ZXJpZmljYXRpb25UeXBlID0gJ2VtYWlsX2NoYW5nZSdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDmraPop4TljJbmiYvmnLrlj7dcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRQaG9uZSA9IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKVxuICAgICAgICAgIHZlcmlmaWNhdGlvblBhcmFtcyA9IHsgcGhvbmVfbnVtYmVyOiBmb3JtYXR0ZWRQaG9uZSB9XG4gICAgICAgICAgdmVyaWZpY2F0aW9uVHlwZSA9ICdwaG9uZV9jaGFuZ2UnXG4gICAgICAgIH1cblxuICAgICAgICAvLyDlj5HpgIHpqozor4HnoIFcbiAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHZlcmlmaWNhdGlvblBhcmFtcylcblxuICAgICAgICBPYmplY3Qua2V5cyhyZXN0UGFyYW1zKS5sZW5ndGggPiAwICYmIChhd2FpdCB0aGlzLnVwZGF0ZVVzZXJCYXNpY0luZm8ocmVzdFBhcmFtcykpXG5cbiAgICAgICAgZXh0cmFSZXMgPSB7XG4gICAgICAgICAgbWVzc2FnZUlkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICB2ZXJpZnlPdHA6IGFzeW5jICh2ZXJpZnlQYXJhbXM6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lPzogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0pOiBQcm9taXNlPEdldFVzZXJSZXM+ID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmICh2ZXJpZnlQYXJhbXMuZW1haWwgJiYgcGFyYW1zLmVtYWlsID09PSB2ZXJpZnlQYXJhbXMuZW1haWwpIHtcbiAgICAgICAgICAgICAgICAvLyDpqozor4HnoIHpqozor4FcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeU90cCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnZW1haWxfY2hhbmdlJyxcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiBwYXJhbXMuZW1haWwsXG4gICAgICAgICAgICAgICAgICB0b2tlbjogdmVyaWZ5UGFyYW1zLnRva2VuLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZUlkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyh7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJpZnlQYXJhbXMucGhvbmUgJiYgcGFyYW1zLnBob25lID09PSB2ZXJpZnlQYXJhbXMucGhvbmUpIHtcbiAgICAgICAgICAgICAgICAvLyDpqozor4HnoIHpqozor4FcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeU90cCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAncGhvbmVfY2hhbmdlJyxcbiAgICAgICAgICAgICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICAgICAgICAgICAgICB0b2tlbjogdmVyaWZ5UGFyYW1zLnRva2VuLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZUlkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyh7IHBob25lOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeU90cCh7XG4gICAgICAgICAgICAgICAgICB0eXBlOiB2ZXJpZmljYXRpb25UeXBlLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IG5lZWRzRW1haWxWZXJpZmljYXRpb24gPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBwaG9uZTogIW5lZWRzRW1haWxWZXJpZmljYXRpb24gPyBwYXJhbXMucGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0b2tlbjogdmVyaWZ5UGFyYW1zLnRva2VuLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZUlkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC8vIOmqjOivgeaIkOWKn+WQjuabtOaWsOeUqOaIt+S/oeaBr1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXMpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyIH0sXG4gICAgICAgICAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKVxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5VU0VSX1VQREFURUQgfSlcblxuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIgfSwgZXJyb3I6IG51bGwgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5LiN6ZyA6KaB6aqM6K+B77yM55u05o6l5pu05pawXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXMpXG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpXG4gICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5VU0VSX1VQREFURUQgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCAuLi5leHRyYVJlcyB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZ2V0dXNlcmlkZW50aXRpZXNcbiAgICog6I635Y+W5omA5pyJ6Lqr5Lu95rqQXG4gICAqIEByZXR1cm5zIFByb21pc2U8R2V0VXNlcklkZW50aXRpZXNSZXM+XG4gICAqL1xuICBhc3luYyBnZXRVc2VySWRlbnRpdGllcygpOiBQcm9taXNlPEdldFVzZXJJZGVudGl0aWVzUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVycyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVycygpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgaWRlbnRpdGllczogcHJvdmlkZXJzPy5kYXRhPy5maWx0ZXIodiA9PiAhIXYuYmluZCkgYXMgdW5rbm93biBhcyBHZXRVc2VySWRlbnRpdGllc1Jlc1snZGF0YSddWydpZGVudGl0aWVzJ10gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWxpbmtpZGVudGl0eVxuICAgKiDnu5Hlrprouqvku73mupDliLDlvZPliY3nlKjmiLdcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPExpbmtJZGVudGl0eVJlcz5cbiAgICovXG4gIGFzeW5jIGxpbmtJZGVudGl0eShwYXJhbXM6IExpbmtJZGVudGl0eVJlcSk6IFByb21pc2U8TGlua0lkZW50aXR5UmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnByb3ZpZGVy5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwcm92aWRlcjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoT0F1dGgoe1xuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdHlwZTogT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC11bmxpbmtpZGVudGl0eVxuICAgKiDop6Pnu5Houqvku73mupBcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPENvbW1vblJlcz5cbiAgICovXG4gIGFzeW5jIHVubGlua0lkZW50aXR5KHBhcmFtczogVW5saW5rSWRlbnRpdHlSZXEpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpwcm92aWRlcuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcHJvdmlkZXI6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVuYmluZFByb3ZpZGVyKHsgcHJvdmlkZXJfaWQ6IHBhcmFtcy5wcm92aWRlciB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlYXV0aGVudGljYXRpb25cbiAgICog6YeN5paw6K6k6K+BXG4gICAqIEByZXR1cm5zIFByb21pc2U8UmVhdXRoZW50aWNhdGVSZXM+XG4gICAqL1xuICBhc3luYyByZWF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPFJlYXV0aGVudGljYXRlUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogeyB1c2VyIH0sXG4gICAgICB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcblxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUodXNlciwgW1snZW1haWwnLCAncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuICAgICAgY29uc3QgdXNlckluZm8gPSB1c2VyLmVtYWlsID8geyBlbWFpbDogdXNlci5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUodXNlci5waG9uZSkgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHVzZXJJbmZvKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdXBkYXRlVXNlcjogYXN5bmMgKGF0dHJpYnV0ZXM6IFVwZGF0ZVVzZXJBdHRyaWJ1dGVzKTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICBub25jZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ05vbmNlIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B6aqM6K+B56CBXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGF0dHJpYnV0ZXMubm9uY2UsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIC8vIOesrOWbm+atpe+8muiOt+WPliBzdWRvX3Rva2VuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vkb1JlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8oe1xuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgIHN1ZG9fdG9rZW46IHN1ZG9SZXMuc3Vkb190b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgLi4udXNlckluZm8sXG4gICAgICAgICAgICAgICAgICBsb2dpblR5cGU6IHVzZXJJbmZvLmVtYWlsID8gJ2VtYWlsJyA6ICdwaG9uZScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZXNlbmRcbiAgICog6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZXNlbmRSZXM+XG4gICAqL1xuICBhc3luYyByZXNlbmQocGFyYW1zOiBSZXNlbmRSZXEpOiBQcm9taXNlPFJlc2VuZFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXJhbXMudHlwZSA9PT0gJ3NpZ251cCcgPyAnQU5ZJyA6ICdVU0VSJ1xuICAgICAgY29uc3QgZGF0YTogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nOyB0YXJnZXQ6ICdVU0VSJyB8ICdBTlknIH0gPSB7IHRhcmdldCB9XG4gICAgICBpZiAoJ2VtYWlsJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5lbWFpbCA9IHBhcmFtcy5lbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Bob25lJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5waG9uZV9udW1iZXIgPSB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSlcbiAgICAgIH1cblxuICAgICAgLy8g6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSWQgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihkYXRhKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSWQgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNldHNlc3Npb25cbiAgICog5L2/55SoYWNjZXNzX3Rva2Vu5ZKMcmVmcmVzaF90b2tlbuadpeiuvue9ruS8muivnVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2V0U2Vzc2lvbihwYXJhbXM6IFNldFNlc3Npb25SZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdBY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdSZWZyZXNoIHRva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5yZWZyZXNoVG9rZW4ocGFyYW1zLCB7IHRocm93RXJyb3I6IHRydWUgfSlcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfSU4gfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZXhjaGFuZ2Vjb2RlZm9yc2Vzc2lvblxuICBhc3luYyBleGNoYW5nZUNvZGVGb3JTZXNzaW9uKCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICog5Yig6Zmk5b2T5YmN55So5oi3XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVVzZXIocGFyYW1zOiBEZWxldGVNZVJlcSk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHBhc3N3b3JkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7IHN1ZG9fdG9rZW4gfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8ocGFyYW1zKVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZSh7IHN1ZG9fdG9rZW4gfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOi3s+i9rOezu+e7n+m7mOiupOeZu+W9lemhtVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlRvRGVmYXVsdExvZ2luUGFnZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBhc3luYyB0b0RlZmF1bHRMb2dpblBhZ2UocGFyYW1zOiBhdXRoTW9kZWxzLlRvRGVmYXVsdExvZ2luUGFnZSA9IHt9KTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnVmVyc2lvbiA9IHBhcmFtcy5jb25maWdfdmVyc2lvbiB8fCAnZW52J1xuICAgICAgY29uc3QgcXVlcnkgPSBPYmplY3Qua2V5cyhwYXJhbXMucXVlcnkgfHwge30pXG4gICAgICAgIC5tYXAoa2V5ID0+IGAke2tleX09JHtwYXJhbXMucXVlcnlba2V5XX1gKVxuICAgICAgICAuam9pbignJicpXG5cbiAgICAgIGlmIChhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgICAgd3gubmF2aWdhdGVUbyh7IHVybDogYC9wYWNrYWdlcy8kd2Rfc3lzdGVtL3BhZ2VzL2xvZ2luL2luZGV4JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogJyd9YCB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBwYXJhbXMucmVkaXJlY3RfdXJpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwocmVkaXJlY3RVcmkpXG4gICAgICAgIGNvbnN0IGxvZ2luUGFnZSA9IGAke3VybE9iai5vcmlnaW59L19fYXV0aC8/YXBwX2lkPSR7cGFyYW1zLmFwcF9pZCB8fCAnJ30mZW52X2lkPSR7dGhpcy5jb25maWcuZW52fSZjbGllbnRfaWQ9JHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5jbGllbnRJZCB8fCB0aGlzLmNvbmZpZy5lbnZcbiAgICAgICAgfSZjb25maWdfdmVyc2lvbj0ke2NvbmZpZ1ZlcnNpb259JnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSl9JHtxdWVyeSA/IGAmJHtxdWVyeX1gIDogJyd9YFxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGxvZ2luUGFnZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiHquWumuS5ieeZu+W9lVxuICAgKiBAcGFyYW0gZ2V0VGlja0ZuICgpID0+IFByb21pc2U8c3RyaW5nPiwg6I635Y+W6Ieq5a6a5LmJ55m75b2VIHRpY2tldCDnmoTlh73mlbBcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQoZ2V0VGlja0ZuPzogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmIChnZXRUaWNrRm4pIHtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KClcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2VXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoT3BlbklkKHsgdXNlV3hDbG91ZCA9IHRydWUgfSA9IHt9KTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcihcbiAgICAgICAgICB7IHByb3ZpZGVyX3Rva2VuOiByZXN1bHQucHJvdmlkZXJfdG9rZW4gfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChjcmVkZW50aWFscyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgY3JlZGVudGlhbHNcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMgYXMgQ3JlZGVudGlhbHMpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP5omL5py65Y+35o6I5p2D55m75b2V77yM55uu5YmN5Y+q5pSv5oyB5YWo5omY566h5omL5py65Y+35o6I5p2D55m75b2VXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoUGhvbmVBdXRoKHsgcGhvbmVDb2RlID0gJycgfSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICd3eCBhcGkgdW5kZWZpbmVkJyB9KSB9XG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgY29uc3QgcHJvdmlkZXJJbmZvID0ge1xuICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7IHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJyB9LFxuICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHd4LmxvZ2luKClcbiAgICA7KHByb3ZpZGVySW5mbyBhcyBhbnkpLnByb3ZpZGVyX2NvZGUgPSBjb2RlXG5cbiAgICB0cnkge1xuICAgICAgbGV0IHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocHJvdmlkZXJJbmZvKVxuICAgICAgaWYgKHByb3ZpZGVyVG9rZW4uZXJyb3JfY29kZSkge1xuICAgICAgICB0aHJvdyBwcm92aWRlclRva2VuXG4gICAgICB9XG5cbiAgICAgIHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5wYXRjaFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgY29kZTogcGhvbmVDb2RlLFxuICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4ucHJvdmlkZXJfdG9rZW4sXG4gICAgICB9KVxuXG4gICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHNpZ25JblJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UGhvbmUocGhvbmU6IHN0cmluZykge1xuICAgIGlmICghL1xccysvLnRlc3QocGhvbmUpICYmIC9eXFwrXFxkezEsM31cXGQrLy50ZXN0KHBob25lKSkge1xuICAgICAgcmV0dXJuIHBob25lLnJlcGxhY2UoL14oXFwrXFxkezEsMn0pKFxcZCspJC8sICckMSAkMicpXG4gICAgfVxuICAgIHJldHVybiAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChwaG9uZSkgPyBwaG9uZSA6IGArODYgJHtwaG9uZX1gXG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbyk6IE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2sge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGNhbGxiYWNrcykgPT4ge1xuICAgICAgY2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQsIHNlc3Npb24sIGluZm8pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYXV0aCBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2s6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/Lm9uKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gcGFyYW1zPy5kYXRhPy5ldmVudFxuICAgICAgY29uc3QgaW5mbyA9IHBhcmFtcz8uZGF0YT8uaW5mb1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHNlc3Npb24gfSxcbiAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbylcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9Vc2VyKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikge1xuICAgIGlmICghdXNlckluZm8pIHJldHVybiBudWxsXG5cbiAgICAvLyDkvJjlhYjkvb/nlKggdXNlckluZm8g5Lit55qE5pWw5o2u77yIVjMgQVBJ77yJXG4gICAgY29uc3QgZW1haWwgPSB1c2VySW5mbz8uZW1haWwgfHwgJydcbiAgICBjb25zdCBwaG9uZSA9IHVzZXJJbmZvPy5waG9uZV9udW1iZXIgfHwgJydcbiAgICBjb25zdCB1c2VySWQgPSB1c2VySW5mbz8uc3ViIHx8IHVzZXJJbmZvPy51aWQgfHwgJydcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdXNlcklkLFxuICAgICAgYXVkOiAnYXV0aGVudGljYXRlZCcsXG4gICAgICByb2xlOiB1c2VySW5mby5ncm91cHM/Lm1hcD8uKGdyb3VwID0+ICh0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnID8gZ3JvdXAgOiBncm91cC5pZCkpLFxuICAgICAgZW1haWw6IGVtYWlsIHx8ICcnLFxuICAgICAgZW1haWxfY29uZmlybWVkX2F0OiB1c2VySW5mbz8uZW1haWxfdmVyaWZpZWQgPyB1c2VySW5mby5jcmVhdGVkX2F0IDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIHBob25lLFxuICAgICAgcGhvbmVfY29uZmlybWVkX2F0OiBwaG9uZSA/IHVzZXJJbmZvLmNyZWF0ZWRfYXQgOiB1bmRlZmluZWQsXG4gICAgICBjb25maXJtZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICBsYXN0X3NpZ25faW5fYXQ6ICh1c2VySW5mbyBhcyBhbnkpLmxhc3Rfc2lnbl9pbl9hdCxcbiAgICAgIGFwcF9tZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlcjogdXNlckluZm8ubG9naW5UeXBlPy50b0xvd2VyQ2FzZSgpIHx8ICdjbG91ZGJhc2UnLFxuICAgICAgICBwcm92aWRlcnM6IFt1c2VySW5mby5sb2dpblR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJ2Nsb3VkYmFzZSddLFxuICAgICAgfSxcbiAgICAgIHVzZXJfbWV0YWRhdGE6IHtcbiAgICAgICAgLy8gVjMgQVBJIOeUqOaIt+S/oeaBr1xuICAgICAgICBuYW1lOiB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgcGljdHVyZTogdXNlckluZm8/LnBpY3R1cmUsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mbz8udXNlcm5hbWUsIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gICAgICAgIGdlbmRlcjogdXNlckluZm8/LmdlbmRlcixcbiAgICAgICAgbG9jYWxlOiB1c2VySW5mbz8ubG9jYWxlLFxuICAgICAgICAvLyBWMiBBUEkg5YW85a6577yI5L2/55SoIGFueSDpgb/lhY3nsbvlnovplJnor6/vvIlcbiAgICAgICAgdWlkOiB1c2VySW5mby51aWQsXG4gICAgICAgIG5pY2tOYW1lOiB1c2VySW5mby5uaWNrTmFtZSB8fCB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgYXZhdGFyVXJsOiB1c2VySW5mby5hdmF0YXJVcmwgfHwgdXNlckluZm8ucGljdHVyZSxcbiAgICAgICAgbG9jYXRpb246IHVzZXJJbmZvLmxvY2F0aW9uLFxuICAgICAgICBoYXNQYXNzd29yZDogdXNlckluZm8uaGFzUGFzc3dvcmQsXG4gICAgICB9LFxuICAgICAgaWRlbnRpdGllczpcbiAgICAgICAgdXNlckluZm8/LnByb3ZpZGVycz8ubWFwKHAgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICBpZGVudGl0eV9pZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICB1c2VyX2lkOiB1c2VySWQsXG4gICAgICAgICAgaWRlbnRpdHlfZGF0YToge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHAuaWQsXG4gICAgICAgICAgICBwcm92aWRlcl91c2VyX2lkOiBwLnByb3ZpZGVyX3VzZXJfaWQsXG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm92aWRlcjogcC5pZCB8fCAnY2xvdWRiYXNlJyxcbiAgICAgICAgICBjcmVhdGVkX2F0OiB1c2VySW5mby5jcmVhdGVkX2F0LFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IHVzZXJJbmZvLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgbGFzdF9zaWduX2luX2F0OiAodXNlckluZm8gYXMgYW55KS5sYXN0X3NpZ25faW5fYXQsXG4gICAgICAgIH0pKSB8fCBbXSxcbiAgICAgIGNyZWF0ZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICB1cGRhdGVkX2F0OiB1c2VySW5mby51cGRhdGVkX2F0LFxuICAgICAgaXNfYW5vbnltb3VzOiB1c2VySW5mby5uYW1lID09PSAnYW5vbnltb3VzJyxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y+C5pWw5qCh6aqM6L6F5Yqp5pa55rOVXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFyYW1zKHBhcmFtczogYW55LCBydWxlczogeyBba2V5OiBzdHJpbmddOiB7IHJlcXVpcmVkPzogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICBpZiAocnVsZS5yZXF1aXJlZCAmJiAocGFyYW1zPy5ba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtcz8uW2tleV0gPT09IG51bGwgfHwgcGFyYW1zPy5ba2V5XSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiBydWxlLm1lc3NhZ2UgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qCh6aqM5b+F5aGr5Y+C5pWw57uE77yI6Iez5bCR5pyJ5LiA5Liq5Y+C5pWw5b+F6aG75pyJ5YC877yJXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXM6IGFueSwgZmllbGRHcm91cHM6IHN0cmluZ1tdW10sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gZmllbGRHcm91cHMuc29tZShncm91cCA9PiBncm91cC5zb21lKGZpZWxkID0+IHBhcmFtcz8uW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcz8uW2ZpZWxkXSAhPT0gbnVsbCAmJiBwYXJhbXM/LltmaWVsZF0gIT09ICcnKSwpXG5cbiAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZSB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHsgZXJyb3I6IEVycm9yIHwgbnVsbCB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuSU5JVElBTF9TRVNTSU9OIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yZSBlcnJvcnMgd2hlbiBjaGVja2luZyBmb3IgZXhpc3RpbmcgY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9XG4gIH1cbn1cblxudHlwZSBUSW5pdEF1dGhPcHRpb25zID0gUGljazxJQ2xvdWRiYXNlQXV0aENvbmZpZywgJ3JlZ2lvbicgfCAncGVyc2lzdGVuY2UnIHwgJ2kxOG4nIHwgJ2FjY2Vzc0tleScgfCAndXNlV3hDbG91ZCc+ICZcblBhcnRpYWw8QXV0aE9wdGlvbnM+ICYge1xuICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUF1dGhJbnN0YW5jZShcbiAgY29uZmlnOiBUSW5pdEF1dGhPcHRpb25zICYgeyBzZGtWZXJzaW9uPzogc3RyaW5nIH0sXG4gIG9wdGlvbnM/OiB7XG4gICAgY2xpZW50SWQ6IElDbG91ZGJhc2VDb25maWdbJ2NsaWVudElkJ11cbiAgICBlbnY6IElDbG91ZGJhc2VDb25maWdbJ2VudiddXG4gICAgYXBpT3JpZ2luOiBzdHJpbmdcbiAgICBjYWNoZT86IElDbG91ZGJhc2VDYWNoZVxuICAgIHBsYXRmb3JtPzogSUNsb3VkYmFzZVsncGxhdGZvcm0nXVxuICAgIGFwcD86IElDbG91ZGJhc2VcbiAgICBkZWJ1Zz86IElDbG91ZGJhc2VBdXRoQ29uZmlnWydkZWJ1ZyddXG4gICAgZGV0ZWN0U2Vzc2lvbkluVXJsPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RldGVjdFNlc3Npb25JblVybCddXG4gIH0sXG4pIHtcbiAgY29uc3QgeyByZWdpb24gPSAnYXAtc2hhbmdoYWknLCBpMThuLCBhY2Nlc3NLZXksIHVzZVd4Q2xvdWQgfSA9IGNvbmZpZ1xuICBjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnM/LnBsYXRmb3JtIHx8ICh1c2VEZWZhdWx0QWRhcHRlci5iaW5kKG9wdGlvbnMpKCkgYXMgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbylcbiAgY29uc3QgeyBydW50aW1lLCBhZGFwdGVyIH0gPSBwbGF0Zm9ybVxuXG4gIGNvbnN0IHsgZW52LCBjbGllbnRJZCwgZGVidWcsIGNhY2hlLCBhcHA6IGNsb3VkYmFzZSB9ID0gb3B0aW9ucyB8fCB7fVxuICBsZXQgeyBhcGlPcmlnaW4gfSA9IG9wdGlvbnMgfHwge31cbiAgaWYgKCFhcGlPcmlnaW4pIHtcbiAgICBhcGlPcmlnaW4gPSBgaHR0cHM6Ly8ke2Vudn0uJHtyZWdpb259LnRjYi1hcGkudGVuY2VudGNsb3VkYXBpLmNvbWBcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbk9wdHMgPSB7XG4gICAgZW52LFxuICAgIGNsaWVudElkLFxuICAgIGkxOG4sXG4gICAgYWNjZXNzS2V5LFxuICAgIHVzZVd4Q2xvdWQsXG4gICAgZXZlbnRCdXM6IG5ldyBDbG91ZGJhc2VFdmVudEVtaXR0ZXIoKSxcbiAgfVxuXG4gIGNvbnN0IG9hdXRoSW5zdGFuY2UgPSBuZXcgQ2xvdWRiYXNlT0F1dGgodXNlQXV0aEFkYXB0ZXIoe1xuICAgIC4uLmNvbW1vbk9wdHMsXG4gICAgYXBpT3JpZ2luLFxuICAgIGFwaVBhdGg6IGNvbmZpZz8uYXBpUGF0aCB8fCBBVVRIX0FQSV9QUkVGSVgsXG4gICAgLy8gQHRvZG8g5Lul5LiL5pyA5aW96LWwYWRhcHRvcuWkhOeQhu+8jOebruWJjW9hdXRo5qih5Z2X5rKh5oyJYWRhcHRvcuaOpeWPo+iuvuiuoVxuICAgIHN0b3JhZ2U6IGNvbmZpZz8uc3RvcmFnZSxcbiAgICBiYXNlUmVxdWVzdDogY29uZmlnPy5iYXNlUmVxdWVzdCxcbiAgICByZXF1ZXN0OiBjb25maWc/LnJlcXVlc3QsXG4gICAgYW5vbnltb3VzU2lnbkluRnVuYzogY29uZmlnPy5hbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgIGNhcHRjaGFPcHRpb25zOiBjb25maWc/LmNhcHRjaGFPcHRpb25zLFxuICAgIHd4Q2xvdWQ6IGNvbmZpZz8ud3hDbG91ZCxcbiAgICBhZGFwdGVyLFxuICAgIG9uQ3JlZGVudGlhbHNFcnJvcjogb25DcmVkZW50aWFsc0Vycm9yKGNvbW1vbk9wdHMuZXZlbnRCdXMpLFxuICAgIGhlYWRlcnM6IHsgJ1gtU0RLLVZlcnNpb24nOiBgQGNsb3VkYmFzZS9qcy1zZGsvJHtjb25maWcuc2RrVmVyc2lvbn1gLCAuLi4oY29uZmlnLmhlYWRlcnMgfHwge30pIH0sXG4gICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiBjb25maWcuZGV0ZWN0U2Vzc2lvbkluVXJsLFxuICAgIGRlYnVnLFxuICB9KSwpXG5cbiAgY29uc3QgYXV0aEluc3RhbmNlID0gbmV3IEF1dGgoe1xuICAgIC4uLmNvbW1vbk9wdHMsXG4gICAgcmVnaW9uLFxuICAgIHBlcnNpc3RlbmNlOiBjb25maWcucGVyc2lzdGVuY2UsXG4gICAgZGVidWcsXG4gICAgY2FjaGU6XG4gICAgICBjYWNoZSB8fCBuZXcgQ2xvdWRiYXNlQ2FjaGUoe1xuICAgICAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICBrZXlzOiB7IHVzZXJJbmZvS2V5OiBgdXNlcl9pbmZvXyR7ZW52fWAgfSxcbiAgICAgICAgcGxhdGZvcm1JbmZvOiBwbGF0Zm9ybSxcbiAgICAgIH0pLFxuICAgIHJ1bnRpbWU6IHJ1bnRpbWUgfHwgJ3dlYicsXG4gICAgX2Zyb21BcHA6IGNsb3VkYmFzZSxcbiAgICBvYXV0aEluc3RhbmNlLFxuICB9KVxuXG4gIC8vIEluaXRpYWxpemUgc2Vzc2lvbiB3aXRoIHVzZXIgaW5mbyBjYWxsYmFja1xuICAvLyBUaGlzIGhhbmRsZXMgT0F1dGggY2FsbGJhY2sgVVJMIGRldGVjdGlvbiBhbmQgY3JlYXRlcyBsb2dpbiBzdGF0ZSBhdG9taWNhbGx5XG4gIG9hdXRoSW5zdGFuY2UuaW5pdGlhbGl6ZVNlc3Npb24oYXN5bmMgKGRhdGEsIGVycm9yKSA9PiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm5cblxuICAgIGlmIChkYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuU0lHTl9JTikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbW1vbk9wdHMuZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTixcbiAgICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudXNlcikge1xuICAgICAgICAvLyDkvb/nlKjlt7Lojrflj5bnmoQgdXNlciDkv6Hmga/liJvlu7ogTG9naW5TdGF0Ze+8jOWkjeeUqCBjcmVhdGVMb2dpblN0YXRlIOmAu+i+kVxuICAgICAgICAvLyDkvYbot7Pov4cgcmVmcmVzaCgpIOmBv+WFjeWGjeasoeivt+axgiBBUEkg5a+86Ie05q276ZSBXG4gICAgICAgIGF1dGhJbnN0YW5jZS5jcmVhdGVMb2dpblN0YXRlKHt9LCB7IHVzZXJJbmZvOiBkYXRhLnVzZXIgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZKSB7XG4gICAgICBjb21tb25PcHRzLmV2ZW50QnVzLmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuQklORF9JREVOVElUWSxcbiAgICAgICAgaW5mbzogeyAuLi5kYXRhLCBlcnJvciB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH1cbn1cblxuY29uc3QgTkFNRVNQQUNFID0gJ2F1dGgnXG5cbmNvbnN0IGNvbXBvbmVudDogSUNsb3VkYmFzZUNvbXBvbmVudCA9IHtcbiAgbmFtZTogQ09NUE9ORU5UX05BTUUsXG4gIG5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICBlbnRpdHkoY29uZmlnPzogVEluaXRBdXRoT3B0aW9ucykge1xuICAgIGNvbnN0IGF1dGggPSBmdW5jdGlvbiAoY29uZmlnPzogVEluaXRBdXRoT3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMuYXV0aEluc3RhbmNlICYmICFjb25maWcpIHtcbiAgICAgICAgLy8gcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX09QRVJBVElPTiwgJ2V2ZXJ5IGNsb3VkYmFzZSBpbnN0YW5jZSBzaG91bGQgaGFzIG9ubHkgb25lIGF1dGggb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgICB9XG5cbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7XG4gICAgICAgIHJlZ2lvbjogJycsXG4gICAgICAgIHBlcnNpc3RlbmNlOiAnbG9jYWwnLFxuICAgICAgICBhcGlQYXRoOiBBVVRIX0FQSV9QUkVGSVgsXG4gICAgICB9XG4gICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMucGxhdGZvcm1cbiAgICAgIC8vIOWmguS4jeaYjuehruaMh+WumnBlcnNpc3RlbmNl5YiZ5LyY5YWI5Y+W5ZCE5bmz5Y+wYWRhcHRlcummlumAie+8jOWFtuasoWxvY2FsU3RvcmFnZVxuICAgICAgY29uc3QgbmV3UGVyc2lzdGVuY2UgPSBjb25maWcucGVyc2lzdGVuY2UgfHwgYWRhcHRlci5wcmltYXJ5U3RvcmFnZVxuICAgICAgaWYgKG5ld1BlcnNpc3RlbmNlICYmIG5ld1BlcnNpc3RlbmNlICE9PSB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh7IHBlcnNpc3RlbmNlOiBuZXdQZXJzaXN0ZW5jZSB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF1dGhJbnN0YW5jZSwgb2F1dGhJbnN0YW5jZSB9ID0gZ2VuZXJhdGVBdXRoSW5zdGFuY2UoXG4gICAgICAgIHtcbiAgICAgICAgICB3eENsb3VkOiB0aGlzLmNvbmZpZy53eENsb3VkLFxuICAgICAgICAgIHN0b3JhZ2U6IHRoaXMuY29uZmlnLnN0b3JhZ2UsXG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIHBlcnNpc3RlbmNlOiB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICAgICAgICBpMThuOiB0aGlzLmNvbmZpZy5pMThuLFxuICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy5jb25maWcuYWNjZXNzS2V5LFxuICAgICAgICAgIHVzZVd4Q2xvdWQ6IHRoaXMuY29uZmlnLnVzZVd4Q2xvdWQsXG4gICAgICAgICAgc2RrVmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgIGRldGVjdFNlc3Npb25JblVybDogdGhpcy5jb25maWcuYXV0aD8uZGV0ZWN0U2Vzc2lvbkluVXJsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgICAgY2xpZW50SWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxuICAgICAgICAgIGFwaU9yaWdpbjogdGhpcy5yZXF1ZXN0LmdldEJhc2VFbmRQb2ludCh0aGlzLmNvbmZpZy5lbmRQb2ludE1vZGUgfHwgJ0NMT1VEX0FQSScpLFxuICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICAgIGFwcDogdGhpcyxcbiAgICAgICAgICBkZWJ1ZzogdGhpcy5jb25maWcuZGVidWcsXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgICAgdGhpcy5hdXRoSW5zdGFuY2UgPSBhdXRoSW5zdGFuY2VcblxuICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgfVxuXG4gICAgY29uc3QgYXV0aFByb3RvID0gYXV0aC5jYWxsKHRoaXMsIGNvbmZpZylcbiAgICBPYmplY3QuYXNzaWduKGF1dGgsIGF1dGhQcm90bylcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXV0aCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGF1dGhQcm90bykpXG4gICAgdGhpc1tOQU1FU1BBQ0VdID0gYXV0aFxuICAgIHJldHVybiBhdXRoXG4gIH0sXG59XG5cbnRyeSB7XG4gIC8vIOWwneivleiHquWKqOazqOWGjOiHs+WFqOWxgOWPmOmHj2Nsb3VkYmFzZVxuICAvLyDmraTooYzkuLrlj6rlnKjmtY/op4jlmajnjq/looPkuIvmnInmlYhcbiAgY2xvdWRiYXNlLnJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudClcbn0gY2F0Y2ggKGUpIHt9XG5cbmV4cG9ydCB7IFVzZXJJbmZvLCBBdXRoIH1cbi8qKlxuICogQGFwaSDmiYvliqjms6jlhozoh7NjbG91ZGJhc2UgYXBwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckF1dGgoYXBwOiBQaWNrPElDbG91ZGJhc2UsICdyZWdpc3RlckNvbXBvbmVudCc+KSB7XG4gIHRyeSB7XG4gICAgYXBwLnJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybihlKVxuICB9XG59XG4iXX0=
|