badmfck-api-server 2.5.9 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -83,7 +83,7 @@ async function Initializer(services) {
83
83
  exports.Initializer = Initializer;
84
84
  class APIService extends BaseService_1.BaseService {
85
85
  static nextLogID = 0;
86
- version = "2.5.9";
86
+ version = "2.6.0";
87
87
  options;
88
88
  monitor;
89
89
  monitorIndexFile;
@@ -455,4 +455,4 @@ class APIService extends BaseService_1.BaseService {
455
455
  }
456
456
  }
457
457
  exports.APIService = APIService;
458
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWtDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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R0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUE7WUFDaEUsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFDO1lBQzNCLElBQUcsQ0FBQyxNQUFNO2dCQUNULE1BQU0sR0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxJQUFHLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDckYsTUFBTTtpQkFDTjthQUNEO1NBQ0Q7UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUFoZEYsZ0NBa2RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdheGlvcydcblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW17XHRcblx0aWQ6bnVtYmVyLFxuXHRjcmVhdGVkOm51bWJlcixcblx0dGltZTpudW1iZXIsXG5cdHJlZmVyZXI/OnN0cmluZyxcblx0cmVxdWVzdDp7W2tleTpzdHJpbmddOmFueX0sXG5cdHJlc3BvbnNlOntba2V5OnN0cmluZ106YW55fVxuXHRlcnJvcj86c3RyaW5nfG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlT3B0aW9uc3tcblx0cG9ydDpudW1iZXIsXG5cdGJhc2VFbmRQb2ludDpzdHJpbmcgLy8gXCIvYXBpL1wiXG5cdGNvcnNIb3N0V2hpdGVMaXN0OnN0cmluZ1tdLFxuXHRlbmRwb2ludHM6SUJhc2VFbmRwb2ludFtdLFxuXHRqc29uTGltaXQ6c3RyaW5nIC8vIFwiMTBtYlwiXG5cdG9uTmV0d29ya0xvZz86KChsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtKT0+dm9pZCl8bnVsbFxuXHRvbkVycm9yPzooKC4uLnJlc3Q6YW55W10pPT52b2lkKXxudWxsXG5cdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmJvb2xlYW4sXG5cdGludGVyY2VwdG9yPzpJQmFzZUVuZHBvaW50LFxuXHRwb3N0cHJvZHVjZXI/OihyZXE6SFRUUFJlcXVlc3RWT3x1bmRlZmluZWR8bnVsbCxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTz5cblx0cHJlcHJvZHVjZXI/OihyZXE6SFRUUFJlcXVlc3RWT3x1bmRlZmluZWR8bnVsbCk9PmFueVxuXHRcblx0bW9uaXRvcj86e2xvZ2luOnN0cmluZyxwYXNzd29yZDpzdHJpbmd9W11cblx0Ly9kZXBsb3ltZW50Pzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31cblx0YXBwVmVyc2lvbj86c3RyaW5nXG5cblx0ZmlsZVRlbXBEaXI6c3RyaW5nO1xuXHRmaWxlTGltaXQ6bnVtYmVyIC8vIGJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCk6QVBJU2VydmljZU9wdGlvbnN7XG5cdHJldHVybiB7XG5cdFx0cG9ydDogODA5MSxcblx0XHRiYXNlRW5kUG9pbnQ6ICcvYXBpLycsXG5cdFx0Y29yc0hvc3RXaGl0ZUxpc3Q6IFtcblx0XHRcdCdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuXHRcdF0sXG5cdFx0ZW5kcG9pbnRzOiBbXSxcblx0XHRqc29uTGltaXQ6XCIxMG1iXCIsXG5cdFx0b25OZXR3b3JrTG9nOiBmdW5jdGlvbiAobG9nOiBBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pOiB2b2lkIHtcblx0XHRcdGxvZ0luZm8oXCIke0FQSVNlcnZpY2UuanN9XCIsbG9nKVxuXHRcdH0sXG5cdFx0b25FcnJvcjpmdW5jdGlvbihlcnI6YW55KXtcblx0XHRcdGxvZ0Vycm9yKFwiJHtBUElTZXJ2aWNlLmpzfVwiLGVycik7XG5cdFx0fSxcblx0XHRpc1Byb2R1Y3Rpb25FbnZpcm9ubWVudDpmYWxzZSxcblx0XHRmaWxlTGltaXQ6NTAqMTAyNCoxMDI0LFxuXHRcdGZpbGVUZW1wRGlyOnBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSxcImZpbGVUZW1wRGlyXCIpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IFJFUV9DUkVBVEVfTkVUX0xPRzpSZXE8dm9pZCxBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfQ1JFQVRFX05FVF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfTE9HXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX1JFUVVFU1RTX0NPVU5UOlJlcTx2b2lkLG51bWJlcj4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX1JFUVVFU1RTX0NPVU5UXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX1NFUlZFUjpSZXE8dm9pZCx7ZXhwcmVzczpBcHBsaWNhdGlvbixodHRwOmh0dHAuU2VydmVyfT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX1NFUlZFUlwiKTtcbmV4cG9ydCBjb25zdCBSRVFfSU5URVJOQUxfQ0FMTDpSZXE8SFRUUFJlcXVlc3RWTyxJRXJyb3J8YW55PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0lOVEVSTkFMX0NBTExcIik7XG5cblxuY29uc3QgYWN0aXZlU2VydmljZXM6U3RyaW5nW109W11cbmNvbnN0IGVudHJ5UG9pbnRzOlN0cmluZ1tdPVtdXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBJbml0aWFsaXplcihzZXJ2aWNlczpJQmFzZVNlcnZpY2VbXSl7XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBhd2FpdCBpLmluaXQoKTthY3RpdmVTZXJ2aWNlcy5wdXNoKGkuZ2V0TmFtZSgpKSB9XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBpLmFwcGxpY2F0aW9uUmVhZHkoKSB9XG59XG5cbmV4cG9ydCBjbGFzcyBBUElTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuXG5cdC8vIE5FVCBMT0dcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dExvZ0lEPTA7XG5cdHByaXZhdGUgdmVyc2lvbiA9IFwiMi41LjlcIlxuXHRwcml2YXRlIG9wdGlvbnM6QVBJU2VydmljZU9wdGlvbnM7XG5cdHByaXZhdGUgbW9uaXRvcj86TW9uaXRvclxuXHRwcml2YXRlIG1vbml0b3JJbmRleEZpbGU/OkJ1ZmZlclxuXHRwcml2YXRlIHN0YXJ0ZWQ6RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdHByaXZhdGUgcmVxdWVzdHNDb3VudD0wO1xuXHRwcml2YXRlIHNlcnZlcj1odHRwXG5cblx0bmV0TG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPVtdO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OkFQSVNlcnZpY2VPcHRpb25zfG51bGwpIHtcblx0XHRzdXBlcignSFRUUCBTZXJ2aWNlJylcblx0XHR0aGlzLm9wdGlvbnM9b3B0aW9ucyA/PyBnZXREZWZhdWx0T3B0aW9ucygpO1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3Q9W107XG5cdFx0Y29uc3Qgc2VsZiA9IFwiaHR0cDovL2xvY2FsaG9zdDpcIit0aGlzLm9wdGlvbnMucG9ydDtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmZpbmQodmFsPT52YWw9PT1zZWxmKSlcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5wdXNoKClcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5tb25pdG9yICYmIHRoaXMub3B0aW9ucy5tb25pdG9yLmxlbmd0aD4wKXtcblx0XHRcdHRoaXMubW9uaXRvcj1uZXcgTW9uaXRvcigpO1xuXHRcdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKHRoaXMubW9uaXRvcilcblx0XHRcdGNvbnNvbGUud2FybihcIlNlcnZpY2UgTW9uaXRvciBpbml0aWFsaXplZFwiKVxuXHRcdFx0Y29uc29sZS53YXJuKFwibW9uaXRvciBsaW5rczpcIilcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRjb25zb2xlLndhcm4oaS5sb2dpbitcIiAtPiAvc20tXCIraGFzaClcdFx0XHRcdFx0XHRcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjcmVhdGUgbGl2ZW5lc3MsIHJlYWRpbmVzc1xuXHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaChuZXcgTGl2ZW5lc3ModGhpcy5zdGFydGVkKSxuZXcgUmVhZGluZXNzKHRoaXMuc3RhcnRlZCkpXG5cdFx0UkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQubGlzdGVuZXIgPSBhc3luYyAoKSA9PiB0aGlzLnJlcXVlc3RzQ291bnQ7XG5cdH1cblxuXG5cdG92ZXJyaWRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cblx0XHRSRVFfSFRUUF9MT0cubGlzdGVuZXI9YXN5bmMgaWdub3JlPT50aGlzLm5ldExvZztcblx0XHRSRVFfQ1JFQVRFX05FVF9MT0cubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9Pntcblx0XHRcdGNvbnN0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0gPSB7XG5cdFx0XHRcdGNyZWF0ZWQ6ICtuZXcgRGF0ZSgpLFxuXHRcdFx0XHR0aW1lOiAwLFxuXHRcdFx0XHRyZXF1ZXN0OiB7fSxcblx0XHRcdFx0cmVzcG9uc2U6IHt9LFxuXHRcdFx0XHRlcnJvcjpudWxsLFxuXHRcdFx0XHRpZDogQVBJU2VydmljZS5uZXh0TG9nSUQrK1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5uZXRMb2cucHVzaChsb2cpXG5cdFx0XHRpZih0aGlzLm5ldExvZy5sZW5ndGg+MTAwMClcblx0XHRcdFx0dGhpcy5uZXRMb2cuc2hpZnQoKVxuXHRcdFx0cmV0dXJuIGxvZztcblx0XHR9XG5cblx0XHQvLyBpbnRlcm5hbCBjYWxsXG5cdFx0UkVRX0lOVEVSTkFMX0NBTEwubGlzdGVuZXIgPSBhc3luYyAocmVxKT0+e1xuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0XHRpZighaSB8fCAhaS5lbmRwb2ludHMpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFx0aWYoZXAgPT09IHJlcS5lbmRwb2ludCl7XG5cdFx0XHRcdFx0XHRyZXEuaW50ZXJuYWxDYWxsPXRydWU7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGkuZXhlY3V0ZShyZXEpXG5cdFx0XHRcdFx0XHRpZihyZXNwb25zZS5lcnJvcilcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge2Vycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULGRhdGE6bnVsbCxodHRwU3RhdHVzOjQwNH1cblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGV4cHJlc3Ncblx0XHRjb25zdCBhcHAgPSBleHByZXNzKClcblx0XHRjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhcHApO1xuXG5cdFx0UkVRX0hUVFBfU0VSVkVSLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57cmV0dXJuIHtleHByZXNzOmFwcCxodHRwOnNlcnZlcn19O1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLmlzUHJvZHVjdGlvbkVudmlyb25tZW50KVxuXHRcdFx0YXBwLnNldChcImVudlwiLCdwcm9kdWN0aW9uJyk7XG5cblx0XHRhcHAudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiAnMTBtYicgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL2pzb25cblx0XHRhcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGxpbWl0OiAnMTBtYicsIGV4dGVuZGVkOiB0cnVlIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblxuXHRcdGFwcC51c2UoZmlsZVVwbG9hZCh7XG5cdFx0XHRsaW1pdEhhbmRsZXI6IChyZXEsIHJlcywgbmV4dCk9Pntcblx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkZJTEVfVE9PX0xBUkdFLFxuXHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRodHRwU3RhdHVzOjQxMyxcblx0XHRcdFx0fSwrbmV3IERhdGUoKSxyZXEucGF0aCk7XG5cdFx0XHR9LFxuXHRcdFx0bGltaXRzOiB7IGZpbGVTaXplOiB0aGlzLm9wdGlvbnMuZmlsZUxpbWl0IH0sXG5cdFx0XHR1c2VUZW1wRmlsZXM6IHRydWUsXG5cdFx0XHR1cmlEZWNvZGVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHR0ZW1wRmlsZURpcjogdGhpcy5vcHRpb25zLmZpbGVUZW1wRGlyLFxuXHRcdFx0Ly9zYWZlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0YWJvcnRPbkxpbWl0OnRydWVcblx0XHR9KSlcblxuXHRcdGFwcC51c2UoYXN5bmMgKGVycjphbnkscmVxOmFueSxyZXNwOmFueSxuZXh0OmFueSk9Pntcblx0XHRcdFxuXHRcdFx0aWYoIWVycil7XG5cdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRcdC8vcmVxdWVzdCBzdGFydCB0aW1lXG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdGNvbnN0IGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRkYXRhOlwiXCIsXG5cdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zXG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXNwb25zZUVycm9yPURlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNUO1xuXHRcdFx0aWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyLnN0YXR1cyA9PT0gNDAwICYmICdib2R5JyBpbiBlcnIgJiYgZXJyLnR5cGUgPT09ICdlbnRpdHkucGFyc2UuZmFpbGVkJykge1xuXHRcdFx0XHRyZXNwb25zZUVycm9yID0gRGVmYXVsdEVycm9ycy5KU09OX01BTEZPUk1FRFxuXHRcdFx0fVxuICAgICAgXG5cblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlc3Ase1xuXHRcdFx0XHRlcnJvcjpyZXNwb25zZUVycm9yLFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDAwXG5cdFx0XHR9LHRtZSxcIlwiLGxvZylcblxuXHRcdH0pXG5cblx0XHRjb25zdCBjb3JzT3B0aW9ucyA9IHtcblx0XHRcdG9yaWdpbjogKG9yaWdpbjogYW55LCBjYWxsYmFjazogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbklzV2hpdGVsaXN0ZWQgPSB0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuaW5jbHVkZXMob3JpZ2luKVxuXHRcdFx0XHRjYWxsYmFjayhudWxsLCBvcmlnaW5Jc1doaXRlbGlzdGVkKVxuXHRcdFx0fSxcblx0XHRcdGNyZWRlbnRpYWxzOiB0cnVlXG5cdFx0fVxuXHRcdGFwcC51c2UoY29ycyhjb3JzT3B0aW9ucykpXG5cblx0XHQvLyByZWdpc3RyYXRlIGVuZHBvaW50c1xuXHRcdEJhc2VFbmRwb2ludC5zZXRFbnRyeVBvaW50KHRoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQpXG5cdFx0XG5cdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0YXdhaXQgaS5pbml0KCk7XG5cdFx0XHRpZighaS5lbmRwb2ludHMpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcblxuXHRcdFx0XHQvLyBpbmNvbWluZyByZXF1ZXN0XG5cdFx0XHRcdGFwcC5hbGwoZXAsYXN5bmMgKHJlcSxyZXMpPT57XG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0c0NvdW50Kys7XG5cdFx0XHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRcdFx0bGV0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCA9IG51bGw7XG5cdFx0XHRcdFx0aWYoIWkuaWdub3JlSHR0cExvZ2dpbmcpe1xuXHRcdFx0XHRcdFx0bG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdFx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0XHRcdFx0dXJsOnJlcS51cmwsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5ib2R5KSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5wYXJhbXMpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXhlY3V0ZSA9IGFzeW5jICgpPT57XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJvZHkgPSByZXEuYm9keTtcblx0XHRcdFx0XHRcdGlmKHJlcS5xdWVyeSAmJiB0eXBlb2YgcmVxLnF1ZXJ5ID09PSBcIm9iamVjdFwiKXtcblx0XHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIHJlcS5xdWVyeSl7XG5cdFx0XHRcdFx0XHRcdFx0Ym9keVtpXT1yZXEucXVlcnlbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgaHR0cFJlcXVlc3Q6SFRUUFJlcXVlc3RWTyA9IHtcblx0XHRcdFx0XHRcdFx0cmF3OnJlcSBhcyBJbmNvbWluZ01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnJlcS5ib2R5LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtcyxcblx0XHRcdFx0XHRcdFx0aGVhZGVyczpyZXEuaGVhZGVycyBhcyBhbnksXG5cdFx0XHRcdFx0XHRcdGVuZHBvaW50OmVwLFxuXHRcdFx0XHRcdFx0XHRmaWxlczpyZXEuZmlsZXMgPz8gbnVsbCxcblx0XHRcdFx0XHRcdFx0cmVmZXJlcjpyZXEuZ2V0KFwiUmVmZXJlclwiKSxcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKXtcblx0XHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVwcm9kdWNlclJlc3VsdCA9IGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcihodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdGlmKHByZXByb2R1Y2VyUmVzdWx0KVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZXByb2R1Y2VyUmVzdWx0ID0gcHJlcHJvZHVjZXJSZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse2Vycm9yOntjb2RlOjEwMDAyLG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixkZXRhaWxzOmAke2V9YH0sZGF0YTpudWxsLGh0dHBTdGF0dXM6NTAwfSx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGV0IHJlc3VsdFxuXHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIGludGVyY2VwdG9yIGlmIGV4aXN0c1xuXHRcdFx0XHRcdFx0XHRpZighai5pZ25vcmVJbnRlcmNlcHRvcil7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGludGVyY2VwdG9yUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5pbnRlcmNlcHRvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbnRlcmNlcHRvclJlc3VsdD1hd2FpdCB0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3IuZXhlY3V0ZShodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpbnRlcmNlcHRvclJlc3VsdC5lcnJvciAmJiAhai5hbGxvd0ludGVyY2VwdG9yRXJyb3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsaW50ZXJjZXB0b3JSZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LmludGVyY2VwdG9yUmVzdWx0ID0gaW50ZXJjZXB0b3JSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBQcmVjaGVja1xuXHRcdFx0XHRcdFx0XHRpZihpID09PSB0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9e2RhdGE6dGhpcy5vcHRpb25zLm1vbml0b3J9XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlY2hlY2s9YXdhaXQgaS5wcmVjaGVjayhodHRwUmVxdWVzdClcblx0XHRcdFx0XHRcdFx0aWYocHJlY2hlY2sgJiYgcHJlY2hlY2suZXJyb3Ipe1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxwcmVjaGVjayx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVjaGVjaz1wcmVjaGVjaztcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIElmIGludGVyY2VwdG9yIGhhcyBubyBlcnJvcnMsIGV4ZWN1dGUgbWFpbiBoYW5kbGVyXG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGF3YWl0IGkuZXhlY3V0ZShodHRwUmVxdWVzdClcblx0XHRcdFx0XHRcdFx0IFxuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGUpXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUZhdGFsRXJyb3IoZXApO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2hlY2sgaWYgZXJyb3IgaXMgSUVycm9yXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRhOlRyYW5zZmVyUGFja2V0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZSkpXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YSA9IHtlcnJvcjplIGFzIElFcnJvcn1cblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsZGF0YSx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRleGVjdXRlKClcblx0XHRcdFx0fSk7Ly8gaGFuZGxlIGluY29taW5nIHJlcXVlc3RcblxuXHRcdFx0fVxuXHRcdH1cblxuXHRcblxuXHRcdC8vIGZpbmFsIGhhbmRsZXJcblx0XHRhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuXHRcdFx0XG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKVxuXG5cdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Ly9jaGVjayBpZiByZXF1ZXN0aW5nIG1vbml0b3Jcblx0XHRcdFx0aWYocmVxLm1ldGhvZD09PVwiR0VUXCIpe1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGxldCBtb25pdG9yUmVxdWVzdD1mYWxzZTtcblx0XHRcdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdFx0XHRpZihyZXEub3JpZ2luYWxVcmwuZW5kc1dpdGgoXCIvc20tXCIraGFzaCkpe1xuXHRcdFx0XHRcdFx0XHRtb25pdG9yUmVxdWVzdD10cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihtb25pdG9yUmVxdWVzdCl7XG5cdFx0XHRcdFx0XHQvLyBzZW5kIGluZGV4IFRodSwgMTYgTm92IDIwMjMgMjM6MzM6MzUgR01UXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0aWYoIXRoaXMubW9uaXRvckluZGV4RmlsZSlcblx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9ySW5kZXhGaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsXCJtb25pdG9yXCIsXCJpbmRleC5odG1sXCIpKTtcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLFwidGV4dC9odG1sXCIpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLHRoaXMubW9uaXRvckluZGV4RmlsZS5ieXRlTGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRyZXMuc3RhdHVzKDIwMCkuc2VuZCh0aGlzLm1vbml0b3JJbmRleEZpbGUpO1xuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzOmAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0sdG1lLHJlcS5wYXRoKTtcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdFxuXHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1QsXG5cdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0aHR0cFN0YXR1czo0MDRcblx0XHRcdH0sdG1lLHJlcS5wYXRoKTtcblx0XHR9KVxuXG5cdFx0c2VydmVyLmxpc3Rlbih0aGlzLm9wdGlvbnMucG9ydCwgKCkgPT4ge1xuXHRcdFx0bG9nQ3JpdCgnJHtBUElTZXJ2aWNlLmpzfScsJ0FQSSBTZXJ2aWNlIHN0YXJ0ZWQgYXQ6ICcrdGhpcy5vcHRpb25zLnBvcnQrXCIsIHdpdGggYmFzZSBlbmRwb2ludDpcIit0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50K1wiLCB2ZXIuOiBcIit0aGlzLnZlcnNpb24pXG5cdFx0fSlcblxuXHRcdC8qYXBwLmxpc3Rlbih0aGlzLm9wdGlvbnMucG9ydCwgKCkgPT4ge1xuXHRcdFx0bG9nQ3JpdCgnJHtBUElTZXJ2aWNlLmpzfScsJ0FQSSBTZXJ2aWNlIHN0YXJ0ZWQgYXQ6ICcrdGhpcy5vcHRpb25zLnBvcnQrXCIsIHdpdGggYmFzZSBlbmRwb2ludDpcIit0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50K1wiLCB2ZXIuOiBcIit0aGlzLnZlcnNpb24pXG5cdFx0fSkqL1xuXHR9XG5cblx0YXN5bmMgc2VuZFJlc3BvbnNlKHJlZjpzdHJpbmcscmVzOlJlc3BvbnNlLGRhdGE6VHJhbnNmZXJQYWNrZXRWTzxhbnk+LHJlcXVlc3RUaW1lOm51bWJlcixlbmRwb2ludD86c3RyaW5nLGxvZz86QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwscmVxPzpIVFRQUmVxdWVzdFZPKXtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIpe1xuXHRcdFx0dHJ5e1xuXHRcdFx0XHRkYXRhID0gYXdhaXQgdGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcihyZXEscmVzLGRhdGEscmVxdWVzdFRpbWUsZW5kcG9pbnQsbG9nKTtcblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0bG9nRXJyb3IoXCJQb3N0cHJvZHVjZXIgZXJyb3JcIixlKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihkYXRhKSlcblx0XHRcdGRhdGEgPSB7ZXJyb3I6ZGF0YSBhcyBJRXJyb3IsZGF0YTpudWxsfVxuXHRcdFxuICAgICAgICBkYXRhLnJlc3BvbnNlVGltZSA9ICgrbmV3IERhdGUoKSkgLSByZXF1ZXN0VGltZTtcbiAgICAgICAgZGF0YS5jb3JlID0gdGhpcy52ZXJzaW9uXG4gICAgICAgIGRhdGEuZW5kcG9pbnQgPSBlbmRwb2ludCA/PyBcIm5vX2VuZHBvaW50XCJcblx0XHRcblx0XHRpZih0aGlzLm9wdGlvbnMuYXBwVmVyc2lvbilcblx0XHRcdGRhdGEudmVyc2lvbj10aGlzLm9wdGlvbnMuYXBwVmVyc2lvblxuXG5cdFx0XG5cdFx0aWYobG9nKXtcblx0XHRcdGxvZy50aW1lID0gZGF0YS5yZXNwb25zZVRpbWVcblx0XHRcdGxvZy5yZWZlcmVyPXJlZjtcblx0XHR9XG5cblx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZVJlc3BvbnNlKGRhdGEuZW5kcG9pbnQsZGF0YS5yZXNwb25zZVRpbWUpXG5cbiAgICAgICAgaWYocmVzLmRlc3Ryb3llZCB8fCByZXMuY2xvc2VkKXtcblxuXHRcdFx0aWYobG9nKVxuXHRcdFx0XHRsb2cuZXJyb3IgPSBcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2UgZm9yOiBcIitkYXRhLmVuZHBvaW50XG5cdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcbiAgICAgICAgICAgIFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlOiBcIitkYXRhLmVuZHBvaW50LGRhdGEpXG4gICAgICAgICAgICBcblx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVFcnJvcihkYXRhLmVuZHBvaW50KTtcblxuICAgICAgICB9ZWxzZXtcblx0XHRcdHRyeXtcblxuXHRcdFx0XHRpZihkYXRhLmZpbGUpe1xuXG5cdFx0XHRcdFx0cmVzLnNlbmRGaWxlKGRhdGEuZmlsZSxlcnI9Pntcblx0XHRcdFx0XHRcdGlmKGVycil7XG5cdFx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0XHRsb2cuZXJyb3IgPSBcIkNhbid0IHNlbmQgZmlsZTogXCIrZGF0YS5maWxlXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGUsZXJyKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlZixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuQ0FOVF9TRU5EX0ZJTEUsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0scmVxdWVzdFRpbWUsZGF0YS5lbmRwb2ludCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9KVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihkYXRhLnJlZGlyZWN0KXtcblx0XHRcdFx0XHRyZXMucmVkaXJlY3QoZGF0YS5yZWRpcmVjdCk7XG5cdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0ge3JlZGlyZWN0OmRhdGEucmVkaXJlY3R9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vIHNldHVwIGhlYWRlcnNcblx0XHRcdFx0XHRpZihkYXRhLmhlYWRlcnMpe1xuXHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIGRhdGEuaGVhZGVycylcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihpLGRhdGEuaGVhZGVyc1tpXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXMgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzPjk5KVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGUgPSBkYXRhLmVycm9yLmh0dHBTdGF0dXNcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZT1kYXRhLmh0dHBTdGF0dXMgPz8gMjAwXG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoZGF0YS5yYXdSZXNwb25zZSl7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhLmRhdGEpXG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhKTtcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblxuXHRcdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiB0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIHJlc3BvbnNlXCIsZSk7XG5cdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRsb2cuZXJyb3I9XCJDYW4ndCBzZW5kIHJlc3BvbnNlXCJcblx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBsb2dcblx0XHRpZih0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nICYmIGxvZylcblx0XHRcdHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cobG9nKVxuICAgIH1cblxuXG5cdGNoZWNrRGF0YUxlbmd0aChkYXRhOmFueSxyZXN1bHQ/OmFueSxsdmw/Om51bWJlcik6YW55e1xuXHRcdFxuXHRcdGlmKCFsdmwpXG5cdFx0XHRsdmw9MDtcblxuXHRcdGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKHR5cGVvZiBkYXRhPT09XCJzdHJpbmdcIiAmJiBkYXRhLmxlbmd0aD4xMDI0KVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5zdWJzdHJpbmcoMCwxMDAwKStcIi4uLiAodG90YWw6XCIgKyBkYXRhLmxlbmd0aCArIFwiKVwiXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZighcmVzdWx0KVxuXHRcdFx0XHRyZXN1bHQ9e307XG5cdFx0XHRsZXQgYXJyY250ID0gMTAwO1xuXHRcdFx0Zm9yKGxldCBpIGluIGRhdGEpe1xuXHRcdFx0XHRyZXN1bHRbaV09dGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YVtpXSxyZXN1bHRbaV0sbHZsKzEpO1xuXHRcdFx0XHRhcnJjbnQtLTtcblx0XHRcdFx0aWYoYXJyY250PD0wKXtcblx0XHRcdFx0XHRyZXN1bHRbXCIuLi5cIl09XCIuLi4gdG90YWw6IFwiK0FycmF5LmlzQXJyYXkoZGF0YSk/ZGF0YS5sZW5ndGg6T2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQgPz8gbnVsbDtcblx0fVxuXG59XG4iXX0=
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWtDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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R0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUE7WUFDaEUsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFDO1lBQzNCLElBQUcsQ0FBQyxNQUFNO2dCQUNULE1BQU0sR0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxJQUFHLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDckYsTUFBTTtpQkFDTjthQUNEO1NBQ0Q7UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUFoZEYsZ0NBa2RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdheGlvcydcblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW17XHRcblx0aWQ6bnVtYmVyLFxuXHRjcmVhdGVkOm51bWJlcixcblx0dGltZTpudW1iZXIsXG5cdHJlZmVyZXI/OnN0cmluZyxcblx0cmVxdWVzdDp7W2tleTpzdHJpbmddOmFueX0sXG5cdHJlc3BvbnNlOntba2V5OnN0cmluZ106YW55fVxuXHRlcnJvcj86c3RyaW5nfG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElTZXJ2aWNlT3B0aW9uc3tcblx0cG9ydDpudW1iZXIsXG5cdGJhc2VFbmRQb2ludDpzdHJpbmcgLy8gXCIvYXBpL1wiXG5cdGNvcnNIb3N0V2hpdGVMaXN0OnN0cmluZ1tdLFxuXHRlbmRwb2ludHM6SUJhc2VFbmRwb2ludFtdLFxuXHRqc29uTGltaXQ6c3RyaW5nIC8vIFwiMTBtYlwiXG5cdG9uTmV0d29ya0xvZz86KChsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtKT0+dm9pZCl8bnVsbFxuXHRvbkVycm9yPzooKC4uLnJlc3Q6YW55W10pPT52b2lkKXxudWxsXG5cdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmJvb2xlYW4sXG5cdGludGVyY2VwdG9yPzpJQmFzZUVuZHBvaW50LFxuXHRwb3N0cHJvZHVjZXI/OihyZXE6SFRUUFJlcXVlc3RWT3x1bmRlZmluZWR8bnVsbCxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCk9PlByb21pc2U8VHJhbnNmZXJQYWNrZXRWTz5cblx0cHJlcHJvZHVjZXI/OihyZXE6SFRUUFJlcXVlc3RWT3x1bmRlZmluZWR8bnVsbCk9PmFueVxuXHRcblx0bW9uaXRvcj86e2xvZ2luOnN0cmluZyxwYXNzd29yZDpzdHJpbmd9W11cblx0Ly9kZXBsb3ltZW50Pzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31cblx0YXBwVmVyc2lvbj86c3RyaW5nXG5cblx0ZmlsZVRlbXBEaXI6c3RyaW5nO1xuXHRmaWxlTGltaXQ6bnVtYmVyIC8vIGJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRPcHRpb25zKCk6QVBJU2VydmljZU9wdGlvbnN7XG5cdHJldHVybiB7XG5cdFx0cG9ydDogODA5MSxcblx0XHRiYXNlRW5kUG9pbnQ6ICcvYXBpLycsXG5cdFx0Y29yc0hvc3RXaGl0ZUxpc3Q6IFtcblx0XHRcdCdodHRwOi8vbG9jYWxob3N0OjMwMDAnLFxuXHRcdF0sXG5cdFx0ZW5kcG9pbnRzOiBbXSxcblx0XHRqc29uTGltaXQ6XCIxMG1iXCIsXG5cdFx0b25OZXR3b3JrTG9nOiBmdW5jdGlvbiAobG9nOiBBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pOiB2b2lkIHtcblx0XHRcdGxvZ0luZm8oXCIke0FQSVNlcnZpY2UuanN9XCIsbG9nKVxuXHRcdH0sXG5cdFx0b25FcnJvcjpmdW5jdGlvbihlcnI6YW55KXtcblx0XHRcdGxvZ0Vycm9yKFwiJHtBUElTZXJ2aWNlLmpzfVwiLGVycik7XG5cdFx0fSxcblx0XHRpc1Byb2R1Y3Rpb25FbnZpcm9ubWVudDpmYWxzZSxcblx0XHRmaWxlTGltaXQ6NTAqMTAyNCoxMDI0LFxuXHRcdGZpbGVUZW1wRGlyOnBhdGgucmVzb2x2ZShvcy50bXBkaXIoKSxcImZpbGVUZW1wRGlyXCIpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IFJFUV9DUkVBVEVfTkVUX0xPRzpSZXE8dm9pZCxBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfQ1JFQVRFX05FVF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfTE9HXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX1JFUVVFU1RTX0NPVU5UOlJlcTx2b2lkLG51bWJlcj4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX1JFUVVFU1RTX0NPVU5UXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9IVFRQX1NFUlZFUjpSZXE8dm9pZCx7ZXhwcmVzczpBcHBsaWNhdGlvbixodHRwOmh0dHAuU2VydmVyfT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9IVFRQX1NFUlZFUlwiKTtcbmV4cG9ydCBjb25zdCBSRVFfSU5URVJOQUxfQ0FMTDpSZXE8SFRUUFJlcXVlc3RWTyxJRXJyb3J8YW55PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0lOVEVSTkFMX0NBTExcIik7XG5cblxuY29uc3QgYWN0aXZlU2VydmljZXM6U3RyaW5nW109W11cbmNvbnN0IGVudHJ5UG9pbnRzOlN0cmluZ1tdPVtdXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBJbml0aWFsaXplcihzZXJ2aWNlczpJQmFzZVNlcnZpY2VbXSl7XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBhd2FpdCBpLmluaXQoKTthY3RpdmVTZXJ2aWNlcy5wdXNoKGkuZ2V0TmFtZSgpKSB9XG4gICAgZm9yIChsZXQgaSBvZiBzZXJ2aWNlcykgeyBpLmFwcGxpY2F0aW9uUmVhZHkoKSB9XG59XG5cbmV4cG9ydCBjbGFzcyBBUElTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuXG5cdC8vIE5FVCBMT0dcblx0cHJpdmF0ZSBzdGF0aWMgbmV4dExvZ0lEPTA7XG5cdHByaXZhdGUgdmVyc2lvbiA9IFwiMi42LjBcIlxuXHRwcml2YXRlIG9wdGlvbnM6QVBJU2VydmljZU9wdGlvbnM7XG5cdHByaXZhdGUgbW9uaXRvcj86TW9uaXRvclxuXHRwcml2YXRlIG1vbml0b3JJbmRleEZpbGU/OkJ1ZmZlclxuXHRwcml2YXRlIHN0YXJ0ZWQ6RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdHByaXZhdGUgcmVxdWVzdHNDb3VudD0wO1xuXHRwcml2YXRlIHNlcnZlcj1odHRwXG5cblx0bmV0TG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbVtdPVtdO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM/OkFQSVNlcnZpY2VPcHRpb25zfG51bGwpIHtcblx0XHRzdXBlcignSFRUUCBTZXJ2aWNlJylcblx0XHR0aGlzLm9wdGlvbnM9b3B0aW9ucyA/PyBnZXREZWZhdWx0T3B0aW9ucygpO1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QpXG5cdFx0XHR0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3Q9W107XG5cdFx0Y29uc3Qgc2VsZiA9IFwiaHR0cDovL2xvY2FsaG9zdDpcIit0aGlzLm9wdGlvbnMucG9ydDtcblx0XHRpZighdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmZpbmQodmFsPT52YWw9PT1zZWxmKSlcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdC5wdXNoKClcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5tb25pdG9yICYmIHRoaXMub3B0aW9ucy5tb25pdG9yLmxlbmd0aD4wKXtcblx0XHRcdHRoaXMubW9uaXRvcj1uZXcgTW9uaXRvcigpO1xuXHRcdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKHRoaXMubW9uaXRvcilcblx0XHRcdGNvbnNvbGUud2FybihcIlNlcnZpY2UgTW9uaXRvciBpbml0aWFsaXplZFwiKVxuXHRcdFx0Y29uc29sZS53YXJuKFwibW9uaXRvciBsaW5rczpcIilcblx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRjb25zb2xlLndhcm4oaS5sb2dpbitcIiAtPiAvc20tXCIraGFzaClcdFx0XHRcdFx0XHRcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjcmVhdGUgbGl2ZW5lc3MsIHJlYWRpbmVzc1xuXHRcdHRoaXMub3B0aW9ucy5lbmRwb2ludHMucHVzaChuZXcgTGl2ZW5lc3ModGhpcy5zdGFydGVkKSxuZXcgUmVhZGluZXNzKHRoaXMuc3RhcnRlZCkpXG5cdFx0UkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQubGlzdGVuZXIgPSBhc3luYyAoKSA9PiB0aGlzLnJlcXVlc3RzQ291bnQ7XG5cdH1cblxuXG5cdG92ZXJyaWRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG5cblx0XHRSRVFfSFRUUF9MT0cubGlzdGVuZXI9YXN5bmMgaWdub3JlPT50aGlzLm5ldExvZztcblx0XHRSRVFfQ1JFQVRFX05FVF9MT0cubGlzdGVuZXIgPSBhc3luYyBpZ25vcmU9Pntcblx0XHRcdGNvbnN0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0gPSB7XG5cdFx0XHRcdGNyZWF0ZWQ6ICtuZXcgRGF0ZSgpLFxuXHRcdFx0XHR0aW1lOiAwLFxuXHRcdFx0XHRyZXF1ZXN0OiB7fSxcblx0XHRcdFx0cmVzcG9uc2U6IHt9LFxuXHRcdFx0XHRlcnJvcjpudWxsLFxuXHRcdFx0XHRpZDogQVBJU2VydmljZS5uZXh0TG9nSUQrK1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5uZXRMb2cucHVzaChsb2cpXG5cdFx0XHRpZih0aGlzLm5ldExvZy5sZW5ndGg+MTAwMClcblx0XHRcdFx0dGhpcy5uZXRMb2cuc2hpZnQoKVxuXHRcdFx0cmV0dXJuIGxvZztcblx0XHR9XG5cblx0XHQvLyBpbnRlcm5hbCBjYWxsXG5cdFx0UkVRX0lOVEVSTkFMX0NBTEwubGlzdGVuZXIgPSBhc3luYyAocmVxKT0+e1xuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0XHRpZighaSB8fCAhaS5lbmRwb2ludHMpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRcdGVwID0gZXAucmVwbGFjZUFsbChcIi8vXCIsXCIvXCIpXG5cdFx0XHRcdFx0aWYoZXAgPT09IHJlcS5lbmRwb2ludCl7XG5cdFx0XHRcdFx0XHRyZXEuaW50ZXJuYWxDYWxsPXRydWU7XG5cdFx0XHRcdFx0XHRjb25zdCByZXNwb25zZSA9IGF3YWl0IGkuZXhlY3V0ZShyZXEpXG5cdFx0XHRcdFx0XHRpZihyZXNwb25zZS5lcnJvcilcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge2Vycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULGRhdGE6bnVsbCxodHRwU3RhdHVzOjQwNH1cblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGV4cHJlc3Ncblx0XHRjb25zdCBhcHAgPSBleHByZXNzKClcblx0XHRjb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihhcHApO1xuXG5cdFx0UkVRX0hUVFBfU0VSVkVSLmxpc3RlbmVyID0gYXN5bmMgaWdub3JlPT57cmV0dXJuIHtleHByZXNzOmFwcCxodHRwOnNlcnZlcn19O1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLmlzUHJvZHVjdGlvbkVudmlyb25tZW50KVxuXHRcdFx0YXBwLnNldChcImVudlwiLCdwcm9kdWN0aW9uJyk7XG5cblx0XHRhcHAudXNlKGV4cHJlc3MuanNvbih7IGxpbWl0OiAnMTBtYicgfSkpIC8vIGZvciBwYXJzaW5nIGFwcGxpY2F0aW9uL2pzb25cblx0XHRhcHAudXNlKGV4cHJlc3MudXJsZW5jb2RlZCh7IGxpbWl0OiAnMTBtYicsIGV4dGVuZGVkOiB0cnVlIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcblxuXHRcdGFwcC51c2UoZmlsZVVwbG9hZCh7XG5cdFx0XHRsaW1pdEhhbmRsZXI6IChyZXEsIHJlcywgbmV4dCk9Pntcblx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkZJTEVfVE9PX0xBUkdFLFxuXHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRodHRwU3RhdHVzOjQxMyxcblx0XHRcdFx0fSwrbmV3IERhdGUoKSxyZXEucGF0aCk7XG5cdFx0XHR9LFxuXHRcdFx0bGltaXRzOiB7IGZpbGVTaXplOiB0aGlzLm9wdGlvbnMuZmlsZUxpbWl0IH0sXG5cdFx0XHR1c2VUZW1wRmlsZXM6IHRydWUsXG5cdFx0XHR1cmlEZWNvZGVGaWxlTmFtZXM6IHRydWUsXG5cdFx0XHR0ZW1wRmlsZURpcjogdGhpcy5vcHRpb25zLmZpbGVUZW1wRGlyLFxuXHRcdFx0Ly9zYWZlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0YWJvcnRPbkxpbWl0OnRydWVcblx0XHR9KSlcblxuXHRcdGFwcC51c2UoYXN5bmMgKGVycjphbnkscmVxOmFueSxyZXNwOmFueSxuZXh0OmFueSk9Pntcblx0XHRcdFxuXHRcdFx0aWYoIWVycil7XG5cdFx0XHRcdG5leHQoKTtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRcdC8vcmVxdWVzdCBzdGFydCB0aW1lXG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKTtcblx0XHRcdGNvbnN0IGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRkYXRhOlwiXCIsXG5cdFx0XHRcdHBhcmFtczpyZXEucGFyYW1zXG5cdFx0XHR9XG5cblx0XHRcdGxldCByZXNwb25zZUVycm9yPURlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNUO1xuXHRcdFx0aWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyLnN0YXR1cyA9PT0gNDAwICYmICdib2R5JyBpbiBlcnIgJiYgZXJyLnR5cGUgPT09ICdlbnRpdHkucGFyc2UuZmFpbGVkJykge1xuXHRcdFx0XHRyZXNwb25zZUVycm9yID0gRGVmYXVsdEVycm9ycy5KU09OX01BTEZPUk1FRFxuXHRcdFx0fVxuICAgICAgXG5cblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlc3Ase1xuXHRcdFx0XHRlcnJvcjpyZXNwb25zZUVycm9yLFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDAwXG5cdFx0XHR9LHRtZSxcIlwiLGxvZylcblxuXHRcdH0pXG5cblx0XHRjb25zdCBjb3JzT3B0aW9ucyA9IHtcblx0XHRcdG9yaWdpbjogKG9yaWdpbjogYW55LCBjYWxsYmFjazogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9yaWdpbklzV2hpdGVsaXN0ZWQgPSB0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuaW5jbHVkZXMob3JpZ2luKVxuXHRcdFx0XHRjYWxsYmFjayhudWxsLCBvcmlnaW5Jc1doaXRlbGlzdGVkKVxuXHRcdFx0fSxcblx0XHRcdGNyZWRlbnRpYWxzOiB0cnVlXG5cdFx0fVxuXHRcdGFwcC51c2UoY29ycyhjb3JzT3B0aW9ucykpXG5cblx0XHQvLyByZWdpc3RyYXRlIGVuZHBvaW50c1xuXHRcdEJhc2VFbmRwb2ludC5zZXRFbnRyeVBvaW50KHRoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQpXG5cdFx0XG5cdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5lbmRwb2ludHMpe1xuXHRcdFx0YXdhaXQgaS5pbml0KCk7XG5cdFx0XHRpZighaS5lbmRwb2ludHMpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0bGV0IGVwID0gQmFzZUVuZHBvaW50LmdldEVudHJ5UG9pbnQoKStqLmVuZHBvaW50O1xuXHRcdFx0XHRlcCA9IGVwLnJlcGxhY2VBbGwoXCIvL1wiLFwiL1wiKVxuXHRcdFx0XHRcblxuXHRcdFx0XHQvLyBpbmNvbWluZyByZXF1ZXN0XG5cdFx0XHRcdGFwcC5hbGwoZXAsYXN5bmMgKHJlcSxyZXMpPT57XG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0c0NvdW50Kys7XG5cdFx0XHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRcdFx0bGV0IGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCA9IG51bGw7XG5cdFx0XHRcdFx0aWYoIWkuaWdub3JlSHR0cExvZ2dpbmcpe1xuXHRcdFx0XHRcdFx0bG9nID0gYXdhaXQgUkVRX0NSRUFURV9ORVRfTE9HLnJlcXVlc3QoKTtcblx0XHRcdFx0XHRcdGxvZy5yZXF1ZXN0PXtcblx0XHRcdFx0XHRcdFx0dXJsOnJlcS51cmwsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5ib2R5KSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnRoaXMuY2hlY2tEYXRhTGVuZ3RoKHJlcS5wYXJhbXMpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXhlY3V0ZSA9IGFzeW5jICgpPT57XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJvZHkgPSByZXEuYm9keTtcblx0XHRcdFx0XHRcdGlmKHJlcS5xdWVyeSAmJiB0eXBlb2YgcmVxLnF1ZXJ5ID09PSBcIm9iamVjdFwiKXtcblx0XHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIHJlcS5xdWVyeSl7XG5cdFx0XHRcdFx0XHRcdFx0Ym9keVtpXT1yZXEucXVlcnlbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgaHR0cFJlcXVlc3Q6SFRUUFJlcXVlc3RWTyA9IHtcblx0XHRcdFx0XHRcdFx0cmF3OnJlcSBhcyBJbmNvbWluZ01lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdG1ldGhvZDpyZXEubWV0aG9kLFxuXHRcdFx0XHRcdFx0XHRkYXRhOnJlcS5ib2R5LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtcyxcblx0XHRcdFx0XHRcdFx0aGVhZGVyczpyZXEuaGVhZGVycyBhcyBhbnksXG5cdFx0XHRcdFx0XHRcdGVuZHBvaW50OmVwLFxuXHRcdFx0XHRcdFx0XHRmaWxlczpyZXEuZmlsZXMgPz8gbnVsbCxcblx0XHRcdFx0XHRcdFx0cmVmZXJlcjpyZXEuZ2V0KFwiUmVmZXJlclwiKSxcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLnByZXByb2R1Y2VyKXtcblx0XHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwcmVwcm9kdWNlclJlc3VsdCA9IGF3YWl0IHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcihodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdGlmKHByZXByb2R1Y2VyUmVzdWx0KVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZXByb2R1Y2VyUmVzdWx0ID0gcHJlcHJvZHVjZXJSZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse2Vycm9yOntjb2RlOjEwMDAyLG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixkZXRhaWxzOmAke2V9YH0sZGF0YTpudWxsLGh0dHBTdGF0dXM6NTAwfSx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bGV0IHJlc3VsdFxuXHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIGludGVyY2VwdG9yIGlmIGV4aXN0c1xuXHRcdFx0XHRcdFx0XHRpZighai5pZ25vcmVJbnRlcmNlcHRvcil7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGludGVyY2VwdG9yUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5pbnRlcmNlcHRvcil7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbnRlcmNlcHRvclJlc3VsdD1hd2FpdCB0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3IuZXhlY3V0ZShodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpbnRlcmNlcHRvclJlc3VsdC5lcnJvciAmJiAhai5hbGxvd0ludGVyY2VwdG9yRXJyb3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsaW50ZXJjZXB0b3JSZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LmludGVyY2VwdG9yUmVzdWx0ID0gaW50ZXJjZXB0b3JSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBQcmVjaGVja1xuXHRcdFx0XHRcdFx0XHRpZihpID09PSB0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9e2RhdGE6dGhpcy5vcHRpb25zLm1vbml0b3J9XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlY2hlY2s9YXdhaXQgaS5wcmVjaGVjayhodHRwUmVxdWVzdClcblx0XHRcdFx0XHRcdFx0aWYocHJlY2hlY2sgJiYgcHJlY2hlY2suZXJyb3Ipe1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxwcmVjaGVjayx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVjaGVjaz1wcmVjaGVjaztcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdC8vIElmIGludGVyY2VwdG9yIGhhcyBubyBlcnJvcnMsIGV4ZWN1dGUgbWFpbiBoYW5kbGVyXG5cdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGF3YWl0IGkuZXhlY3V0ZShodHRwUmVxdWVzdClcblx0XHRcdFx0XHRcdFx0IFxuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKGUpXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUZhdGFsRXJyb3IoZXApO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2hlY2sgaWYgZXJyb3IgaXMgSUVycm9yXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRhOlRyYW5zZmVyUGFja2V0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZSkpXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YSA9IHtlcnJvcjplIGFzIElFcnJvcn1cblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMsZGF0YSx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHJlc3VsdCx0bWUsZXAsbG9nLGh0dHBSZXF1ZXN0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRleGVjdXRlKClcblx0XHRcdFx0fSk7Ly8gaGFuZGxlIGluY29taW5nIHJlcXVlc3RcblxuXHRcdFx0fVxuXHRcdH1cblxuXHRcblxuXHRcdC8vIGZpbmFsIGhhbmRsZXJcblx0XHRhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuXHRcdFx0XG5cdFx0XHRjb25zdCB0bWUgPSArbmV3IERhdGUoKVxuXG5cdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Ly9jaGVjayBpZiByZXF1ZXN0aW5nIG1vbml0b3Jcblx0XHRcdFx0aWYocmVxLm1ldGhvZD09PVwiR0VUXCIpe1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGxldCBtb25pdG9yUmVxdWVzdD1mYWxzZTtcblx0XHRcdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdFx0XHRpZihyZXEub3JpZ2luYWxVcmwuZW5kc1dpdGgoXCIvc20tXCIraGFzaCkpe1xuXHRcdFx0XHRcdFx0XHRtb25pdG9yUmVxdWVzdD10cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihtb25pdG9yUmVxdWVzdCl7XG5cdFx0XHRcdFx0XHQvLyBzZW5kIGluZGV4IFRodSwgMTYgTm92IDIwMjMgMjM6MzM6MzUgR01UXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0aWYoIXRoaXMubW9uaXRvckluZGV4RmlsZSlcblx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9ySW5kZXhGaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsXCJtb25pdG9yXCIsXCJpbmRleC5odG1sXCIpKTtcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLFwidGV4dC9odG1sXCIpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLHRoaXMubW9uaXRvckluZGV4RmlsZS5ieXRlTGVuZ3RoKVxuXHRcdFx0XHRcdFx0XHRyZXMuc3RhdHVzKDIwMCkuc2VuZCh0aGlzLm1vbml0b3JJbmRleEZpbGUpO1xuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOntcblx0XHRcdFx0XHRcdFx0XHRcdGNvZGU6MTAwMDIsXG5cdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzOmAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0sdG1lLHJlcS5wYXRoKTtcdFx0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdFxuXHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5VTktOT1dOX1JFUVVFU1QsXG5cdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0aHR0cFN0YXR1czo0MDRcblx0XHRcdH0sdG1lLHJlcS5wYXRoKTtcblx0XHR9KVxuXG5cdFx0c2VydmVyLmxpc3Rlbih0aGlzLm9wdGlvbnMucG9ydCwgKCkgPT4ge1xuXHRcdFx0bG9nQ3JpdCgnJHtBUElTZXJ2aWNlLmpzfScsJ0FQSSBTZXJ2aWNlIHN0YXJ0ZWQgYXQ6ICcrdGhpcy5vcHRpb25zLnBvcnQrXCIsIHdpdGggYmFzZSBlbmRwb2ludDpcIit0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50K1wiLCB2ZXIuOiBcIit0aGlzLnZlcnNpb24pXG5cdFx0fSlcblxuXHRcdC8qYXBwLmxpc3Rlbih0aGlzLm9wdGlvbnMucG9ydCwgKCkgPT4ge1xuXHRcdFx0bG9nQ3JpdCgnJHtBUElTZXJ2aWNlLmpzfScsJ0FQSSBTZXJ2aWNlIHN0YXJ0ZWQgYXQ6ICcrdGhpcy5vcHRpb25zLnBvcnQrXCIsIHdpdGggYmFzZSBlbmRwb2ludDpcIit0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50K1wiLCB2ZXIuOiBcIit0aGlzLnZlcnNpb24pXG5cdFx0fSkqL1xuXHR9XG5cblx0YXN5bmMgc2VuZFJlc3BvbnNlKHJlZjpzdHJpbmcscmVzOlJlc3BvbnNlLGRhdGE6VHJhbnNmZXJQYWNrZXRWTzxhbnk+LHJlcXVlc3RUaW1lOm51bWJlcixlbmRwb2ludD86c3RyaW5nLGxvZz86QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwscmVxPzpIVFRQUmVxdWVzdFZPKXtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIpe1xuXHRcdFx0dHJ5e1xuXHRcdFx0XHRkYXRhID0gYXdhaXQgdGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcihyZXEscmVzLGRhdGEscmVxdWVzdFRpbWUsZW5kcG9pbnQsbG9nKTtcblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0bG9nRXJyb3IoXCJQb3N0cHJvZHVjZXIgZXJyb3JcIixlKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKEVycm9yVXRpbHMuaXNFcnJvcihkYXRhKSlcblx0XHRcdGRhdGEgPSB7ZXJyb3I6ZGF0YSBhcyBJRXJyb3IsZGF0YTpudWxsfVxuXHRcdFxuICAgICAgICBkYXRhLnJlc3BvbnNlVGltZSA9ICgrbmV3IERhdGUoKSkgLSByZXF1ZXN0VGltZTtcbiAgICAgICAgZGF0YS5jb3JlID0gdGhpcy52ZXJzaW9uXG4gICAgICAgIGRhdGEuZW5kcG9pbnQgPSBlbmRwb2ludCA/PyBcIm5vX2VuZHBvaW50XCJcblx0XHRcblx0XHRpZih0aGlzLm9wdGlvbnMuYXBwVmVyc2lvbilcblx0XHRcdGRhdGEudmVyc2lvbj10aGlzLm9wdGlvbnMuYXBwVmVyc2lvblxuXG5cdFx0XG5cdFx0aWYobG9nKXtcblx0XHRcdGxvZy50aW1lID0gZGF0YS5yZXNwb25zZVRpbWVcblx0XHRcdGxvZy5yZWZlcmVyPXJlZjtcblx0XHR9XG5cblx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZVJlc3BvbnNlKGRhdGEuZW5kcG9pbnQsZGF0YS5yZXNwb25zZVRpbWUpXG5cbiAgICAgICAgaWYocmVzLmRlc3Ryb3llZCB8fCByZXMuY2xvc2VkKXtcblxuXHRcdFx0aWYobG9nKVxuXHRcdFx0XHRsb2cuZXJyb3IgPSBcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2UgZm9yOiBcIitkYXRhLmVuZHBvaW50XG5cdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcbiAgICAgICAgICAgIFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlOiBcIitkYXRhLmVuZHBvaW50LGRhdGEpXG4gICAgICAgICAgICBcblx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVFcnJvcihkYXRhLmVuZHBvaW50KTtcblxuICAgICAgICB9ZWxzZXtcblx0XHRcdHRyeXtcblxuXHRcdFx0XHRpZihkYXRhLmZpbGUpe1xuXG5cdFx0XHRcdFx0cmVzLnNlbmRGaWxlKGRhdGEuZmlsZSxlcnI9Pntcblx0XHRcdFx0XHRcdGlmKGVycil7XG5cdFx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0XHRsb2cuZXJyb3IgPSBcIkNhbid0IHNlbmQgZmlsZTogXCIrZGF0YS5maWxlXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGUsZXJyKVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm1vbml0b3IgJiYgZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlZixyZXMse1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuQ0FOVF9TRU5EX0ZJTEUsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRcdFx0XHRcdGh0dHBTdGF0dXM6NTAwXG5cdFx0XHRcdFx0XHRcdH0scmVxdWVzdFRpbWUsZGF0YS5lbmRwb2ludCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9KVxuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihkYXRhLnJlZGlyZWN0KXtcblx0XHRcdFx0XHRyZXMucmVkaXJlY3QoZGF0YS5yZWRpcmVjdCk7XG5cdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0ge3JlZGlyZWN0OmRhdGEucmVkaXJlY3R9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vIHNldHVwIGhlYWRlcnNcblx0XHRcdFx0XHRpZihkYXRhLmhlYWRlcnMpe1xuXHRcdFx0XHRcdFx0Zm9yKGxldCBpIGluIGRhdGEuaGVhZGVycylcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihpLGRhdGEuaGVhZGVyc1tpXSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXMgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzPjk5KVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGUgPSBkYXRhLmVycm9yLmh0dHBTdGF0dXNcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZT1kYXRhLmh0dHBTdGF0dXMgPz8gMjAwXG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoZGF0YS5yYXdSZXNwb25zZSl7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhLmRhdGEpXG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0XHRyZXMuc2VuZChkYXRhKTtcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblxuXHRcdFx0XHRcdFx0aWYoZGF0YS5lcnJvciAmJiB0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIHJlc3BvbnNlXCIsZSk7XG5cdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRsb2cuZXJyb3I9XCJDYW4ndCBzZW5kIHJlc3BvbnNlXCJcblx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gc2hvdyBsb2dcblx0XHRpZih0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nICYmIGxvZylcblx0XHRcdHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cobG9nKVxuICAgIH1cblxuXG5cdGNoZWNrRGF0YUxlbmd0aChkYXRhOmFueSxyZXN1bHQ/OmFueSxsdmw/Om51bWJlcik6YW55e1xuXHRcdFxuXHRcdGlmKCFsdmwpXG5cdFx0XHRsdmw9MDtcblxuXHRcdGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKHR5cGVvZiBkYXRhPT09XCJzdHJpbmdcIiAmJiBkYXRhLmxlbmd0aD4xMDI0KVxuXHRcdFx0XHRyZXR1cm4gZGF0YS5zdWJzdHJpbmcoMCwxMDAwKStcIi4uLiAodG90YWw6XCIgKyBkYXRhLmxlbmd0aCArIFwiKVwiXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHRpZih0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZighcmVzdWx0KVxuXHRcdFx0XHRyZXN1bHQ9e307XG5cdFx0XHRsZXQgYXJyY250ID0gMTAwO1xuXHRcdFx0Zm9yKGxldCBpIGluIGRhdGEpe1xuXHRcdFx0XHRyZXN1bHRbaV09dGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YVtpXSxyZXN1bHRbaV0sbHZsKzEpO1xuXHRcdFx0XHRhcnJjbnQtLTtcblx0XHRcdFx0aWYoYXJyY250PD0wKXtcblx0XHRcdFx0XHRyZXN1bHRbXCIuLi5cIl09XCIuLi4gdG90YWw6IFwiK0FycmF5LmlzQXJyYXkoZGF0YSk/ZGF0YS5sZW5ndGg6T2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQgPz8gbnVsbDtcblx0fVxuXG59XG4iXX0=
@@ -192,7 +192,7 @@ class MysqlService extends BaseService_1.BaseService {
192
192
  let err = null;
193
193
  let sqlData = null;
194
194
  if (this.debug)
195
- console.log("Execute query on transaction: ", trx);
195
+ console.log("Execute query on transaction: ", trx.id);
196
196
  try {
197
197
  sqlData = await trx.conn.query(query);
198
198
  }
@@ -255,7 +255,7 @@ class MysqlService extends BaseService_1.BaseService {
255
255
  };
256
256
  }
257
257
  if (this.debug)
258
- console.log("Commit transaction:", trx);
258
+ console.log("Commit transaction:", trx.id);
259
259
  this.transactions = this.transactions.filter(i => i.id !== tid);
260
260
  if (this.debug)
261
261
  console.log("Transaction pool:", this.transactions);
@@ -278,7 +278,7 @@ class MysqlService extends BaseService_1.BaseService {
278
278
  async rollbackTransaction(trx, donNotRemove) {
279
279
  let err = null;
280
280
  try {
281
- console.log("Rollback started", trx.conn);
281
+ console.log("Rollback started", trx.conn.threadId);
282
282
  await trx.conn.rollback();
283
283
  await trx.conn.commit();
284
284
  trx.conn.removeAllListeners();
@@ -286,10 +286,10 @@ class MysqlService extends BaseService_1.BaseService {
286
286
  if (!donNotRemove)
287
287
  this.transactions = this.transactions.filter(i => i.id !== trx.id);
288
288
  if (this.debug)
289
- console.log("Rollback complete", trx.conn);
289
+ console.log("Rollback complete", trx.conn.threadId);
290
290
  }
291
291
  catch (e) {
292
- (0, LogService_1.logCrit)("${MysqlService.js}", "Can't rollback transaction", trx);
292
+ (0, LogService_1.logCrit)("${MysqlService.js}", "Can't rollback transaction", trx.queries);
293
293
  err = this.createMysqlQueryError(e);
294
294
  }
295
295
  this.storeTransactionAsProblem(trx, "rollback");
@@ -338,7 +338,7 @@ class MysqlService extends BaseService_1.BaseService {
338
338
  this.failReportFileStreamName = file;
339
339
  }
340
340
  if (this.debug)
341
- console.log("Store transaction fail report: ", file, trx, message);
341
+ console.log("Store transaction fail report: ", file, trx.queries, message);
342
342
  if (!this.failReportFileStream)
343
343
  this.failReportFileStream = fs_1.default.createWriteStream(file, { flags: 'a' });
344
344
  this.failReportFileStream.write(JSON.stringify({ queries: trx.queries, time: trx.timestamp, date, message }) + "\n}EOB{\n", err => {
@@ -573,13 +573,13 @@ class MysqlService extends BaseService_1.BaseService {
573
573
  if (transactionID && transactionID > 0) {
574
574
  conn = this.transactions.find(i => i.id === transactionID)?.conn ?? null;
575
575
  if (this.debug)
576
- console.log("Execute query on transaction: ", conn);
576
+ console.log("Execute query on transaction: ", conn?.threadId);
577
577
  }
578
578
  else {
579
579
  conn = await this.pool.getConnection();
580
580
  }
581
581
  if (this.debug)
582
- console.log("Execute query", conn);
582
+ console.log("Execute query", conn?.threadId);
583
583
  if (!conn) {
584
584
  (0, LogService_1.logCrit)("${MysqlService.js}", `No connection created!`);
585
585
  resolve({
@@ -766,4 +766,4 @@ const encrypt = (txt) => {
766
766
  }
767
767
  };
768
768
  exports.default = MysqlService;
769
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEV2SSxNQUFhLFlBQWEsU0FBUSx5QkFBVztJQUV6QyxtQkFBbUIsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDO0lBQzNCLFlBQVksR0FBQyxLQUFLLENBQUM7SUFDbkIsSUFBSSxHQUFpQixJQUFJLENBQUM7SUFDMUIsT0FBTyxDQUFxQjtJQUM1Qixj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QU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0lBQUEsT0FBTSxDQUFDLEVBQUM7UUFDTCxPQUFPLElBQUksQ0FBQztLQUNmO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFVLEVBQWEsRUFBRTtJQUN4QyxJQUFHO1FBQ0MsSUFBSSxRQUFRLEdBQUcsSUFBQSx1QkFBYyxFQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQ3JELFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkQsU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDOUQ7SUFBQSxPQUFNLENBQUMsRUFBQztRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSCxDQUFDLENBQUE7QUFFRCxrQkFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL2ltcG9ydCBteXNxbCwgeyBGaWVsZEluZm8sIE15c3FsRXJyb3IsIFBvb2wsIFBvb2xDb25uZWN0aW9uIH0gZnJvbSBcIm15c3FsXCJcblxuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi9CYXNlU2VydmljZVwiO1xuaW1wb3J0IFNpZ25hbCwgeyBSZXEgfSBmcm9tIFwiYmFkbWZjay1zaWduYWxcIjtcbmltcG9ydCB7IGNyZWF0ZUNpcGhlcml2LCBjcmVhdGVEZWNpcGhlcml2LCBjcmVhdGVIYXNoIH0gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuL0xvZ1NlcnZpY2VcIjtcbmltcG9ydCAqIGFzIG15c3FsIGZyb20gXCJteXNxbDIvcHJvbWlzZVwiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuZXhwb3J0IGNvbnN0IFNfTVlTUUxfU1RBUlRFRD1uZXcgU2lnbmFsPHZvaWQ+KClcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfUVVFUlkgPSBuZXcgUmVxPE15U3FsUXVlcnl8TXlTcWxRdWVyeVtdLE15c3FsUmVzdWx0W10+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9RVUVSWVwiKTtcbi8vZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUkFOU0FDVElPTiA9IG5ldyBSZXE8TXlTcWxRdWVyeVtdLE15c3FsUmVzdWx0Pih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05cIik7XG5cbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVEJFR0lOID0gbmV3IFJlcTx2b2lkLE15c3FsRXJyb3J8bnVtYmVyPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJBTlNBQ1RJT05fQkVHSU5HXCIpOyAvLyByZXR1cm4gdHJhbnNhY3Rpb24gaWQgb3IgbXlzcWwgZXJyb3JcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFFVRVJZPW5ldyBSZXE8e3F1ZXJ5Ok15U3FsUXVlcnksdGlkOm51bWJlcn0sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9BRERfT1BFUkFUSU9OXCIpOyAvLyB0aWQgbWVhbnMgdHJhbnNhY3Rpb24gaWRcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVENPTU1JVD1uZXcgUmVxPG51bWJlcixNeXNxbEVycm9yfG51bGw+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UQ09NTUlUXCIpOyAvLyB0aWRcbmV4cG9ydCBjb25zdCBSRVFfTVlTUUxfVFJPTExCQUNLPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RST0xMQkFDS1wiKTsgLy8gdGlkXG5cbmV4cG9ydCBjb25zdCBleGVjdXRlUXVlcnkgPSBhc3luYyAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT49PntyZXR1cm4gYXdhaXQgUkVRX01ZU1FMX1FVRVJZLnJlcXVlc3QocXVlcnkpfVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsU2VydmljZU9wdGlvbnN7XG4gICAgY29ubmVjdGlvbkxpbWl0Om51bWJlcixcbiAgICBob3N0OnN0cmluZyxcbiAgICB1c2VyOnN0cmluZyxcbiAgICBwYXNzd29yZDpzdHJpbmcsXG4gICAgcG9ydDpudW1iZXIsXG4gICAgZGF0YWJhc2U6c3RyaW5nLCAgXG4gICAgcXVldWVMaW1pdD86bnVtYmVyLFxuICAgIHRyYW5zYWN0aW9uRmFpbFJlcG9ydD86KHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpPT52b2lkLFxuICAgIHRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj86c3RyaW5nLFxuICAgIGRlYnVnPzpib29sZWFuLFxuICAgIG5heFRyYW5zYWN0aW9uV2FpdFRpbWU/Om51bWJlcixcblx0bWlncmF0aW9ucz86e1xuXHRcdGRpcjpzdHJpbmcsXG5cdFx0Y2FsbGJhY2s6KCk9PnZvaWRcblx0fXxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxFcnJvcntcbiAgICBjb2RlOiBzdHJpbmcsXG4gICAgZXJybm86IG51bWJlcixcbiAgICBzcWw6IHN0cmluZyxcbiAgICBuYW1lOnN0cmluZyxcbiAgICBtZXNzYWdlOnN0cmluZ1xuICAgIGZhdGFsPzpib29sZWFuLFxuICAgIHRocm93YWJsZTpib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxSZXN1bHR7XG4gICAgZXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICByb2xsYmFja0Vycm9yPzpNeXNxbEVycm9yfG51bGwsXG4gICAgaXNEdXBsaWNhdGVFcnJvcj86Ym9vbGVhblxuICAgIGRhdGE6YW55XG4gICAgY291bnQ6bnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlTcWxRdWVyeXtcbiAgICBxdWVyeTpzdHJpbmdcbiAgICBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW118TXlzcWxRdWVyeUZpZWxkT2JqZWN0LFxuICAgIHJvbGxiYWNrUXVlcnk/OnN0cmluZ3xudWxsXG4gICAgdHJhbnNhY3Rpb25JRD86bnVtYmVyXG4gICAgdGhyb3dhYmxlPzpib29sZWFuXG4gICAgY2FsY3VsYXRlQ291bnQ/OmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGR7XG4gICAgbmFtZTpzdHJpbmcsXG4gICAgdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLFxuICAgIHN5c3RlbT86Ym9vbGVhbixcbiAgICBpZ25vcmVJbkluc2VydD86Ym9vbGVhbixcbiAgICBpZ25vcmVJblVwZGF0ZT86Ym9vbGVhblxuICAgIHVzZUluUmVwbGFjZT86Ym9vbGVhbixcbiAgICBfcGFyc2VkVmFsdWU/OnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zYWN0aW9ue1xuICAgIGlkOm51bWJlclxuICAgIHRpbWVzdGFtcDpudW1iZXIsXG4gICAgY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixcbiAgICBxdWVyaWVzOntzcWw6c3RyaW5nLHN0YXR1czpzdHJpbmd9W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFF1ZXJ5RmllbGRPYmplY3QgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZHx7bmFtZT86c3RyaW5nfG51bGwsdmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbixpZ25vcmVJbkluc2VydD86Ym9vbGVhbixpZ25vcmVJblVwZGF0ZT86Ym9vbGVhbix1c2VJblJlcGxhY2U/OmJvb2xlYW59PntcblxufVxuICAgIFxuXG4vKipcbiAqIE15c3FsIFNlcnZpY2VzLCBleGVjdXRlIHF1ZXJpZXNcbiAqIE15U3FsUXVlcnkucXVlcnk6XG4gKiBAZmllbGRzIC0gcmVwbGFjZWQgYnkgZmllbGQncyBuYW1lc1xuICogQHZhbHVlcyAtIHJlcGxhY2VkIGJ5IHBhcnNlZCB2YWx1ZXNcbiAqIEBvbnVwZGF0ZSAtIHJlcGFsY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKiBAb25kdXBsaWNhdGUgLSByZXBsYWNlZCBieSBwYWlyIGZpZWxkIG5hbWUgPSB2YWx1ZVxuICovXG5cbmV4cG9ydCBjbGFzcyBNeXNxbFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZXtcblxuICAgIHJlY29ubmVjdGlvblRpbWVvdXQ9MTAwMCozO1xuICAgIHJlY29ubmVjdGluZz1mYWxzZTtcbiAgICBwb29sOm15c3FsLlBvb2x8bnVsbD1udWxsO1xuICAgIG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucztcbiAgICBzZXJ2aWNlU3RhcnRlZD1mYWxzZTtcbiAgICB0aW1lb3V0SUQ6YW55XG5cbiAgICBkZWJ1Zz1mYWxzZTtcblxuICAgIHF1ZXJpZXM9W107IC8vIFRPRE86IFNUT1JFIFFVRVJJRVMgU0VOVFMgQkVGT1JFIFRIRSBTRVJWSUNFIElTIFNUQVJURUQhXG4gICAgc3RhdGljIG5leHRUcmFuc2FjdGlvbklEPTE7XG4gICAgdHJhbnNhY3Rpb25zOklUcmFuc2FjdGlvbltdPVtdXG5cbiAgICBtYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gMTAwMCo2MCoxOyAvLyAxIG1pbiBhbmQgZGV0ZWxldGUgdHJhbnNhY3Rpb25cblxuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtOmZzLldyaXRlU3RyZWFtfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU6c3RyaW5nfG51bGw9bnVsbDtcbiAgICBmYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU6bnVtYmVyPTA7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOk15c3FsU2VydmljZU9wdGlvbnMpe1xuICAgICAgICBzdXBlcihcIm15c3FsXCIpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICBcblxuICAgICAgICAvLyBkZWNyeXB0IHdoZW4gbmVlZGVkXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5ob3N0LnN0YXJ0c1dpdGgoXCJfXCIpKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmhvc3QgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5ob3N0LnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnVzZXIuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudXNlciA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnVzZXIuc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMudXNlclxuICAgICAgICBpZih0aGlzLm9wdGlvbnMuZGF0YWJhc2Uuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGF0YWJhc2UgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5kYXRhYmFzZVxuICAgICAgICBpZih0aGlzLm9wdGlvbnMucGFzc3dvcmQuc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMucGFzc3dvcmQgPSBkZWNyeXB0KHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kZWJ1ZylcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSB0cnVlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5uYXhUcmFuc2FjdGlvbldhaXRUaW1lKVxuICAgICAgICAgICAgdGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lID0gdGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWU7XG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIC8vIGNoZWNrIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZElEczpudW1iZXJbXT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgaWYobm93LWkudGltZXN0YW1wPnRoaXMubWF4VHJhbnNhY3Rpb25XYWl0VGltZSl7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiUmVsZWFzZSB0cmFuc2FjdGlvbiBjb25uZWN0aW9uIGR1ZSB0byB0aW1lb3V0XCIpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbihpLHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkSURzLnB1c2goaS5pZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PiFyZW1vdmVkSURzLmluY2x1ZGVzKGkuaWQpKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVtb3ZlZDogXCIsY291bnQtdGhpcy50cmFuc2FjdGlvbnMubGVuZ3RoKVxuXG4gICAgICAgICAgICBcblxuICAgICAgICB9LDEwMDAqMzApXG5cbiAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGFmdGVyIDE1IG1pbiBvZiBpbmFjdGl2aXR5LCBjbG9zZSBmaWxlXG4gICAgICAgICAgICBpZihEYXRlLm5vdygpLXRoaXMuZmFpbFJlcG9ydExhc3RBY2Nlc3NUaW1lPjEwMDAqNjAqMTUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sMTAwMCo2MCo1KVxuXG4gICAgICAgIGlmKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcikpe1xuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcj11bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY3JlYXRlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0IGRpclwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGV4ZWN1dGVRdWVyeSAocXVlcnk6TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10pOlByb21pc2U8TXlzcWxSZXN1bHRbXT57IHJldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSkgfVxuXG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgLy8gc2V0dXAgcHJvY2VzcyBleGl0IGhhbmRsZXJzIGludGVycnVwdCAoY3RybCtjKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdJTlQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgLy8gdGVybWluYXRlIChraWxsKVxuICAgICAgICBwcm9jZXNzLm9uKCdTSUdURVJNJyxhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbmlzaEFwcCgpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgICAgICBsZXQgcG9vbENyZWF0ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gICAgICAgIHdoaWxlKCFwb29sQ3JlYXRlZCl7XG4gICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIE1ZU1FMIVwiKVxuICAgICAgICAgICAgcG9vbENyZWF0ZWQgPSBhd2FpdCB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgaWYoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjb25uZWN0IHRvIE1ZU1FMISBSZXRyeWluZyBpbiAzIHNlY29uZHMuLi5cIilcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldFRpbWVvdXQocmVzb2x2ZSwzMDAwKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9RVUVSWS5saXN0ZW5lcj1hc3luYyBkYXRhID0+e1xuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZGF0YSkpXG4gICAgICAgICAgICAgICAgZGF0YT1bZGF0YV07XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcz1bXVxuICAgICAgICAgICAgZm9yKGxldCBpIG9mIGRhdGEpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gTXlzcWxTZXJ2aWNlLnByZXBhcmVRdWVyeShpLnF1ZXJ5LGkuZmllbGRzKTtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZShxdWVyeSxpLnJvbGxiYWNrUXVlcnkgPz8gbnVsbCxpLnRyYW5zYWN0aW9uSUQgPz8gMCxpLnRocm93YWJsZSA/PyBmYWxzZSxpLmNhbGN1bGF0ZUNvdW50ID8/IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJpZXM6IFwiLGRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgaWYoaS5lcnJvciAmJiAoaS5lcnJvci5mYXRhbCB8fCBpLmVycm9yLnRocm93YWJsZSkpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1RCRUdJTi5saXN0ZW5lcj1hc3luYyAoKT0+eyAgXG4gICAgICAgICAgICBjb25zdCBjb25uID0gYXdhaXQgdGhpcy5wb29sPy5nZXRDb25uZWN0aW9uKCk7XG4gICAgICAgICAgICBpZighY29ubilcbiAgICAgICAgICAgICAgICByZXR1cm4ge2NvZGU6XCJOT19QT09MXCIsZXJybm86MTAwMDAwLGZhdGFsOnRydWUsc3FsOlwiXCIsbmFtZTpcIk5PX1BPT0xcIixtZXNzYWdlOlwiTXlzcWwgcG9vbCBub3QgY3JlYXRlZFwiLHRocm93YWJsZTpmYWxzZX1cblxuICAgICAgICAgICAgLy8gZmluZCBjb25uIGluIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihpLmNvbm49PT1jb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2NvZGU6XCJDT05OX0lOX1RSWFwiLGVycm5vOjEwMDAwNSxmYXRhbDp0cnVlLHRocm93YWJsZTpmYWxzZSxzcWw6XCJcIixuYW1lOlwiQ09OTl9JTl9UUlhcIixtZXNzYWdlOlwiQ29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwifVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGlkID0gTXlzcWxTZXJ2aWNlLm5leHRUcmFuc2FjdGlvbklEKys7XG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQmVnaW4gdHJhbnNhY3Rpb24gd2l0aCBpZCBcIix0aWQpXG5cbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBhd2FpdCBjb25uLmJlZ2luVHJhbnNhY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBjb25uLnF1ZXJ5KFwiU1RBUlQgVFJBTlNBQ1RJT05cIik7XG4gICAgICAgICAgICAgICAgLy9jb25zdCByZXMgPSBhd2FpdCBjb25uLnF1ZXJ5KFwiU0VUIGF1dG9jb21taXQ9MFwiKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIHN0YXJ0ZWRcIilcblxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHtpZDp0aWQsY29ubjpjb25uLHRpbWVzdGFtcDpEYXRlLm5vdygpLHF1ZXJpZXM6W3tzcWw6XCJTVEFSVCBUUkFOU0FDVElPTlwiLHN0YXR1czpcImVycm9yXCJ9XX0pXG4gICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOnRpZCxcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6RGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICBjb25uOmNvbm4sXG4gICAgICAgICAgICAgICAgcXVlcmllczpbXVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9ucyBwb29sOiBcIix0aGlzLnRyYW5zYWN0aW9ucylcblxuICAgICAgICAgICAgcmV0dXJuIHRpZDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgUkVRX01ZU1FMX1RRVUVSWS5saXN0ZW5lcj1hc3luYyBkYXRhPT57XG4gICAgICAgICAgICBjb25zdCB0cnggPSB0aGlzLnRyYW5zYWN0aW9ucy5maW5kKGk9PmkuaWQ9PT1kYXRhLnRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KVxuICAgICAgICAgICAgICAgIHJldHVybiB7ZXJyOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCIsXG4gICAgICAgICAgICAgICAgfSxkYXRhOm51bGwscm9sbGJhY2tFcnJvcjpudWxsLGNvdW50OjB9XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gTXlzcWxTZXJ2aWNlLnByZXBhcmVRdWVyeShkYXRhLnF1ZXJ5LnF1ZXJ5LGRhdGEucXVlcnkuZmllbGRzKTtcbiAgICAgICAgICAgIGxldCBlcnI9bnVsbDtcbiAgICAgICAgICAgIGxldCBzcWxEYXRhID0gbnVsbDtcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcnkgb24gdHJhbnNhY3Rpb246IFwiLHRyeClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIHNxbERhdGEgPSBhd2FpdCB0cnguY29ubi5xdWVyeShxdWVyeSk7XG4gICAgICAgICAgICB9Y2F0Y2goZSl7IGVyciA9IHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO31cblxuICAgICAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4KTtcbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5xdWVyeS5jYWxjdWxhdGVDb3VudCAmJiBxdWVyeS5pbmRleE9mKFwiU0VMRUNUXCIpPT09MCl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50UXVlcnlSZXN1bHQgPSBhd2FpdCB0cnguY29ubi5xdWVyeShjb3VudFF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvdW50UXVlcnlSZXN1bHQgJiYgY291bnRRdWVyeVJlc3VsdC5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSAoY291bnRRdWVyeVJlc3VsdFswXSBhcyBhbnkpLmNvdW50OyAvLyB0b2RvIDogY2hlY2ssIHByb2JhYmx5IG5vdCB3b3JraW5nICh3cm9uZyBmaWVsZCBvciBzbXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlF1ZXJ5IGV4ZWN1dGlvbiBzdGF0dXM6XCIsZXJyP2Vyci5tZXNzYWdlOlwiY29tcGxldGVkXCIpXG5cbiAgICAgICAgICAgIHRyeC5xdWVyaWVzLnB1c2goe3NxbDpxdWVyeSxzdGF0dXM6ZXJyP2Vyci5tZXNzYWdlOlwiY29tcGxldGVkXCJ9KVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6c3FsRGF0YT9zcWxEYXRhWzBdOm51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6ZXJyLFxuICAgICAgICAgICAgICAgIGNvdW50OmNvdW50XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1RST0xMQkFDSy5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVENPTU1JVC5saXN0ZW5lcj1hc3luYyAodGlkOm51bWJlcik9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PXRpZCk7XG4gICAgICAgICAgICBpZighdHJ4KXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOjEwMDAwNCxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3FsOlwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIlRyYW5zYWN0aW9uIG5vdCBmb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvbW1pdCB0cmFuc2FjdGlvbjpcIix0cngpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBmcm9tIHRyYW5zYWN0aW9uc1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+aS5pZCE9PXRpZCk7XG5cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJUcmFuc2FjdGlvbiBwb29sOlwiLHRoaXMudHJhbnNhY3Rpb25zIClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZXJyID0gYXdhaXQgdGhpcy5jb21taXQodHJ4KTtcblxuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNvbW1pdCh0cng6SVRyYW5zYWN0aW9uKTpQcm9taXNlPE15c3FsRXJyb3J8bnVsbD57XG4gICAgICAgXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIkNPTU1JVFwiKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVsZWFzZSgpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIH1cblxuICAgIGFzeW5jIHJvbGxiYWNrVHJhbnNhY3Rpb24odHJ4OklUcmFuc2FjdGlvbixkb25Ob3RSZW1vdmU/OmJvb2xlYW4pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIHN0YXJ0ZWRcIix0cnguY29ubilcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLnJvbGxiYWNrKCk7XG4gICAgICAgICAgICBhd2FpdCB0cnguY29ubi5jb21taXQoKTtcbiAgICAgICAgICAgIC8vYXdhaXQgdHJ4LmNvbm4ucXVlcnkoXCJST0xMQkFDS1wiKTtcbiAgICAgICAgICAgIHRyeC5jb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgaWYoIWRvbk5vdFJlbW92ZSlcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dHJ4LmlkKTtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSb2xsYmFjayBjb21wbGV0ZVwiLHRyeC5jb25uKVxuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCByb2xsYmFjayB0cmFuc2FjdGlvblwiLHRyeClcbiAgICAgICAgICAgIGVyciA9IHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmVUcmFuc2FjdGlvbkFzUHJvYmxlbSh0cngsXCJyb2xsYmFja1wiKVxuICAgICAgICByZXR1cm4gZXJyO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbmlzaEFwcCgpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIkZpbmlzaGluZyBteXNxbCBzZXJ2aWNlXCIpXG4gICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucylcbiAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbihpKTtcblxuICAgICAgICBpZih0aGlzLnBvb2wpe1xuICAgICAgICAgICAgdHJ5e2F3YWl0IHRoaXMucG9vbC5lbmQoKTt9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgY2xvc2UgTVlTUUwgcG9vbCFcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pXG4gICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgfVxuXG4gICAgcHJlcGFyZUNvdW50UXVlcnkocXVlcnk6c3RyaW5nKTpzdHJpbmd7XG4gICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZygwLGNvdW50UXVlcnkuaW5kZXhPZihcIkxJTUlUXCIpKTtcbiAgICAgICAgY291bnRRdWVyeSA9IGNvdW50UXVlcnkuc3Vic3RyaW5nKGNvdW50UXVlcnkuaW5kZXhPZihcIkZST01cIikpO1xuICAgICAgICBjb3VudFF1ZXJ5ID0gXCJTRUxFQ1QgQ09VTlQoMSkgYXMgYGNvdW50YCBcIitjb3VudFF1ZXJ5XG4gICAgICAgIHJldHVybiBjb3VudFF1ZXJ5O1xuICAgIH1cblxuICAgIGFzeW5jIHN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4OklUcmFuc2FjdGlvbixtZXNzYWdlOnN0cmluZyl7XG5cbiAgICAgICAgaWYoIXRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQgJiYgIXRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3QgcmVwb3J0IGZhaWxlZCB0cmFuc2FjdGlvbiwgbm8gcmVwb3J0IGZ1bmN0aW9uOiB0cmFuc2FjdGlvbkZhaWxSZXBvcnQgaW4gb3B0aW9ucywgYW5kIHRyYW5zYWN0aW9uRmFpbFJlcG9ydERpciBpc250IHNldFwiKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGNvbnN0IHl5eW1tZGQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsMTApLnJlcGxhY2VBbGwoXCItXCIsXCJcIik7XG5cbiAgICAgICAgICAgIC8vc3RvcmUgdHJhbnNhY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyLHl5eW1tZGQrXCIuanNvblwiKTtcbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pe1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lIT09ZmlsZSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0uZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW09bnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYodGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWUpe1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZT1maWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3RvcmUgdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQ6IFwiLGZpbGUsdHJ4LG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubilcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgY29ubiA9IGF3YWl0IHRoaXMucG9vbC5nZXRDb25uZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRlIHF1ZXJ5XCIsY29ubilcblxuICAgICAgICAgICAgICAgIC8vIGlmIGNvbm5lY3Rpb24gbm90IGNyZWF0ZWRcbiAgICAgICAgICAgICAgICBpZighY29ubil7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixgTm8gY29ubmVjdGlvbiBjcmVhdGVkIWApXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJNeXNxbCBwb29sIGNhbnQgZ2V0IGNvbm5lY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIC8vIERvIHNlbmQgcXVlcnlcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgICAgICBpZihpLmNvbm49PT1jb25uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCJZb3VyIGNvbm5lY3Rpb24gaXMgaW4gdHJhbnNhY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFF1ZXJ5KGNvbm4scXVlcnkscmVzb2x2ZSxyb2xsYmFja1F1ZXJ5LHRocm93YWJsZT90cnVlOmZhbHNlLGNhbGN1bGF0ZUNvdW50KTtcblxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gcmVjcmVhdGUgcG9vbCwgY29ubmVjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGlmKGAke2V9YC5pbmRleE9mKCdFQ09OTlJFRlVTRUQnKSE9PS0xKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3JlYXRlUG9vbCgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX0NPTk5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTooZSAmJiB0eXBlb2YgZSA9PT0gXCJvYmplY3RcIiAmJiBcIm1lc3NhZ2VcIiBpbiBlIGFzIGFueSk/KGUgYXMgYW55KS5tZXNzYWdlOlwiTXlzcWwgY2FudCBnZXQgY29ubmVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBzZW5kUXVlcnkoY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixxdWVyeTpzdHJpbmcscmVzb2x2ZTooZGF0YTpNeXNxbFJlc3VsdCk9PnZvaWQscm9sbGJhY2s6c3RyaW5nfG51bGwsdGhyb3dhYmxlOmJvb2xlYW4sY2FsY3VsYXRlQ291bnQ6Ym9vbGVhbil7XG4gICAgICAgIFxuICAgICAgICBsZXQgZXJyQ2F0Y2hlZD1mYWxzZTtcblxuICAgICAgICBjb25uLm9uKFwiZXJyb3JcIixhc3luYyBlcnI9PntcbiAgICAgICAgICAgIGVyckNhdGNoZWQ9dHJ1ZTtcblxuICAgICAgICAgICAgbGV0IHJvbGxiYWNrRXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYocm9sbGJhY2spXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcj0oYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4scm9sbGJhY2spKS5lcnJcbiAgICAgICBcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5jb25uLm9uKCdlcnJvcicpXCIsZXJyKVxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uIG9uIHN1Y2Nlc3NcbiAgICAgICAgICAgIHRyeXtcblxuICAgICAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgY29ubi5kZXN0cm95KClcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG4gICAgIFxuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6e1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIkNPTk5fRVJSXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDMsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIkVycm9yOiBcIitlcnIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuXG5cbiAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLHF1ZXJ5KVxuXG4gICAgICAgIC8vIHNlbmQgcXVlcnlcbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixxdWVyeSk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVycm9yXG4gICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVycil7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHJvbGxiYWNrXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvcj1udWxsO1xuICAgICAgICAgICAgaWYocm9sbGJhY2spXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcj0oYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4scm9sbGJhY2spKS5lcnJcblxuICAgICAgICAgICAgLy8gY2xvc2UgY29ubmVjdGlvblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbm4ucmVsZWFzZSgpO1xuICAgICAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuXG5cblxuICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIGR1cGxpY2F0ZSBlcnJvclxuICAgICAgICAgICAgbGV0IGR1cD1mYWxzZTtcbiAgICAgICAgICAgIGlmKHF1ZXJ5UmVzdWx0LmVyciAmJiBxdWVyeVJlc3VsdC5lcnIuY29kZSAmJiBxdWVyeVJlc3VsdC5lcnIuY29kZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJlcl9kdXBfZW50cnlcIikhPT0tMSlcbiAgICAgICAgICAgICAgICBkdXA9dHJ1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPnF1ZXJ5IGVycm9yXCIscXVlcnlSZXN1bHQuZXJyKTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6ey4uLnF1ZXJ5UmVzdWx0LmVycix0aHJvd2FibGU6dGhyb3dhYmxlfSxcbiAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgcm9sbGJhY2tFcnJvcjpyb2xsYmFja0Vycm9yLFxuICAgICAgICAgICAgICAgIGlzRHVwbGljYXRlRXJyb3I6ZHVwLFxuICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBpZihjYWxjdWxhdGVDb3VudCAmJiBxdWVyeS5pbmRleE9mKFwiU0VMRUNUXCIpPT09MCl7XG4gICAgICAgICAgICBsZXQgY291bnRRdWVyeSA9IHRoaXMucHJlcGFyZUNvdW50UXVlcnkocXVlcnkpO1xuICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdC5lcnIpXG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPnF1ZXJ5IGVycm9yXCIsY291bnRRdWVyeVJlc3VsdC5lcnIpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMgJiYgY291bnRRdWVyeVJlc3VsdC5yZXN1bHRzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHNbMF0uY291bnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICAvLyBjbG9zZSBjb25uIG9uIHN1Y2Nlc3NcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBjb25uLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICB9Y2F0Y2goZSl7fVxuXG4gICAgICAgIC8vIGhhbmRsZSBzdWNjZXNzXG4gICAgICAgIGNvbnN0IGVyciA9IHF1ZXJ5UmVzdWx0LmVycj97Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9Om51bGw7XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgZXJyb3I6ZXJyLFxuICAgICAgICAgICAgZGF0YTpxdWVyeVJlc3VsdC5yZXN1bHRzLFxuICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8vIEFzeW5jIHF1ZXJ5IHdyYXBwZXIgdG8gY29ubi5xdWVyeVxuICAgIGFzeW5jIHF1ZXJ5QXN5bmMoY29ubjpteXNxbC5Qb29sQ29ubmVjdGlvbixxdWVyeTpzdHJpbmcpOlByb21pc2U8e2VycjpNeXNxbEVycm9yfG51bGwscmVzdWx0cz86YW55fT57XG5cbiAgICAgICAgbGV0IHJlc3VsdD1udWxsO1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBjb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgcmV0dXJuIHtlcnI6dGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycjpudWxsLFxuICAgICAgICAgICAgcmVzdWx0czpyZXN1bHRbMF0sXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZXJyOmFueSx0aHJvd2FibGU/OmJvb2xlYW4pOk15c3FsRXJyb3J7XG4gICAgICAgIGlmKGVyciAmJiAgdHlwZW9mIGVycj09PVwib2JqZWN0XCIgJiYgXCJjb2RlXCIgaW4gZXJyICYmIFwiZXJybm9cIiBpbiBlcnIgJiYgXCJzcWxcIiBpbiBlcnIgJiYgXCJuYW1lXCIgaW4gZXJyICYmIFwibWVzc2FnZVwiIGluIGVycil7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBlcnIuY29kZSxcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IGVyci5lcnJubyxcbiAgICAgICAgICAgICAgICAgICAgc3FsOiBlcnIuc3FsLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOmVyci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOmVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiUVVFUllfRVJSXCIsXG4gICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMixcbiAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzcWw6IFwibm8gcXVlcnlcIixcbiAgICAgICAgICAgICAgICBuYW1lOlwiUVVFUllfRVJSXCIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTpcIkVycm9yOiBcIisoZXJyKT9lcnI6XCJcIixcbiAgICAgICAgICAgICAgICB0aHJvd2FibGU6dGhyb3dhYmxlP3RydWU6ZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5jb25zdCBzZWNyZXRfa2V5PVwiQUtMV2thanclXiZkZ3dxaHcjOTg0NTNpMjNiZmsyM3JuMmtua25nbHJnamVpdFwiXG5jb25zdCBzZWNyZXRfaXY9XCJydGhhZHJmazIzcm4ya24jKkZOS0FAZ3Q0NGRmM3RzbHJnaiMjIWl0XCJcblxuLy8gR2VuZXJhdGUgc2VjcmV0IGhhc2ggd2l0aCBjcnlwdG8gdG8gdXNlIGZvciBlbmNyeXB0aW9uXG5jb25zdCBrZXkgPSBjcmVhdGVIYXNoKCdzaGE1MTInKS51cGRhdGUoc2VjcmV0X2tleSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMzIpXG5jb25zdCBpdiA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfaXYpLmRpZ2VzdCgnaGV4Jykuc3Vic3RyaW5nKDAsIDE2KVxuXG5jb25zdCBkZWNyeXB0ID0oZW5jcnlwdGVkOnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ2JpbmFyeScpO1xuICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcmVhdGVEZWNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleSwgaXYpO1xuICAgICAgbGV0IGRlY3J5cHRlZCA9IGRlY2lwaGVyLnVwZGF0ZShlbmNyeXB0ZWQsICdiaW5hcnknLCAndXRmOCcpO1xuICAgICAgZGVjcnlwdGVkICs9IGRlY2lwaGVyLmZpbmFsKCd1dGY4Jyk7XG4gICAgICByZXR1cm4gZGVjcnlwdGVkO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5jb25zdCBlbmNyeXB0ID0gKHR4dDpzdHJpbmcpOnN0cmluZ3xudWxsPT57XG4gIHRyeXtcbiAgICAgIGxldCBlbmNpcGhlciA9IGNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIGtleSwgaXYpLFxuICAgICAgZW5jcnlwdGVkID0gZW5jaXBoZXIudXBkYXRlKHR4dCwgJ3V0ZjgnLCAnYmluYXJ5Jyk7XG4gICAgICBlbmNyeXB0ZWQgKz0gZW5jaXBoZXIuZmluYWwoJ2JpbmFyeScpO1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVuY3J5cHRlZCwgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfWNhdGNoKGUpe1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTXlzcWxTZXJ2aWNlOyJdfQ==
769
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlzcWxTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaVNlcnZlci9NeXNxbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSwrQ0FBNEM7QUFDNUMsaUVBQTZDO0FBQzdDLG1DQUFxRTtBQUNyRSw2Q0FBMEQ7QUFDMUQsc0RBQXVDO0FBQ3ZDLDRDQUFtQjtBQUNuQixnREFBdUI7QUFFVixRQUFBLGVBQWUsR0FBQyxJQUFJLHdCQUFNLEVBQVEsQ0FBQTtBQUNsQyxRQUFBLGVBQWUsR0FBRyxJQUFJLG9CQUFHLENBQXdDLFNBQVMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRzlGLFFBQUEsZ0JBQWdCLEdBQUcsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM3RixRQUFBLGdCQUFnQixHQUFDLElBQUksb0JBQUcsQ0FBNEMsU0FBUyxFQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDckgsUUFBQSxpQkFBaUIsR0FBQyxJQUFJLG9CQUFHLENBQXlCLFNBQVMsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsbUJBQW1CLEdBQUMsSUFBSSxvQkFBRyxDQUF5QixTQUFTLEVBQUMscUJBQXFCLENBQUMsQ0FBQztBQUUzRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBd0IsRUFBRSxHQUFDLE9BQU8sTUFBTSx1QkFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtBQUExSCxRQUFBLFlBQVksZ0JBQThHO0FBOEV2SSxNQUFhLFlBQWEsU0FBUSx5QkFBVztJQUV6QyxtQkFBbUIsR0FBQyxJQUFJLEdBQUMsQ0FBQyxDQUFDO0lBQzNCLFlBQVksR0FBQyxLQUFLLENBQUM7SUFDbkIsSUFBSSxHQUFpQixJQUFJLENBQUM7SUFDMUIsT0FBTyxDQUFxQjtJQUM1Qixj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eUJBQWdCLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsT0FBTyxTQUFTLENBQUM7S0FDcEI7SUFBQSxPQUFNLENBQUMsRUFBQztRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVUsRUFBYSxFQUFFO0lBQ3hDLElBQUc7UUFDQyxJQUFJLFFBQVEsR0FBRyxJQUFBLHVCQUFjLEVBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFDckQsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRCxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5RDtJQUFBLE9BQU0sQ0FBQyxFQUFDO1FBQ0wsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUNILENBQUMsQ0FBQTtBQUVELGtCQUFlLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vaW1wb3J0IG15c3FsLCB7IEZpZWxkSW5mbywgTXlzcWxFcnJvciwgUG9vbCwgUG9vbENvbm5lY3Rpb24gfSBmcm9tIFwibXlzcWxcIlxuXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gXCIuL0Jhc2VTZXJ2aWNlXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgY3JlYXRlQ2lwaGVyaXYsIGNyZWF0ZURlY2lwaGVyaXYsIGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCB7IGxvZ0NyaXQsIGxvZ0Vycm9yLCBsb2dJbmZvIH0gZnJvbSBcIi4vTG9nU2VydmljZVwiO1xuaW1wb3J0ICogYXMgbXlzcWwgZnJvbSBcIm15c3FsMi9wcm9taXNlXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgU19NWVNRTF9TVEFSVEVEPW5ldyBTaWduYWw8dm9pZD4oKVxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9RVUVSWSA9IG5ldyBSZXE8TXlTcWxRdWVyeXxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHRbXT4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1FVRVJZXCIpO1xuLy9leHBvcnQgY29uc3QgUkVRX01ZU1FMX1RSQU5TQUNUSU9OID0gbmV3IFJlcTxNeVNxbFF1ZXJ5W10sTXlzcWxSZXN1bHQ+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTlwiKTtcblxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQkVHSU4gPSBuZXcgUmVxPHZvaWQsTXlzcWxFcnJvcnxudW1iZXI+KHVuZGVmaW5lZCxcIlJFUV9NWVNRTF9UUkFOU0FDVElPTl9CRUdJTkdcIik7IC8vIHJldHVybiB0cmFuc2FjdGlvbiBpZCBvciBteXNxbCBlcnJvclxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUVVFUlk9bmV3IFJlcTx7cXVlcnk6TXlTcWxRdWVyeSx0aWQ6bnVtYmVyfSxNeXNxbFJlc3VsdD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RSQU5TQUNUSU9OX0FERF9PUEVSQVRJT05cIik7IC8vIHRpZCBtZWFucyB0cmFuc2FjdGlvbiBpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UQ09NTUlUPW5ldyBSZXE8bnVtYmVyLE15c3FsRXJyb3J8bnVsbD4odW5kZWZpbmVkLFwiUkVRX01ZU1FMX1RDT01NSVRcIik7IC8vIHRpZFxuZXhwb3J0IGNvbnN0IFJFUV9NWVNRTF9UUk9MTEJBQ0s9bmV3IFJlcTxudW1iZXIsTXlzcWxFcnJvcnxudWxsPih1bmRlZmluZWQsXCJSRVFfTVlTUUxfVFJPTExCQUNLXCIpOyAvLyB0aWRcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVRdWVyeSA9IGFzeW5jIChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPj0+e3JldHVybiBhd2FpdCBSRVFfTVlTUUxfUVVFUlkucmVxdWVzdChxdWVyeSl9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxTZXJ2aWNlT3B0aW9uc3tcbiAgICBjb25uZWN0aW9uTGltaXQ6bnVtYmVyLFxuICAgIGhvc3Q6c3RyaW5nLFxuICAgIHVzZXI6c3RyaW5nLFxuICAgIHBhc3N3b3JkOnN0cmluZyxcbiAgICBwb3J0Om51bWJlcixcbiAgICBkYXRhYmFzZTpzdHJpbmcsICBcbiAgICBxdWV1ZUxpbWl0PzpudW1iZXIsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0PzoodHJ4OklUcmFuc2FjdGlvbixtZXNzYWdlOnN0cmluZyk9PnZvaWQsXG4gICAgdHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPzpzdHJpbmcsXG4gICAgZGVidWc/OmJvb2xlYW4sXG4gICAgbmF4VHJhbnNhY3Rpb25XYWl0VGltZT86bnVtYmVyLFxuXHRtaWdyYXRpb25zPzp7XG5cdFx0ZGlyOnN0cmluZyxcblx0XHRjYWxsYmFjazooKT0+dm9pZFxuXHR9fG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbEVycm9ye1xuICAgIGNvZGU6IHN0cmluZyxcbiAgICBlcnJubzogbnVtYmVyLFxuICAgIHNxbDogc3RyaW5nLFxuICAgIG5hbWU6c3RyaW5nLFxuICAgIG1lc3NhZ2U6c3RyaW5nXG4gICAgZmF0YWw/OmJvb2xlYW4sXG4gICAgdGhyb3dhYmxlOmJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbFJlc3VsdHtcbiAgICBlcnJvcj86TXlzcWxFcnJvcnxudWxsLFxuICAgIHJvbGxiYWNrRXJyb3I/Ok15c3FsRXJyb3J8bnVsbCxcbiAgICBpc0R1cGxpY2F0ZUVycm9yPzpib29sZWFuXG4gICAgZGF0YTphbnlcbiAgICBjb3VudDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNeVNxbFF1ZXJ5e1xuICAgIHF1ZXJ5OnN0cmluZ1xuICAgIGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QsXG4gICAgcm9sbGJhY2tRdWVyeT86c3RyaW5nfG51bGxcbiAgICB0cmFuc2FjdGlvbklEPzpudW1iZXJcbiAgICB0aHJvd2FibGU/OmJvb2xlYW5cbiAgICBjYWxjdWxhdGVDb3VudD86Ym9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZHtcbiAgICBuYW1lOnN0cmluZyxcbiAgICB2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsXG4gICAgc3lzdGVtPzpib29sZWFuLFxuICAgIGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLFxuICAgIGlnbm9yZUluVXBkYXRlPzpib29sZWFuXG4gICAgdXNlSW5SZXBsYWNlPzpib29sZWFuLFxuICAgIF9wYXJzZWRWYWx1ZT86c3RyaW5nfG51bWJlcnxib29sZWFufG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNhY3Rpb257XG4gICAgaWQ6bnVtYmVyXG4gICAgdGltZXN0YW1wOm51bWJlcixcbiAgICBjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLFxuICAgIHF1ZXJpZXM6e3NxbDpzdHJpbmcsc3RhdHVzOnN0cmluZ31bXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE15c3FsUXVlcnlGaWVsZE9iamVjdCBleHRlbmRzIFJlY29yZDxzdHJpbmcsc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkfHtuYW1lPzpzdHJpbmd8bnVsbCx2YWx1ZTpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbHx1bmRlZmluZWQsc3lzdGVtPzpib29sZWFuLGlnbm9yZUluSW5zZXJ0Pzpib29sZWFuLGlnbm9yZUluVXBkYXRlPzpib29sZWFuLHVzZUluUmVwbGFjZT86Ym9vbGVhbn0+e1xuXG59XG4gICAgXG5cbi8qKlxuICogTXlzcWwgU2VydmljZXMsIGV4ZWN1dGUgcXVlcmllc1xuICogTXlTcWxRdWVyeS5xdWVyeTpcbiAqIEBmaWVsZHMgLSByZXBsYWNlZCBieSBmaWVsZCdzIG5hbWVzXG4gKiBAdmFsdWVzIC0gcmVwbGFjZWQgYnkgcGFyc2VkIHZhbHVlc1xuICogQG9udXBkYXRlIC0gcmVwYWxjZWQgYnkgcGFpciBmaWVsZCBuYW1lID0gdmFsdWVcbiAqIEBvbmR1cGxpY2F0ZSAtIHJlcGxhY2VkIGJ5IHBhaXIgZmllbGQgbmFtZSA9IHZhbHVlXG4gKi9cblxuZXhwb3J0IGNsYXNzIE15c3FsU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNle1xuXG4gICAgcmVjb25uZWN0aW9uVGltZW91dD0xMDAwKjM7XG4gICAgcmVjb25uZWN0aW5nPWZhbHNlO1xuICAgIHBvb2w6bXlzcWwuUG9vbHxudWxsPW51bGw7XG4gICAgb3B0aW9uczpNeXNxbFNlcnZpY2VPcHRpb25zO1xuICAgIHNlcnZpY2VTdGFydGVkPWZhbHNlO1xuICAgIHRpbWVvdXRJRDphbnlcblxuICAgIGRlYnVnPWZhbHNlO1xuXG4gICAgcXVlcmllcz1bXTsgLy8gVE9ETzogU1RPUkUgUVVFUklFUyBTRU5UUyBCRUZPUkUgVEhFIFNFUlZJQ0UgSVMgU1RBUlRFRCFcbiAgICBzdGF0aWMgbmV4dFRyYW5zYWN0aW9uSUQ9MTtcbiAgICB0cmFuc2FjdGlvbnM6SVRyYW5zYWN0aW9uW109W11cblxuICAgIG1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSAxMDAwKjYwKjE7IC8vIDEgbWluIGFuZCBkZXRlbGV0ZSB0cmFuc2FjdGlvblxuXG4gICAgZmFpbFJlcG9ydEZpbGVTdHJlYW06ZnMuV3JpdGVTdHJlYW18bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZTpzdHJpbmd8bnVsbD1udWxsO1xuICAgIGZhaWxSZXBvcnRMYXN0QWNjZXNzVGltZTpudW1iZXI9MDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6TXlzcWxTZXJ2aWNlT3B0aW9ucyl7XG4gICAgICAgIHN1cGVyKFwibXlzcWxcIik7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIFxuXG4gICAgICAgIC8vIGRlY3J5cHQgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmhvc3Quc3RhcnRzV2l0aChcIl9cIikpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuaG9zdCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmhvc3Quc3Vic3RyaW5nKDEpKSA/PyB0aGlzLm9wdGlvbnMuaG9zdFxuICAgICAgICBpZih0aGlzLm9wdGlvbnMudXNlci5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51c2VyID0gZGVjcnlwdCh0aGlzLm9wdGlvbnMudXNlci5zdWJzdHJpbmcoMSkpID8/IHRoaXMub3B0aW9ucy51c2VyXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5kYXRhYmFzZS5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5kYXRhYmFzZSA9IGRlY3J5cHQodGhpcy5vcHRpb25zLmRhdGFiYXNlLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgIGlmKHRoaXMub3B0aW9ucy5wYXNzd29yZC5zdGFydHNXaXRoKFwiX1wiKSlcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXNzd29yZCA9IGRlY3J5cHQodGhpcy5vcHRpb25zLnBhc3N3b3JkLnN1YnN0cmluZygxKSkgPz8gdGhpcy5vcHRpb25zLnBhc3N3b3JkXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmRlYnVnKVxuICAgICAgICAgICAgdGhpcy5kZWJ1ZyA9IHRydWVcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLm5heFRyYW5zYWN0aW9uV2FpdFRpbWUpXG4gICAgICAgICAgICB0aGlzLm1heFRyYW5zYWN0aW9uV2FpdFRpbWUgPSB0aGlzLm9wdGlvbnMubmF4VHJhbnNhY3Rpb25XYWl0VGltZTtcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgLy8gY2hlY2sgdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkSURzOm51bWJlcltdPVtdO1xuICAgICAgICAgICAgZm9yKGxldCBpIG9mIHRoaXMudHJhbnNhY3Rpb25zKXtcbiAgICAgICAgICAgICAgICBpZihub3ctaS50aW1lc3RhbXA+dGhpcy5tYXhUcmFuc2FjdGlvbldhaXRUaW1lKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJSZWxlYXNlIHRyYW5zYWN0aW9uIGNvbm5lY3Rpb24gZHVlIHRvIHRpbWVvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKGksdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJRHMucHVzaChpLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB0aGlzLnRyYW5zYWN0aW9ucy5maWx0ZXIoaT0+IXJlbW92ZWRJRHMuaW5jbHVkZXMoaS5pZCkpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZW1vdmVkOiBcIixjb3VudC10aGlzLnRyYW5zYWN0aW9ucy5sZW5ndGgpXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgIH0sMTAwMCozMClcblxuICAgICAgICBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYWZ0ZXIgMTUgbWluIG9mIGluYWN0aXZpdHksIGNsb3NlIGZpbGVcbiAgICAgICAgICAgIGlmKERhdGUubm93KCktdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWU+MTAwMCo2MCoxNSl7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwxMDAwKjYwKjUpXG5cbiAgICAgICAgaWYob3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIpe1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKSl7XG4gICAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhvcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyPXVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBsb2dDcml0KFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDYW4ndCBjcmVhdGUgdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZGlyXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZXhlY3V0ZVF1ZXJ5IChxdWVyeTpNeVNxbFF1ZXJ5fE15U3FsUXVlcnlbXSk6UHJvbWlzZTxNeXNxbFJlc3VsdFtdPnsgcmV0dXJuIGF3YWl0IFJFUV9NWVNRTF9RVUVSWS5yZXF1ZXN0KHF1ZXJ5KSB9XG5cbiAgICBhc3luYyBpbml0KCl7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcblxuICAgICAgICAvLyBzZXR1cCBwcm9jZXNzIGV4aXQgaGFuZGxlcnMgaW50ZXJydXB0IChjdHJsK2MpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAgIFxuICAgICAgICAvLyB0ZXJtaW5hdGUgKGtpbGwpXG4gICAgICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmluaXNoQXBwKCk7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VydmljZVN0YXJ0ZWQ9ZmFsc2U7XG4gICAgICAgIGxldCBwb29sQ3JlYXRlZDpib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgd2hpbGUoIXBvb2xDcmVhdGVkKXtcbiAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RpbmcgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICBwb29sQ3JlYXRlZCA9IGF3YWl0IHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICBpZighcG9vbENyZWF0ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhIFJldHJ5aW5nIGluIDMgc2Vjb25kcy4uLlwiKVxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+c2V0VGltZW91dChyZXNvbHZlLDMwMDApKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgUkVRX01ZU1FMX1FVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGEgPT57XG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShkYXRhKSlcbiAgICAgICAgICAgICAgICBkYXRhPVtkYXRhXTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzPVtdXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgZGF0YSl7XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGkucXVlcnksaS5maWVsZHMpO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5leGVjdXRlKHF1ZXJ5LGkucm9sbGJhY2tRdWVyeSA/PyBudWxsLGkudHJhbnNhY3Rpb25JRCA/PyAwLGkudGhyb3dhYmxlID8/IGZhbHNlLGkuY2FsY3VsYXRlQ291bnQgPz8gZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkV4ZWN1dGUgcXVlcmllczogXCIsZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgcmVzdWx0KXtcbiAgICAgICAgICAgICAgICBpZihpLmVycm9yICYmIChpLmVycm9yLmZhdGFsIHx8IGkuZXJyb3IudGhyb3dhYmxlKSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVEJFR0lOLmxpc3RlbmVyPWFzeW5jICgpPT57ICBcbiAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKTtcbiAgICAgICAgICAgIGlmKCFjb25uKVxuICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIk5PX1BPT0xcIixlcnJubzoxMDAwMDAsZmF0YWw6dHJ1ZSxzcWw6XCJcIixuYW1lOlwiTk9fUE9PTFwiLG1lc3NhZ2U6XCJNeXNxbCBwb29sIG5vdCBjcmVhdGVkXCIsdGhyb3dhYmxlOmZhbHNlfVxuXG4gICAgICAgICAgICAvLyBmaW5kIGNvbm4gaW4gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpe1xuICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBsb2dJbmZvKFwiWW91ciBjb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y29kZTpcIkNPTk5fSU5fVFJYXCIsZXJybm86MTAwMDA1LGZhdGFsOnRydWUsdGhyb3dhYmxlOmZhbHNlLHNxbDpcIlwiLG5hbWU6XCJDT05OX0lOX1RSWFwiLG1lc3NhZ2U6XCJDb25uZWN0aW9uIGlzIGluIHRyYW5zYWN0aW9uXCJ9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aWQgPSBNeXNxbFNlcnZpY2UubmV4dFRyYW5zYWN0aW9uSUQrKztcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCZWdpbiB0cmFuc2FjdGlvbiB3aXRoIGlkIFwiLHRpZClcblxuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGNvbm4uYmVnaW5UcmFuc2FjdGlvbigpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbm4ucXVlcnkoXCJTVEFSVCBUUkFOU0FDVElPTlwiKTtcbiAgICAgICAgICAgICAgICAvL2NvbnN0IHJlcyA9IGF3YWl0IGNvbm4ucXVlcnkoXCJTRVQgYXV0b2NvbW1pdD0wXCIpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb24gc3RhcnRlZFwiKVxuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oe2lkOnRpZCxjb25uOmNvbm4sdGltZXN0YW1wOkRhdGUubm93KCkscXVlcmllczpbe3NxbDpcIlNUQVJUIFRSQU5TQUNUSU9OXCIsc3RhdHVzOlwiZXJyb3JcIn1dfSlcbiAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6dGlkLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgIGNvbm46Y29ubixcbiAgICAgICAgICAgICAgICBxdWVyaWVzOltdXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVHJhbnNhY3Rpb25zIHBvb2w6IFwiLHRoaXMudHJhbnNhY3Rpb25zKVxuXG4gICAgICAgICAgICByZXR1cm4gdGlkO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBSRVFfTVlTUUxfVFFVRVJZLmxpc3RlbmVyPWFzeW5jIGRhdGE9PntcbiAgICAgICAgICAgIGNvbnN0IHRyeCA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbmQoaT0+aS5pZD09PWRhdGEudGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtlcnI6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzoxMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIGZhdGFsOnRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIixcbiAgICAgICAgICAgICAgICB9LGRhdGE6bnVsbCxyb2xsYmFja0Vycm9yOm51bGwsY291bnQ6MH1cblxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSBNeXNxbFNlcnZpY2UucHJlcGFyZVF1ZXJ5KGRhdGEucXVlcnkucXVlcnksZGF0YS5xdWVyeS5maWVsZHMpO1xuICAgICAgICAgICAgbGV0IGVycj1udWxsO1xuICAgICAgICAgICAgbGV0IHNxbERhdGEgPSBudWxsO1xuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsdHJ4LmlkKVxuXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgc3FsRGF0YSA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgIH1jYXRjaChlKXsgZXJyID0gdGhpcy5jcmVhdGVNeXNxbFF1ZXJ5RXJyb3IoZSk7fVxuXG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgaWYoZXJyKVxuICAgICAgICAgICAgICAgIHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBpZihkYXRhLnF1ZXJ5LmNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvdW50UXVlcnkgPSB0aGlzLnByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRRdWVyeVJlc3VsdCA9IGF3YWl0IHRyeC5jb25uLnF1ZXJ5KGNvdW50UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY291bnRRdWVyeVJlc3VsdCAmJiBjb3VudFF1ZXJ5UmVzdWx0Lmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IChjb3VudFF1ZXJ5UmVzdWx0WzBdIGFzIGFueSkuY291bnQ7IC8vIHRvZG8gOiBjaGVjaywgcHJvYmFibHkgbm90IHdvcmtpbmcgKHdyb25nIGZpZWxkIG9yIHNtdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiJHtNeXNxbFNlcnZpY2UuanN9LT5xdWVyeSBlcnJvclwiLGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUXVlcnkgZXhlY3V0aW9uIHN0YXR1czpcIixlcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIilcblxuICAgICAgICAgICAgdHJ4LnF1ZXJpZXMucHVzaCh7c3FsOnF1ZXJ5LHN0YXR1czplcnI/ZXJyLm1lc3NhZ2U6XCJjb21wbGV0ZWRcIn0pXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTpzcWxEYXRhP3NxbERhdGFbMF06bnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICAgICAgY291bnQ6Y291bnRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBSRVFfTVlTUUxfVFJPTExCQUNLLmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0aHJvd2FibGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNxbDpcIlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fVFJYXCIsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XCJUcmFuc2FjdGlvbiBub3QgZm91bmRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yb2xsYmFja1RyYW5zYWN0aW9uKHRyeCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJFUV9NWVNRTF9UQ09NTUlULmxpc3RlbmVyPWFzeW5jICh0aWQ6bnVtYmVyKT0+e1xuICAgICAgICAgICAgY29uc3QgdHJ4ID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dGlkKTtcbiAgICAgICAgICAgIGlmKCF0cngpe1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6XCJOT19UUlhcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86MTAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBmYXRhbDp0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzcWw6XCJcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTpcIk5PX1RSWFwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiVHJhbnNhY3Rpb24gbm90IGZvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTpmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBpZih0aGlzLmRlYnVnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29tbWl0IHRyYW5zYWN0aW9uOlwiLHRyeC5pZClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdHJhbnNhY3Rpb25zXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHRoaXMudHJhbnNhY3Rpb25zLmZpbHRlcihpPT5pLmlkIT09dGlkKTtcblxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlRyYW5zYWN0aW9uIHBvb2w6XCIsdGhpcy50cmFuc2FjdGlvbnMgKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBhd2FpdCB0aGlzLmNvbW1pdCh0cngpO1xuXG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY29tbWl0KHRyeDpJVHJhbnNhY3Rpb24pOlByb21pc2U8TXlzcWxFcnJvcnxudWxsPntcbiAgICAgICBcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4uY29tbWl0KCk7XG4gICAgICAgICAgICAvL2F3YWl0IHRyeC5jb25uLnF1ZXJ5KFwiQ09NTUlUXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbih0cngpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTXlzcWxRdWVyeUVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgfVxuXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbih0cng6SVRyYW5zYWN0aW9uLGRvbk5vdFJlbW92ZT86Ym9vbGVhbik6UHJvbWlzZTxNeXNxbEVycm9yfG51bGw+e1xuICAgICAgICBsZXQgZXJyPW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUm9sbGJhY2sgc3RhcnRlZFwiLHRyeC5jb25uLnRocmVhZElkKVxuICAgICAgICAgICAgYXdhaXQgdHJ4LmNvbm4ucm9sbGJhY2soKTtcbiAgICAgICAgICAgIGF3YWl0IHRyeC5jb25uLmNvbW1pdCgpO1xuICAgICAgICAgICAgLy9hd2FpdCB0cnguY29ubi5xdWVyeShcIlJPTExCQUNLXCIpO1xuICAgICAgICAgICAgdHJ4LmNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICB0cnguY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICBpZighZG9uTm90UmVtb3ZlKVxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0gdGhpcy50cmFuc2FjdGlvbnMuZmlsdGVyKGk9PmkuaWQhPT10cnguaWQpO1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJvbGxiYWNrIGNvbXBsZXRlXCIsdHJ4LmNvbm4udGhyZWFkSWQpXG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJvbGxiYWNrIHRyYW5zYWN0aW9uXCIsdHJ4LnF1ZXJpZXMpXG4gICAgICAgICAgICBlcnIgPSB0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlVHJhbnNhY3Rpb25Bc1Byb2JsZW0odHJ4LFwicm9sbGJhY2tcIilcbiAgICAgICAgcmV0dXJuIGVycjtcbiAgICB9XG5cbiAgICBhc3luYyBmaW5pc2hBcHAoKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hpbmcgbXlzcWwgc2VydmljZVwiKVxuICAgICAgICBmb3IobGV0IGkgb2YgdGhpcy50cmFuc2FjdGlvbnMpXG4gICAgICAgICAgICB0aGlzLnJvbGxiYWNrVHJhbnNhY3Rpb24oaSk7XG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS5lbmQoKTtcbiAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbT1udWxsO1xuICAgIH1cblxuICAgIHByZXBhcmVDb3VudFF1ZXJ5KHF1ZXJ5OnN0cmluZyk6c3RyaW5ne1xuICAgICAgICBsZXQgY291bnRRdWVyeSA9IHF1ZXJ5O1xuICAgICAgICBjb3VudFF1ZXJ5ID0gY291bnRRdWVyeS5zdWJzdHJpbmcoMCxjb3VudFF1ZXJ5LmluZGV4T2YoXCJMSU1JVFwiKSk7XG4gICAgICAgIGNvdW50UXVlcnkgPSBjb3VudFF1ZXJ5LnN1YnN0cmluZyhjb3VudFF1ZXJ5LmluZGV4T2YoXCJGUk9NXCIpKTtcbiAgICAgICAgY291bnRRdWVyeSA9IFwiU0VMRUNUIENPVU5UKDEpIGFzIGBjb3VudGAgXCIrY291bnRRdWVyeVxuICAgICAgICByZXR1cm4gY291bnRRdWVyeTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZVRyYW5zYWN0aW9uQXNQcm9ibGVtKHRyeDpJVHJhbnNhY3Rpb24sbWVzc2FnZTpzdHJpbmcpe1xuXG4gICAgICAgIGlmKCF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0ICYmICF0aGlzLm9wdGlvbnMudHJhbnNhY3Rpb25GYWlsUmVwb3J0RGlyKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IHJlcG9ydCBmYWlsZWQgdHJhbnNhY3Rpb24sIG5vIHJlcG9ydCBmdW5jdGlvbjogdHJhbnNhY3Rpb25GYWlsUmVwb3J0IGluIG9wdGlvbnMsIGFuZCB0cmFuc2FjdGlvbkZhaWxSZXBvcnREaXIgaXNudCBzZXRcIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcil7XG4gICAgICAgICAgICBjb25zdCB5eXltbWRkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLDEwKS5yZXBsYWNlQWxsKFwiLVwiLFwiXCIpO1xuXG4gICAgICAgICAgICAvL3N0b3JlIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydERpcix5eXltbWRkK1wiLmpzb25cIik7XG4gICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtTmFtZSE9PWZpbGUpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtPW51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGlmKHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW1OYW1lKXtcbiAgICAgICAgICAgICAgICB0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZmlsZSx7ZmxhZ3M6J2EnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbU5hbWU9ZmlsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlN0b3JlIHRyYW5zYWN0aW9uIGZhaWwgcmVwb3J0OiBcIixmaWxlLHRyeC5xdWVyaWVzLG1lc3NhZ2UpXG5cbiAgICAgICAgICAgIGlmKCF0aGlzLmZhaWxSZXBvcnRGaWxlU3RyZWFtKVxuICAgICAgICAgICAgICAgIHRoaXMuZmFpbFJlcG9ydEZpbGVTdHJlYW0gPSBmcy5jcmVhdGVXcml0ZVN0cmVhbShmaWxlLHtmbGFnczonYSd9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0RmlsZVN0cmVhbS53cml0ZShKU09OLnN0cmluZ2lmeSh7cXVlcmllczp0cngucXVlcmllcyx0aW1lOnRyeC50aW1lc3RhbXAsZGF0ZSxtZXNzYWdlfSkrXCJcXG59RU9Ce1xcblwiLGVycj0+e1xuICAgICAgICAgICAgICAgIGlmKGVycilcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiQ2FuJ3Qgd3JpdGUgdG8gdHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgZmlsZVwiKVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiVHJhbnNhY3Rpb24gZmFpbCByZXBvcnQgc3RvcmVkXCIpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mYWlsUmVwb3J0TGFzdEFjY2Vzc1RpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLnRyYW5zYWN0aW9uRmFpbFJlcG9ydClcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy50cmFuc2FjdGlvbkZhaWxSZXBvcnQodHJ4LG1lc3NhZ2UpO1xuICAgIH1cblxuXG4gICAgYXN5bmMgcmVjcmVhdGVQb29sKCk6UHJvbWlzZTxib29sZWFuPntcblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJDb25uZWN0aW5nIHRvIG15c3FsOiBcXG4gSE9TVDogXCIrdGhpcy5vcHRpb25zLmhvc3QrJ1xcbiBQT1JUOicrdGhpcy5vcHRpb25zLnBvcnQpXG5cbiAgICAgICAgaWYodGhpcy5wb29sKXtcbiAgICAgICAgICAgIHRoaXMucG9vbC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIHRyeXthd2FpdCB0aGlzLnBvb2wuZW5kKCk7fWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNsb3NlIE1ZU1FMIHBvb2whXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvb2wgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICAgIC8vIEtlZXAgYWxpdmUgcGFja2V0cyBzaG91bGQgYmUgc2VudFxuICAgICAgICAvKmVuYWJsZUtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHN0YXJ0IHNlbmRpbmcgdGhlbSBlYXJseVxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXk6IDMgKiAxMDAwLCAvLyAzIHNlY29uZHNcbiAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCBpZGxlIGNvbm5lY3Rpb25zLCBidXQgaXQncyBub3QgbWFuZGF0b3J5IGZvciB0aGUgZml4IHRvIHdvcmssIGl0IHNlZW1zXG4gICAgICAgIG1heElkbGU6IDAsXG4gICAgICAgIC8vIElkbGUgdGltZW91dCBtdWNoIGxhcmdlciB0aGFuIGtlZXAgYWxpdmUgZGVsYXkgYW5kIG11Y2ggc21hbGxlciB0aGFuIE15U1FMJ3MgdGltZW91dCBzZXR0aW5nXG4gICAgICAgIGlkbGVUaW1lb3V0OiA1ICogNjAgKiAxMDAwIC8vIDUgbWludXRlc1xuICAgICAgICAqL1xuXG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHRoaXMucG9vbCA9bXlzcWwuY3JlYXRlUG9vbCh7XG4gICAgICAgICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLmhvc3RcbiAgICAgICAgICAgICAgICAsdXNlcjogdGhpcy5vcHRpb25zLnVzZXJcbiAgICAgICAgICAgICAgICAscGFzc3dvcmQ6IHRoaXMub3B0aW9ucy5wYXNzd29yZFxuICAgICAgICAgICAgICAgICxkYXRhYmFzZTogdGhpcy5vcHRpb25zLmRhdGFiYXNlXG4gICAgICAgICAgICAgICAgLHBvcnQ6IHRoaXMub3B0aW9ucy5wb3J0XG4gICAgICAgICAgICAgICAgLGNvbm5lY3Rpb25MaW1pdDogdGhpcy5vcHRpb25zLmNvbm5lY3Rpb25MaW1pdFxuICAgICAgICAgICAgICAgICxxdWV1ZUxpbWl0OiAxMFxuICAgICAgICAgICAgICAgICxtdWx0aXBsZVN0YXRlbWVudHM6IHRydWVcblxuICAgICAgICAgICAgICAgICxlbmFibGVLZWVwQWxpdmU6dHJ1ZVxuICAgICAgICAgICAgICAgICxrZWVwQWxpdmVJbml0aWFsRGVsYXk6MyoxMDAwXG4gICAgICAgICAgICAgICAgLy8sbWF4SWRsZTowXG4gICAgICAgICAgICAgICAgLGlkbGVUaW1lb3V0OjEwMDAqNjAqNVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdjb25uZWN0aW9uJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBDUkVBVEVEXCIpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdhY3F1aXJlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBBQ1FVSVJFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdyZWxlYXNlJywgKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgbG9nSW5mbyhcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTVlTUUwgQ09OTkVDVElPTiBSRUxFQVNFRFwiKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnBvb2w/Lm9uKCdlbnF1ZXVlJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIsXCJNWVNRTCBDT05ORUNUSU9OIEVOUVVFVUVEXCIpXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBjb25uZWN0aW9uXG4gICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNoZWNrIG15c3FsIGNvbm5lY3Rpb25cIilcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUscmVqZWN0KT0+e1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm4gPSBhd2FpdCB0aGlzLnBvb2w/LmdldENvbm5lY3Rpb24oKVxuICAgICAgICAgICAgICAgIGlmKGNvbm4pe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcmVzLGZdID0gYXdhaXQgY29ubi5xdWVyeShcIlNFTEVDVCAxXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25uPy5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0luZm8oXCIke015c3FsU2VydmljZS5qc31cIixcIkNvbm5lY3RlZCB0byBNWVNRTCFcIilcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9ZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGxvZ0NyaXQoXCIke015c3FsU2VydmljZS5qc31cIixcIkNhbid0IGNvbm5lY3QgdG8gTVlTUUwhXCIpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBhc3luYyBvbkFwcGxpY2F0aW9uUmVhZHkoKSB7fVxuXG5cbiAgICBzdGF0aWMgZmllbGRzVG9PYmplY3QoZmllbGRzOk15c3FsUXVlcnlGaWVsZFtdfE15c3FsUXVlcnlGaWVsZE9iamVjdCxpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzPzpib29sZWFuKTpNeXNxbFF1ZXJ5RmllbGRPYmplY3R7XG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgICAgICBjb25zdCBvYmo6TXlzcWxRdWVyeUZpZWxkT2JqZWN0PXt9O1xuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGlmKCFpLm5hbWUpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZih0eXBlb2YgaS52YWx1ZSE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWU7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKCFpZ25vcmVTeXN0ZW1QYXJhbWV0ZXJzKXtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2kubmFtZV09e1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6aS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTppLnN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmkuaWdub3JlSW5JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVJblVwZGF0ZTppLmlnbm9yZUluVXBkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOmkudXNlSW5SZXBsYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlXG4gICAgICAgICAgICAgICAgICAgIG9ialtpLm5hbWVdPWkudmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgc3RhdGljIG9iamVjdFRvRmllbGRzKG9iajpNeXNxbFF1ZXJ5RmllbGRPYmplY3R8TXlzcWxRdWVyeUZpZWxkW10pOk15c3FsUXVlcnlGaWVsZFtde1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KG9iaikpXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICBjb25zdCBmaWVsZHM6TXlzcWxRdWVyeUZpZWxkW109W107XG4gICAgICAgIGZvcihsZXQgaSBpbiBvYmope1xuICAgICAgICAgICAgaWYob2JqW2ldICYmIHR5cGVvZiBvYmpbaV0gPT09IFwib2JqZWN0XCIpe1xuICAgICAgICAgICAgICAgIGxldCBtbyA9IG9ialtpXSBhcyBSZWNvcmQ8c3RyaW5nLHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfHVuZGVmaW5lZD47XG4gICAgICAgICAgICAgICAgaWYoIW1vKXtcbiAgICAgICAgICAgICAgICAgICAgbW89e1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbTpmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUluSW5zZXJ0OmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6ZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VJblJlcGxhY2U6ZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6bW8ubmFtZSBhcyBzdHJpbmcgPz8gaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6bW8udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN5c3RlbTptby5zeXN0ZW0gYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5JbnNlcnQ6bW8uaWdub3JlSW5JbnNlcnQgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlSW5VcGRhdGU6bW8uaWdub3JlSW5VcGRhdGUgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgdXNlSW5SZXBsYWNlOm1vLnVzZUluUmVwbGFjZSBhcyBib29sZWFuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTppLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTpvYmpbaV0gYXMgc3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmllbGRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcmVwYXJlUXVlcnkocXVlcnk6c3RyaW5nLGZpZWxkczpNeXNxbFF1ZXJ5RmllbGRbXXxNeXNxbFF1ZXJ5RmllbGRPYmplY3QpOnN0cmluZ3tcbiAgICAgICAgXG4gICAgICAgIGlmKCFBcnJheS5pc0FycmF5KGZpZWxkcykpXG4gICAgICAgICAgICBmaWVsZHMgPSBNeXNxbFNlcnZpY2Uub2JqZWN0VG9GaWVsZHMoZmllbGRzKTtcblxuICAgICAgICBmb3IobGV0IGkgb2YgZmllbGRzKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9dGhpcy5wcmVwYXJlUXVlcnlGaWVsZFZhbHVlKGkudmFsdWUsaS5zeXN0ZW0pO1xuICAgICAgICAgICAgaS5fcGFyc2VkVmFsdWU9dmFsO1xuICAgICAgICAgICAgcXVlcnk9cXVlcnkucmVwbGFjZUFsbChcIkBcIitpLm5hbWUsdmFsK1wiXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBxdWVyeS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZih0bXAuaW5kZXhPZihcInNlbGVjdFwiKT09PTAgJiYgdG1wLmluZGV4T2YoXCJsaW1pdFwiKT09PS0xKVxuICAgICAgICAgICAgcXVlcnkrPVwiIExJTUlUIDEwMFwiXG4gICAgICAgIFxuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnJlcGxhY2VBbGwoXCJATk9MSU1JVFwiLFwiXCIpXG5cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGZpZWxkc1wiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBpbnNlcnRGaWVsZE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgaW5zZXJ0RmllbGRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGROYW1lcy5wdXNoKCdgJytpLm5hbWUucmVwbGFjZUFsbChcImBcIiwnJykucmVwbGFjZUFsbCgnXFxcIicsXCJcIikucmVwbGFjZUFsbCgnXFwnJyxcIlwiKSsnYCcpXG4gICAgICAgICAgICAgICAgaW5zZXJ0RmllbGRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlcnk9cXVlcnlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQGZpZWxkcycsaW5zZXJ0RmllbGROYW1lcy5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnQHZhbHVlcycsaW5zZXJ0RmllbGRWYWx1ZXMuam9pbihcIixcIikpXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKFwiQGluc2VydFwiKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbmluc2VydE5hbWVzPVtdXG4gICAgICAgICAgICBsZXQgb25pbnNlcnRWYWx1ZXM9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5JbnNlcnQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uaW5zZXJ0TmFtZXMucHVzaChpLm5hbWUpXG4gICAgICAgICAgICAgICAgb25pbnNlcnRWYWx1ZXMucHVzaChpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBpbnNlcnRcIixgKCR7b25pbnNlcnROYW1lcy5qb2luKFwiLFwiKX0pIFZBTFVFUyAoJHtvbmluc2VydFZhbHVlcy5qb2luKFwiLFwiKX0pYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHF1ZXJ5LmluZGV4T2YoXCJAb251cGRhdGVcIikhPT0tMSl7XG4gICAgICAgICAgICBsZXQgb25VcGRhdGU9W11cbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKGkuaWdub3JlSW5VcGRhdGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG9uVXBkYXRlLnB1c2goJ2AnK2kubmFtZS5yZXBsYWNlQWxsKFwiYFwiLCcnKS5yZXBsYWNlQWxsKCdcXFwiJyxcIlwiKS5yZXBsYWNlQWxsKCdcXCcnLFwiXCIpKydgID0gJytpLl9wYXJzZWRWYWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZUFsbChcIkBvbnVwZGF0ZVwiLG9uVXBkYXRlLmpvaW4oXCIgLCBcIikpXG4gICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICBpZihxdWVyeS5pbmRleE9mKCdAb25kdXBsaWNhdGUnKSE9PS0xKXtcbiAgICAgICAgICAgIGxldCBvbkR1cGxpY2F0ZT1bXTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBvZiBmaWVsZHMpe1xuICAgICAgICAgICAgICAgIGlmKCFpLnVzZUluUmVwbGFjZSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgb25EdXBsaWNhdGUucHVzaCgnYCcraS5uYW1lLnJlcGxhY2VBbGwoXCJgXCIsJycpLnJlcGxhY2VBbGwoJ1xcXCInLFwiXCIpLnJlcGxhY2VBbGwoJ1xcJycsXCJcIikrJ2AgPSAnK2kuX3BhcnNlZFZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlQWxsKFwiQG9uZHVwbGljYXRlXCIsb25EdXBsaWNhdGUuam9pbihcIiAsIFwiKSlcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHJldHVybiAgcXVlcnk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByZXBhcmVRdWVyeUZpZWxkVmFsdWUodmFsdWU6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVkLHN5c3RlbT86Ym9vbGVhbik6c3RyaW5nfG51bWJlcnxib29sZWFufG51bGx8dW5kZWZpbmVke1xuICAgICAgICBpZighc3lzdGVtICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlP3ZhbHVlLnJlcGxhY2VBbGwoJ1wiJywnXFxcXFwiJyk6bnVsbFxuICAgICAgICAgICAgaWYodmFsdWUhPT1udWxsKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJ1wiJyt2YWx1ZSsnXCInXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIk5VTExcIlxuICAgICAgICB9XG4gICAgICAgIGlmKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gXCJOVUxMXCJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZXhlY3V0ZShxdWVyeTpzdHJpbmcscm9sbGJhY2tRdWVyeTpzdHJpbmd8bnVsbCx0cmFuc2FjdGlvbklEOm51bWJlcix0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKTpQcm9taXNlPE15c3FsUmVzdWx0PntcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyZWplY3QpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBwb29sXG4gICAgICAgICAgICBpZighdGhpcy5wb29sKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLFwiTm8gcG9vbFwiKVxuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcIk5PX1BPT0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vOiAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOlwiTk9fUE9PTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgbm90IGNyZWF0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOm51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbm46bXlzcWwuUG9vbENvbm5lY3Rpb258bnVsbD1udWxsXG4gICAgICAgICAgICAgICAgaWYodHJhbnNhY3Rpb25JRCAmJiB0cmFuc2FjdGlvbklEPjApe1xuICAgICAgICAgICAgICAgICAgICBjb25uID0gdGhpcy50cmFuc2FjdGlvbnMuZmluZChpPT5pLmlkPT09dHJhbnNhY3Rpb25JRCk/LmNvbm4gPz8gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1ZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeSBvbiB0cmFuc2FjdGlvbjogXCIsY29ubj8udGhyZWFkSWQpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBhd2FpdCB0aGlzLnBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXhlY3V0ZSBxdWVyeVwiLGNvbm4/LnRocmVhZElkKVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgY29ubmVjdGlvbiBub3QgY3JlYXRlZFxuICAgICAgICAgICAgICAgIGlmKCFjb25uKXtcbiAgICAgICAgICAgICAgICAgICAgbG9nQ3JpdChcIiR7TXlzcWxTZXJ2aWNlLmpzfVwiLGBObyBjb25uZWN0aW9uIGNyZWF0ZWQhYClcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWw6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcIk15c3FsIHBvb2wgY2FudCBnZXQgY29ubmVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OjBcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgLy8gRG8gc2VuZCBxdWVyeVxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBvZiB0aGlzLnRyYW5zYWN0aW9ucyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGkuY29ubj09PWNvbm4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nSW5mbyhcIllvdXIgY29ubmVjdGlvbiBpcyBpbiB0cmFuc2FjdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUXVlcnkoY29ubixxdWVyeSxyZXNvbHZlLHJvbGxiYWNrUXVlcnksdGhyb3dhYmxlP3RydWU6ZmFsc2UsY2FsY3VsYXRlQ291bnQpO1xuXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc31cIixlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWNyZWF0ZSBwb29sLCBjb25uZWN0aW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaWYoYCR7ZX1gLmluZGV4T2YoJ0VDT05OUkVGVVNFRCcpIT09LTEpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjcmVhdGVQb29sKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiTk9fQ09OTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZT90cnVlOmZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3FsOiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6XCJOT19DT05OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOihlICYmIHR5cGVvZiBlID09PSBcIm9iamVjdFwiICYmIFwibWVzc2FnZVwiIGluIGUgYXMgYW55KT8oZSBhcyBhbnkpLm1lc3NhZ2U6XCJNeXNxbCBjYW50IGdldCBjb25uZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHNlbmRRdWVyeShjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyxyZXNvbHZlOihkYXRhOk15c3FsUmVzdWx0KT0+dm9pZCxyb2xsYmFjazpzdHJpbmd8bnVsbCx0aHJvd2FibGU6Ym9vbGVhbixjYWxjdWxhdGVDb3VudDpib29sZWFuKXtcbiAgICAgICAgXG4gICAgICAgIGxldCBlcnJDYXRjaGVkPWZhbHNlO1xuXG4gICAgICAgIGNvbm4ub24oXCJlcnJvclwiLGFzeW5jIGVycj0+e1xuICAgICAgICAgICAgZXJyQ2F0Y2hlZD10cnVlO1xuXG4gICAgICAgICAgICBsZXQgcm9sbGJhY2tFcnJvciA9IG51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuICAgICAgIFxuICAgICAgICAgICAgbG9nRXJyb3IoXCIke015c3FsU2VydmljZS5qc30tPmNvbm4ub24oJ2Vycm9yJylcIixlcnIpXG5cbiAgICAgICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICAgICAgdHJ5e1xuXG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICBjb25uLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfWNhdGNoKGUpe31cbiAgICAgXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiQ09OTl9FUlJcIixcbiAgICAgICAgICAgICAgICAgICAgZXJybm86IDEwMDAwMyxcbiAgICAgICAgICAgICAgICAgICAgZmF0YWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNxbDogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6XCJDT05OX0VSUlwiLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiK2VycixcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dhYmxlOnRocm93YWJsZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIHJvbGxiYWNrRXJyb3I6cm9sbGJhY2tFcnJvcixcbiAgICAgICAgICAgICAgICBjb3VudDowXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cblxuICAgICAgICBsb2dJbmZvKFwiJHtNeXNxbFNlcnZpY2UuanN9XCIscXVlcnkpXG5cbiAgICAgICAgLy8gc2VuZCBxdWVyeVxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMucXVlcnlBc3luYyhjb25uLHF1ZXJ5KTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJyb3JcbiAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyKXtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcm9sbGJhY2tcbiAgICAgICAgICAgIGxldCByb2xsYmFja0Vycm9yPW51bGw7XG4gICAgICAgICAgICBpZihyb2xsYmFjaylcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yPShhd2FpdCB0aGlzLnF1ZXJ5QXN5bmMoY29ubixyb2xsYmFjaykpLmVyclxuXG4gICAgICAgICAgICAvLyBjbG9zZSBjb25uZWN0aW9uXG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgY29ubi5yZWxlYXNlKCk7XG4gICAgICAgICAgICAgICAgY29ubi5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG5cblxuXG4gICAgICAgICAgICAvLyBkZXRlcm1pbmUgZHVwbGljYXRlIGVycm9yXG4gICAgICAgICAgICBsZXQgZHVwPWZhbHNlO1xuICAgICAgICAgICAgaWYocXVlcnlSZXN1bHQuZXJyICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlICYmIHF1ZXJ5UmVzdWx0LmVyci5jb2RlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImVyX2R1cF9lbnRyeVwiKSE9PS0xKVxuICAgICAgICAgICAgICAgIGR1cD10cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixxdWVyeVJlc3VsdC5lcnIpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjp7Li4ucXVlcnlSZXN1bHQuZXJyLHRocm93YWJsZTp0aHJvd2FibGV9LFxuICAgICAgICAgICAgICAgIGRhdGE6bnVsbCxcbiAgICAgICAgICAgICAgICByb2xsYmFja0Vycm9yOnJvbGxiYWNrRXJyb3IsXG4gICAgICAgICAgICAgICAgaXNEdXBsaWNhdGVFcnJvcjpkdXAsXG4gICAgICAgICAgICAgICAgY291bnQ6MFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGlmKGNhbGN1bGF0ZUNvdW50ICYmIHF1ZXJ5LmluZGV4T2YoXCJTRUxFQ1RcIik9PT0wKXtcbiAgICAgICAgICAgIGxldCBjb3VudFF1ZXJ5ID0gdGhpcy5wcmVwYXJlQ291bnRRdWVyeShxdWVyeSk7XG4gICAgICAgICAgICBjb25zdCBjb3VudFF1ZXJ5UmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeUFzeW5jKGNvbm4sY291bnRRdWVyeSk7XG4gICAgICAgICAgICBpZihjb3VudFF1ZXJ5UmVzdWx0LmVycilcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIiR7TXlzcWxTZXJ2aWNlLmpzfS0+cXVlcnkgZXJyb3JcIixjb3VudFF1ZXJ5UmVzdWx0LmVycik7XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGlmKGNvdW50UXVlcnlSZXN1bHQucmVzdWx0cyAmJiBjb3VudFF1ZXJ5UmVzdWx0LnJlc3VsdHMubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50UXVlcnlSZXN1bHQucmVzdWx0c1swXS5jb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIC8vIGNsb3NlIGNvbm4gb24gc3VjY2Vzc1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25uLnJlbGVhc2UoKTtcbiAgICAgICAgICAgIGNvbm4ucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgIH1jYXRjaChlKXt9XG5cbiAgICAgICAgLy8gaGFuZGxlIHN1Y2Nlc3NcbiAgICAgICAgY29uc3QgZXJyID0gcXVlcnlSZXN1bHQuZXJyP3suLi5xdWVyeVJlc3VsdC5lcnIsdGhyb3dhYmxlOnRocm93YWJsZX06bnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBlcnJvcjplcnIsXG4gICAgICAgICAgICBkYXRhOnF1ZXJ5UmVzdWx0LnJlc3VsdHMsXG4gICAgICAgICAgICBjb3VudDpjb3VudFxuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgLy8gQXN5bmMgcXVlcnkgd3JhcHBlciB0byBjb25uLnF1ZXJ5XG4gICAgYXN5bmMgcXVlcnlBc3luYyhjb25uOm15c3FsLlBvb2xDb25uZWN0aW9uLHF1ZXJ5OnN0cmluZyk6UHJvbWlzZTx7ZXJyOk15c3FsRXJyb3J8bnVsbCxyZXN1bHRzPzphbnl9PntcblxuICAgICAgICBsZXQgcmVzdWx0PW51bGw7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNvbm4ucXVlcnkocXVlcnkpO1xuICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICByZXR1cm4ge2Vycjp0aGlzLmNyZWF0ZU15c3FsUXVlcnlFcnJvcihlKX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyOm51bGwsXG4gICAgICAgICAgICByZXN1bHRzOnJlc3VsdFswXSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU15c3FsUXVlcnlFcnJvcihlcnI6YW55LHRocm93YWJsZT86Ym9vbGVhbik6TXlzcWxFcnJvcntcbiAgICAgICAgaWYoZXJyICYmICB0eXBlb2YgZXJyPT09XCJvYmplY3RcIiAmJiBcImNvZGVcIiBpbiBlcnIgJiYgXCJlcnJub1wiIGluIGVyciAmJiBcInNxbFwiIGluIGVyciAmJiBcIm5hbWVcIiBpbiBlcnIgJiYgXCJtZXNzYWdlXCIgaW4gZXJyKXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IGVyci5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBlcnJubzogZXJyLmVycm5vLFxuICAgICAgICAgICAgICAgICAgICBzcWw6IGVyci5zcWwsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ZXJyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29kZTogXCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBlcnJubzogMTAwMDAyLFxuICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNxbDogXCJubyBxdWVyeVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6XCJRVUVSWV9FUlJcIixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOlwiRXJyb3I6IFwiKyhlcnIpP2VycjpcIlwiLFxuICAgICAgICAgICAgICAgIHRocm93YWJsZTp0aHJvd2FibGU/dHJ1ZTpmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmNvbnN0IHNlY3JldF9rZXk9XCJBS0xXa2FqdyVeJmRnd3FodyM5ODQ1M2kyM2JmazIzcm4ya25rbmdscmdqZWl0XCJcbmNvbnN0IHNlY3JldF9pdj1cInJ0aGFkcmZrMjNybjJrbiMqRk5LQUBndDQ0ZGYzdHNscmdqIyMhaXRcIlxuXG4vLyBHZW5lcmF0ZSBzZWNyZXQgaGFzaCB3aXRoIGNyeXB0byB0byB1c2UgZm9yIGVuY3J5cHRpb25cbmNvbnN0IGtleSA9IGNyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShzZWNyZXRfa2V5KS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCAzMilcbmNvbnN0IGl2ID0gY3JlYXRlSGFzaCgnc2hhNTEyJykudXBkYXRlKHNlY3JldF9pdikuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpXG5cbmNvbnN0IGRlY3J5cHQgPShlbmNyeXB0ZWQ6c3RyaW5nKTpzdHJpbmd8bnVsbD0+e1xuICB0cnl7XG4gICAgICBlbmNyeXB0ZWQgPSBCdWZmZXIuZnJvbShlbmNyeXB0ZWQsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICBjb25zdCBkZWNpcGhlciA9IGNyZWF0ZURlY2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdik7XG4gICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCwgJ2JpbmFyeScsICd1dGY4Jyk7XG4gICAgICBkZWNyeXB0ZWQgKz0gZGVjaXBoZXIuZmluYWwoJ3V0ZjgnKTtcbiAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gIH1jYXRjaChlKXtcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmNvbnN0IGVuY3J5cHQgPSAodHh0OnN0cmluZyk6c3RyaW5nfG51bGw9PntcbiAgdHJ5e1xuICAgICAgbGV0IGVuY2lwaGVyID0gY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywga2V5LCBpdiksXG4gICAgICBlbmNyeXB0ZWQgPSBlbmNpcGhlci51cGRhdGUodHh0LCAndXRmOCcsICdiaW5hcnknKTtcbiAgICAgIGVuY3J5cHRlZCArPSBlbmNpcGhlci5maW5hbCgnYmluYXJ5Jyk7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZW5jcnlwdGVkLCAnYmluYXJ5JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9Y2F0Y2goZSl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNeXNxbFNlcnZpY2U7Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "badmfck-api-server",
3
- "version": "2.5.9",
3
+ "version": "2.6.0",
4
4
  "description": "Simple API http server based on express",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",