badmfck-api-server 2.6.5 → 2.6.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -87,7 +87,7 @@ async function Initializer(services) {
87
87
  exports.Initializer = Initializer;
88
88
  class APIService extends BaseService_1.BaseService {
89
89
  static nextLogID = 0;
90
- version = "2.6.5";
90
+ version = "2.6.7";
91
91
  options;
92
92
  monitor;
93
93
  monitorIndexFile;
@@ -285,7 +285,7 @@ class APIService extends BaseService_1.BaseService {
285
285
  allowInterceptorError = true;
286
286
  }
287
287
  }
288
- if (ignoreInterceptor) {
288
+ if (!ignoreInterceptor) {
289
289
  let interceptorResult;
290
290
  if (this.options.interceptor) {
291
291
  interceptorResult = await this.options.interceptor.execute(httpRequest);
@@ -498,4 +498,4 @@ class APIService extends BaseService_1.BaseService {
498
498
  }
499
499
  }
500
500
  exports.APIService = APIService;
501
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUN2QixpREFBNkM7QUFFN0MsK0NBQTJDO0FBaUMzQyxTQUFnQixpQkFBaUI7SUFDaEMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJO1FBQ1YsWUFBWSxFQUFFLE9BQU87UUFDckIsaUJBQWlCLEVBQUU7WUFDbEIsdUJBQXVCO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixTQUFTLEVBQUMsTUFBTTtRQUNoQixZQUFZLEVBQUUsVUFBVSxHQUE2QjtZQUNwRCxJQUFBLG9CQUFPLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sRUFBQyxVQUFTLEdBQU87WUFDdkIsSUFBQSxxQkFBUSxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCx1QkFBdUIsRUFBQyxLQUFLO1FBQzdCLFNBQVMsRUFBQyxFQUFFLEdBQUMsSUFBSSxHQUFDLElBQUk7UUFDdEIsV0FBVyxFQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFDLGFBQWEsQ0FBQztLQUNuRCxDQUFBO0FBQ0YsQ0FBQztBQW5CRCw4Q0FtQkM7QUFFWSxRQUFBLGtCQUFrQixHQUFzQyxJQUFJ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Q0FBQztnQkFDVCxJQUFHLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDckYsTUFBTTtpQkFDTjthQUNEO1NBQ0Q7UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUE5ZkYsZ0NBZ2dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzLCB7IEFwcGxpY2F0aW9uLCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnXG5pbXBvcnQgeyBCYXNlU2VydmljZSwgSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9CYXNlU2VydmljZSdcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnXG5pbXBvcnQgeyBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHsgQmFzZUVuZHBvaW50LCBJQmFzZUVuZHBvaW50IH0gZnJvbSAnLi9CYXNlRW5kcG9pbnQnXG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0RlZmF1bHRFcnJvcnMnXG5pbXBvcnQgeyBIVFRQUmVxdWVzdFZPLCBJRXJyb3IsIFRyYW5zZmVyUGFja2V0Vk8gfSBmcm9tICcuL3N0cnVjdHVyZXMvSW50ZXJmYWNlcydcbmltcG9ydCB7UmVxfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tICcuL0xvZ1NlcnZpY2UnXG5pbXBvcnQgeyBNb25pdG9yIH0gZnJvbSAnLi9tb25pdG9yL01vbml0b3InXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IGZpbGVVcGxvYWQgZnJvbSAnZXhwcmVzcy1maWxldXBsb2FkJ1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiXG5pbXBvcnQgeyBMaXZlbmVzcyB9IGZyb20gJy4vcm91dGVzL0xpdmVuZXNzJ1xuaW1wb3J0IHsgUmVhZGluZXNzIH0gZnJvbSAnLi9yb3V0ZXMvUmVhZGluZXNzJ1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCdcbmltcG9ydCB7IGlzTXlzcWxFcnJvciB9IGZyb20gJy4vTXlzcWxTZXJ2aWNlJ1xuaW1wb3J0IHsgTXlzcWxFcnJvciB9IGZyb20gJ215c3FsJ1xuaW1wb3J0IHsgU3RhdFNlcnZpY2UgfSBmcm9tICcuL1N0YXRTZXJ2aWNlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcbmV4cG9ydCBjb25zdCBSRVFfTU9OSVRPUl9VU0VSUzpSZXE8e2F1dGhvcml6YXRpb246c3RyaW5nfSxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfTU9OSVRPUl9VU0VSU1wiKTtcblxuY29uc3QgYWN0aXZlU2VydmljZXM6U3RyaW5nW109W11cbmNvbnN0IGVudHJ5UG9pbnRzOlN0cmluZ1tdPVtdXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBJbml0aWFsaXplcihzZXJ2aWNlczpJQmFzZVNlcnZpY2VbXSl7XG5cdC8vIGFkZCBzdGF0IHNlcnZpY2Vcblx0c2VydmljZXMucHVzaChuZXcgU3RhdFNlcnZpY2UoKSk7XG5cdFxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgYXdhaXQgaS5pbml0KCk7YWN0aXZlU2VydmljZXMucHVzaChpLmdldE5hbWUoKSkgfVxuICAgIGZvciAobGV0IGkgb2Ygc2VydmljZXMpIHsgaS5hcHBsaWNhdGlvblJlYWR5KCkgfVxufVxuXG5leHBvcnQgY2xhc3MgQVBJU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcblxuXHQvLyBORVQgTE9HXG5cdHByaXZhdGUgc3RhdGljIG5leHRMb2dJRD0wO1xuXHRwcml2YXRlIHZlcnNpb24gPSBcIjIuNi41XCJcblx0cHJpdmF0ZSBvcHRpb25zOkFQSVNlcnZpY2VPcHRpb25zO1xuXHRwcml2YXRlIG1vbml0b3I/Ok1vbml0b3Jcblx0cHJpdmF0ZSBtb25pdG9ySW5kZXhGaWxlPzpCdWZmZXJcblx0cHJpdmF0ZSBzdGFydGVkOkRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRwcml2YXRlIHJlcXVlc3RzQ291bnQ9MDtcblx0cHJpdmF0ZSBzZXJ2ZXI9aHR0cFxuXG5cdG5ldExvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT1bXTtcblxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzpBUElTZXJ2aWNlT3B0aW9uc3xudWxsKSB7XG5cdFx0c3VwZXIoJ0hUVFAgU2VydmljZScpXG5cdFx0dGhpcy5vcHRpb25zPW9wdGlvbnMgPz8gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0KVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0PVtdO1xuXHRcdGNvbnN0IHNlbGYgPSBcImh0dHA6Ly9sb2NhbGhvc3Q6XCIrdGhpcy5vcHRpb25zLnBvcnQ7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5maW5kKHZhbD0+dmFsPT09c2VsZikpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QucHVzaCgpXG5cblx0XHRpZih0aGlzLm9wdGlvbnMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMubW9uaXRvci5sZW5ndGg+MCl7XG5cdFx0XHR0aGlzLm1vbml0b3I9bmV3IE1vbml0b3IoKTtcblx0XHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaCh0aGlzLm1vbml0b3IpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJTZXJ2aWNlIE1vbml0b3IgaW5pdGlhbGl6ZWRcIilcblx0XHRcdGNvbnNvbGUud2FybihcIm1vbml0b3IgbGlua3M6XCIpXG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0Y29uc29sZS53YXJuKFwiTW9uaXRvciBsaW5rIGZvcjogXCIraS5sb2dpbitcIiAtPiAvc20tXCIraGFzaClcdFx0XHRcdFx0XHRcblx0XHRcdH1cblxuXHRcdFx0UkVRX01PTklUT1JfVVNFUlMubGlzdGVuZXIgPSBhc3luYyAocmVxKT0+e1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSBbXVxuXHRcdFx0XHRpZih0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKTtcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGhhc2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcCA9PT0gcmVxLmVuZHBvaW50KXtcblx0XHRcdFx0XHRcdHJlcS5pbnRlcm5hbENhbGw9dHJ1ZTtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaS5leGVjdXRlKHJlcSlcblx0XHRcdFx0XHRcdGlmKHJlc3BvbnNlLmVycm9yKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7ZXJyb3I6RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1QsZGF0YTpudWxsLGh0dHBTdGF0dXM6NDA0fVxuXHRcdH1cblxuXHRcdC8vIGluaXRpYWxpemUgZXhwcmVzc1xuXHRcdGNvbnN0IGFwcCA9IGV4cHJlc3MoKVxuXHRcdGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFwcCk7XG5cblx0XHRSRVFfSFRUUF9TRVJWRVIubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9PntyZXR1cm4ge2V4cHJlc3M6YXBwLGh0dHA6c2VydmVyfX07XG5cblx0XHRpZih0aGlzLm9wdGlvbnMuaXNQcm9kdWN0aW9uRW52aXJvbm1lbnQpXG5cdFx0XHRhcHAuc2V0KFwiZW52XCIsJ3Byb2R1Y3Rpb24nKTtcblxuXHRcdGFwcC51c2UoZXhwcmVzcy5qc29uKHsgbGltaXQ6ICcxMG1iJyB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24vanNvblxuXHRcdGFwcC51c2UoZXhwcmVzcy51cmxlbmNvZGVkKHsgbGltaXQ6ICcxMG1iJywgZXh0ZW5kZWQ6IHRydWUgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuXG5cdFx0YXBwLnVzZShmaWxlVXBsb2FkKHtcblx0XHRcdGxpbWl0SGFuZGxlcjogKHJlcSwgcmVzLCBuZXh0KT0+e1xuXHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuRklMRV9UT09fTEFSR0UsXG5cdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdGh0dHBTdGF0dXM6NDEzLFxuXHRcdFx0XHR9LCtuZXcgRGF0ZSgpLHJlcS5wYXRoKTtcblx0XHRcdH0sXG5cdFx0XHRsaW1pdHM6IHsgZmlsZVNpemU6IHRoaXMub3B0aW9ucy5maWxlTGltaXQgfSxcblx0XHRcdHVzZVRlbXBGaWxlczogdHJ1ZSxcblx0XHRcdHVyaURlY29kZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdHRlbXBGaWxlRGlyOiB0aGlzLm9wdGlvbnMuZmlsZVRlbXBEaXIsXG5cdFx0XHQvL3NhZmVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHRhYm9ydE9uTGltaXQ6dHJ1ZVxuXHRcdH0pKVxuXG5cdFx0YXBwLnVzZShhc3luYyAoZXJyOmFueSxyZXE6YW55LHJlc3A6YW55LG5leHQ6YW55KT0+e1xuXHRcdFx0XG5cdFx0XHRpZighZXJyKXtcblx0XHRcdFx0bmV4dCgpO1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdFx0Ly9yZXF1ZXN0IHN0YXJ0IHRpbWVcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0Y29uc3QgbG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdGRhdGE6XCJcIixcblx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXNcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3BvbnNlRXJyb3I9RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1Q7XG5cdFx0XHRpZiAodHlwZW9mIGVyciA9PT0gXCJvYmplY3RcIiAmJiBlcnIuc3RhdHVzID09PSA0MDAgJiYgJ2JvZHknIGluIGVyciAmJiBlcnIudHlwZSA9PT0gJ2VudGl0eS5wYXJzZS5mYWlsZWQnKSB7XG5cdFx0XHRcdHJlc3BvbnNlRXJyb3IgPSBEZWZhdWx0RXJyb3JzLkpTT05fTUFMRk9STUVEXG5cdFx0XHR9XG4gICAgICBcblxuXHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzcCx7XG5cdFx0XHRcdGVycm9yOnJlc3BvbnNlRXJyb3IsXG5cdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0aHR0cFN0YXR1czo0MDBcblx0XHRcdH0sdG1lLFwiXCIsbG9nKVxuXG5cdFx0fSlcblxuXHRcdGNvbnN0IGNvcnNPcHRpb25zID0ge1xuXHRcdFx0b3JpZ2luOiAob3JpZ2luOiBhbnksIGNhbGxiYWNrOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luSXNXaGl0ZWxpc3RlZCA9IHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5pbmNsdWRlcyhvcmlnaW4pXG5cdFx0XHRcdGNhbGxiYWNrKG51bGwsIG9yaWdpbklzV2hpdGVsaXN0ZWQpXG5cdFx0XHR9LFxuXHRcdFx0Y3JlZGVudGlhbHM6IHRydWVcblx0XHR9XG5cdFx0YXBwLnVzZShjb3JzKGNvcnNPcHRpb25zKSlcblxuXHRcdC8vIHJlZ2lzdHJhdGUgZW5kcG9pbnRzXG5cdFx0QmFzZUVuZHBvaW50LnNldEVudHJ5UG9pbnQodGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludClcblx0XHRcblx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRhd2FpdCBpLmluaXQoKTtcblx0XHRcdGlmKCFpLmVuZHBvaW50cylcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRmb3IobGV0IGogb2YgaS5lbmRwb2ludHMpe1xuXHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFxuXG5cdFx0XHRcdC8vIGluY29taW5nIHJlcXVlc3Rcblx0XHRcdFx0YXBwLmFsbChlcCxhc3luYyAocmVxLHJlcyk9Pntcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzQ291bnQrKztcblx0XHRcdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdFx0XHRsZXQgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsID0gbnVsbDtcblx0XHRcdFx0XHRpZighaS5pZ25vcmVIdHRwTG9nZ2luZyl7XG5cdFx0XHRcdFx0XHRsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0XHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRcdFx0XHR1cmw6cmVxLnVybCxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6dGhpcy5jaGVja0RhdGFMZW5ndGgocmVxLmJvZHkpLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6dGhpcy5jaGVja0RhdGFMZW5ndGgocmVxLnBhcmFtcylcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBleGVjdXRlID0gYXN5bmMgKCk9PntcblxuXHRcdFx0XHRcdFx0Y29uc3QgYm9keSA9IHJlcS5ib2R5O1xuXHRcdFx0XHRcdFx0aWYocmVxLnF1ZXJ5ICYmIHR5cGVvZiByZXEucXVlcnkgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gcmVxLnF1ZXJ5KXtcblx0XHRcdFx0XHRcdFx0XHRib2R5W2ldPXJlcS5xdWVyeVtpXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBodHRwUmVxdWVzdDpIVFRQUmVxdWVzdFZPID0ge1xuXHRcdFx0XHRcdFx0XHRyYXc6cmVxIGFzIEluY29taW5nTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOnJlcS5tZXRob2QsXG5cdFx0XHRcdFx0XHRcdGRhdGE6cmVxLmJvZHksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zLFxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzOnJlcS5oZWFkZXJzIGFzIGFueSxcblx0XHRcdFx0XHRcdFx0ZW5kcG9pbnQ6ZXAsXG5cdFx0XHRcdFx0XHRcdGZpbGVzOnJlcS5maWxlcyA/PyBudWxsLFxuXHRcdFx0XHRcdFx0XHRyZWZlcmVyOnJlcS5nZXQoXCJSZWZlcmVyXCIpLFxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIpe1xuXHRcdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZXByb2R1Y2VyUmVzdWx0ID0gYXdhaXQgdGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0aWYocHJlcHJvZHVjZXJSZXN1bHQpXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlcHJvZHVjZXJSZXN1bHQgPSBwcmVwcm9kdWNlclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBkZXRhaWxzPWAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdGxldCBzdGFjazpJRXJyb3JbXXx1bmRlZmluZWQ9dW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihlKSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzPShlIGFzIGFueSkubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhY2sgPSBbZSBhcyBhbnldO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGlzTXlzcWxFcnJvcihlKSlcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHMgPSAoZSBhcyBNeXNxbEVycm9yKS5tZXNzYWdlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsc3RhY2s6c3RhY2ssZGV0YWlsczpkZXRhaWxzfSxkYXRhOm51bGwsaHR0cFN0YXR1czo1MDB9LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0XG5cdFx0XHRcdFx0XHR0cnl7XG5cblx0XHRcdFx0XHRcdFx0bGV0IGlnbm9yZUludGVyY2VwdG9yID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGxldCBhbGxvd0ludGVyY2VwdG9yRXJyb3IgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYoai5pZ25vcmVJbnRlcmNlcHRvcilcblx0XHRcdFx0XHRcdFx0XHRpZ25vcmVJbnRlcmNlcHRvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRpZihqLmFsbG93SW50ZXJjZXB0b3JFcnJvcilcblx0XHRcdFx0XHRcdFx0XHRhbGxvd0ludGVyY2VwdG9yRXJyb3I9dHJ1ZTtcblxuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2Ygai5oYW5kbGVyID09PSBcIm9iamVjdFwiICl7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gdHJ5IHRvIGdldCBoYW5kbGVyIHJlbGF5aW5nIG9uIGh0dHAgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaGFuZGxlciA9IGouaGFuZGxlcltodHRwUmVxdWVzdC5tZXRob2QudG9VcHBlckNhc2UoKV07XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGhhbmRsZXIgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaGFuZGxlci5pZ25vcmVJbnRlcmNlcHRvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWdub3JlSW50ZXJjZXB0b3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGhhbmRsZXIuYWxsb3dJbnRlcmNlcHRvckVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbGxvd0ludGVyY2VwdG9yRXJyb3I9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWFsbG93SW50ZXJjZXB0b3JFcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxpbnRlcmNlcHRvclJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QuaW50ZXJjZXB0b3JSZXN1bHQgPSBpbnRlcmNlcHRvclJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIFByZWNoZWNrIFdIWT9cblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IGRhdGEuZXJyb3IubWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIHJlc3BvbnNlXCIsZSk7XG5cdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRsb2cuZXJyb3I9XCJDYW4ndCBzZW5kIHJlc3BvbnNlXCJcblx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBsb2dcblx0XHRpZihsb2cgJiYgbG9nLmVycm9yICYmIHRoaXMub3B0aW9ucy5vbkVycm9yKXtcblx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGxvZy5lcnJvcilcblx0XHR9ZWxzZXtcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcblx0XHR9XG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQUN2QixpREFBNkM7QUFFN0MsK0NBQTJDO0FBaUMzQyxTQUFnQixpQkFBaUI7SUFDaEMsT0FBTztRQUNOLElBQUksRUFBRSxJQUFJO1FBQ1YsWUFBWSxFQUFFLE9BQU87UUFDckIsaUJBQWlCLEVBQUU7WUFDbEIsdUJBQXVCO1NBQ3ZCO1FBQ0QsU0FBUyxFQUFFLEVBQUU7UUFDYixTQUFTLEVBQUMsTUFBTTtRQUNoQixZQUFZLEVBQUUsVUFBVSxHQUE2QjtZQUNwRCxJQUFBLG9CQUFPLEVBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsQ0FBQztRQUNELE9BQU8sRUFBQyxVQUFTLEdBQU87WUFDdkIsSUFBQSxxQkFBUSxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCx1QkFBdUIsRUFBQyxLQUFLO1FBQzdCLFNBQVMsRUFBQyxFQUFFLEdBQUMsSUFBSSxHQUFDLElBQUk7UUFDdEIsV0FBVyxFQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFDLGFBQWEsQ0FBQztLQUNuRCxDQUFBO0FBQ0YsQ0FBQztBQW5CRCw4Q0FtQkM7QUFFWSxRQUFBLGtCQUFrQixHQUFzQyxJQUFJ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RUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQTlmRixnQ0FnZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgaXNNeXNxbEVycm9yIH0gZnJvbSAnLi9NeXNxbFNlcnZpY2UnXG5pbXBvcnQgeyBNeXNxbEVycm9yIH0gZnJvbSAnbXlzcWwnXG5pbXBvcnQgeyBTdGF0U2VydmljZSB9IGZyb20gJy4vU3RhdFNlcnZpY2UnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZU5ldHdvcmtMb2dJdGVte1x0XG5cdGlkOm51bWJlcixcblx0Y3JlYXRlZDpudW1iZXIsXG5cdHRpbWU6bnVtYmVyLFxuXHRyZWZlcmVyPzpzdHJpbmcsXG5cdHJlcXVlc3Q6e1trZXk6c3RyaW5nXTphbnl9LFxuXHRyZXNwb25zZTp7W2tleTpzdHJpbmddOmFueX1cblx0ZXJyb3I/OnN0cmluZ3xudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJU2VydmljZU9wdGlvbnN7XG5cdHBvcnQ6bnVtYmVyLFxuXHRiYXNlRW5kUG9pbnQ6c3RyaW5nIC8vIFwiL2FwaS9cIlxuXHRjb3JzSG9zdFdoaXRlTGlzdDpzdHJpbmdbXSxcblx0ZW5kcG9pbnRzOklCYXNlRW5kcG9pbnRbXSxcblx0anNvbkxpbWl0OnN0cmluZyAvLyBcIjEwbWJcIlxuXHRvbk5ldHdvcmtMb2c/OigobG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk9PnZvaWQpfG51bGxcblx0b25FcnJvcj86KCguLi5yZXN0OmFueVtdKT0+dm9pZCl8bnVsbFxuXHRpc1Byb2R1Y3Rpb25FbnZpcm9ubWVudDpib29sZWFuLFxuXHRpbnRlcmNlcHRvcj86SUJhc2VFbmRwb2ludCxcblx0cG9zdHByb2R1Y2VyPzoocmVxOkhUVFBSZXF1ZXN0Vk98dW5kZWZpbmVkfG51bGwscmVzOlJlc3BvbnNlLGRhdGE6VHJhbnNmZXJQYWNrZXRWTzxhbnk+LHJlcXVlc3RUaW1lOm51bWJlcixlbmRwb2ludD86c3RyaW5nLGxvZz86QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwpPT5Qcm9taXNlPFRyYW5zZmVyUGFja2V0Vk8+XG5cdHByZXByb2R1Y2VyPzoocmVxOkhUVFBSZXF1ZXN0Vk98dW5kZWZpbmVkfG51bGwpPT5hbnlcblx0XG5cdG1vbml0b3I/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVtdXG5cdC8vZGVwbG95bWVudD86e2xvZ2luOnN0cmluZyxwYXNzd29yZDpzdHJpbmd9XG5cdGFwcFZlcnNpb24/OnN0cmluZ1xuXG5cdGZpbGVUZW1wRGlyOnN0cmluZztcblx0ZmlsZUxpbWl0Om51bWJlciAvLyBiXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpOkFQSVNlcnZpY2VPcHRpb25ze1xuXHRyZXR1cm4ge1xuXHRcdHBvcnQ6IDgwOTEsXG5cdFx0YmFzZUVuZFBvaW50OiAnL2FwaS8nLFxuXHRcdGNvcnNIb3N0V2hpdGVMaXN0OiBbXG5cdFx0XHQnaHR0cDovL2xvY2FsaG9zdDozMDAwJyxcblx0XHRdLFxuXHRcdGVuZHBvaW50czogW10sXG5cdFx0anNvbkxpbWl0OlwiMTBtYlwiLFxuXHRcdG9uTmV0d29ya0xvZzogZnVuY3Rpb24gKGxvZzogQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtKTogdm9pZCB7XG5cdFx0XHRsb2dJbmZvKFwiJHtBUElTZXJ2aWNlLmpzfVwiLGxvZylcblx0XHR9LFxuXHRcdG9uRXJyb3I6ZnVuY3Rpb24oZXJyOmFueSl7XG5cdFx0XHRsb2dFcnJvcihcIiR7QVBJU2VydmljZS5qc31cIixlcnIpO1xuXHRcdH0sXG5cdFx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6ZmFsc2UsXG5cdFx0ZmlsZUxpbWl0OjUwKjEwMjQqMTAyNCxcblx0XHRmaWxlVGVtcERpcjpwYXRoLnJlc29sdmUob3MudG1wZGlyKCksXCJmaWxlVGVtcERpclwiKVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBSRVFfQ1JFQVRFX05FVF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0NSRUFURV9ORVRfTE9HXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX0xPRzpSZXE8dm9pZCxBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW1bXT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9SRVFVRVNUU19DT1VOVDpSZXE8dm9pZCxudW1iZXI+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9SRVFVRVNUU19DT1VOVFwiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9TRVJWRVI6UmVxPHZvaWQse2V4cHJlc3M6QXBwbGljYXRpb24saHR0cDpodHRwLlNlcnZlcn0+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9TRVJWRVJcIik7XG5leHBvcnQgY29uc3QgUkVRX0lOVEVSTkFMX0NBTEw6UmVxPEhUVFBSZXF1ZXN0Vk8sSUVycm9yfGFueT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9JTlRFUk5BTF9DQUxMXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9NT05JVE9SX1VTRVJTOlJlcTx7YXV0aG9yaXphdGlvbjpzdHJpbmd9LGFueT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9NT05JVE9SX1VTRVJTXCIpO1xuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcblx0Ly8gYWRkIHN0YXQgc2VydmljZVxuXHRzZXJ2aWNlcy5wdXNoKG5ldyBTdGF0U2VydmljZSgpKTtcblx0XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBhd2FpdCBpLmluaXQoKTthY3RpdmVTZXJ2aWNlcy5wdXNoKGkuZ2V0TmFtZSgpKSB9XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBpLmFwcGxpY2F0aW9uUmVhZHkoKSB9XG59XG5cbmV4cG9ydCBjbGFzcyBBUElTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuXG5cdC8vIE5FVCBMT0dcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dExvZ0lEPTA7XG5cdHByaXZhdGUgdmVyc2lvbiA9IFwiMi42LjdcIlxuXHRwcml2YXRlIG9wdGlvbnM6QVBJU2VydmljZU9wdGlvbnM7XG5cdHByaXZhdGUgbW9uaXRvcj86TW9uaXRvclxuXHRwcml2YXRlIG1vbml0b3JJbmRleEZpbGU/OkJ1ZmZlclxuXHRwcml2YXRlIHN0YXJ0ZWQ6RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdHByaXZhdGUgcmVxdWVzdHNDb3VudD0wO1xuXHRwcml2YXRlIHNlcnZlcj1odHRwXG5cblx0bmV0TG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPVtdO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OkFQSVNlcnZpY2VPcHRpb25zfG51bGwpIHtcblx0XHRzdXBlcignSFRUUCBTZXJ2aWNlJylcblx0XHR0aGlzLm9wdGlvbnM9b3B0aW9ucyA/PyBnZXREZWZhdWx0T3B0aW9ucygpO1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3Q9W107XG5cdFx0Y29uc3Qgc2VsZiA9IFwiaHR0cDovL2xvY2FsaG9zdDpcIit0aGlzLm9wdGlvbnMucG9ydDtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmZpbmQodmFsPT52YWw9PT1zZWxmKSlcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5wdXNoKClcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5tb25pdG9yICYmIHRoaXMub3B0aW9ucy5tb25pdG9yLmxlbmd0aD4wKXtcblx0XHRcdHRoaXMubW9uaXRvcj1uZXcgTW9uaXRvcigpO1xuXHRcdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKHRoaXMubW9uaXRvcilcblx0XHRcdGNvbnNvbGUud2FybihcIlNlcnZpY2UgTW9uaXRvciBpbml0aWFsaXplZFwiKVxuXHRcdFx0Y29uc29sZS53YXJuKFwibW9uaXRvciBsaW5rczpcIilcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRjb25zb2xlLndhcm4oXCJNb25pdG9yIGxpbmsgZm9yOiBcIitpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXG5cdFx0XHRSRVFfTU9OSVRPUl9VU0VSUy5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IFtdXG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpO1xuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaGFzaCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gY3JlYXRlIGxpdmVuZXNzLCByZWFkaW5lc3Ncblx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2gobmV3IExpdmVuZXNzKHRoaXMuc3RhcnRlZCksbmV3IFJlYWRpbmVzcyh0aGlzLnN0YXJ0ZWQpKVxuXHRcdFJFUV9IVFRQX1JFUVVFU1RTX0NPVU5ULmxpc3RlbmVyID0gYXN5bmMgKCkgPT4gdGhpcy5yZXF1ZXN0c0NvdW50O1xuXHR9XG5cblxuXHRvdmVycmlkZSBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuXG5cdFx0UkVRX0hUVFBfTE9HLmxpc3RlbmVyPWFzeW5jIGlnbm9yZT0+dGhpcy5uZXRMb2c7XG5cdFx0UkVRX0NSRUFURV9ORVRfTE9HLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57XG5cdFx0XHRjb25zdCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtID0ge1xuXHRcdFx0XHRjcmVhdGVkOiArbmV3IERhdGUoKSxcblx0XHRcdFx0dGltZTogMCxcblx0XHRcdFx0cmVxdWVzdDoge30sXG5cdFx0XHRcdHJlc3BvbnNlOiB7fSxcblx0XHRcdFx0ZXJyb3I6bnVsbCxcblx0XHRcdFx0aWQ6IEFQSVNlcnZpY2UubmV4dExvZ0lEKytcblx0XHRcdH1cblx0XHRcdHRoaXMubmV0TG9nLnB1c2gobG9nKVxuXHRcdFx0aWYodGhpcy5uZXRMb2cubGVuZ3RoPjEwMDApXG5cdFx0XHRcdHRoaXMubmV0TG9nLnNoaWZ0KClcblx0XHRcdHJldHVybiBsb2c7XG5cdFx0fVxuXG5cdFx0Ly8gaW50ZXJuYWwgY2FsbFxuXHRcdFJFUV9JTlRFUk5BTF9DQUxMLmxpc3RlbmVyID0gYXN5bmMgKHJlcSk9Pntcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdFx0aWYoIWkgfHwgIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRmb3IobGV0IGogb2YgaS5lbmRwb2ludHMpe1xuXHRcdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcdGlmKGVwID09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0cmVxLmludGVybmFsQ2FsbD10cnVlO1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGRldGFpbHM9YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHN0YWNrOklFcnJvcltdfHVuZGVmaW5lZD11bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKXtcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM9KGUgYXMgYW55KS5tZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRzdGFjayA9IFtlIGFzIGFueV07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoaXNNeXNxbEVycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlscyA9IChlIGFzIE15c3FsRXJyb3IpLm1lc3NhZ2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse2Vycm9yOntjb2RlOjEwMDAyLG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixzdGFjazpzdGFjayxkZXRhaWxzOmRldGFpbHN9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblxuXHRcdFx0XHRcdFx0XHRsZXQgaWdub3JlSW50ZXJjZXB0b3IgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0bGV0IGFsbG93SW50ZXJjZXB0b3JFcnJvciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZihqLmlnbm9yZUludGVyY2VwdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGlnbm9yZUludGVyY2VwdG9yPXRydWU7XG5cdFx0XHRcdFx0XHRcdGlmKGouYWxsb3dJbnRlcmNlcHRvckVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdGFsbG93SW50ZXJjZXB0b3JFcnJvcj10cnVlO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBqLmhhbmRsZXIgPT09IFwib2JqZWN0XCIgKXtcblx0XHRcdFx0XHRcdFx0XHQvLyB0cnkgdG8gZ2V0IGhhbmRsZXIgcmVsYXlpbmcgb24gaHR0cCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYW5kbGVyID0gai5oYW5kbGVyW2h0dHBSZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpXTtcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgaGFuZGxlciA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihoYW5kbGVyLmlnbm9yZUludGVyY2VwdG9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZ25vcmVJbnRlcmNlcHRvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaGFuZGxlci5hbGxvd0ludGVyY2VwdG9yRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFsbG93SW50ZXJjZXB0b3JFcnJvcj10cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIGludGVyY2VwdG9yIGlmIGV4aXN0c1xuXHRcdFx0XHRcdFx0XHRpZighaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWFsbG93SW50ZXJjZXB0b3JFcnJvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxpbnRlcmNlcHRvclJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QuaW50ZXJjZXB0b3JSZXN1bHQgPSBpbnRlcmNlcHRvclJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIFByZWNoZWNrIFdIWT9cblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihlKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVGYXRhbEVycm9yKGVwKTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNoZWNrIGlmIGVycm9yIGlzIElFcnJvclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0YTpUcmFuc2ZlclBhY2tldFZPID0ge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMCxcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IGRhdGEuZXJyb3IubWVzc2FnZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIHJlc3BvbnNlXCIsZSk7XG5cdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRsb2cuZXJyb3I9XCJDYW4ndCBzZW5kIHJlc3BvbnNlXCJcblx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBsb2dcblx0XHRpZihsb2cgJiYgbG9nLmVycm9yICYmIHRoaXMub3B0aW9ucy5vbkVycm9yKXtcblx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGxvZy5lcnJvcilcblx0XHR9ZWxzZXtcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcblx0XHR9XG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
@@ -59,7 +59,7 @@ class MysqlService extends BaseService_1.BaseService {
59
59
  transactions = [];
60
60
  maxTransactionWaitTime = 1000 * 60 * 1;
61
61
  lastSuccessQueryTime = 0;
62
- pingInterval = 1000 * 30;
62
+ pingInterval = 1000 * 60 * 5;
63
63
  failReportFileStream = null;
64
64
  failReportFileStreamName = null;
65
65
  failReportLastAccessTime = 0;
@@ -96,7 +96,7 @@ class MysqlService extends BaseService_1.BaseService {
96
96
  if (!this.pool)
97
97
  return;
98
98
  for (let i = 0; i < this.options.connectionLimit; i++) {
99
- exports.REQ_MYSQL_QUERY.request({ query: "SELECT 1", fields: [] });
99
+ exports.REQ_MYSQL_QUERY.request({ query: "SELECT 1 @NOLIMIT", fields: [] });
100
100
  if (this.debug)
101
101
  console.log("Ping mysql on each connection in pool");
102
102
  }
@@ -802,4 +802,4 @@ const encrypt = (txt) => {
802
802
  }
803
803
  };
804
804
  exports.default = MysqlService;
805
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEJoSSxNQUFNLFlBQVksR0FBQyxDQUFDLENBQUssRUFBaUIsRUFBRTtJQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUcsU0FBUyxDQUFDO0FBQ3pILENBQUMsQ0FBQTtBQUZZLFFBQUEsWUFBWSxnQkFFeEI7QUFrREQsTUFBYSxZQUFhLFNBQVEseUJBQVc7SUFFekMsbUJBQW1CLEdBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQztJQUMzQixZQUFZLEdBQUMsS0FBSyxDQUFDO0lBQ25CLElBQUksR0FBaUIsSUFBSSxDQUFDO0lBQzFCLE9BQU8sQ0FBcUI7SUFDNUIsY0FBYyxHQUFDLEtBQUssQ0FBQztJQUNyQixTQUFTLENBQUk7SUFFYixLQUFLLEdBQUMsS0FBSyxDQUFDO0lBRVosT0FBTyxHQUFDLEVBQUUsQ0FBQztJQUNYLE1BQU0sQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLENBQUM7SUFDM0IsWUFBWSxHQUFnQixFQUFFLENBQUE7SUFFOUIsc0JBQXNCLEdBQUcsSUFBSSxHQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7SUFDbkMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLFlBQVksR0FBRyxJQUFJLEdBQUMsRUFBRSxDQUFDO0lBRXZCLG9CQUFvQixHQUFxQixJQUFJLENBQUM7SUFDOUMsd0JBQXdCLEdBQWEsSUFBSSxDQUFDO0lBQzFDLHdCQUF3QixHQUFRLENBQUMsQ0FBQztJQUVsQyxZQUFZLE9BQTJCO1FBQ25DLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBSXZCLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFDcEYsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNwRixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hHLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUE7UUFFaEcsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7UUFDckIsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQjtZQUNsQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztRQUV0RSxXQUFXLENBQUMsR0FBRSxFQUFFO1lBRVosTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztZQUM3QixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUM7Z0JBQzNCLElBQUcsR0FBRyxHQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFDO29CQUMzQyxJQUFBLHFCQUFRLEVBQUMsK0NBQStDLENBQUMsQ0FBQTtvQkFDekQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7aUJBQ3hCO2FBQ0o7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBRTNFLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUMsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7WUFHM0QsSUFBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQyxZQUFZLEVBQUM7Z0JBQ3RELElBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSTtvQkFDVCxPQUFPO2dCQUdYLEtBQUksSUFBSSxDQUFDLEdBQUUsQ0FBQyxFQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBQyxDQUFDLEVBQUUsRUFBQztvQkFDNUMsdUJBQWUsQ0FBQyxPQUFPLENBQUMsRUFBQyxLQUFLLEVBQUMsVUFBVSxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFBO29CQUNyRCxJQUFHLElBQUksQ0FBQyxLQUFLO3dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQTtpQkFDM0Q7YUFFSjtRQUdMLENBQUMsRUFBQyxJQUFJLEdBQUMsRUFBRSxDQUFDLENBQUE7UUFFVixXQUFXLENBQUMsR0FBRSxFQUFFO1lBQ1osSUFBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLE9BQU87WUFHWCxJQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBQyxJQUFJLENBQUMsd0JBQXdCLEdBQUMsSUFBSSxHQUFDLEVBQUUsR0FBQyxFQUFFLEVBQUM7Z0JBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQzthQUNsQztRQUVMLENBQUMsRUFBQyxJQUFJLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFBO1FBRVosSUFBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUM7WUFDaEMsSUFBRztnQkFDQSxJQUFJLENBQUMsWUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBQztvQkFDaEQsWUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztpQkFDbEQ7YUFDSjtZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUNMLE9BQU8sQ0FBQyx3QkFBd0IsR0FBQyxTQUFTLENBQUM7Z0JBQzNDLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywwQ0FBMEMsQ0FBQyxDQUFBO2FBQzNFO1NBQ0o7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsS0FBNkIsSUFBMEIsT0FBTyxNQUFNLHVCQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUUvSCxLQUFLLENBQUMsSUFBSTtRQUNOLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUdiLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFHSCxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQVcsS0FBSyxDQUFDO1FBRWhDLE9BQU0sQ0FBQyxXQUFXLEVBQUM7WUFDZixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUNwRCxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsSUFBRyxDQUFDLFdBQVcsRUFBQztnQkFDWixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsa0RBQWtELENBQUMsQ0FBQTtnQkFDaEYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxFQUFFLENBQUEsVUFBVSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2FBQ3pEO1NBQ0o7UUFFRCx1QkFBZSxDQUFDLFFBQVEsR0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7WUFDbEMsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNuQixJQUFJLEdBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixNQUFNLFFBQVEsR0FBQyxFQUFFLENBQUE7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUksRUFBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssRUFBQyxDQUFDLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDbEk7WUFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRWhELE1BQU0sTUFBTSxHQUFJLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztnQkFDaEIsSUFBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFHLFVBQVUsRUFBQztvQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO29CQUMvRCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDN0I7Z0JBRUQsSUFBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFbEIsSUFBRyxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUNQLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDOUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUE7UUFFRCx3QkFBZ0IsQ0FBQyxRQUFRLEdBQUMsS0FBSyxJQUFHLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzlDLElBQUcsQ0FBQyxJQUFJO2dCQUNKLE9BQU8sRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLHdCQUF3QixFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUMsQ0FBQTtZQUcxSCxLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUM7Z0JBQzNCLElBQUcsQ0FBQyxDQUFDLElBQUksS0FBRyxJQUFJLEVBQUM7b0JBQ2IsSUFBQSxvQkFBTyxFQUFDLG1DQUFtQyxDQUFDLENBQUE7b0JBQzVDLE9BQU8sRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxPQUFPLEVBQUMsOEJBQThCLEVBQUMsQ0FBQTtpQkFDdkk7YUFDSjtZQUVELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdDLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBQyxHQUFHLENBQUMsQ0FBQTtZQUVqRCxJQUFHO2dCQUdDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUV0QyxJQUFHLElBQUksQ0FBQyxLQUFLO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTthQUV6QztZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQTtnQkFDcEgsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDbkIsRUFBRSxFQUFDLEdBQUc7Z0JBQ04sU0FBUyxFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLElBQUksRUFBQyxJQUFJO2dCQUNULE9BQU8sRUFBQyxFQUFFO2FBQ2IsQ0FBQyxDQUFBO1lBRUYsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUV4RCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQTtRQUVELHdCQUFnQixDQUFDLFFBQVEsR0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFBLEVBQUU7WUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFHLENBQUMsR0FBRztnQkFDSCxPQUFPLEVBQUMsR0FBRyxFQUFFO3dCQUNULElBQUksRUFBQyxRQUFRO3dCQUNiLEtBQUssRUFBQyxNQUFNO3dCQUNaLEtBQUssRUFBQyxJQUFJO3dCQUNWLEdBQUcsRUFBQyxFQUFFO3dCQUNOLElBQUksRUFBQyxRQUFRO3dCQUNiLE9BQU8sRUFBQyx1QkFBdUI7cUJBQ2xDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsQ0FBQTtZQUUzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUUsSUFBSSxHQUFHLEdBQUMsSUFBSSxDQUFDO1lBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFFeEQsSUFBRztnQkFDQyxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBQztZQUVoRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFHLEdBQUc7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM5QjtnQkFDQSxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUcsQ0FBQyxFQUFDO29CQUN4RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9DLElBQUc7d0JBQ0MsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUMxRCxJQUFHLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7NEJBQzdDLEtBQUssR0FBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQzlDO3FCQUNKO29CQUFBLE9BQU0sQ0FBQyxFQUFDO3dCQUNMLElBQUEscUJBQVEsRUFBQyx5Q0FBeUMsRUFBQyxDQUFDLENBQUMsQ0FBQztxQkFDekQ7aUJBQ0o7YUFDSjtZQUVELElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFBLFdBQVcsQ0FBQyxDQUFBO1lBRXRFLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsR0FBRyxDQUFBLENBQUMsQ0FBQSxHQUFHLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSxXQUFXLEVBQUMsQ0FBQyxDQUFBO1lBRWhFLE9BQU87Z0JBQ0gsSUFBSSxFQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJO2dCQUM1QixLQUFLLEVBQUMsR0FBRztnQkFDVCxLQUFLLEVBQUMsS0FBSzthQUNkLENBQUM7UUFDTixDQUFDLENBQUE7UUFFRCwyQkFBbUIsQ0FBQyxRQUFRLEdBQUMsS0FBSyxFQUFFLEdBQVUsRUFBQyxFQUFFO1lBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsS0FBRyxHQUFHLENBQUMsQ0FBQztZQUNsRCxJQUFHLENBQUMsR0FBRyxFQUFDO2dCQUNKLE9BQU87b0JBQ0gsSUFBSSxFQUFDLFFBQVE7b0JBQ2IsS0FBSyxFQUFDLE1BQU07b0JBQ1osS0FBSyxFQUFDLElBQUk7b0JBQ1YsU0FBUyxFQUFDLEtBQUs7b0JBQ2YsR0FBRyxFQUFDLEVBQUU7b0JBQ04sSUFBSSxFQUFDLFFBQVE7b0JBQ2IsT0FBTyxFQUFDLHVCQUF1QjtpQkFDbEMsQ0FBQTthQUNKO1lBRUQsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFBO1FBRUQseUJBQWlCLENBQUMsUUFBUSxHQUFDLEtBQUssRUFBRSxHQUFVLEVBQUMsRUFBRTtZQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsSUFBRyxDQUFDLEdBQUcsRUFBQztnQkFDSixPQUFPO29CQUNILElBQUksRUFBQyxRQUFRO29CQUNiLEtBQUssRUFBQyxNQUFNO29CQUNaLEtBQUssRUFBQyxJQUFJO29CQUNWLEdBQUcsRUFBQyxFQUFFO29CQUNOLElBQUksRUFBQyxRQUFRO29CQUNiLE9BQU8sRUFBQyx1QkFBdUI7b0JBQy9CLFNBQVMsRUFBQyxLQUFLO2lCQUNsQixDQUFBO2FBQ0o7WUFHRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRTVELElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFFLENBQUE7WUFFdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBZ0I7UUFFekIsSUFBRztZQUNDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUV4QixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN0QjtRQUFBLE9BQU0sQ0FBQyxFQUFDO1lBQ0wsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUVoQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQWdCLEVBQUMsWUFBcUI7UUFDNUQsSUFBSSxHQUFHLEdBQUMsSUFBSSxDQUFDO1FBQ2IsSUFBRztZQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNqRCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXhCLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUcsQ0FBQyxZQUFZO2dCQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUN6RDtRQUFBLE9BQU0sQ0FBQyxFQUFDO1lBQ0wsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDRCQUE0QixFQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN0RSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBQyxVQUFVLENBQUMsQ0FBQTtRQUM5QyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQTtRQUN0QyxLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7WUFDVCxJQUFHO2dCQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUFDO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQy9CLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyx5QkFBeUIsQ0FBQyxDQUFBO2FBQzFEO1NBQ0o7UUFFRCxJQUFHLElBQUksQ0FBQyxvQkFBb0I7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVk7UUFDMUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLElBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBRyxDQUFDLENBQUM7WUFDL0IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUdyRSxJQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxDQUFDO1lBQy9CLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFcEUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRzlELFVBQVUsR0FBRyw2QkFBNkIsR0FBQyxVQUFVLENBQUE7UUFDckQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUFnQixFQUFDLE9BQWM7UUFFM0QsSUFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFDO1lBQzdFLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyw4SEFBOEgsQ0FBQyxDQUFBO1lBQzVKLE9BQU87U0FDVjtRQUdELElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUc1RSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBQyxPQUFPLEdBQUMsT0FBTyxDQUFDLENBQUM7WUFDakYsSUFBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUM7Z0JBQ3pCLElBQUcsSUFBSSxDQUFDLHdCQUF3QixLQUFHLElBQUksRUFBQztvQkFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUMsSUFBSSxDQUFDO2lCQUNsQzthQUNKO1lBR0QsSUFBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUM7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFDLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyx3QkFBd0IsR0FBQyxJQUFJLENBQUM7YUFDdEM7WUFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsT0FBTyxDQUFDLENBQUE7WUFFM0UsSUFBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFDLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7WUFFdkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBQyxDQUFDLEdBQUMsV0FBVyxFQUFDLEdBQUcsQ0FBQSxFQUFFO2dCQUNuSCxJQUFHLEdBQUc7b0JBQ0YsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDZDQUE2QyxDQUFDLENBQUE7O29CQUUzRSxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsZ0NBQWdDLENBQUMsQ0FBQTtZQUN0RSxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FFOUM7UUFHRCxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFHRCxLQUFLLENBQUMsWUFBWTtRQUVkLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyxnQ0FBZ0MsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3RyxJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsSUFBRztnQkFBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7YUFBQztZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUMvQixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMseUJBQXlCLENBQUMsQ0FBQTthQUMxRDtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO1FBYUQsSUFBRztZQUNDLElBQUksQ0FBQyxJQUFJLEdBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDL0IsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdkIsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZTtnQkFDN0MsVUFBVSxFQUFFLEVBQUU7Z0JBQ2Qsa0JBQWtCLEVBQUUsSUFBSTtnQkFFeEIsZUFBZSxFQUFDLElBQUk7Z0JBQ3BCLHFCQUFxQixFQUFDLENBQUMsR0FBQyxJQUFJO2dCQUU1QixXQUFXLEVBQUMsSUFBSSxHQUFDLEVBQUUsR0FBQyxDQUFDO2FBQ3pCLENBQUMsQ0FBQztTQUNOO1FBQUEsT0FBTSxDQUFDLEVBQUM7WUFDTCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMseUJBQXlCLENBQUMsQ0FBQTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNwQyxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywyQkFBMkIsQ0FBQyxDQUFBO1FBQ2pFLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDcEMsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUNqRSxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDMUIsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUNqRSxDQUFDLENBQUMsQ0FBQTtRQUdGLElBQUcsSUFBSSxDQUFDLEtBQUs7WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFekMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ3ZDLElBQUc7Z0JBQ0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFBO2dCQUM3QyxJQUFHLElBQUksRUFBQztvQkFDSixNQUFNLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUNoQixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMscUJBQXFCLENBQUMsQ0FBQTtvQkFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUVoQjs7b0JBQ0csT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3JCO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ0wsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLHlCQUF5QixDQUFDLENBQUE7Z0JBQ3ZELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUNqQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBRVAsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsS0FBSSxDQUFDO0lBRzdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBOEMsRUFBQyxzQkFBK0I7UUFDaEcsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3JCLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUF1QixFQUFFLENBQUM7UUFDbkMsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7WUFDaEIsSUFBRyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNOLFNBQVM7WUFDYixJQUFHLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSSxRQUFRO2dCQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQ3BCO2dCQUNBLElBQUcsQ0FBQyxzQkFBc0IsRUFBQztvQkFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBQzt3QkFDUixLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ2IsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNO3dCQUNmLGNBQWMsRUFBQyxDQUFDLENBQUMsY0FBYzt3QkFDL0IsY0FBYyxFQUFDLENBQUMsQ0FBQyxjQUFjO3dCQUMvQixZQUFZLEVBQUMsQ0FBQyxDQUFDLFlBQVk7d0JBQzNCLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSTtxQkFDZCxDQUFBO2lCQUNKOztvQkFDRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7YUFDMUI7U0FFSjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBMkM7UUFDN0QsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7UUFDbEMsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7WUFDYixJQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUM7Z0JBQ3BDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQXdELENBQUM7Z0JBQ3ZFLElBQUcsQ0FBQyxFQUFFLEVBQUM7b0JBQ0gsRUFBRSxHQUFDO3dCQUNDLElBQUksRUFBQyxDQUFDO3dCQUNOLEtBQUssRUFBQyxJQUFJO3dCQUNWLE1BQU0sRUFBQyxLQUFLO3dCQUNaLGNBQWMsRUFBQyxLQUFLO3dCQUNwQixjQUFjLEVBQUMsS0FBSzt3QkFDcEIsWUFBWSxFQUFDLEtBQUs7cUJBQ3JCLENBQUE7aUJBQ0o7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDUixJQUFJLEVBQUMsRUFBRSxDQUFDLElBQWMsSUFBSSxDQUFDO29CQUMzQixLQUFLLEVBQUMsRUFBRSxDQUFDLEtBQUs7b0JBQ2QsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFpQjtvQkFDM0IsY0FBYyxFQUFDLEVBQUUsQ0FBQyxjQUF5QjtvQkFDM0MsY0FBYyxFQUFDLEVBQUUsQ0FBQyxjQUF5QjtvQkFDM0MsWUFBWSxFQUFDLEVBQUUsQ0FBQyxZQUF1QjtpQkFDMUMsQ0FBQyxDQUFBO2FBQ0w7aUJBQUk7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDUixJQUFJLEVBQUMsQ0FBQztvQkFDTixLQUFLLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBeUM7aUJBQ3ZELENBQUMsQ0FBQTthQUNMO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFZLEVBQUMsTUFBOEM7UUFFM0UsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3JCLE1BQU0sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsWUFBWSxHQUFDLEdBQUcsQ0FBQztZQUNuQixLQUFLLEdBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxHQUFHLEdBQUMsRUFBRSxDQUFDLENBQUE7U0FDNUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQztZQUNyRCxLQUFLLElBQUUsWUFBWSxDQUFBO1FBRXZCLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQTtRQUd2QyxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUM7WUFDN0IsSUFBSSxnQkFBZ0IsR0FBQyxFQUFFLENBQUE7WUFDdkIsSUFBSSxpQkFBaUIsR0FBQyxFQUFFLENBQUE7WUFDeEIsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7Z0JBQ2hCLElBQUcsQ0FBQyxDQUFDLGNBQWM7b0JBQ2YsU0FBUztnQkFFYixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLEdBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2hHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDekM7WUFFRCxLQUFLLEdBQUMsS0FBSztpQkFDTixVQUFVLENBQUMsU0FBUyxFQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDaEQsVUFBVSxDQUFDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN6RDtRQUVELElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQztZQUM3QixJQUFJLGFBQWEsR0FBQyxFQUFFLENBQUE7WUFDcEIsSUFBSSxjQUFjLEdBQUMsRUFBRSxDQUFBO1lBQ3JCLEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO2dCQUNoQixJQUFHLENBQUMsQ0FBQyxjQUFjO29CQUNmLFNBQVM7Z0JBQ2IsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQ3RDO1lBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUMxRztRQUVELElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQztZQUMvQixJQUFJLFFBQVEsR0FBQyxFQUFFLENBQUE7WUFDZixLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztnQkFDaEIsSUFBRyxDQUFDLENBQUMsY0FBYztvQkFDZixTQUFTO2dCQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLEdBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUM3RztZQUNELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7U0FFN0Q7UUFFRCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUM7WUFDbEMsSUFBSSxXQUFXLEdBQUMsRUFBRSxDQUFDO1lBQ25CLEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO2dCQUNoQixJQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVk7b0JBQ2QsU0FBUztnQkFDYixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDaEg7WUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQ25FO1FBR0QsT0FBUSxLQUFLLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUEwQyxFQUFDLE1BQWU7UUFDcEYsSUFBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUM7WUFDcEMsS0FBSyxHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQTtZQUM5QyxJQUFHLEtBQUssS0FBRyxJQUFJO2dCQUNYLEtBQUssR0FBRyxHQUFHLEdBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQTs7Z0JBRXJCLEtBQUssR0FBRyxNQUFNLENBQUE7U0FDckI7UUFDRCxJQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7WUFDcEMsT0FBTyxNQUFNLENBQUE7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBWSxFQUFDLGFBQXlCLEVBQUMsYUFBb0IsRUFBQyxTQUFpQixFQUFDLGNBQXNCO1FBQzlHLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQWdDLEVBQUMsTUFBTSxFQUFDLEVBQUU7WUFFaEUsSUFBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUM7Z0JBQ1YsSUFBQSxxQkFBUSxFQUFDLG9CQUFvQixFQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUN4QyxPQUFPLENBQUM7b0JBQ0osS0FBSyxFQUFDO3dCQUNGLElBQUksRUFBRSxTQUFTO3dCQUNmLEtBQUssRUFBRSxNQUFNO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLEdBQUcsRUFBRSxLQUFLO3dCQUNWLElBQUksRUFBQyxTQUFTO3dCQUNkLE9BQU8sRUFBQyx3QkFBd0I7d0JBQ2hDLFNBQVMsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSztxQkFDakM7b0JBQ0QsSUFBSSxFQUFDLElBQUk7b0JBQ1QsS0FBSyxFQUFDLENBQUM7aUJBQ1YsQ0FBQyxDQUFBO2dCQUNGLE9BQU87YUFDVjtZQUdELElBQUc7Z0JBQ0MsSUFBSSxJQUFJLEdBQTJCLElBQUksQ0FBQTtnQkFDdkMsSUFBRyxhQUFhLElBQUksYUFBYSxHQUFDLENBQUMsRUFBQztvQkFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsS0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO29CQUNyRSxJQUFHLElBQUksQ0FBQyxLQUFLO3dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2lCQUNuRTtxQkFBSTtvQkFDRCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQztnQkFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFHL0MsSUFBRyxDQUFDLElBQUksRUFBQztvQkFDTCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsd0JBQXdCLENBQUMsQ0FBQTtvQkFDdEQsT0FBTyxDQUFDO3dCQUNKLEtBQUssRUFBQzs0QkFDRixJQUFJLEVBQUUsU0FBUzs0QkFDZixLQUFLLEVBQUUsTUFBTTs0QkFDYixLQUFLLEVBQUUsSUFBSTs0QkFDWCxHQUFHLEVBQUUsS0FBSzs0QkFDVixJQUFJLEVBQUMsU0FBUzs0QkFDZCxPQUFPLEVBQUMsZ0NBQWdDOzRCQUN4QyxTQUFTLEVBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLEtBQUs7eUJBQ2pDO3dCQUNELElBQUksRUFBQyxJQUFJO3dCQUNULEtBQUssRUFBQyxDQUFDO3FCQUNWLENBQUMsQ0FBQTtvQkFDRixPQUFPO2lCQUNWO2dCQUlELEtBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBQztvQkFDM0IsSUFBRyxDQUFDLENBQUMsSUFBSSxLQUFHLElBQUksRUFBQzt3QkFDYixJQUFBLG9CQUFPLEVBQUMsbUNBQW1DLENBQUMsQ0FBQTt3QkFDNUMsTUFBTTtxQkFDVDtpQkFDSjtnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSyxFQUFDLGNBQWMsQ0FBQyxDQUFDO2FBRXhGO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ0wsSUFBQSxxQkFBUSxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUdqQyxJQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUV4QixPQUFPLENBQUM7b0JBQ0osS0FBSyxFQUFDO3dCQUNGLElBQUksRUFBRSxTQUFTO3dCQUNmLEtBQUssRUFBRSxNQUFNO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLFNBQVMsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSzt3QkFDOUIsR0FBRyxFQUFFLEtBQUs7d0JBQ1YsSUFBSSxFQUFDLFNBQVM7d0JBQ2QsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksQ0FBUSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQVMsQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFBLDJCQUEyQjtxQkFDL0c7b0JBQ0QsSUFBSSxFQUFDLElBQUk7b0JBQ1QsS0FBSyxFQUFDLENBQUM7aUJBQ1YsQ0FBQyxDQUFBO2dCQUNGLE9BQU87YUFDVjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBeUIsRUFBQyxLQUFZLEVBQUMsT0FBZ0MsRUFBQyxRQUFvQixFQUFDLFNBQWlCLEVBQUMsY0FBc0I7UUFJakosSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQSxFQUFFO1lBRXZCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFHLFFBQVE7Z0JBQ1AsYUFBYSxHQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtZQUU1RCxJQUFBLHFCQUFRLEVBQUMsc0NBQXNDLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFHcEQsSUFBRztnQkFFQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO2FBRWpCO1lBQUEsT0FBTSxDQUFDLEVBQUMsR0FBRTtZQUVYLE9BQU8sQ0FBQztnQkFDSixLQUFLLEVBQUM7b0JBQ0YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEtBQUssRUFBRSxNQUFNO29CQUNiLEtBQUssRUFBRSxJQUFJO29CQUNYLEdBQUcsRUFBRSxLQUFLO29CQUNWLElBQUksRUFBQyxVQUFVO29CQUNmLE9BQU8sRUFBQyxTQUFTLEdBQUMsR0FBRztvQkFDckIsU0FBUyxFQUFDLFNBQVM7aUJBQ3RCO2dCQUNELElBQUksRUFBQyxJQUFJO2dCQUNULGFBQWEsRUFBQyxhQUFhO2dCQUMzQixLQUFLLEVBQUMsQ0FBQzthQUNWLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO1FBSUYsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFBO1FBR25DLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFHdEQsSUFBRyxXQUFXLENBQUMsR0FBRyxFQUFDO1lBR2YsSUFBSSxhQUFhLEdBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUcsUUFBUTtnQkFDUCxhQUFhLEdBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBRzVELElBQUc7Z0JBRUMsSUFBSSxPQUFPLEdBQUMsS0FBSyxDQUFBO2dCQUNqQixJQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUM7b0JBQzFDLElBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLDBEQUEwRCxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUM7d0JBQzlHLE9BQU8sR0FBQyxJQUFJLENBQUM7cUJBQ2hCO2lCQUNKO2dCQUVELElBQUcsT0FBTyxFQUFDO29CQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUMsVUFBVSxDQUFDO2lCQUNuQztxQkFBSTtvQkFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQzdCO2FBQ0o7WUFBQSxPQUFNLENBQUMsRUFBQyxHQUFFO1lBTVgsSUFBSSxHQUFHLEdBQUMsS0FBSyxDQUFDO1lBQ2QsSUFBRyxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBRyxDQUFDLENBQUM7Z0JBQ3pHLEdBQUcsR0FBQyxJQUFJLENBQUM7WUFFYixJQUFBLHFCQUFRLEVBQUMsNkNBQTZDLEVBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXhFLE9BQU8sQ0FBQztnQkFDSixLQUFLLEVBQUMsRUFBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQztnQkFDOUMsSUFBSSxFQUFDLElBQUk7Z0JBQ1QsYUFBYSxFQUFDLGFBQWE7Z0JBQzNCLGdCQUFnQixFQUFDLEdBQUc7Z0JBQ3BCLEtBQUssRUFBQyxDQUFDO2FBQ1YsQ0FBQyxDQUFBO1lBRUYsT0FBTztTQUNWO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBRyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxDQUFDLEVBQUM7WUFDN0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNoRSxJQUFHLGdCQUFnQixDQUFDLEdBQUc7Z0JBQ25CLElBQUEscUJBQVEsRUFBQyxvREFBb0QsRUFBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDcEY7Z0JBQ0EsSUFBRyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7b0JBQzdELEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2lCQUM3QzthQUNKO1NBQ0o7UUFJRCxJQUFHO1lBQ0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7UUFBQSxPQUFNLENBQUMsRUFBQyxHQUFFO1FBR1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQztZQUNKLEtBQUssRUFBQyxHQUFHO1lBQ1QsSUFBSSxFQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ3hCLEtBQUssRUFBQyxLQUFLO1NBQ2QsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUlELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBeUIsRUFBQyxLQUFZO1FBRW5ELElBQUksTUFBTSxHQUFDLElBQUksQ0FBQztRQUNoQixJQUFHO1lBQ0MsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQztRQUFBLE9BQU0sQ0FBQyxFQUFDO1lBQ0wsT0FBTyxFQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztTQUM5QztRQUVELE9BQU87WUFDSCxHQUFHLEVBQUMsSUFBSTtZQUNSLE9BQU8sRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3BCLENBQUE7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBTyxFQUFDLFNBQWtCO1FBQzVDLElBQUcsR0FBRyxJQUFLLE9BQU8sR0FBRyxLQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUM7WUFDckgsT0FBTztnQkFDQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7Z0JBQ1osSUFBSSxFQUFDLEdBQUcsQ0FBQyxJQUFJO2dCQUNiLE9BQU8sRUFBQyxHQUFHLENBQUMsT0FBTztnQkFDbkIsU0FBUyxFQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxLQUFLO2FBRXJDLENBQUE7U0FDSjthQUFJO1lBQ0QsT0FBTztnQkFDSCxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsR0FBRyxFQUFFLFVBQVU7Z0JBQ2YsSUFBSSxFQUFDLFdBQVc7Z0JBQ2hCLE9BQU8sRUFBQyxTQUFTLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRyxDQUFBLENBQUMsQ0FBQSxFQUFFO2dCQUM5QixTQUFTLEVBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLEtBQUs7YUFDakMsQ0FBQTtTQUNKO0lBQ0wsQ0FBQzs7QUExNEJMLG9DQTI0QkM7QUFHRCxNQUFNLFVBQVUsR0FBQyxnREFBZ0QsQ0FBQTtBQUNqRSxNQUFNLFNBQVMsR0FBQywwQ0FBMEMsQ0FBQTtBQUcxRCxNQUFNLEdBQUcsR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFFaEYsTUFBTSxPQUFPLEdBQUUsQ0FBQyxTQUFnQixFQUFhLEVBQUU7SUFDN0MsSUFBRztRQUNDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBQSx5QkFBZ0IsRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RCxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUFBLE9BQU0sQ0FBQyxFQUFDO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVSxFQUFhLEVBQUU7SUFDeEMsSUFBRztRQUNDLElBQUksUUFBUSxHQUFHLElBQUEsdUJBQWMsRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUNyRCxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzlEO0lBQUEsT0FBTSxDQUFDLEVBQUM7UUFDTCxPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsa0JBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9pbXBvcnQgbXlzcWwsIHsgRmllbGRJbmZvLCBNeXNxbEVycm9yLCBQb29sLCBQb29sQ29ubmVjdGlvbiB9IGZyb20gXCJteXNxbFwiXG5cbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSBcIi4vQmFzZVNlcnZpY2VcIjtcbmltcG9ydCBTaWduYWwsIHsgUmVxIH0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCI7XG5pbXBvcnQgeyBjcmVhdGVDaXBoZXJpdiwgY3JlYXRlRGVjaXBoZXJpdiwgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tIFwiLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBteXNxbCBmcm9tIFwibXlzcWwyL3Byb21pc2VcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCBjb25zdCBTX01ZU1FMX1NUQVJURUQ9bmV3IFNpZ25hbDx2b2lkPigpXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1FVRVJZID0gbmV3IFJlcTxNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSxNeXNxbFJlc3VsdFtdPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfUVVFUllcIik7XG4vL2V4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFJBTlNBQ1RJT04gPSBuZXcgUmVxPE15U3FsUXVlcnlbXSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OXCIpO1xuXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RCRUdJTiA9IG5ldyBSZXE8dm9pZCxNeXNxbEVycm9yfG51bWJlcj4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0JFR0lOR1wiKTsgLy8gcmV0dXJuIHRyYW5zYWN0aW9uIGlkIG9yIG15c3FsIGVycm9yXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RRVUVSWT1uZXcgUmVxPHtxdWVyeTpNeVNxbFF1ZXJ5LHRpZDpudW1iZXJ9LE15c3FsUmVzdWx0Pih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05fQUREX09QRVJBVElPTlwiKTsgLy8gdGlkIG1lYW5zIHRyYW5zYWN0aW9uIGlkXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RDT01NSVQ9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVENPTU1JVFwiKTsgLy8gdGlkXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RST0xMQkFDSz1uZXcgUmVxPG51bWJlcixNeXNxbEVycm9yfG51bGw+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUk9MTEJBQ0tcIik7IC8vIHRpZFxuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVF1ZXJ5ID0gYXN5bmMgKHF1ZXJ5Ok15U3FsUXVlcnl8TXlTcWxRdWVyeVtdKTpQcm9taXNlPE15c3FsUmVzdWx0W10+PT57cmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KX1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFNlcnZpY2VPcHRpb25ze1xuICAgIGNvbm5lY3Rpb25MaW1pdDpudW1iZXIsXG4gICAgaG9zdDpzdHJpbmcsXG4gICAgdXNlcjpzdHJpbmcsXG4gICAgcGFzc3dvcmQ6c3RyaW5nLFxuICAgIHBvcnQ6bnVtYmVyLFxuICAgIGRhdGFiYXNlOnN0cmluZywgIFxuICAgIHF1ZXVlTGltaXQ/Om51bWJlcixcbiAgICB0cmFuc2FjdGlvbkZhaWxSZXBvcnQ/Oih0cng6SVRyYW5zYWN0aW9uLG1lc3NhZ2U6c3RyaW5nKT0+dm9pZCxcbiAgICB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXI/OnN0cmluZyxcbiAgICBkZWJ1Zz86Ym9vbGVhbixcbiAgICBuYXhUcmFuc2FjdGlvbldhaXRUaW1lPzpudW1iZXIsXG5cdG1pZ3JhdGlvbnM/Ontcblx0XHRkaXI6c3RyaW5nLFxuXHRcdGNhbGxiYWNrOigpPT52b2lkXG5cdH18bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsRXJyb3J7XG4gICAgY29kZTogc3RyaW5nLFxuICAgIGVycm5vOiBudW1iZXIsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgbmFtZTpzdHJpbmcsXG4gICAgbWVzc2FnZTpzdHJpbmdcbiAgICBmYXRhbD86Ym9vbGVhbixcbiAgICB0aHJvd2FibGU6Ym9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgaXNNeXNxbEVycm9yPShlOmFueSk6ZSBpcyBNeXNxbEVycm9yPT57XG4gICAgcmV0dXJuIGUuY29kZSE9PXVuZGVmaW5lZCAmJiBlLmVycm5vIT09dW5kZWZpbmVkICYmIGUuc3FsIT09dW5kZWZpbmVkICYmIGUubmFtZSE9PXVuZGVmaW5lZCAmJiBlLm1lc3NhZ2UhPT11bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxSZXN1bHR7XG4gICAgZXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICByb2xsYmFja0Vycm9yPzpNeXNxbEVycm9yfG51bGwsXG4gICAgaXNEdXBsaWNhdGVFcnJvcj86Ym9vbGVhblxuICAgIGRhdGE6YW55XG4gICAgY291bnQ6bnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlTcWxRdWVyeXtcbiAgICBxdWVyeTpzdHJpbmdcbiAgICBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW118TXlzcWxRdWVyeUZpZWxkT2JqZWN0LFxuICAgIHJvbGxiYWNrUXVlcnk/OnN0cmluZ3xudWxsXG4gICAgdHJhbnNhY3Rpb25JRD86bnVtYmVyXG4gICAgdGhyb3dhYmxlPzpib29sZWFuXG4gICAgY2FsY3VsYXRlQ291bnQ/OmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGR7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLFxuICAgIHN5c3RlbT86Ym9vbGVhbixcbiAgICBpZ25vcmVJbkluc2VydD86Ym9vbGVhbixcbiAgICBpZ25vcmVJblVwZGF0ZT86Ym9vbGVhblxuICAgIHVzZUluUmVwbGFjZT86Ym9vbGVhbixcbiAgICBfcGFyc2VkVmFsdWU/OnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zYWN0aW9ue1xuICAgIGlkOm51bWJlclxuICAgIHRpbWVzdGFtcDpudW1iZXIsXG4gICAgY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixcbiAgICBxdWVyaWVzOntzcWw6c3RyaW5nLHN0YXR1czpzdHJpbmd9W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGRPYmplY3QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHx7bmFtZT86c3RyaW5nfG51bGwsdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbixpZ25vcmVJbkluc2VydD86Ym9vbGVhbixpZ25vcmVJblVwZGF0ZT86Ym9vbGVhbix1c2VJblJlcGxhY2U/OmJvb2xlYW59PntcblxufVxuICAgIFxuXG4vKipcbiAqIE15c3FsIFNlcnZpY2VzLCBleGVjdXRlIHF1ZXJpZXNcbiAqIE15U3FsUXVlcnkucXVlcnk6XG4gKiBAZmllbGRzIC0gcmVwbGFjZWQgYnkgZmllbGQncyBuYW1lc1xuICogQHZhbHVlcyAtIHJlcGxhY2VkIGJ5IHBhcnNlZCB2YWx1ZXNcbiAqIEBvbnVwZGF0ZSAtIHJlcGFsY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKiBAb25kdXBsaWNhdGUgLSByZXBsYWNlZCBieSBwYWlyIGZpZWxkIG5hbWUgPSB2YWx1ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBNeXNxbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcblxuICAgIHJlY29ubmVjdGlvblRpbWVvdXQ9MTAwMCozO1xuICAgIHJlY29ubmVjdGluZz1mYWxzZTtcbiAgICBwb29sOm15c3FsLlBvb2x8bnVsbD1udWxsO1xuICAgIG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucztcbiAgICBzZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICB0aW1lb3V0SUQ6YW55XG5cbiAgICBkZWJ1Zz1mYWxzZTtcblxuICAgIHF1ZXJpZXM9W107IC8vIFRPRE86IFNUT1JFIFFVRVJJRVMgU0VOVFMgQkVGT1JFIFRIRSBTRVJWSUNFIElTIFNUQVJURUQhXG4gICAgc3RhdGljIG5leHRUcmFuc2FjdGlvbklEPTE7XG4gICAgdHJhbnNhY3Rpb25zOklUcmFuc2FjdGlvbltdPVtdXG5cbiAgICBtYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gMTAwMCo2MCoxOyAvLyAxIG1pbiBhbmQgZGV0ZWxldGUgdHJhbnNhY3Rpb25cbiAgICBsYXN0U3VjY2Vzc1F1ZXJ5VGltZSA9IDA7XG4gICAgcGluZ0ludGVydmFsID0gMTAwMCozMDsgLy8gZWFjaCAzMCBvZiBpbmFjdGl2aXR5IHNlY29uZHNcblxuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtOmZzLldyaXRlU3RyZWFtfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU6c3RyaW5nfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU6bnVtYmVyPTA7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOk15c3FsU2VydmljZU9wdGlvbnMpe1xuICAgICAgICBzdXBlcihcIm15c3FsXCIpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBcblxuICAgICAgICAvLyBkZWNyeXB0IHdoZW4gbmVlZGVkXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5ob3N0LnN0YXJ0c1dpdGgoXCJfXCIpKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhvc3QgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5ob3N0LnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnVzZXIuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudXNlciA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnVzZXIuc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMudXNlclxuICAgICAgICBpZih0aGlzLm9wdGlvbnMuZGF0YWJhc2Uuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0YWJhc2UgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5kYXRhYmFzZVxuICAgICAgICBpZih0aGlzLm9wdGlvbnMucGFzc3dvcmQuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFzc3dvcmQgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSB0cnVlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5uYXhUcmFuc2FjdGlvbldhaXRUaW1lKVxuICAgICAgICAgICAgdGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gdGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWU7XG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIC8vIGNoZWNrIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZElEczpudW1iZXJbXT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYobm93LWkudGltZXN0YW1wPnRoaXMubWF4VHJhbnNhY3Rpb25XYWl0VGltZSl7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiUmVsZWFzZSB0cmFuc2FjdGlvbiBjb25uZWN0aW9uIGR1ZSB0byB0aW1lb3V0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbihpLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkSURzLnB1c2goaS5pZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PiFyZW1vdmVkSURzLmluY2x1ZGVzKGkuaWQpKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnICYmIGNvdW50LXRoaXMudHJhbnNhY3Rpb25zLmxlbmd0aD4wKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVtb3ZlZDogXCIsY291bnQtdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoKVxuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKERhdGUubm93KCktdGhpcy5sYXN0U3VjY2Vzc1F1ZXJ5VGltZT50aGlzLnBpbmdJbnRlcnZhbCl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMucG9vbClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIERPIFBJTkdcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPTA7aTx0aGlzLm9wdGlvbnMuY29ubmVjdGlvbkxpbWl0O2krKyl7XG4gICAgICAgICAgICAgICAgICAgIFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHtxdWVyeTpcIlNFTEVDVCAxXCIsZmllbGRzOltdfSlcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGluZyBteXNxbCBvbiBlYWNoIGNvbm5lY3Rpb24gaW4gcG9vbFwiKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBcbiAgICAgICAgfSwxMDAwKjMwKVxuXG4gICAgICAgIHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgICBpZighdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBhZnRlciAxNSBtaW4gb2YgaW5hY3Rpdml0eSwgY2xvc2UgZmlsZVxuICAgICAgICAgICAgaWYoRGF0ZS5ub3coKS10aGlzLmZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZT4xMDAwKjYwKjE1KXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW09bnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LDEwMDAqNjAqNSlcblxuICAgICAgICBpZihvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpKXtcbiAgICAgICAgICAgICAgICAgICAgZnMubWtkaXJTeW5jKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXI9dW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNyZWF0ZSB0cmFuc2FjdGlvbiBmYWlsIHJlcG9ydCBkaXJcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBleGVjdXRlUXVlcnkgKHF1ZXJ5Ok15U3FsUXVlcnl8TXlTcWxRdWVyeVtdKTpQcm9taXNlPE15c3FsUmVzdWx0W10+eyByZXR1cm4gYXdhaXQgUkVRX01ZU1FMX1FVRVJZLnJlcXVlc3QocXVlcnkpIH1cblxuICAgIGFzeW5jIGluaXQoKXtcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xuXG4gICAgICAgIC8vIHNldHVwIHByb2Nlc3MgZXhpdCBoYW5kbGVycyBpbnRlcnJ1cHQgKGN0cmwrYylcbiAgICAgICAgcHJvY2Vzcy5vbignU0lHSU5UJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5maW5pc2hBcHAoKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgIC8vIHRlcm1pbmF0ZSAoa2lsbClcbiAgICAgICAgcHJvY2Vzcy5vbignU0lHVEVSTScsYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5maW5pc2hBcHAoKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICAgICAgbGV0IHBvb2xDcmVhdGVkOmJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSghcG9vbENyZWF0ZWQpe1xuICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ29ubmVjdGluZyB0byBNWVNRTCFcIilcbiAgICAgICAgICAgIHBvb2xDcmVhdGVkID0gYXdhaXQgdGhpcy5yZWNyZWF0ZVBvb2woKTtcbiAgICAgICAgICAgIGlmKCFwb29sQ3JlYXRlZCl7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY29ubmVjdCB0byBNWVNRTCEgUmV0cnlpbmcgaW4gMyBzZWNvbmRzLi4uXCIpXG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpPT5zZXRUaW1lb3V0KHJlc29sdmUsMzAwMCkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfUVVFUlkubGlzdGVuZXI9YXN5bmMgZGF0YSA9PntcbiAgICAgICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGRhdGEpKVxuICAgICAgICAgICAgICAgIGRhdGE9W2RhdGFdO1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBkYXRhKXtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IE15c3FsU2VydmljZS5wcmVwYXJlUXVlcnkoaS5xdWVyeSxpLmZpZWxkcyk7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmV4ZWN1dGUocXVlcnksaS5yb2xsYmFja1F1ZXJ5ID8/IG51bGwsaS50cmFuc2FjdGlvbklEID8/IDAsaS50aHJvd2FibGUgPz8gZmFsc2UsaS5jYWxjdWxhdGVDb3VudCA/PyBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyaWVzOiBcIixkYXRhLmxlbmd0aClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiByZXN1bHQpe1xuICAgICAgICAgICAgICAgIGlmKGkuZXJyb3IgJiYgaS5lcnJvci5jb2RlPT09XCJDT05OX0VSUlwiKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvbm5lY3Rpb24gZXJyb3IsIHdhcyBkZXN0cm95ZWQsIHJlY3JlYXRlIHBvb2xcIilcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVBvb2woKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihpLmVycm9yICYmIChpLmVycm9yLmZhdGFsIHx8IGkuZXJyb3IudGhyb3dhYmxlKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaS5lcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmKCFpLmVycm9yKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdWNjZXNzUXVlcnlUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVEJFR0lOLmxpc3RlbmVyPWFzeW5jICgpPT57ICBcbiAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgIGlmKCFjb25uKVxuICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIk5PX1BPT0xcIixlcnJubzoxMDAwMDAsZmF0YWw6dHJ1ZSxzcWw6XCJcIixuYW1lOlwiTk9fUE9PTFwiLG1lc3NhZ2U6XCJNeXNxbCBwb29sIG5vdCBjcmVhdGVkXCIsdGhyb3dhYmxlOmZhbHNlfVxuXG4gICAgICAgICAgICAvLyBmaW5kIGNvbm4gaW4gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiWW91ciBjb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIkNPTk5fSU5fVFJYXCIsZXJybm86MTAwMDA1LGZhdGFsOnRydWUsdGhyb3dhYmxlOmZhbHNlLHNxbDpcIlwiLG5hbWU6XCJDT05OX0lOX1RSWFwiLG1lc3NhZ2U6XCJDb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCJ9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aWQgPSBNeXNxbFNlcnZpY2UubmV4dFRyYW5zYWN0aW9uSUQrKztcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCZWdpbiB0cmFuc2FjdGlvbiB3aXRoIGlkIFwiLHRpZClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGNvbm4uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4ucXVlcnkoXCJTVEFSVCBUUkFOU0FDVElPTlwiKTtcbiAgICAgICAgICAgICAgICAvL2NvbnN0IHJlcyA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRVQgYXV0b2NvbW1pdD0wXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gc3RhcnRlZFwiKVxuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oe2lkOnRpZCxjb25uOmNvbm4sdGltZXN0YW1wOkRhdGUubm93KCkscXVlcmllczpbe3NxbDpcIlNUQVJUIFRSQU5TQUNUSU9OXCIsc3RhdHVzOlwiZXJyb3JcIn1dfSlcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6dGlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIGNvbm46Y29ubixcbiAgICAgICAgICAgICAgICBxdWVyaWVzOltdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb25zIHBvb2w6IFwiLHRoaXMudHJhbnNhY3Rpb25zKVxuXG4gICAgICAgICAgICByZXR1cm4gdGlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBSRVFfTVlTUUxfVFFVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGE9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PWRhdGEudGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtlcnI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIixcbiAgICAgICAgICAgICAgICB9LGRhdGE6bnVsbCxyb2xsYmFja0Vycm9yOm51bGwsY291bnQ6MH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4LmlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgaWYoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnF1ZXJ5LmNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50UXVlcnkgPSB0aGlzLnByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdCAmJiBjb3VudFF1ZXJ5UmVzdWx0Lmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IChjb3VudFF1ZXJ5UmVzdWx0WzBdIGFzIGFueSkuY291bnQ7IC8vIHRvZG8gOiBjaGVjaywgcHJvYmFibHkgbm90IHdvcmtpbmcgKHdyb25nIGZpZWxkIG9yIHNtdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5UUVVFUlktPnF1ZXJ5IGVycm9yXCIsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJRdWVyeSBleGVjdXRpb24gc3RhdHVzOlwiLGVycj9lcnIubWVzc2FnZTpcImNvbXBsZXRlZFwiKVxuXG4gICAgICAgICAgICB0cngucXVlcmllcy5wdXNoKHtzcWw6cXVlcnksc3RhdHVzOmVycj9lcnIubWVzc2FnZTpcImNvbXBsZXRlZFwifSlcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOnNxbERhdGE/c3FsRGF0YVswXTpudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOmVycixcbiAgICAgICAgICAgICAgICBjb3VudDpjb3VudFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UUk9MTEJBQ0subGlzdGVuZXI9YXN5bmMgKHRpZDpudW1iZXIpPT57XG4gICAgICAgICAgICBjb25zdCB0cnggPSB0aGlzLnRyYW5zYWN0aW9ucy5maW5kKGk9PmkuaWQ9PT10aWQpO1xuICAgICAgICAgICAgaWYoIXRyeCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4KTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1RDT01NSVQubGlzdGVuZXI9YXN5bmMgKHRpZDpudW1iZXIpPT57XG4gICAgICAgICAgICBjb25zdCB0cnggPSB0aGlzLnRyYW5zYWN0aW9ucy5maW5kKGk9PmkuaWQ9PT10aWQpO1xuICAgICAgICAgICAgaWYoIXRyeCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOmZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDb21taXQgdHJhbnNhY3Rpb246XCIsdHJ4LmlkKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyByZW1vdmUgZnJvbSB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10aWQpO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gcG9vbDpcIix0aGlzLnRyYW5zYWN0aW9ucyApXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IGF3YWl0IHRoaXMuY29tbWl0KHRyeCk7XG5cbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBjb21taXQodHJ4OklUcmFuc2FjdGlvbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgIFxuICAgICAgICB0cnl7XG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5jb21taXQoKTtcbiAgICAgICAgICAgIC8vYXdhaXQgdHJ4LmNvbm4ucXVlcnkoXCJDT01NSVRcIik7XG4gICAgICAgICAgICB0cnguY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbGVhc2UoKTtcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICB9XG5cbiAgICBhc3luYyByb2xsYmFja1RyYW5zYWN0aW9uKHRyeDpJVHJhbnNhY3Rpb24sZG9uTm90UmVtb3ZlPzpib29sZWFuKTpQcm9taXNlPE15c3FsRXJyb3J8bnVsbD57XG4gICAgICAgIGxldCBlcnI9bnVsbDtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJSb2xsYmFjayBzdGFydGVkXCIsdHJ4LmNvbm4udGhyZWFkSWQpXG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5yb2xsYmFjaygpO1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiUk9MTEJBQ0tcIik7XG4gICAgICAgICAgICB0cnguY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGlmKCFkb25Ob3RSZW1vdmUpXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+aS5pZCE9PXRyeC5pZCk7XG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgY29tcGxldGVcIix0cnguY29ubi50aHJlYWRJZClcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgcm9sbGJhY2sgdHJhbnNhY3Rpb25cIix0cngucXVlcmllcylcbiAgICAgICAgICAgIGVyciA9IHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmVUcmFuc2FjdGlvbkFzUHJvYmxlbSh0cngsXCJyb2xsYmFja1wiKVxuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmlzaEFwcCgpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIkZpbmlzaGluZyBteXNxbCBzZXJ2aWNlXCIpXG4gICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucylcbiAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbihpKTtcblxuICAgICAgICBpZih0aGlzLnBvb2wpe1xuICAgICAgICAgICAgdHJ5e2F3YWl0IHRoaXMucG9vbC5lbmQoKTt9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY2xvc2UgTVlTUUwgcG9vbCFcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pXG4gICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgfVxuXG4gICAgcHJlcGFyZUNvdW50UXVlcnkocXVlcnk6c3RyaW5nKTpzdHJpbmd7XG4gICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gcXVlcnk7XG5cbiAgICAgICAgLy8gUkVNT1ZFIExJTUlUXG4gICAgICAgIGlmKGNvdW50UXVlcnkuaW5kZXhPZihcIkxJTUlUXCIpPT09LTEpXG4gICAgICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoMCxjb3VudFF1ZXJ5LmluZGV4T2YoXCJMSU1JVFwiKSk7XG4gICAgICAgIFxuICAgICAgICAvLyBSRU1PVkUgT1JERVIgXG4gICAgICAgIGlmKGNvdW50UXVlcnkuaW5kZXhPZihcIk9SREVSXCIpIT09LTEpXG4gICAgICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoMCxjb3VudFF1ZXJ5LmluZGV4T2YoXCJPUkRFUlwiKSlcblxuICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoY291bnRRdWVyeS5pbmRleE9mKFwiRlJPTVwiKSk7XG4gICAgICAgIFxuXG4gICAgICAgIGNvdW50UXVlcnkgPSBcIlNFTEVDVCBDT1VOVCgxKSBhcyBgY291bnRgIFwiK2NvdW50UXVlcnlcbiAgICAgICAgcmV0dXJuIGNvdW50UXVlcnk7XG4gICAgfVxuXG4gICAgYXN5bmMgc3RvcmVUcmFuc2FjdGlvbkFzUHJvYmxlbSh0cng6SVRyYW5zYWN0aW9uLG1lc3NhZ2U6c3RyaW5nKXtcblxuICAgICAgICBpZighdGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydCAmJiAhdGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCByZXBvcnQgZmFpbGVkIHRyYW5zYWN0aW9uLCBubyByZXBvcnQgZnVuY3Rpb246IHRyYW5zYWN0aW9uRmFpbFJlcG9ydCBpbiBvcHRpb25zLCBhbmQgdHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyIGlzbnQgc2V0XCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgY29uc3QgeXl5bW1kZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwxMCkucmVwbGFjZUFsbChcIi1cIixcIlwiKTtcblxuICAgICAgICAgICAgLy9zdG9yZSB0cmFuc2FjdGlvblxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIseXl5bW1kZCtcIi5qc29uXCIpO1xuICAgICAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWUhPT1maWxlKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGUse2ZsYWdzOidhJ30pO1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lPWZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJTdG9yZSB0cmFuc2FjdGlvbiBmYWlsIHJlcG9ydDogXCIsZmlsZSx0cngucXVlcmllcyxtZXNzYWdlKVxuXG4gICAgICAgICAgICBpZighdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSlcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0ud3JpdGUoSlNPTi5zdHJpbmdpZnkoe3F1ZXJpZXM6dHJ4LnF1ZXJpZXMsdGltZTp0cngudGltZXN0YW1wLGRhdGUsbWVzc2FnZX0pK1wiXFxufUVPQntcXG5cIixlcnI9PntcbiAgICAgICAgICAgICAgICBpZihlcnIpXG4gICAgICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHdyaXRlIHRvIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGZpbGVcIilcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIlRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IHN0b3JlZFwiKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0KHRyeCxtZXNzYWdlKTtcbiAgICB9XG5cblxuICAgIGFzeW5jIHJlY3JlYXRlUG9vbCgpOlByb21pc2U8Ym9vbGVhbj57XG5cbiAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ29ubmVjdGluZyB0byBteXNxbDogXFxuIEhPU1Q6IFwiK3RoaXMub3B0aW9ucy5ob3N0KydcXG4gUE9SVDonK3RoaXMub3B0aW9ucy5wb3J0KVxuXG4gICAgICAgIGlmKHRoaXMucG9vbCl7XG4gICAgICAgICAgICB0aGlzLnBvb2wucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnl7YXdhaXQgdGhpcy5wb29sLmVuZCgpO31jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjbG9zZSBNWVNRTCBwb29sIVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb29sID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIFxuICAgICAgICAvLyBLZWVwIGFsaXZlIHBhY2tldHMgc2hvdWxkIGJlIHNlbnRcbiAgICAgICAgLyplbmFibGVLZWVwQWxpdmU6IHRydWUsXG4gICAgICAgIC8vIFdlIHNob3VsZCBzdGFydCBzZW5kaW5nIHRoZW0gZWFybHlcbiAgICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5OiAzICogMTAwMCwgLy8gMyBzZWNvbmRzXG4gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgaWRsZSBjb25uZWN0aW9ucywgYnV0IGl0J3Mgbm90IG1hbmRhdG9yeSBmb3IgdGhlIGZpeCB0byB3b3JrLCBpdCBzZWVtc1xuICAgICAgICBtYXhJZGxlOiAwLFxuICAgICAgICAvLyBJZGxlIHRpbWVvdXQgbXVjaCBsYXJnZXIgdGhhbiBrZWVwIGFsaXZlIGRlbGF5IGFuZCBtdWNoIHNtYWxsZXIgdGhhbiBNeVNRTCdzIHRpbWVvdXQgc2V0dGluZ1xuICAgICAgICBpZGxlVGltZW91dDogNSAqIDYwICogMTAwMCAvLyA1IG1pbnV0ZXNcbiAgICAgICAgKi9cblxuICAgICAgICB0cnl7XG4gICAgICAgICAgICB0aGlzLnBvb2wgPW15c3FsLmNyZWF0ZVBvb2woe1xuICAgICAgICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5ob3N0XG4gICAgICAgICAgICAgICAgLHVzZXI6IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgICAgICAgICAgLHBhc3N3b3JkOiB0aGlzLm9wdGlvbnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICAsZGF0YWJhc2U6IHRoaXMub3B0aW9ucy5kYXRhYmFzZVxuICAgICAgICAgICAgICAgICxwb3J0OiB0aGlzLm9wdGlvbnMucG9ydFxuICAgICAgICAgICAgICAgICxjb25uZWN0aW9uTGltaXQ6IHRoaXMub3B0aW9ucy5jb25uZWN0aW9uTGltaXRcbiAgICAgICAgICAgICAgICAscXVldWVMaW1pdDogMTBcbiAgICAgICAgICAgICAgICAsbXVsdGlwbGVTdGF0ZW1lbnRzOiB0cnVlXG5cbiAgICAgICAgICAgICAgICAsZW5hYmxlS2VlcEFsaXZlOnRydWVcbiAgICAgICAgICAgICAgICAsa2VlcEFsaXZlSW5pdGlhbERlbGF5OjMqMTAwMFxuICAgICAgICAgICAgICAgIC8vLG1heElkbGU6MFxuICAgICAgICAgICAgICAgICxpZGxlVGltZW91dDoxMDAwKjYwKjVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wb29sPy5vbignY29ubmVjdGlvbicsIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIk1ZU1FMIENPTk5FQ1RJT04gQ1JFQVRFRFwiKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb29sPy5vbignYWNxdWlyZScsIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIk1ZU1FMIENPTk5FQ1RJT04gQUNRVUlSRURcIilcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5wb29sPy5vbigncmVsZWFzZScsIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIk1ZU1FMIENPTk5FQ1RJT04gUkVMRUFTRURcIilcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5wb29sPy5vbignZW5xdWV1ZScsICgpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBFTlFVRVVFRFwiKVxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgY29ubmVjdGlvblxuICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDaGVjayBteXNxbCBjb25uZWN0aW9uXCIpXG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLHJlamVjdCk9PntcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgdGhpcy5wb29sPy5nZXRDb25uZWN0aW9uKClcbiAgICAgICAgICAgICAgICBpZihjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3JlcyxmXSA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRUxFQ1QgMVwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29ubj8ucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0ZWQgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfWVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgb25BcHBsaWNhdGlvblJlYWR5KCkge31cblxuXG4gICAgc3RhdGljIGZpZWxkc1RvT2JqZWN0KGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsaWdub3JlU3lzdGVtUGFyYW1ldGVycz86Ym9vbGVhbik6TXlzcWxRdWVyeUZpZWxkT2JqZWN0e1xuICAgICAgICBpZighQXJyYXkuaXNBcnJheShmaWVsZHMpKVxuICAgICAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICAgICAgY29uc3Qgb2JqOk15c3FsUXVlcnlGaWVsZE9iamVjdD17fTtcbiAgICAgICAgZm9yKGxldCBpIG9mIGZpZWxkcyl7XG4gICAgICAgICAgICBpZighaS5uYW1lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYodHlwZW9mIGkudmFsdWUhPT0gXCJvYmplY3RcIilcbiAgICAgICAgICAgICAgICBvYmpbaS5uYW1lXT1pLnZhbHVlO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZighaWdub3JlU3lzdGVtUGFyYW1ldGVycyl7XG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOmkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06aS5zeXN0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJbkluc2VydDppLmlnbm9yZUluSW5zZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6aS5pZ25vcmVJblVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUluUmVwbGFjZTppLnVzZUluUmVwbGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6aS5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICBvYmpbaS5uYW1lXT1pLnZhbHVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHN0YXRpYyBvYmplY3RUb0ZpZWxkcyhvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0fE15c3FsUXVlcnlGaWVsZFtdKTpNeXNxbFF1ZXJ5RmllbGRbXXtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShvYmopKVxuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgY29uc3QgZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdPVtdO1xuICAgICAgICBmb3IobGV0IGkgaW4gb2JqKXtcbiAgICAgICAgICAgIGlmKG9ialtpXSAmJiB0eXBlb2Ygb2JqW2ldID09PSBcIm9iamVjdFwiKXtcbiAgICAgICAgICAgICAgICBsZXQgbW8gPSBvYmpbaV0gYXMgUmVjb3JkPHN0cmluZyxzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgICAgIGlmKCFtbyl7XG4gICAgICAgICAgICAgICAgICAgIG1vPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6aSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOm51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW06ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJbkluc2VydDpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluVXBkYXRlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmllbGRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOm1vLm5hbWUgYXMgc3RyaW5nID8/IGksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOm1vLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW06bW8uc3lzdGVtIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0Om1vLmlnbm9yZUluSW5zZXJ0IGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUluVXBkYXRlOm1vLmlnbm9yZUluVXBkYXRlIGFzIGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgIHVzZUluUmVwbGFjZTptby51c2VJblJlcGxhY2UgYXMgYm9vbGVhblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6aSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6b2JqW2ldIGFzIHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJlcGFyZVF1ZXJ5KHF1ZXJ5OnN0cmluZyxmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW118TXlzcWxRdWVyeUZpZWxkT2JqZWN0KTpzdHJpbmd7XG4gICAgICAgIFxuICAgICAgICBpZighQXJyYXkuaXNBcnJheShmaWVsZHMpKVxuICAgICAgICAgICAgZmllbGRzID0gTXlzcWxTZXJ2aWNlLm9iamVjdFRvRmllbGRzKGZpZWxkcyk7XG5cbiAgICAgICAgZm9yKGxldCBpIG9mIGZpZWxkcyl7XG4gICAgICAgICAgICBjb25zdCB2YWwgPXRoaXMucHJlcGFyZVF1ZXJ5RmllbGRWYWx1ZShpLnZhbHVlLGkuc3lzdGVtKTtcbiAgICAgICAgICAgIGkuX3BhcnNlZFZhbHVlPXZhbDtcbiAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LnJlcGxhY2VBbGwoXCJAXCIraS5uYW1lLHZhbCtcIlwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG1wID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYodG1wLmluZGV4T2YoXCJzZWxlY3RcIik9PT0wICYmIHRtcC5pbmRleE9mKFwibGltaXRcIik9PT0tMSlcbiAgICAgICAgICAgIHF1ZXJ5Kz1cIiBMSU1JVCAxMDBcIlxuICAgICAgICBcbiAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQE5PTElNSVRcIixcIlwiKVxuXG5cbiAgICAgICAgaWYocXVlcnkuaW5kZXhPZihcIkBmaWVsZHNcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGROYW1lcz1bXVxuICAgICAgICAgICAgbGV0IGluc2VydEZpZWxkVmFsdWVzPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgICAgICBpZihpLmlnbm9yZUluSW5zZXJ0KVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGluc2VydEZpZWxkTmFtZXMucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AnKVxuICAgICAgICAgICAgICAgIGluc2VydEZpZWxkVmFsdWVzLnB1c2goaS5fcGFyc2VkVmFsdWUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5XG4gICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoJ0BmaWVsZHMnLGluc2VydEZpZWxkTmFtZXMuam9pbihcIixcIikpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoJ0B2YWx1ZXMnLGluc2VydEZpZWxkVmFsdWVzLmpvaW4oXCIsXCIpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYocXVlcnkuaW5kZXhPZihcIkBpbnNlcnRcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25pbnNlcnROYW1lcz1bXVxuICAgICAgICAgICAgbGV0IG9uaW5zZXJ0VmFsdWVzPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgICAgICBpZihpLmlnbm9yZUluSW5zZXJ0KVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBvbmluc2VydE5hbWVzLnB1c2goaS5uYW1lKVxuICAgICAgICAgICAgICAgIG9uaW5zZXJ0VmFsdWVzLnB1c2goaS5fcGFyc2VkVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJAaW5zZXJ0XCIsYCgke29uaW5zZXJ0TmFtZXMuam9pbihcIixcIil9KSBWQUxVRVMgKCR7b25pbnNlcnRWYWx1ZXMuam9pbihcIixcIil9KWApXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQG9udXBkYXRlXCIpIT09LTEpe1xuICAgICAgICAgICAgbGV0IG9uVXBkYXRlPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgICAgICBpZihpLmlnbm9yZUluVXBkYXRlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBvblVwZGF0ZS5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCA9ICcraS5fcGFyc2VkVmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJAb251cGRhdGVcIixvblVwZGF0ZS5qb2luKFwiICwgXCIpKVxuICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgaWYocXVlcnkuaW5kZXhPZignQG9uZHVwbGljYXRlJykhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25EdXBsaWNhdGU9W107XG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgICAgICBpZighaS51c2VJblJlcGxhY2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uRHVwbGljYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbmR1cGxpY2F0ZVwiLG9uRHVwbGljYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICByZXR1cm4gIHF1ZXJ5O1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnlGaWVsZFZhbHVlKHZhbHVlOnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZCxzeXN0ZW0/OmJvb2xlYW4pOnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHtcbiAgICAgICAgaWYoIXN5c3RlbSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpe1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZT92YWx1ZS5yZXBsYWNlQWxsKCdcIicsJ1xcXFxcIicpOm51bGxcbiAgICAgICAgICAgIGlmKHZhbHVlIT09bnVsbClcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICdcIicrdmFsdWUrJ1wiJ1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHZhbHVlID0gXCJOVUxMXCJcbiAgICAgICAgfVxuICAgICAgICBpZih2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIFwiTlVMTFwiXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cblxuICAgIGFzeW5jIGV4ZWN1dGUocXVlcnk6c3RyaW5nLHJvbGxiYWNrUXVlcnk6c3RyaW5nfG51bGwsdHJhbnNhY3Rpb25JRDpudW1iZXIsdGhyb3dhYmxlOmJvb2xlYW4sY2FsY3VsYXRlQ291bnQ6Ym9vbGVhbik6UHJvbWlzZTxNeXNxbFJlc3VsdD57XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZTooZGF0YTpNeXNxbFJlc3VsdCk9PnZvaWQscmVqZWN0KT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgcG9vbFxuICAgICAgICAgICAgaWYoIXRoaXMucG9vbCl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc31cIixcIk5vIHBvb2xcIilcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19QT09MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJNeXNxbCBwb29sIG5vdCBjcmVhdGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGxldCBjb25uOm15c3FsLlBvb2xDb25uZWN0aW9ufG51bGw9bnVsbFxuICAgICAgICAgICAgICAgIGlmKHRyYW5zYWN0aW9uSUQgJiYgdHJhbnNhY3Rpb25JRD4wKXtcbiAgICAgICAgICAgICAgICAgICAgY29ubiA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRyYW5zYWN0aW9uSUQpPy5jb25uID8/IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcnkgb24gdHJhbnNhY3Rpb246IFwiLGNvbm4/LnRocmVhZElkKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gYXdhaXQgdGhpcy5wb29sLmdldENvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcnlcIixjb25uPy50aHJlYWRJZClcblxuICAgICAgICAgICAgICAgIC8vIGlmIGNvbm5lY3Rpb24gbm90IGNyZWF0ZWRcbiAgICAgICAgICAgICAgICBpZighY29ubil7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixgTm8gY29ubmVjdGlvbiBjcmVhdGVkIWApXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJNeXNxbCBwb29sIGNhbnQgZ2V0IGNvbm5lY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgcXVlcnlcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgICAgICBpZihpLmNvbm49PT1jb25uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJZb3VyIGNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUXVlcnkoY29ubixxdWVyeSxyZXNvbHZlLHJvbGxiYWNrUXVlcnksdGhyb3dhYmxlP3RydWU6ZmFsc2UsY2FsY3VsYXRlQ291bnQpO1xuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc31cIixlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWNyZWF0ZSBwb29sLCBjb25uZWN0aW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaWYoYCR7ZX1gLmluZGV4T2YoJ0VDT05OUkVGVVNFRCcpIT09LTEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOihlICYmIHR5cGVvZiBlID09PSBcIm9iamVjdFwiICYmIFwibWVzc2FnZVwiIGluIGUgYXMgYW55KT8oZSBhcyBhbnkpLm1lc3NhZ2U6XCJNeXNxbCBjYW50IGdldCBjb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbmRRdWVyeShjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyxyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyb2xsYmFjazpzdHJpbmd8bnVsbCx0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKXtcbiAgICAgICAgXG5cblxuICAgICAgICBjb25uLm9uKFwiZXJyb3JcIixhc3luYyBlcnI9PntcblxuICAgICAgICAgICAgbGV0IHJvbGxiYWNrRXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYocm9sbGJhY2spXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcj0oYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4scm9sbGJhY2spKS5lcnJcbiAgICAgICBcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5jb25uLm9uKCdlcnJvcicpXCIsZXJyKVxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uIG9uIHN1Y2Nlc3NcbiAgICAgICAgICAgIHRyeXtcblxuICAgICAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgY29ubi5kZXN0cm95KClcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG4gICAgIFxuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIkNPTk5fRVJSXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDMsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIkVycm9yOiBcIitlcnIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuXG5cbiAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLHF1ZXJ5KVxuXG4gICAgICAgIC8vIHNlbmQgcXVlcnlcbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixxdWVyeSk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVycm9yXG4gICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVycil7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHJvbGxiYWNrXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvcj1udWxsO1xuICAgICAgICAgICAgaWYocm9sbGJhY2spXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcj0oYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4scm9sbGJhY2spKS5lcnJcblxuICAgICAgICAgICAgLy8gY2xvc2UgY29ubmVjdGlvblxuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgbGV0IGRvY2xvc2U9ZmFsc2VcbiAgICAgICAgICAgICAgICBpZihxdWVyeVJlc3VsdC5lcnIgJiYgcXVlcnlSZXN1bHQuZXJyLm1lc3NhZ2Upe1xuICAgICAgICAgICAgICAgICAgICBpZihxdWVyeVJlc3VsdC5lcnIubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJjYW4ndCBhZGQgbmV3IGNvbW1hbmQgd2hlbiBjb25uZWN0aW9uIGlzIGluIGNsb3NlZCBzdGF0ZVwiKSE9PS0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY2xvc2U9dHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKGRvY2xvc2Upe1xuICAgICAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQuZXJyLmNvZGU9XCJDT05OX0VSUlwiO1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuXG5cblxuXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgICBsZXQgZHVwPWZhbHNlO1xuICAgICAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xKVxuICAgICAgICAgICAgICAgIGR1cD10cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+c2VuZCBxdWVyeS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVFcnJvcjpkdXAsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmV0dXJuOyAvLyBRVUVSWSBFUlJPUiwgUkVUVVJOXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBpZihjYWxjdWxhdGVDb3VudCAmJiBxdWVyeS5pbmRleE9mKFwiU0VMRUNUXCIpPT09MCl7XG4gICAgICAgICAgICBsZXQgY291bnRRdWVyeSA9IHRoaXMucHJlcGFyZUNvdW50UXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdC5lcnIpXG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPnNlbmQgcXVlcnktPmNvdW50LT5xdWVyeSBlcnJvclwiLGNvdW50UXVlcnlSZXN1bHQuZXJyKTtcbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdC5yZXN1bHRzICYmIGNvdW50UXVlcnlSZXN1bHQucmVzdWx0cy5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnRRdWVyeVJlc3VsdC5yZXN1bHRzWzBdLmNvdW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY2xvc2UgY29ubiBvbiBzdWNjZXNzXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgfWNhdGNoKGUpe31cblxuICAgICAgICAvLyBoYW5kbGUgc3VjY2Vzc1xuICAgICAgICBjb25zdCBlcnIgPSBudWxsO1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGVycm9yOmVycixcbiAgICAgICAgICAgIGRhdGE6cXVlcnlSZXN1bHQucmVzdWx0cyxcbiAgICAgICAgICAgIGNvdW50OmNvdW50XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvLyBBc3luYyBxdWVyeSB3cmFwcGVyIHRvIGNvbm4ucXVlcnlcbiAgICBhc3luYyBxdWVyeUFzeW5jKGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb24scXVlcnk6c3RyaW5nKTpQcm9taXNlPHtlcnI6TXlzcWxFcnJvcnxudWxsLHJlc3VsdHM/OmFueX0+e1xuXG4gICAgICAgIGxldCByZXN1bHQ9bnVsbDtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgY29ubi5xdWVyeShxdWVyeSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIHJldHVybiB7ZXJyOnRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnI6bnVsbCxcbiAgICAgICAgICAgIHJlc3VsdHM6cmVzdWx0WzBdLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlTXlzcWxRdWVyeUVycm9yKGVycjphbnksdGhyb3dhYmxlPzpib29sZWFuKTpNeXNxbEVycm9ye1xuICAgICAgICBpZihlcnIgJiYgIHR5cGVvZiBlcnI9PT1cIm9iamVjdFwiICYmIFwiY29kZVwiIGluIGVyciAmJiBcImVycm5vXCIgaW4gZXJyICYmIFwic3FsXCIgaW4gZXJyICYmIFwibmFtZVwiIGluIGVyciAmJiBcIm1lc3NhZ2VcIiBpbiBlcnIpe1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogZXJyLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOiBlcnIuZXJybm8sXG4gICAgICAgICAgICAgICAgICAgIHNxbDogZXJyLnNxbCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTplcnIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTplcnIubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcIlFVRVJZX0VSUlwiLFxuICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDIsXG4gICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgc3FsOiBcIm5vIHF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgbmFtZTpcIlFVRVJZX0VSUlwiLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJFcnJvcjogXCIrKGVycik/ZXJyOlwiXCIsXG4gICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuY29uc3Qgc2VjcmV0X2tleT1cIkFLTFdrYWp3JV4mZGd3cWh3Izk4NDUzaTIzYmZrMjNybjJrbmtuZ2xyZ2plaXRcIlxuY29uc3Qgc2VjcmV0X2l2PVwicnRoYWRyZmsyM3JuMmtuIypGTktBQGd0NDRkZjN0c2xyZ2ojIyFpdFwiXG5cbi8vIEdlbmVyYXRlIHNlY3JldCBoYXNoIHdpdGggY3J5cHRvIHRvIHVzZSBmb3IgZW5jcnlwdGlvblxuY29uc3Qga2V5ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9rZXkpLmRpZ2VzdCgnaGV4Jykuc3Vic3RyaW5nKDAsIDMyKVxuY29uc3QgaXYgPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VjcmV0X2l2KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAxNilcblxuY29uc3QgZGVjcnlwdCA9KGVuY3J5cHRlZDpzdHJpbmcpOnN0cmluZ3xudWxsPT57XG4gIHRyeXtcbiAgICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5mcm9tKGVuY3J5cHRlZCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3JlYXRlRGVjaXBoZXJpdignYWVzLTI1Ni1jYmMnLCBrZXksIGl2KTtcbiAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoZW5jcnlwdGVkLCAnYmluYXJ5JywgJ3V0ZjgnKTtcbiAgICAgIGRlY3J5cHRlZCArPSBkZWNpcGhlci5maW5hbCgndXRmOCcpO1xuICAgICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuY29uc3QgZW5jcnlwdCA9ICh0eHQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBsZXQgZW5jaXBoZXIgPSBjcmVhdGVDaXBoZXJpdignYWVzLTI1Ni1jYmMnLCBrZXksIGl2KSxcbiAgICAgIGVuY3J5cHRlZCA9IGVuY2lwaGVyLnVwZGF0ZSh0eHQsICd1dGY4JywgJ2JpbmFyeScpO1xuICAgICAgZW5jcnlwdGVkICs9IGVuY2lwaGVyLmZpbmFsKCdiaW5hcnknKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE15c3FsU2VydmljZTsiXX0=
805
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEJoSSxNQUFNLFlBQVksR0FBQyxDQUFDLENBQUssRUFBaUIsRUFBRTtJQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUcsU0FBUyxDQUFDO0FBQ3pILENBQUMsQ0FBQTtBQUZZLFFBQUEsWUFBWSxnQkFFeEI7QUFrREQsTUFBYSxZQUFhLFNBQVEseUJBQVc7SUFFekMsbUJBQW1CLEdBQUMsSUFBSSxHQUFDLENBQUMsQ0FBQztJQUMzQixZQUFZLEdBQUMsS0FBSyxDQUFDO0lBQ25CLElBQUksR0FBaUIsSUFBSSxDQUFDO0lBQzFCLE9BQU8sQ0FBcUI7SUFDNUIsY0FBYyxHQUFDLEtBQUssQ0FBQztJQUNyQixTQUFTLENBQUk7SUFFYixLQUFLLEdBQUMsS0FBSyxDQUFDO0lBRVosT0FBTyxHQUFDLEVBQUUsQ0FBQztJQUNYLE1BQU0sQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLENBQUM7SUFDM0IsWUFBWSxHQUFnQixFQUFFLENBQUE7SUFFOUIsc0JBQXNCLEdBQUcsSUFBSSxHQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7SUFDbkMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLFlBQVksR0FBRyxJQUFJLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztJQUV6QixvQkFBb0IsR0FBcUIsSUFBSSxDQUFDO0lBQzlDLHdCQUF3QixHQUFhLElBQUksQ0FBQztJQUMxQyx3QkFBd0IsR0FBUSxDQUFDLENBQUM7SUFFbEMsWUFBWSxPQUEyQjtRQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUl2QixJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBO1FBQ3BGLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFDcEYsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQTtRQUNoRyxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBRWhHLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0I7WUFDbEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7UUFFdEUsV0FBVyxDQUFDLEdBQUUsRUFBRTtZQUVaLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7WUFDN0IsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUMzQixJQUFHLEdBQUcsR0FBQyxDQUFDLENBQUMsU0FBUyxHQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBQztvQkFDM0MsSUFBQSxxQkFBUSxFQUFDLCtDQUErQyxDQUFDLENBQUE7b0JBQ3pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2lCQUN4QjthQUNKO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUUzRSxJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFDLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLEtBQUssR0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRzNELElBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDO2dCQUN0RCxJQUFHLENBQUMsSUFBSSxDQUFDLElBQUk7b0JBQ1QsT0FBTztnQkFHWCxLQUFJLElBQUksQ0FBQyxHQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUMsQ0FBQyxFQUFFLEVBQUM7b0JBQzVDLHVCQUFlLENBQUMsT0FBTyxDQUFDLEVBQUMsS0FBSyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFBO29CQUM5RCxJQUFHLElBQUksQ0FBQyxLQUFLO3dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQTtpQkFDM0Q7YUFFSjtRQUdMLENBQUMsRUFBQyxJQUFJLEdBQUMsRUFBRSxDQUFDLENBQUE7UUFFVixXQUFXLENBQUMsR0FBRSxFQUFFO1lBQ1osSUFBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLE9BQU87WUFHWCxJQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBQyxJQUFJLENBQUMsd0JBQXdCLEdBQUMsSUFBSSxHQUFDLEVBQUUsR0FBQyxFQUFFLEVBQUM7Z0JBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQzthQUNsQztRQUVMLENBQUMsRUFBQyxJQUFJLEdBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFBO1FBRVosSUFBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUM7WUFDaEMsSUFBRztnQkFDQSxJQUFJLENBQUMsWUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBQztvQkFDaEQsWUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztpQkFDbEQ7YUFDSjtZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUNMLE9BQU8sQ0FBQyx3QkFBd0IsR0FBQyxTQUFTLENBQUM7Z0JBQzNDLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywwQ0FBMEMsQ0FBQyxDQUFBO2FBQzNFO1NBQ0o7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsS0FBNkIsSUFBMEIsT0FBTyxNQUFNLHVCQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUUvSCxLQUFLLENBQUMsSUFBSTtRQUNOLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUdiLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFHSCxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBQyxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxXQUFXLEdBQVcsS0FBSyxDQUFDO1FBRWhDLE9BQU0sQ0FBQyxXQUFXLEVBQUM7WUFDZixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUNwRCxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDeEMsSUFBRyxDQUFDLFdBQVcsRUFBQztnQkFDWixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsa0RBQWtELENBQUMsQ0FBQTtnQkFDaEYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxFQUFFLENBQUEsVUFBVSxDQUFDLE9BQU8sRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2FBQ3pEO1NBQ0o7UUFFRCx1QkFBZSxDQUFDLFFBQVEsR0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEVBQUU7WUFDbEMsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNuQixJQUFJLEdBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixNQUFNLFFBQVEsR0FBQyxFQUFFLENBQUE7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUksRUFBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssRUFBQyxDQUFDLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDbEk7WUFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBRWhELE1BQU0sTUFBTSxHQUFJLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztnQkFDaEIsSUFBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFHLFVBQVUsRUFBQztvQkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO29CQUMvRCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQkFDN0I7Z0JBRUQsSUFBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFbEIsSUFBRyxDQUFDLENBQUMsQ0FBQyxLQUFLO29CQUNQLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDOUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUE7UUFFRCx3QkFBZ0IsQ0FBQyxRQUFRLEdBQUMsS0FBSyxJQUFHLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQzlDLElBQUcsQ0FBQyxJQUFJO2dCQUNKLE9BQU8sRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsT0FBTyxFQUFDLHdCQUF3QixFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUMsQ0FBQTtZQUcxSCxLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUM7Z0JBQzNCLElBQUcsQ0FBQyxDQUFDLElBQUksS0FBRyxJQUFJLEVBQUM7b0JBQ2IsSUFBQSxvQkFBTyxFQUFDLG1DQUFtQyxDQUFDLENBQUE7b0JBQzVDLE9BQU8sRUFBQyxJQUFJLEVBQUMsYUFBYSxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLGFBQWEsRUFBQyxPQUFPLEVBQUMsOEJBQThCLEVBQUMsQ0FBQTtpQkFDdkk7YUFDSjtZQUVELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdDLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBQyxHQUFHLENBQUMsQ0FBQTtZQUVqRCxJQUFHO2dCQUdDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUV0QyxJQUFHLElBQUksQ0FBQyxLQUFLO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTthQUV6QztZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxTQUFTLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQTtnQkFDcEgsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDbkIsRUFBRSxFQUFDLEdBQUc7Z0JBQ04sU0FBUyxFQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLElBQUksRUFBQyxJQUFJO2dCQUNULE9BQU8sRUFBQyxFQUFFO2FBQ2IsQ0FBQyxDQUFBO1lBRUYsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUV4RCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQTtRQUVELHdCQUFnQixDQUFDLFFBQVEsR0FBQyxLQUFLLEVBQUMsSUFBSSxFQUFBLEVBQUU7WUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFHLENBQUMsR0FBRztnQkFDSCxPQUFPLEVBQUMsR0FBRyxFQUFFO3dCQUNULElBQUksRUFBQyxRQUFRO3dCQUNiLEtBQUssRUFBQyxNQUFNO3dCQUNaLEtBQUssRUFBQyxJQUFJO3dCQUNWLEdBQUcsRUFBQyxFQUFFO3dCQUNOLElBQUksRUFBQyxRQUFRO3dCQUNiLE9BQU8sRUFBQyx1QkFBdUI7cUJBQ2xDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxhQUFhLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMsQ0FBQTtZQUUzQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUUsSUFBSSxHQUFHLEdBQUMsSUFBSSxDQUFDO1lBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7WUFFeEQsSUFBRztnQkFDQyxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBQztZQUVoRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFHLEdBQUc7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUM5QjtnQkFDQSxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUcsQ0FBQyxFQUFDO29CQUN4RCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9DLElBQUc7d0JBQ0MsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUMxRCxJQUFHLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7NEJBQzdDLEtBQUssR0FBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQVMsQ0FBQyxLQUFLLENBQUM7eUJBQzlDO3FCQUNKO29CQUFBLE9BQU0sQ0FBQyxFQUFDO3dCQUNMLElBQUEscUJBQVEsRUFBQyx5Q0FBeUMsRUFBQyxDQUFDLENBQUMsQ0FBQztxQkFDekQ7aUJBQ0o7YUFDSjtZQUVELElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFBLFdBQVcsQ0FBQyxDQUFBO1lBRXRFLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFDLEtBQUssRUFBQyxNQUFNLEVBQUMsR0FBRyxDQUFBLENBQUMsQ0FBQSxHQUFHLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSxXQUFXLEVBQUMsQ0FBQyxDQUFBO1lBRWhFLE9BQU87Z0JBQ0gsSUFBSSxFQUFDLE9BQU8sQ0FBQSxDQUFDLENBQUEsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJO2dCQUM1QixLQUFLLEVBQUMsR0FBRztnQkFDVCxLQUFLLEVBQUMsS0FBSzthQUNkLENBQUM7UUFDTixDQUFDLENBQUE7UUFFRCwyQkFBbUIsQ0FBQyxRQUFRLEdBQUMsS0FBSyxFQUFFLEdBQVUsRUFBQyxFQUFFO1lBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsS0FBRyxHQUFHLENBQUMsQ0FBQztZQUNsRCxJQUFHLENBQUMsR0FBRyxFQUFDO2dCQUNKLE9BQU87b0JBQ0gsSUFBSSxFQUFDLFFBQVE7b0JBQ2IsS0FBSyxFQUFDLE1BQU07b0JBQ1osS0FBSyxFQUFDLElBQUk7b0JBQ1YsU0FBUyxFQUFDLEtBQUs7b0JBQ2YsR0FBRyxFQUFDLEVBQUU7b0JBQ04sSUFBSSxFQUFDLFFBQVE7b0JBQ2IsT0FBTyxFQUFDLHVCQUF1QjtpQkFDbEMsQ0FBQTthQUNKO1lBRUQsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFBO1FBRUQseUJBQWlCLENBQUMsUUFBUSxHQUFDLEtBQUssRUFBRSxHQUFVLEVBQUMsRUFBRTtZQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEQsSUFBRyxDQUFDLEdBQUcsRUFBQztnQkFDSixPQUFPO29CQUNILElBQUksRUFBQyxRQUFRO29CQUNiLEtBQUssRUFBQyxNQUFNO29CQUNaLEtBQUssRUFBQyxJQUFJO29CQUNWLEdBQUcsRUFBQyxFQUFFO29CQUNOLElBQUksRUFBQyxRQUFRO29CQUNiLE9BQU8sRUFBQyx1QkFBdUI7b0JBQy9CLFNBQVMsRUFBQyxLQUFLO2lCQUNsQixDQUFBO2FBQ0o7WUFHRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRTVELElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFFLENBQUE7WUFFdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBZ0I7UUFFekIsSUFBRztZQUNDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUV4QixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN0QjtRQUFBLE9BQU0sQ0FBQyxFQUFDO1lBQ0wsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUVoQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQWdCLEVBQUMsWUFBcUI7UUFDNUQsSUFBSSxHQUFHLEdBQUMsSUFBSSxDQUFDO1FBQ2IsSUFBRztZQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNqRCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRXhCLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUcsQ0FBQyxZQUFZO2dCQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQSxDQUFDLENBQUMsRUFBRSxLQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtTQUN6RDtRQUFBLE9BQU0sQ0FBQyxFQUFDO1lBQ0wsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDRCQUE0QixFQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN0RSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBQyxVQUFVLENBQUMsQ0FBQTtRQUM5QyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQTtRQUN0QyxLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVoQyxJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7WUFDVCxJQUFHO2dCQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUFDO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQy9CLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyx5QkFBeUIsQ0FBQyxDQUFBO2FBQzFEO1NBQ0o7UUFFRCxJQUFHLElBQUksQ0FBQyxvQkFBb0I7WUFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsR0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVk7UUFDMUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLElBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBRyxDQUFDLENBQUM7WUFDL0IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUdyRSxJQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUcsQ0FBQyxDQUFDO1lBQy9CLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFcEUsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRzlELFVBQVUsR0FBRyw2QkFBNkIsR0FBQyxVQUFVLENBQUE7UUFDckQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxHQUFnQixFQUFDLE9BQWM7UUFFM0QsSUFBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFDO1lBQzdFLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyw4SEFBOEgsQ0FBQyxDQUFBO1lBQzVKLE9BQU87U0FDVjtRQUdELElBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUc1RSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBQyxPQUFPLEdBQUMsT0FBTyxDQUFDLENBQUM7WUFDakYsSUFBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUM7Z0JBQ3pCLElBQUcsSUFBSSxDQUFDLHdCQUF3QixLQUFHLElBQUksRUFBQztvQkFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUMsSUFBSSxDQUFDO2lCQUNsQzthQUNKO1lBR0QsSUFBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUM7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFDLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyx3QkFBd0IsR0FBQyxJQUFJLENBQUM7YUFDdEM7WUFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsT0FBTyxDQUFDLENBQUE7WUFFM0UsSUFBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFDLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7WUFFdkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsT0FBTyxFQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBQyxDQUFDLEdBQUMsV0FBVyxFQUFDLEdBQUcsQ0FBQSxFQUFFO2dCQUNuSCxJQUFHLEdBQUc7b0JBQ0YsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDZDQUE2QyxDQUFDLENBQUE7O29CQUUzRSxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsZ0NBQWdDLENBQUMsQ0FBQTtZQUN0RSxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FFOUM7UUFHRCxJQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFHRCxLQUFLLENBQUMsWUFBWTtRQUVkLElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQyxnQ0FBZ0MsR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBQyxVQUFVLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3RyxJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsSUFBRztnQkFBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7YUFBQztZQUFBLE9BQU0sQ0FBQyxFQUFDO2dCQUMvQixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMseUJBQXlCLENBQUMsQ0FBQTthQUMxRDtZQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO1FBYUQsSUFBRztZQUNDLElBQUksQ0FBQyxJQUFJLEdBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtnQkFDL0IsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDdkIsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZTtnQkFDN0MsVUFBVSxFQUFFLEVBQUU7Z0JBQ2Qsa0JBQWtCLEVBQUUsSUFBSTtnQkFFeEIsZUFBZSxFQUFDLElBQUk7Z0JBQ3BCLHFCQUFxQixFQUFDLENBQUMsR0FBQyxJQUFJO2dCQUU1QixXQUFXLEVBQUMsSUFBSSxHQUFDLEVBQUUsR0FBQyxDQUFDO2FBQ3pCLENBQUMsQ0FBQztTQUNOO1FBQUEsT0FBTSxDQUFDLEVBQUM7WUFDTCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMseUJBQXlCLENBQUMsQ0FBQTtZQUN2RCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQ1QsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNwQyxJQUFHLElBQUksQ0FBQyxLQUFLO2dCQUNULElBQUEsb0JBQU8sRUFBQyxvQkFBb0IsRUFBQywyQkFBMkIsQ0FBQyxDQUFBO1FBQ2pFLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDcEMsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUNqRSxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDMUIsSUFBRyxJQUFJLENBQUMsS0FBSztnQkFDVCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUNqRSxDQUFDLENBQUMsQ0FBQTtRQUdGLElBQUcsSUFBSSxDQUFDLEtBQUs7WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFekMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ3ZDLElBQUc7Z0JBQ0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFBO2dCQUM3QyxJQUFHLElBQUksRUFBQztvQkFDSixNQUFNLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29CQUNoQixJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMscUJBQXFCLENBQUMsQ0FBQTtvQkFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUVoQjs7b0JBQ0csT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3JCO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ0wsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLHlCQUF5QixDQUFDLENBQUE7Z0JBQ3ZELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUNqQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBRVAsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsS0FBSSxDQUFDO0lBRzdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBOEMsRUFBQyxzQkFBK0I7UUFDaEcsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3JCLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLE1BQU0sR0FBRyxHQUF1QixFQUFFLENBQUM7UUFDbkMsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7WUFDaEIsSUFBRyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNOLFNBQVM7WUFDYixJQUFHLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSSxRQUFRO2dCQUN6QixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQ3BCO2dCQUNBLElBQUcsQ0FBQyxzQkFBc0IsRUFBQztvQkFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBQzt3QkFDUixLQUFLLEVBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ2IsTUFBTSxFQUFDLENBQUMsQ0FBQyxNQUFNO3dCQUNmLGNBQWMsRUFBQyxDQUFDLENBQUMsY0FBYzt3QkFDL0IsY0FBYyxFQUFDLENBQUMsQ0FBQyxjQUFjO3dCQUMvQixZQUFZLEVBQUMsQ0FBQyxDQUFDLFlBQVk7d0JBQzNCLElBQUksRUFBQyxDQUFDLENBQUMsSUFBSTtxQkFDZCxDQUFBO2lCQUNKOztvQkFDRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7YUFDMUI7U0FFSjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBMkM7UUFDN0QsSUFBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7UUFDbEMsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUM7WUFDYixJQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUM7Z0JBQ3BDLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQXdELENBQUM7Z0JBQ3ZFLElBQUcsQ0FBQyxFQUFFLEVBQUM7b0JBQ0gsRUFBRSxHQUFDO3dCQUNDLElBQUksRUFBQyxDQUFDO3dCQUNOLEtBQUssRUFBQyxJQUFJO3dCQUNWLE1BQU0sRUFBQyxLQUFLO3dCQUNaLGNBQWMsRUFBQyxLQUFLO3dCQUNwQixjQUFjLEVBQUMsS0FBSzt3QkFDcEIsWUFBWSxFQUFDLEtBQUs7cUJBQ3JCLENBQUE7aUJBQ0o7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDUixJQUFJLEVBQUMsRUFBRSxDQUFDLElBQWMsSUFBSSxDQUFDO29CQUMzQixLQUFLLEVBQUMsRUFBRSxDQUFDLEtBQUs7b0JBQ2QsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFpQjtvQkFDM0IsY0FBYyxFQUFDLEVBQUUsQ0FBQyxjQUF5QjtvQkFDM0MsY0FBYyxFQUFDLEVBQUUsQ0FBQyxjQUF5QjtvQkFDM0MsWUFBWSxFQUFDLEVBQUUsQ0FBQyxZQUF1QjtpQkFDMUMsQ0FBQyxDQUFBO2FBQ0w7aUJBQUk7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDUixJQUFJLEVBQUMsQ0FBQztvQkFDTixLQUFLLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBeUM7aUJBQ3ZELENBQUMsQ0FBQTthQUNMO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFZLEVBQUMsTUFBOEM7UUFFM0UsSUFBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3JCLE1BQU0sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsWUFBWSxHQUFDLEdBQUcsQ0FBQztZQUNuQixLQUFLLEdBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxHQUFHLEdBQUMsRUFBRSxDQUFDLENBQUE7U0FDNUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQztZQUNyRCxLQUFLLElBQUUsWUFBWSxDQUFBO1FBRXZCLEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQTtRQUd2QyxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUM7WUFDN0IsSUFBSSxnQkFBZ0IsR0FBQyxFQUFFLENBQUE7WUFDdkIsSUFBSSxpQkFBaUIsR0FBQyxFQUFFLENBQUE7WUFDeEIsS0FBSSxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUM7Z0JBQ2hCLElBQUcsQ0FBQyxDQUFDLGNBQWM7b0JBQ2YsU0FBUztnQkFFYixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLEdBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2hHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDekM7WUFFRCxLQUFLLEdBQUMsS0FBSztpQkFDTixVQUFVLENBQUMsU0FBUyxFQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDaEQsVUFBVSxDQUFDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN6RDtRQUVELElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQztZQUM3QixJQUFJLGFBQWEsR0FBQyxFQUFFLENBQUE7WUFDcEIsSUFBSSxjQUFjLEdBQUMsRUFBRSxDQUFBO1lBQ3JCLEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO2dCQUNoQixJQUFHLENBQUMsQ0FBQyxjQUFjO29CQUNmLFNBQVM7Z0JBQ2IsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFCLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQ3RDO1lBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUMxRztRQUVELElBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBRyxDQUFDLENBQUMsRUFBQztZQUMvQixJQUFJLFFBQVEsR0FBQyxFQUFFLENBQUE7WUFDZixLQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBQztnQkFDaEIsSUFBRyxDQUFDLENBQUMsY0FBYztvQkFDZixTQUFTO2dCQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLEdBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUM3RztZQUNELEtBQUssR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7U0FFN0Q7UUFFRCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUM7WUFDbEMsSUFBSSxXQUFXLEdBQUMsRUFBRSxDQUFDO1lBQ25CLEtBQUksSUFBSSxDQUFDLElBQUksTUFBTSxFQUFDO2dCQUNoQixJQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVk7b0JBQ2QsU0FBUztnQkFDYixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxHQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDaEg7WUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQ25FO1FBR0QsT0FBUSxLQUFLLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUEwQyxFQUFDLE1BQWU7UUFDcEYsSUFBRyxDQUFDLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUM7WUFDcEMsS0FBSyxHQUFHLEtBQUssQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQTtZQUM5QyxJQUFHLEtBQUssS0FBRyxJQUFJO2dCQUNYLEtBQUssR0FBRyxHQUFHLEdBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQTs7Z0JBRXJCLEtBQUssR0FBRyxNQUFNLENBQUE7U0FDckI7UUFDRCxJQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7WUFDcEMsT0FBTyxNQUFNLENBQUE7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUdELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBWSxFQUFDLGFBQXlCLEVBQUMsYUFBb0IsRUFBQyxTQUFpQixFQUFDLGNBQXNCO1FBQzlHLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQWdDLEVBQUMsTUFBTSxFQUFDLEVBQUU7WUFFaEUsSUFBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUM7Z0JBQ1YsSUFBQSxxQkFBUSxFQUFDLG9CQUFvQixFQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUN4QyxPQUFPLENBQUM7b0JBQ0osS0FBSyxFQUFDO3dCQUNGLElBQUksRUFBRSxTQUFTO3dCQUNmLEtBQUssRUFBRSxNQUFNO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLEdBQUcsRUFBRSxLQUFLO3dCQUNWLElBQUksRUFBQyxTQUFTO3dCQUNkLE9BQU8sRUFBQyx3QkFBd0I7d0JBQ2hDLFNBQVMsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSztxQkFDakM7b0JBQ0QsSUFBSSxFQUFDLElBQUk7b0JBQ1QsS0FBSyxFQUFDLENBQUM7aUJBQ1YsQ0FBQyxDQUFBO2dCQUNGLE9BQU87YUFDVjtZQUdELElBQUc7Z0JBQ0MsSUFBSSxJQUFJLEdBQTJCLElBQUksQ0FBQTtnQkFDdkMsSUFBRyxhQUFhLElBQUksYUFBYSxHQUFDLENBQUMsRUFBQztvQkFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUEsQ0FBQyxDQUFDLEVBQUUsS0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO29CQUNyRSxJQUFHLElBQUksQ0FBQyxLQUFLO3dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2lCQUNuRTtxQkFBSTtvQkFDRCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUMxQztnQkFFRCxJQUFHLElBQUksQ0FBQyxLQUFLO29CQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtnQkFHL0MsSUFBRyxDQUFDLElBQUksRUFBQztvQkFDTCxJQUFBLG9CQUFPLEVBQUMsb0JBQW9CLEVBQUMsd0JBQXdCLENBQUMsQ0FBQTtvQkFDdEQsT0FBTyxDQUFDO3dCQUNKLEtBQUssRUFBQzs0QkFDRixJQUFJLEVBQUUsU0FBUzs0QkFDZixLQUFLLEVBQUUsTUFBTTs0QkFDYixLQUFLLEVBQUUsSUFBSTs0QkFDWCxHQUFHLEVBQUUsS0FBSzs0QkFDVixJQUFJLEVBQUMsU0FBUzs0QkFDZCxPQUFPLEVBQUMsZ0NBQWdDOzRCQUN4QyxTQUFTLEVBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLEtBQUs7eUJBQ2pDO3dCQUNELElBQUksRUFBQyxJQUFJO3dCQUNULEtBQUssRUFBQyxDQUFDO3FCQUNWLENBQUMsQ0FBQTtvQkFDRixPQUFPO2lCQUNWO2dCQUlELEtBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBQztvQkFDM0IsSUFBRyxDQUFDLENBQUMsSUFBSSxLQUFHLElBQUksRUFBQzt3QkFDYixJQUFBLG9CQUFPLEVBQUMsbUNBQW1DLENBQUMsQ0FBQTt3QkFDNUMsTUFBTTtxQkFDVDtpQkFDSjtnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSyxFQUFDLGNBQWMsQ0FBQyxDQUFDO2FBRXhGO1lBQUEsT0FBTSxDQUFDLEVBQUM7Z0JBQ0wsSUFBQSxxQkFBUSxFQUFDLG9CQUFvQixFQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUdqQyxJQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUV4QixPQUFPLENBQUM7b0JBQ0osS0FBSyxFQUFDO3dCQUNGLElBQUksRUFBRSxTQUFTO3dCQUNmLEtBQUssRUFBRSxNQUFNO3dCQUNiLEtBQUssRUFBRSxJQUFJO3dCQUNYLFNBQVMsRUFBQyxTQUFTLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQSxDQUFDLENBQUEsS0FBSzt3QkFDOUIsR0FBRyxFQUFFLEtBQUs7d0JBQ1YsSUFBSSxFQUFDLFNBQVM7d0JBQ2QsT0FBTyxFQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxTQUFTLElBQUksQ0FBUSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQVMsQ0FBQyxPQUFPLENBQUEsQ0FBQyxDQUFBLDJCQUEyQjtxQkFDL0c7b0JBQ0QsSUFBSSxFQUFDLElBQUk7b0JBQ1QsS0FBSyxFQUFDLENBQUM7aUJBQ1YsQ0FBQyxDQUFBO2dCQUNGLE9BQU87YUFDVjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBeUIsRUFBQyxLQUFZLEVBQUMsT0FBZ0MsRUFBQyxRQUFvQixFQUFDLFNBQWlCLEVBQUMsY0FBc0I7UUFJakosSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQSxFQUFFO1lBRXZCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFHLFFBQVE7Z0JBQ1AsYUFBYSxHQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtZQUU1RCxJQUFBLHFCQUFRLEVBQUMsc0NBQXNDLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFHcEQsSUFBRztnQkFFQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO2FBRWpCO1lBQUEsT0FBTSxDQUFDLEVBQUMsR0FBRTtZQUVYLE9BQU8sQ0FBQztnQkFDSixLQUFLLEVBQUM7b0JBQ0YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEtBQUssRUFBRSxNQUFNO29CQUNiLEtBQUssRUFBRSxJQUFJO29CQUNYLEdBQUcsRUFBRSxLQUFLO29CQUNWLElBQUksRUFBQyxVQUFVO29CQUNmLE9BQU8sRUFBQyxTQUFTLEdBQUMsR0FBRztvQkFDckIsU0FBUyxFQUFDLFNBQVM7aUJBQ3RCO2dCQUNELElBQUksRUFBQyxJQUFJO2dCQUNULGFBQWEsRUFBQyxhQUFhO2dCQUMzQixLQUFLLEVBQUMsQ0FBQzthQUNWLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO1FBSUYsSUFBQSxvQkFBTyxFQUFDLG9CQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFBO1FBR25DLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFHdEQsSUFBRyxXQUFXLENBQUMsR0FBRyxFQUFDO1lBR2YsSUFBSSxhQUFhLEdBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUcsUUFBUTtnQkFDUCxhQUFhLEdBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO1lBRzVELElBQUc7Z0JBRUMsSUFBSSxPQUFPLEdBQUMsS0FBSyxDQUFBO2dCQUNqQixJQUFHLFdBQVcsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUM7b0JBQzFDLElBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLDBEQUEwRCxDQUFDLEtBQUcsQ0FBQyxDQUFDLEVBQUM7d0JBQzlHLE9BQU8sR0FBQyxJQUFJLENBQUM7cUJBQ2hCO2lCQUNKO2dCQUVELElBQUcsT0FBTyxFQUFDO29CQUNQLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDMUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUMsVUFBVSxDQUFDO2lCQUNuQztxQkFBSTtvQkFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQzdCO2FBQ0o7WUFBQSxPQUFNLENBQUMsRUFBQyxHQUFFO1lBTVgsSUFBSSxHQUFHLEdBQUMsS0FBSyxDQUFDO1lBQ2QsSUFBRyxXQUFXLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBRyxDQUFDLENBQUM7Z0JBQ3pHLEdBQUcsR0FBQyxJQUFJLENBQUM7WUFFYixJQUFBLHFCQUFRLEVBQUMsNkNBQTZDLEVBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXhFLE9BQU8sQ0FBQztnQkFDSixLQUFLLEVBQUMsRUFBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQztnQkFDOUMsSUFBSSxFQUFDLElBQUk7Z0JBQ1QsYUFBYSxFQUFDLGFBQWE7Z0JBQzNCLGdCQUFnQixFQUFDLEdBQUc7Z0JBQ3BCLEtBQUssRUFBQyxDQUFDO2FBQ1YsQ0FBQyxDQUFBO1lBRUYsT0FBTztTQUNWO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBRyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBRyxDQUFDLEVBQUM7WUFDN0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNoRSxJQUFHLGdCQUFnQixDQUFDLEdBQUc7Z0JBQ25CLElBQUEscUJBQVEsRUFBQyxvREFBb0QsRUFBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDcEY7Z0JBQ0EsSUFBRyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7b0JBQzdELEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2lCQUM3QzthQUNKO1NBQ0o7UUFJRCxJQUFHO1lBQ0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7UUFBQSxPQUFNLENBQUMsRUFBQyxHQUFFO1FBR1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQztZQUNKLEtBQUssRUFBQyxHQUFHO1lBQ1QsSUFBSSxFQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ3hCLEtBQUssRUFBQyxLQUFLO1NBQ2QsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUlELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBeUIsRUFBQyxLQUFZO1FBRW5ELElBQUksTUFBTSxHQUFDLElBQUksQ0FBQztRQUNoQixJQUFHO1lBQ0MsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQztRQUFBLE9BQU0sQ0FBQyxFQUFDO1lBQ0wsT0FBTyxFQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQztTQUM5QztRQUVELE9BQU87WUFDSCxHQUFHLEVBQUMsSUFBSTtZQUNSLE9BQU8sRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ3BCLENBQUE7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBTyxFQUFDLFNBQWtCO1FBQzVDLElBQUcsR0FBRyxJQUFLLE9BQU8sR0FBRyxLQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLEVBQUM7WUFDckgsT0FBTztnQkFDQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7Z0JBQ1osSUFBSSxFQUFDLEdBQUcsQ0FBQyxJQUFJO2dCQUNiLE9BQU8sRUFBQyxHQUFHLENBQUMsT0FBTztnQkFDbkIsU0FBUyxFQUFDLFNBQVMsQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFBLENBQUMsQ0FBQSxLQUFLO2FBRXJDLENBQUE7U0FDSjthQUFJO1lBQ0QsT0FBTztnQkFDSCxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsR0FBRyxFQUFFLFVBQVU7Z0JBQ2YsSUFBSSxFQUFDLFdBQVc7Z0JBQ2hCLE9BQU8sRUFBQyxTQUFTLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUEsR0FBRyxDQUFBLENBQUMsQ0FBQSxFQUFFO2dCQUM5QixTQUFTLEVBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQyxDQUFBLEtBQUs7YUFDakMsQ0FBQTtTQUNKO0lBQ0wsQ0FBQzs7QUExNEJMLG9DQTI0QkM7QUFHRCxNQUFNLFVBQVUsR0FBQyxnREFBZ0QsQ0FBQTtBQUNqRSxNQUFNLFNBQVMsR0FBQywwQ0FBMEMsQ0FBQTtBQUcxRCxNQUFNLEdBQUcsR0FBRyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFFaEYsTUFBTSxPQUFPLEdBQUUsQ0FBQyxTQUFnQixFQUFhLEVBQUU7SUFDN0MsSUFBRztRQUNDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBQSx5QkFBZ0IsRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RCxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUFBLE9BQU0sQ0FBQyxFQUFDO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVSxFQUFhLEVBQUU7SUFDeEMsSUFBRztRQUNDLElBQUksUUFBUSxHQUFHLElBQUEsdUJBQWMsRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUNyRCxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQzlEO0lBQUEsT0FBTSxDQUFDLEVBQUM7UUFDTCxPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsa0JBQWUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9pbXBvcnQgbXlzcWwsIHsgRmllbGRJbmZvLCBNeXNxbEVycm9yLCBQb29sLCBQb29sQ29ubmVjdGlvbiB9IGZyb20gXCJteXNxbFwiXG5cbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSBcIi4vQmFzZVNlcnZpY2VcIjtcbmltcG9ydCBTaWduYWwsIHsgUmVxIH0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCI7XG5pbXBvcnQgeyBjcmVhdGVDaXBoZXJpdiwgY3JlYXRlRGVjaXBoZXJpdiwgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIlxuaW1wb3J0IHsgbG9nQ3JpdCwgbG9nRXJyb3IsIGxvZ0luZm8gfSBmcm9tIFwiLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBteXNxbCBmcm9tIFwibXlzcWwyL3Byb21pc2VcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCBjb25zdCBTX01ZU1FMX1NUQVJURUQ9bmV3IFNpZ25hbDx2b2lkPigpXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1FVRVJZID0gbmV3IFJlcTxNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSxNeXNxbFJlc3VsdFtdPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfUVVFUllcIik7XG4vL2V4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFJBTlNBQ1RJT04gPSBuZXcgUmVxPE15U3FsUXVlcnlbXSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OXCIpO1xuXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RCRUdJTiA9IG5ldyBSZXE8dm9pZCxNeXNxbEVycm9yfG51bWJlcj4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0JFR0lOR1wiKTsgLy8gcmV0dXJuIHRyYW5zYWN0aW9uIGlkIG9yIG15c3FsIGVycm9yXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RRVUVSWT1uZXcgUmVxPHtxdWVyeTpNeVNxbFF1ZXJ5LHRpZDpudW1iZXJ9LE15c3FsUmVzdWx0Pih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05fQUREX09QRVJBVElPTlwiKTsgLy8gdGlkIG1lYW5zIHRyYW5zYWN0aW9uIGlkXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RDT01NSVQ9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVENPTU1JVFwiKTsgLy8gdGlkXG5leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RST0xMQkFDSz1uZXcgUmVxPG51bWJlcixNeXNxbEVycm9yfG51bGw+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUk9MTEJBQ0tcIik7IC8vIHRpZFxuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVF1ZXJ5ID0gYXN5bmMgKHF1ZXJ5Ok15U3FsUXVlcnl8TXlTcWxRdWVyeVtdKTpQcm9taXNlPE15c3FsUmVzdWx0W10+PT57cmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KX1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFNlcnZpY2VPcHRpb25ze1xuICAgIGNvbm5lY3Rpb25MaW1pdDpudW1iZXIsXG4gICAgaG9zdDpzdHJpbmcsXG4gICAgdXNlcjpzdHJpbmcsXG4gICAgcGFzc3dvcmQ6c3RyaW5nLFxuICAgIHBvcnQ6bnVtYmVyLFxuICAgIGRhdGFiYXNlOnN0cmluZywgIFxuICAgIHF1ZXVlTGltaXQ/Om51bWJlcixcbiAgICB0cmFuc2FjdGlvbkZhaWxSZXBvcnQ/Oih0cng6SVRyYW5zYWN0aW9uLG1lc3NhZ2U6c3RyaW5nKT0+dm9pZCxcbiAgICB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXI/OnN0cmluZyxcbiAgICBkZWJ1Zz86Ym9vbGVhbixcbiAgICBuYXhUcmFuc2FjdGlvbldhaXRUaW1lPzpudW1iZXIsXG5cdG1pZ3JhdGlvbnM/Ontcblx0XHRkaXI6c3RyaW5nLFxuXHRcdGNhbGxiYWNrOigpPT52b2lkXG5cdH18bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsRXJyb3J7XG4gICAgY29kZTogc3RyaW5nLFxuICAgIGVycm5vOiBudW1iZXIsXG4gICAgc3FsOiBzdHJpbmcsXG4gICAgbmFtZTpzdHJpbmcsXG4gICAgbWVzc2FnZTpzdHJpbmdcbiAgICBmYXRhbD86Ym9vbGVhbixcbiAgICB0aHJvd2FibGU6Ym9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgaXNNeXNxbEVycm9yPShlOmFueSk6ZSBpcyBNeXNxbEVycm9yPT57XG4gICAgcmV0dXJuIGUuY29kZSE9PXVuZGVmaW5lZCAmJiBlLmVycm5vIT09dW5kZWZpbmVkICYmIGUuc3FsIT09dW5kZWZpbmVkICYmIGUubmFtZSE9PXVuZGVmaW5lZCAmJiBlLm1lc3NhZ2UhPT11bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxSZXN1bHR7XG4gICAgZXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICByb2xsYmFja0Vycm9yPzpNeXNxbEVycm9yfG51bGwsXG4gICAgaXNEdXBsaWNhdGVFcnJvcj86Ym9vbGVhblxuICAgIGRhdGE6YW55XG4gICAgY291bnQ6bnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlTcWxRdWVyeXtcbiAgICBxdWVyeTpzdHJpbmdcbiAgICBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW118TXlzcWxRdWVyeUZpZWxkT2JqZWN0LFxuICAgIHJvbGxiYWNrUXVlcnk/OnN0cmluZ3xudWxsXG4gICAgdHJhbnNhY3Rpb25JRD86bnVtYmVyXG4gICAgdGhyb3dhYmxlPzpib29sZWFuXG4gICAgY2FsY3VsYXRlQ291bnQ/OmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGR7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLFxuICAgIHN5c3RlbT86Ym9vbGVhbixcbiAgICBpZ25vcmVJbkluc2VydD86Ym9vbGVhbixcbiAgICBpZ25vcmVJblVwZGF0ZT86Ym9vbGVhblxuICAgIHVzZUluUmVwbGFjZT86Ym9vbGVhbixcbiAgICBfcGFyc2VkVmFsdWU/OnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zYWN0aW9ue1xuICAgIGlkOm51bWJlclxuICAgIHRpbWVzdGFtcDpudW1iZXIsXG4gICAgY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixcbiAgICBxdWVyaWVzOntzcWw6c3RyaW5nLHN0YXR1czpzdHJpbmd9W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGRPYmplY3QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHx7bmFtZT86c3RyaW5nfG51bGwsdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbixpZ25vcmVJbkluc2VydD86Ym9vbGVhbixpZ25vcmVJblVwZGF0ZT86Ym9vbGVhbix1c2VJblJlcGxhY2U/OmJvb2xlYW59PntcblxufVxuICAgIFxuXG4vKipcbiAqIE15c3FsIFNlcnZpY2VzLCBleGVjdXRlIHF1ZXJpZXNcbiAqIE15U3FsUXVlcnkucXVlcnk6XG4gKiBAZmllbGRzIC0gcmVwbGFjZWQgYnkgZmllbGQncyBuYW1lc1xuICogQHZhbHVlcyAtIHJlcGxhY2VkIGJ5IHBhcnNlZCB2YWx1ZXNcbiAqIEBvbnVwZGF0ZSAtIHJlcGFsY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKiBAb25kdXBsaWNhdGUgLSByZXBsYWNlZCBieSBwYWlyIGZpZWxkIG5hbWUgPSB2YWx1ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBNeXNxbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcblxuICAgIHJlY29ubmVjdGlvblRpbWVvdXQ9MTAwMCozO1xuICAgIHJlY29ubmVjdGluZz1mYWxzZTtcbiAgICBwb29sOm15c3FsLlBvb2x8bnVsbD1udWxsO1xuICAgIG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucztcbiAgICBzZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICB0aW1lb3V0SUQ6YW55XG5cbiAgICBkZWJ1Zz1mYWxzZTtcblxuICAgIHF1ZXJpZXM9W107IC8vIFRPRE86IFNUT1JFIFFVRVJJRVMgU0VOVFMgQkVGT1JFIFRIRSBTRVJWSUNFIElTIFNUQVJURUQhXG4gICAgc3RhdGljIG5leHRUcmFuc2FjdGlvbklEPTE7XG4gICAgdHJhbnNhY3Rpb25zOklUcmFuc2FjdGlvbltdPVtdXG5cbiAgICBtYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gMTAwMCo2MCoxOyAvLyAxIG1pbiBhbmQgZGV0ZWxldGUgdHJhbnNhY3Rpb25cbiAgICBsYXN0U3VjY2Vzc1F1ZXJ5VGltZSA9IDA7XG4gICAgcGluZ0ludGVydmFsID0gMTAwMCo2MCo1OyAvLyBlYWNoIDMwIG9mIGluYWN0aXZpdHkgc2Vjb25kc1xuXG4gICAgZmFpbFJlcG9ydEZpbGVTdHJlYW06ZnMuV3JpdGVTdHJlYW18bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZTpzdHJpbmd8bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZTpudW1iZXI9MDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwibXlzcWxcIik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIFxuXG4gICAgICAgIC8vIGRlY3J5cHQgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmhvc3Quc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmhvc3Quc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudXNlci5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51c2VyID0gZGVjcnlwdCh0aGlzLm9wdGlvbnMudXNlci5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhYmFzZSA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmRhdGFiYXNlLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXNzd29yZCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnBhc3N3b3JkLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLnBhc3N3b3JkXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9IHRydWVcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWUpXG4gICAgICAgICAgICB0aGlzLm1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSB0aGlzLm9wdGlvbnMubmF4VHJhbnNhY3Rpb25XYWl0VGltZTtcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSURzOm51bWJlcltdPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihub3ctaS50aW1lc3RhbXA+dGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJSZWxlYXNlIHRyYW5zYWN0aW9uIGNvbm5lY3Rpb24gZHVlIHRvIHRpbWVvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGksdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJRHMucHVzaChpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+IXJlbW92ZWRJRHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcgJiYgY291bnQtdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW1vdmVkOiBcIixjb3VudC10aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpXG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoRGF0ZS5ub3coKS10aGlzLmxhc3RTdWNjZXNzUXVlcnlUaW1lPnRoaXMucGluZ0ludGVydmFsKXtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5wb29sKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRE8gUElOR1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9MDtpPHRoaXMub3B0aW9ucy5jb25uZWN0aW9uTGltaXQ7aSsrKXtcbiAgICAgICAgICAgICAgICAgICAgUkVRX01ZU1FMX1FVRVJZLnJlcXVlc3Qoe3F1ZXJ5OlwiU0VMRUNUIDEgQE5PTElNSVRcIixmaWVsZHM6W119KVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQaW5nIG15c3FsIG9uIGVhY2ggY29ubmVjdGlvbiBpbiBwb29sXCIpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFxuICAgICAgICB9LDEwMDAqMzApXG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGFmdGVyIDE1IG1pbiBvZiBpbmFjdGl2aXR5LCBjbG9zZSBmaWxlXG4gICAgICAgICAgICBpZihEYXRlLm5vdygpLXRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lPjEwMDAqNjAqMTUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sMTAwMCo2MCo1KVxuXG4gICAgICAgIGlmKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcikpe1xuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj11bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY3JlYXRlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGRpclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGV4ZWN1dGVRdWVyeSAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT57IHJldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSkgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgLy8gc2V0dXAgcHJvY2VzcyBleGl0IGhhbmRsZXJzIGludGVycnVwdCAoY3RybCtjKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgLy8gdGVybWluYXRlIChraWxsKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdURVJNJyxhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgICAgICBsZXQgcG9vbENyZWF0ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlKCFwb29sQ3JlYXRlZCl7XG4gICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgcG9vbENyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgaWYoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMISBSZXRyeWluZyBpbiAzIHNlY29uZHMuLi5cIilcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldFRpbWVvdXQocmVzb2x2ZSwzMDAwKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9RVUVSWS5saXN0ZW5lcj1hc3luYyBkYXRhID0+e1xuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgICAgICAgICAgZGF0YT1bZGF0YV07XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGRhdGEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gTXlzcWxTZXJ2aWNlLnByZXBhcmVRdWVyeShpLnF1ZXJ5LGkuZmllbGRzKTtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZShxdWVyeSxpLnJvbGxiYWNrUXVlcnkgPz8gbnVsbCxpLnRyYW5zYWN0aW9uSUQgPz8gMCxpLnRocm93YWJsZSA/PyBmYWxzZSxpLmNhbGN1bGF0ZUNvdW50ID8/IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJpZXM6IFwiLGRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgaWYoaS5lcnJvciAmJiBpLmVycm9yLmNvZGU9PT1cIkNPTk5fRVJSXCIpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ29ubmVjdGlvbiBlcnJvciwgd2FzIGRlc3Ryb3llZCwgcmVjcmVhdGUgcG9vbFwiKVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKGkuZXJyb3IgJiYgKGkuZXJyb3IuZmF0YWwgfHwgaS5lcnJvci50aHJvd2FibGUpKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBpLmVycm9yO1xuXG4gICAgICAgICAgICAgICAgaWYoIWkuZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Y2Nlc3NRdWVyeVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQkVHSU4ubGlzdGVuZXI9YXN5bmMgKCk9PnsgIFxuICAgICAgICAgICAgY29uc3QgY29ubiA9IGF3YWl0IHRoaXMucG9vbD8uZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgaWYoIWNvbm4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiTk9fUE9PTFwiLGVycm5vOjEwMDAwMCxmYXRhbDp0cnVlLHNxbDpcIlwiLG5hbWU6XCJOT19QT09MXCIsbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIix0aHJvd2FibGU6ZmFsc2V9XG5cbiAgICAgICAgICAgIC8vIGZpbmQgY29ubiBpbiB0cmFuc2FjdGlvbnNcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYoaS5jb25uPT09Y29ubil7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJZb3VyIGNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtjb2RlOlwiQ09OTl9JTl9UUlhcIixlcnJubzoxMDAwMDUsZmF0YWw6dHJ1ZSx0aHJvd2FibGU6ZmFsc2Usc3FsOlwiXCIsbmFtZTpcIkNPTk5fSU5fVFJYXCIsbWVzc2FnZTpcIkNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIn1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRpZCA9IE15c3FsU2VydmljZS5uZXh0VHJhbnNhY3Rpb25JRCsrO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkJlZ2luIHRyYW5zYWN0aW9uIHdpdGggaWQgXCIsdGlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gYXdhaXQgY29ubi5iZWdpblRyYW5zYWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgY29ubi5xdWVyeShcIlNUQVJUIFRSQU5TQUNUSU9OXCIpO1xuICAgICAgICAgICAgICAgIC8vY29uc3QgcmVzID0gYXdhaXQgY29ubi5xdWVyeShcIlNFVCBhdXRvY29tbWl0PTBcIik7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBzdGFydGVkXCIpXG5cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih7aWQ6dGlkLGNvbm46Y29ubix0aW1lc3RhbXA6RGF0ZS5ub3coKSxxdWVyaWVzOlt7c3FsOlwiU1RBUlQgVFJBTlNBQ1RJT05cIixzdGF0dXM6XCJlcnJvclwifV19KVxuICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDp0aWQsXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOkRhdGUubm93KCksXG4gICAgICAgICAgICAgICAgY29ubjpjb25uLFxuICAgICAgICAgICAgICAgIHF1ZXJpZXM6W11cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbnMgcG9vbDogXCIsdGhpcy50cmFuc2FjdGlvbnMpXG5cbiAgICAgICAgICAgIHJldHVybiB0aWQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFJFUV9NWVNRTF9UUVVFUlkubGlzdGVuZXI9YXN5bmMgZGF0YT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09ZGF0YS50aWQpO1xuICAgICAgICAgICAgaWYoIXRyeClcbiAgICAgICAgICAgICAgICByZXR1cm4ge2Vycjoge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgIH0sZGF0YTpudWxsLHJvbGxiYWNrRXJyb3I6bnVsbCxjb3VudDowfVxuXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IE15c3FsU2VydmljZS5wcmVwYXJlUXVlcnkoZGF0YS5xdWVyeS5xdWVyeSxkYXRhLnF1ZXJ5LmZpZWxkcyk7XG4gICAgICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgICAgICBsZXQgc3FsRGF0YSA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJ5IG9uIHRyYW5zYWN0aW9uOiBcIix0cnguaWQpXG5cbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBzcWxEYXRhID0gYXdhaXQgdHJ4LmNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgfWNhdGNoKGUpeyBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTt9XG5cbiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgICAgICBpZihlcnIpXG4gICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKGRhdGEucXVlcnkuY2FsY3VsYXRlQ291bnQgJiYgcXVlcnkuaW5kZXhPZihcIlNFTEVDVFwiKT09PTApe1xuICAgICAgICAgICAgICAgICAgICBsZXQgY291bnRRdWVyeSA9IHRoaXMucHJlcGFyZUNvdW50UXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdHJ4LmNvbm4ucXVlcnkoY291bnRRdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0ICYmIGNvdW50UXVlcnlSZXN1bHQubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gKGNvdW50UXVlcnlSZXN1bHRbMF0gYXMgYW55KS5jb3VudDsgLy8gdG9kbyA6IGNoZWNrLCBwcm9iYWJseSBub3Qgd29ya2luZyAod3JvbmcgZmllbGQgb3Igc210aClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPlRRVUVSWS0+cXVlcnkgZXJyb3JcIixlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlF1ZXJ5IGV4ZWN1dGlvbiBzdGF0dXM6XCIsZXJyP2Vyci5tZXNzYWdlOlwiY29tcGxldGVkXCIpXG5cbiAgICAgICAgICAgIHRyeC5xdWVyaWVzLnB1c2goe3NxbDpxdWVyeSxzdGF0dXM6ZXJyP2Vyci5tZXNzYWdlOlwiY29tcGxldGVkXCJ9KVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6c3FsRGF0YT9zcWxEYXRhWzBdOm51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6ZXJyLFxuICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1RST0xMQkFDSy5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVENPTU1JVC5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvbW1pdCB0cmFuc2FjdGlvbjpcIix0cnguaWQpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+aS5pZCE9PXRpZCk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBwb29sOlwiLHRoaXMudHJhbnNhY3Rpb25zIClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZXJyID0gYXdhaXQgdGhpcy5jb21taXQodHJ4KTtcblxuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbW1pdCh0cng6SVRyYW5zYWN0aW9uKTpQcm9taXNlPE15c3FsRXJyb3J8bnVsbD57XG4gICAgICAgXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIkNPTU1JVFwiKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVsZWFzZSgpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIH1cblxuICAgIGFzeW5jIHJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4OklUcmFuc2FjdGlvbixkb25Ob3RSZW1vdmU/OmJvb2xlYW4pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIHN0YXJ0ZWRcIix0cnguY29ubi50aHJlYWRJZClcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLnJvbGxiYWNrKCk7XG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5jb21taXQoKTtcbiAgICAgICAgICAgIC8vYXdhaXQgdHJ4LmNvbm4ucXVlcnkoXCJST0xMQkFDS1wiKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgaWYoIWRvbk5vdFJlbW92ZSlcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dHJ4LmlkKTtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSb2xsYmFjayBjb21wbGV0ZVwiLHRyeC5jb25uLnRocmVhZElkKVxuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCByb2xsYmFjayB0cmFuc2FjdGlvblwiLHRyeC5xdWVyaWVzKVxuICAgICAgICAgICAgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeCxcInJvbGxiYWNrXCIpXG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgYXN5bmMgZmluaXNoQXBwKCl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRmluaXNoaW5nIG15c3FsIHNlcnZpY2VcIilcbiAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKVxuICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGkpO1xuXG4gICAgICAgIGlmKHRoaXMucG9vbCl7XG4gICAgICAgICAgICB0cnl7YXdhaXQgdGhpcy5wb29sLmVuZCgpO31jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjbG9zZSBNWVNRTCBwb29sIVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbSlcbiAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW09bnVsbDtcbiAgICB9XG5cbiAgICBwcmVwYXJlQ291bnRRdWVyeShxdWVyeTpzdHJpbmcpOnN0cmluZ3tcbiAgICAgICAgbGV0IGNvdW50UXVlcnkgPSBxdWVyeTtcblxuICAgICAgICAvLyBSRU1PVkUgTElNSVRcbiAgICAgICAgaWYoY291bnRRdWVyeS5pbmRleE9mKFwiTElNSVRcIik9PT0tMSlcbiAgICAgICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZygwLGNvdW50UXVlcnkuaW5kZXhPZihcIkxJTUlUXCIpKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFJFTU9WRSBPUkRFUiBcbiAgICAgICAgaWYoY291bnRRdWVyeS5pbmRleE9mKFwiT1JERVJcIikhPT0tMSlcbiAgICAgICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZygwLGNvdW50UXVlcnkuaW5kZXhPZihcIk9SREVSXCIpKVxuXG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZyhjb3VudFF1ZXJ5LmluZGV4T2YoXCJGUk9NXCIpKTtcbiAgICAgICAgXG5cbiAgICAgICAgY291bnRRdWVyeSA9IFwiU0VMRUNUIENPVU5UKDEpIGFzIGBjb3VudGAgXCIrY291bnRRdWVyeVxuICAgICAgICByZXR1cm4gY291bnRRdWVyeTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeC5xdWVyaWVzLG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubj8udGhyZWFkSWQpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4/LnRocmVhZElkKVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29ubmVjdGlvbiBub3QgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGlmKCFjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGBObyBjb25uZWN0aW9uIGNyZWF0ZWQhYClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgY2FudCBnZXQgY29ubmVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLy8gRG8gc2VuZCBxdWVyeVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRRdWVyeShjb25uLHF1ZXJ5LHJlc29sdmUscm9sbGJhY2tRdWVyeSx0aHJvd2FibGU/dHJ1ZTpmYWxzZSxjYWxjdWxhdGVDb3VudCk7XG5cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHJlY3JlYXRlIHBvb2wsIGNvbm5lY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBpZihgJHtlfWAuaW5kZXhPZignRUNPTk5SRUZVU0VEJykhPT0tMSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZVBvb2woKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6KGUgJiYgdHlwZW9mIGUgPT09IFwib2JqZWN0XCIgJiYgXCJtZXNzYWdlXCIgaW4gZSBhcyBhbnkpPyhlIGFzIGFueSkubWVzc2FnZTpcIk15c3FsIGNhbnQgZ2V0IGNvbm5lY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2VuZFF1ZXJ5KGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb24scXVlcnk6c3RyaW5nLHJlc29sdmU6KGRhdGE6TXlzcWxSZXN1bHQpPT52b2lkLHJvbGxiYWNrOnN0cmluZ3xudWxsLHRocm93YWJsZTpib29sZWFuLGNhbGN1bGF0ZUNvdW50OmJvb2xlYW4pe1xuICAgICAgICBcblxuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWNhdGNoKGUpe31cbiAgICAgXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMyxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiK2VycixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG5cbiAgICAgICAgICAgICAgICBsZXQgZG9jbG9zZT1mYWxzZVxuICAgICAgICAgICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVyciAmJiBxdWVyeVJlc3VsdC5lcnIubWVzc2FnZSl7XG4gICAgICAgICAgICAgICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVyci5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImNhbid0IGFkZCBuZXcgY29tbWFuZCB3aGVuIGNvbm5lY3Rpb24gaXMgaW4gY2xvc2VkIHN0YXRlXCIpIT09LTEpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jbG9zZT10cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoZG9jbG9zZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdC5lcnIuY29kZT1cIkNPTk5fRVJSXCI7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cblxuXG5cbiAgICAgICAgICAgIC8vIGRldGVybWluZSBkdXBsaWNhdGUgZXJyb3JcbiAgICAgICAgICAgIGxldCBkdXA9ZmFsc2U7XG4gICAgICAgICAgICBpZihxdWVyeVJlc3VsdC5lcnIgJiYgcXVlcnlSZXN1bHQuZXJyLmNvZGUgJiYgcXVlcnlSZXN1bHQuZXJyLmNvZGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiZXJfZHVwX2VudHJ5XCIpIT09LTEpXG4gICAgICAgICAgICAgICAgZHVwPXRydWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5zZW5kIHF1ZXJ5LT5xdWVyeSBlcnJvclwiLHF1ZXJ5UmVzdWx0LmVycik7XG5cbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOnsuLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBpc0R1cGxpY2F0ZUVycm9yOmR1cCxcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXR1cm47IC8vIFFVRVJZIEVSUk9SLCBSRVRVUk5cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmKGNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4sY291bnRRdWVyeSk7XG4gICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LmVycilcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+c2VuZCBxdWVyeS0+Y291bnQtPnF1ZXJ5IGVycm9yXCIsY291bnRRdWVyeVJlc3VsdC5lcnIpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMgJiYgY291bnRRdWVyeVJlc3VsdC5yZXN1bHRzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHNbMF0uY291bnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICAvLyBjbG9zZSBjb25uIG9uIHN1Y2Nlc3NcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICB9Y2F0Y2goZSl7fVxuXG4gICAgICAgIC8vIGhhbmRsZSBzdWNjZXNzXG4gICAgICAgIGNvbnN0IGVyciA9IG51bGw7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgZXJyb3I6ZXJyLFxuICAgICAgICAgICAgZGF0YTpxdWVyeVJlc3VsdC5yZXN1bHRzLFxuICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8vIEFzeW5jIHF1ZXJ5IHdyYXBwZXIgdG8gY29ubi5xdWVyeVxuICAgIGFzeW5jIHF1ZXJ5QXN5bmMoY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixxdWVyeTpzdHJpbmcpOlByb21pc2U8e2VycjpNeXNxbEVycm9yfG51bGwscmVzdWx0cz86YW55fT57XG5cbiAgICAgICAgbGV0IHJlc3VsdD1udWxsO1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgcmV0dXJuIHtlcnI6dGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycjpudWxsLFxuICAgICAgICAgICAgcmVzdWx0czpyZXN1bHRbMF0sXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZXJyOmFueSx0aHJvd2FibGU/OmJvb2xlYW4pOk15c3FsRXJyb3J7XG4gICAgICAgIGlmKGVyciAmJiAgdHlwZW9mIGVycj09PVwib2JqZWN0XCIgJiYgXCJjb2RlXCIgaW4gZXJyICYmIFwiZXJybm9cIiBpbiBlcnIgJiYgXCJzcWxcIiBpbiBlcnIgJiYgXCJuYW1lXCIgaW4gZXJyICYmIFwibWVzc2FnZVwiIGluIGVycil7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IGVyci5lcnJubyxcbiAgICAgICAgICAgICAgICAgICAgc3FsOiBlcnIuc3FsLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOmVyci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOmVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiUVVFUllfRVJSXCIsXG4gICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMixcbiAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzcWw6IFwibm8gcXVlcnlcIixcbiAgICAgICAgICAgICAgICBuYW1lOlwiUVVFUllfRVJSXCIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTpcIkVycm9yOiBcIisoZXJyKT9lcnI6XCJcIixcbiAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5jb25zdCBzZWNyZXRfa2V5PVwiQUtMV2thanclXiZkZ3dxaHcjOTg0NTNpMjNiZmsyM3JuMmtua25nbHJnamVpdFwiXG5jb25zdCBzZWNyZXRfaXY9XCJydGhhZHJmazIzcm4ya24jKkZOS0FAZ3Q0NGRmM3RzbHJnaiMjIWl0XCJcblxuLy8gR2VuZXJhdGUgc2VjcmV0IGhhc2ggd2l0aCBjcnlwdG8gdG8gdXNlIGZvciBlbmNyeXB0aW9uXG5jb25zdCBrZXkgPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VjcmV0X2tleSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMzIpXG5jb25zdCBpdiA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfaXYpLmRpZ2VzdCgnaGV4Jykuc3Vic3RyaW5nKDAsIDE2KVxuXG5jb25zdCBkZWNyeXB0ID0oZW5jcnlwdGVkOnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ2JpbmFyeScpO1xuICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleSwgaXYpO1xuICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQsICdiaW5hcnknLCAndXRmOCcpO1xuICAgICAgZGVjcnlwdGVkICs9IGRlY2lwaGVyLmZpbmFsKCd1dGY4Jyk7XG4gICAgICByZXR1cm4gZGVjcnlwdGVkO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jb25zdCBlbmNyeXB0ID0gKHR4dDpzdHJpbmcpOnN0cmluZ3xudWxsPT57XG4gIHRyeXtcbiAgICAgIGxldCBlbmNpcGhlciA9IGNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleSwgaXYpLFxuICAgICAgZW5jcnlwdGVkID0gZW5jaXBoZXIudXBkYXRlKHR4dCwgJ3V0ZjgnLCAnYmluYXJ5Jyk7XG4gICAgICBlbmNyeXB0ZWQgKz0gZW5jaXBoZXIuZmluYWwoJ2JpbmFyeScpO1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVuY3J5cHRlZCwgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXlzcWxTZXJ2aWNlOyJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "badmfck-api-server",
3
- "version": "2.6.5",
3
+ "version": "2.6.7",
4
4
  "description": "Simple API http server based on express",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",