Market Smart Contract

in #hive-engine2 months ago

{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"update","contractPayload":{"name":"market","params":"","code":"Y29uc3QgSElWRV9QRUdHRURfU1lNQk9MPSJTV0FQLkhJVkUiLEhJVkVfUEVHR0VEX1NZTUJPTF9QUkVTSUNJT049OCxDT05UUkFDVF9OQU1FPSJtYXJrZXQiLEFDQ09VTlRfQkxBQ0tMSVNUPXtzdW5zZXRqZXN1czoxLHdhaXRpbmdmb3Jsb3ZlOjEsdGhlbmlnaHRzOjEsdGhlZGF5czoxLHRlbXA6MX0sZ2V0TWV0cmljPWFzeW5jIHN5bWJvbD0+e2xldCBtZXRyaWM9YXdhaXQgYXBpLmRiLmZpbmRPbmUoIm1ldHJpY3MiLHtzeW1ib2w6c3ltYm9sfSk7aWYobnVsbD09PW1ldHJpYyl7bWV0cmljPXt9LG1ldHJpYy5zeW1ib2w9c3ltYm9sLG1ldHJpYy52b2x1bWU9IjAiLG1ldHJpYy52b2x1bWVFeHBpcmF0aW9uPTAsbWV0cmljLmxhc3RQcmljZT0iMCIsbWV0cmljLmxvd2VzdEFzaz0iMCIsbWV0cmljLmhpZ2hlc3RCaWQ9IjAiLG1ldHJpYy5sYXN0RGF5UHJpY2U9IjAiLG1ldHJpYy5sYXN0RGF5UHJpY2VFeHBpcmF0aW9uPTAsbWV0cmljLnByaWNlQ2hhbmdlSGl2ZT0iMCIsbWV0cmljLnByaWNlQ2hhbmdlUGVyY2VudD0iMCI7cmV0dXJuIGF3YWl0IGFwaS5kYi5pbnNlcnQoIm1ldHJpY3MiLG1ldHJpYyl9cmV0dXJuIG1ldHJpY30sdXBkYXRlVm9sdW1lTWV0cmljPWFzeW5jKHN5bWJvbCxxdWFudGl0eSxhZGQ9ITApPT57Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksdGltZXN0YW1wU2VjPWJsb2NrRGF0ZS5nZXRUaW1lKCkvMWUzLG1ldHJpYz1hd2FpdCBnZXRNZXRyaWMoc3ltYm9sKTshMD09PWFkZD8obWV0cmljLnZvbHVtZUV4cGlyYXRpb248dGltZXN0YW1wU2VjJiYobWV0cmljLnZvbHVtZT0iMC4wMDAiKSxtZXRyaWMudm9sdW1lPWFwaS5CaWdOdW1iZXIobWV0cmljLnZvbHVtZSkucGx1cyhxdWFudGl0eSkudG9GaXhlZCg4KSxtZXRyaWMudm9sdW1lRXhwaXJhdGlvbj1ibG9ja0RhdGUuc2V0VVRDRGF0ZShibG9ja0RhdGUuZ2V0VVRDRGF0ZSgpKzEpLzFlMyk6bWV0cmljLnZvbHVtZT1hcGkuQmlnTnVtYmVyKG1ldHJpYy52b2x1bWUpLm1pbnVzKHF1YW50aXR5KS50b0ZpeGVkKDgpLGFwaS5CaWdOdW1iZXIobWV0cmljLnZvbHVtZSkubHQoMCkmJihtZXRyaWMudm9sdW1lPSIwLjAwMCIpLGF3YWl0IGFwaS5kYi51cGRhdGUoIm1ldHJpY3MiLG1ldHJpYyl9LHVwZGF0ZVByaWNlTWV0cmljcz1hc3luYyhzeW1ib2wscHJpY2UpPT57Y29uc3QgYmxvY2tEYXRlPW5ldyBEYXRlKGFwaS5oaXZlQmxvY2tUaW1lc3RhbXArIi4wMDBaIiksdGltZXN0YW1wU2VjPWJsb2NrRGF0ZS5nZXRUaW1lKCkvMWUzLG1ldHJpYz1hd2FpdCBnZXRNZXRyaWMoc3ltYm9sKTttZXRyaWMubGFzdFByaWNlPXByaWNlLG1ldHJpYy5sYXN0RGF5UHJpY2VFeHBpcmF0aW9uPHRpbWVzdGFtcFNlYz8obWV0cmljLmxhc3REYXlQcmljZT1wcmljZSxtZXRyaWMubGFzdERheVByaWNlRXhwaXJhdGlvbj1ibG9ja0RhdGUuc2V0VVRDRGF0ZShibG9ja0RhdGUuZ2V0VVRDRGF0ZSgpKzEpLzFlMyxtZXRyaWMucHJpY2VDaGFuZ2VIaXZlPSIwIixtZXRyaWMucHJpY2VDaGFuZ2VQZXJjZW50PSIwJSIpOihtZXRyaWMucHJpY2VDaGFuZ2VIaXZlPWFwaS5CaWdOdW1iZXIocHJpY2UpLm1pbnVzKG1ldHJpYy5sYXN0RGF5UHJpY2UpLnRvRml4ZWQoOCksbWV0cmljLnByaWNlQ2hhbmdlUGVyY2VudD1hcGkuQmlnTnVtYmVyKG1ldHJpYy5wcmljZUNoYW5nZUhpdmUpLmRpdmlkZWRCeShtZXRyaWMubGFzdERheVByaWNlKS5tdWx0aXBsaWVkQnkoMTAwKS50b0ZpeGVkKDIpKyIlIiksYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWV0cmljcyIsbWV0cmljKX0sdXBkYXRlQmlkTWV0cmljPWFzeW5jIHN5bWJvbD0+e2NvbnN0IG1ldHJpYz1hd2FpdCBnZXRNZXRyaWMoc3ltYm9sKSxidXlPcmRlckJvb2s9YXdhaXQgYXBpLmRiLmZpbmQoImJ1eUJvb2siLHtzeW1ib2w6c3ltYm9sfSwxLDAsW3tpbmRleDoicHJpY2VEZWMiLGRlc2NlbmRpbmc6ITB9XSk7YnV5T3JkZXJCb29rLmxlbmd0aD4wP21ldHJpYy5oaWdoZXN0QmlkPWJ1eU9yZGVyQm9va1swXS5wcmljZTptZXRyaWMuaGlnaGVzdEJpZD0iMCIsYXdhaXQgYXBpLmRiLnVwZGF0ZSgibWV0cmljcyIsbWV0cmljKX0sdXBkYXRlQXNrTWV0cmljPWFzeW5jIHN5bWJvbD0+e2NvbnN0IG1ldHJpYz1hd2FpdCBnZXRNZXRyaWMoc3ltYm9sKSxzZWxsT3JkZXJCb29rPWF3YWl0IGFwaS5kYi5maW5kKCJzZWxsQm9vayIse3N5bWJvbDpzeW1ib2x9LDEsMCxbe2luZGV4OiJwcmljZURlYyIsZGVzY2VuZGluZzohMX1dKTtzZWxsT3JkZXJCb29rLmxlbmd0aD4wP21ldHJpYy5sb3dlc3RBc2s9c2VsbE9yZGVyQm9va1swXS5wcmljZTptZXRyaWMubG93ZXN0QXNrPSIwIixhd2FpdCBhcGkuZGIudXBkYXRlKCJtZXRyaWNzIixtZXRyaWMpfSx1cGRhdGVUcmFkZXNIaXN0b3J5PWFzeW5jKHR5cGUsYnV5ZXIsc2VsbGVyLHN5bWJvbCxxdWFudGl0eSxwcmljZSx2b2x1bWUsYnV5VHhJZCxzZWxsVHhJZCk9Pntjb25zdCBibG9ja0RhdGU9bmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKSx0aW1lc3RhbXBTZWM9YmxvY2tEYXRlLmdldFRpbWUoKS8xZTMsdGltZXN0YW1wTWludXMyNGhycz1ibG9ja0RhdGUuc2V0VVRDRGF0ZShibG9ja0RhdGUuZ2V0VVRDRGF0ZSgpLTEpLzFlMztsZXQgdHJhZGVzVG9EZWxldGU9YXdhaXQgYXBpLmRiLmZpbmQoInRyYWRlc0hpc3RvcnkiLHtzeW1ib2w6c3ltYm9sLHRpbWVzdGFtcDp7JGx0OnRpbWVzdGFtcE1pbnVzMjRocnN9fSksbmJUcmFkZXNUb0RlbGV0ZT10cmFkZXNUb0RlbGV0ZS5sZW5ndGg7Zm9yKDtuYlRyYWRlc1RvRGVsZXRlPjA7KXtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmJUcmFkZXNUb0RlbGV0ZTtpbmRleCs9MSl7Y29uc3QgdHJhZGU9dHJhZGVzVG9EZWxldGVbaW5kZXhdO2F3YWl0IHVwZGF0ZVZvbHVtZU1ldHJpYyh0cmFkZS5zeW1ib2wsdHJhZGUudm9sdW1lLCExKSxhd2FpdCBhcGkuZGIucmVtb3ZlKCJ0cmFkZXNIaXN0b3J5Iix0cmFkZSl9dHJhZGVzVG9EZWxldGU9YXdhaXQgYXBpLmRiLmZpbmQoInRyYWRlc0hpc3RvcnkiLHtzeW1ib2w6c3ltYm9sLHRpbWVzdGFtcDp7JGx0OnRpbWVzdGFtcE1pbnVzMjRocnN9fSksbmJUcmFkZXNUb0RlbGV0ZT10cmFkZXNUb0RlbGV0ZS5sZW5ndGh9Y29uc3QgbmV3VHJhZGU9e307bmV3VHJhZGUudHlwZT10eXBlLG5ld1RyYWRlLmJ1eWVyPWJ1eWVyLG5ld1RyYWRlLnNlbGxlcj1zZWxsZXIsbmV3VHJhZGUuc3ltYm9sPXN5bWJvbCxuZXdUcmFkZS5xdWFudGl0eT1xdWFudGl0eSxuZXdUcmFkZS5wcmljZT1wcmljZSxuZXdUcmFkZS50aW1lc3RhbXA9dGltZXN0YW1wU2VjLG5ld1RyYWRlLnZvbHVtZT12b2x1bWUsbmV3VHJhZGUuYnV5VHhJZD1idXlUeElkLG5ld1RyYWRlLnNlbGxUeElkPXNlbGxUeElkLGF3YWl0IGFwaS5kYi5pbnNlcnQoInRyYWRlc0hpc3RvcnkiLG5ld1RyYWRlKSxhd2FpdCB1cGRhdGVQcmljZU1ldHJpY3Moc3ltYm9sLHByaWNlKX0sY291bnREZWNpbWFscz12YWx1ZT0+YXBpLkJpZ051bWJlcih2YWx1ZSkuZHAoKSxyZW1vdmVCYWRPcmRlcnM9YXN5bmMoKT0+e2xldCBuYk9yZGVyc1RvRGVsZXRlPTAsbmJPcmRlcnNEZWxldGVkPTAsb3JkZXJzVG9EZWxldGU9YXdhaXQgYXBpLmRiLmZpbmQoImJ1eUJvb2siLHt0b2tlbnNMb2NrZWQ6eyRpbjpbIjAuMDAwMDAwMDAiXX19LDFlMywwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtmb3IobmJPcmRlcnNUb0RlbGV0ZT1vcmRlcnNUb0RlbGV0ZS5sZW5ndGg7bmJPcmRlcnNUb0RlbGV0ZT4wJiZuYk9yZGVyc0RlbGV0ZWQ8NWUzOyl7Zm9yKGxldCBpbmRleD0wO2luZGV4PG5iT3JkZXJzVG9EZWxldGU7aW5kZXgrPTEpe25iT3JkZXJzRGVsZXRlZCs9MTtjb25zdCBvcmRlcj1vcmRlcnNUb0RlbGV0ZVtpbmRleF07YXdhaXQgYXBpLmRiLnJlbW92ZSgiYnV5Qm9vayIsb3JkZXIpLGF3YWl0IHVwZGF0ZUJpZE1ldHJpYyhvcmRlci5zeW1ib2wpfW9yZGVyc1RvRGVsZXRlPWF3YWl0IGFwaS5kYi5maW5kKCJidXlCb29rIix7dG9rZW5zTG9ja2VkOnskaW46WyIwLjAwMDAwMDAwIl19fSwxZTMsMCxbe2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSksbmJPcmRlcnNUb0RlbGV0ZT1vcmRlcnNUb0RlbGV0ZS5sZW5ndGh9fSxyZW1vdmVCbGFja2xpc3RlZE9yZGVycz1hc3luYyh0eXBlLHRhcmdldEFjY291bnQpPT57Y29uc3QgdGFibGU9ImJ1eSI9PT10eXBlPyJidXlCb29rIjoic2VsbEJvb2siO2xldCBuYk9yZGVyc1RvRGVsZXRlPTAsbmJPcmRlcnNEZWxldGVkPTAsb3JkZXJzVG9EZWxldGU9YXdhaXQgYXBpLmRiLmZpbmQodGFibGUse2FjY291bnQ6dGFyZ2V0QWNjb3VudH0sMWUzLDAsW3tpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pO2ZvcihuYk9yZGVyc1RvRGVsZXRlPW9yZGVyc1RvRGVsZXRlLmxlbmd0aDtuYk9yZGVyc1RvRGVsZXRlPjAmJm5iT3JkZXJzRGVsZXRlZDw1ZTM7KXtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmJPcmRlcnNUb0RlbGV0ZTtpbmRleCs9MSl7bmJPcmRlcnNEZWxldGVkKz0xO2NvbnN0IG9yZGVyPW9yZGVyc1RvRGVsZXRlW2luZGV4XTthd2FpdCBhcGkuZGIucmVtb3ZlKHRhYmxlLG9yZGVyKSwic2VsbCI9PT10eXBlP2F3YWl0IHVwZGF0ZUFza01ldHJpYyhvcmRlci5zeW1ib2wpOmF3YWl0IHVwZGF0ZUJpZE1ldHJpYyhvcmRlci5zeW1ib2wpfW9yZGVyc1RvRGVsZXRlPWF3YWl0IGFwaS5kYi5maW5kKHRhYmxlLHthY2NvdW50OnRhcmdldEFjY291bnR9LDFlMywwLFt7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKSxuYk9yZGVyc1RvRGVsZXRlPW9yZGVyc1RvRGVsZXRlLmxlbmd0aH19LHJlbW92ZUV4cGlyZWRPcmRlcnM9YXN5bmMgdGFibGU9Pntjb25zdCB0aW1lc3RhbXBTZWM9YXBpLkJpZ051bWJlcihuZXcgRGF0ZShhcGkuaGl2ZUJsb2NrVGltZXN0YW1wKyIuMDAwWiIpLmdldFRpbWUoKSkuZGl2aWRlZEJ5KDFlMykudG9OdW1iZXIoKTtsZXQgbmJPcmRlcnNUb0RlbGV0ZT0wLG9yZGVyc1RvRGVsZXRlPWF3YWl0IGFwaS5kYi5maW5kKHRhYmxlLHtleHBpcmF0aW9uOnskbHRlOnRpbWVzdGFtcFNlY319KTtmb3IobmJPcmRlcnNUb0RlbGV0ZT1vcmRlcnNUb0RlbGV0ZS5sZW5ndGg7bmJPcmRlcnNUb0RlbGV0ZT4wOyl7Zm9yKGxldCBpbmRleD0wO2luZGV4PG5iT3JkZXJzVG9EZWxldGU7aW5kZXgrPTEpe2NvbnN0IG9yZGVyPW9yZGVyc1RvRGVsZXRlW2luZGV4XTtsZXQgcXVhbnRpdHksc3ltYm9sOyJidXlCb29rIj09PXRhYmxlPyhzeW1ib2w9IlNXQVAuSElWRSIscXVhbnRpdHk9b3JkZXIudG9rZW5zTG9ja2VkKTooc3ltYm9sPW9yZGVyLnN5bWJvbCxxdWFudGl0eT1vcmRlci5xdWFudGl0eSksYXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKG9yZGVyLmFjY291bnQsc3ltYm9sLHF1YW50aXR5LCJ1c2VyIiksYXdhaXQgYXBpLmRiLnJlbW92ZSh0YWJsZSxvcmRlciksImJ1eUJvb2siPT09dGFibGU/KGFwaS5lbWl0KCJvcmRlckV4cGlyZWQiLHt0eXBlOiJidXkiLHR4SWQ6b3JkZXIudHhJZH0pLGF3YWl0IHVwZGF0ZUFza01ldHJpYyhvcmRlci5zeW1ib2wpKTooYXBpLmVtaXQoIm9yZGVyRXhwaXJlZCIse3R5cGU6InNlbGwiLHR4SWQ6b3JkZXIudHhJZH0pLGF3YWl0IHVwZGF0ZUJpZE1ldHJpYyhvcmRlci5zeW1ib2wpKX1vcmRlcnNUb0RlbGV0ZT1hd2FpdCBhcGkuZGIuZmluZCh0YWJsZSx7ZXhwaXJhdGlvbjp7JGx0ZTp0aW1lc3RhbXBTZWN9fSksbmJPcmRlcnNUb0RlbGV0ZT1vcmRlcnNUb0RlbGV0ZS5sZW5ndGh9fTthY3Rpb25zLmNyZWF0ZVNTQz1hc3luYygpPT57ITE9PT1hd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoImJ1eUJvb2siKT8oYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJidXlCb29rIixbInN5bWJvbCIsImFjY291bnQiLCJwcmljZURlYyIsImV4cGlyYXRpb24iLCJ0eElkIl0pLGF3YWl0IGFwaS5kYi5jcmVhdGVUYWJsZSgic2VsbEJvb2siLFsic3ltYm9sIiwiYWNjb3VudCIsInByaWNlRGVjIiwiZXhwaXJhdGlvbiIsInR4SWQiXSksYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCJ0cmFkZXNIaXN0b3J5IixbInN5bWJvbCJdKSxhd2FpdCBhcGkuZGIuY3JlYXRlVGFibGUoIm1ldHJpY3MiLFsic3ltYm9sIl0pKTooYXdhaXQgcmVtb3ZlQmFkT3JkZXJzKCksYXdhaXQgcmVtb3ZlQmxhY2tsaXN0ZWRPcmRlcnMoImJ1eSIsIndhaXRpbmdmb3Jsb3ZlIiksYXdhaXQgcmVtb3ZlQmxhY2tsaXN0ZWRPcmRlcnMoInNlbGwiLCJ3YWl0aW5nZm9ybG92ZSIpKX0sYWN0aW9ucy5jYW5jZWw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCx0eXBlOnR5cGUsaWQ6aWQsaXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxmaW5hbEFjY291bnQ9dm9pZCAwPT09YWNjb3VudHx8Im51bGwiIT09YXBpLnNlbmRlcj9hcGkuc2VuZGVyOmFjY291bnQ7aWYoYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleXx8Im51bGwiPT09YXBpLnNlbmRlciwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQodHlwZSYmWyJidXkiLCJzZWxsIl0uaW5jbHVkZXModHlwZSkmJmlkLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCB0YWJsZT0iYnV5Ij09PXR5cGU/ImJ1eUJvb2siOiJzZWxsQm9vayI7bGV0IG9yZGVyPW51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBpZCYmaWQubGVuZ3RoPDUwP29yZGVyPWF3YWl0IGFwaS5kYi5maW5kT25lKHRhYmxlLHt0eElkOmlkfSk6Im51bWJlciI9PXR5cGVvZiBpZCYmTnVtYmVyLmlzSW50ZWdlcihpZCkmJmlkPjAmJihvcmRlcj1hd2FpdCBhcGkuZGIuZmluZE9uZSh0YWJsZSx7X2lkOmlkfSkpLGFwaS5hc3NlcnQobnVsbCE9PW9yZGVyLCJvcmRlciBkb2VzIG5vdCBleGlzdCBvciBpbnZhbGlkIHBhcmFtcyIpJiZvcmRlci5hY2NvdW50PT09ZmluYWxBY2NvdW50KXtsZXQgcXVhbnRpdHksc3ltYm9sOyJidXkiPT09dHlwZT8oc3ltYm9sPSJTV0FQLkhJVkUiLHF1YW50aXR5PW9yZGVyLnRva2Vuc0xvY2tlZCk6KHN5bWJvbD1vcmRlci5zeW1ib2wscXVhbnRpdHk9b3JkZXIucXVhbnRpdHkpLGF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhmaW5hbEFjY291bnQsc3ltYm9sLHF1YW50aXR5LCJ1c2VyIiksYXdhaXQgYXBpLmRiLnJlbW92ZSh0YWJsZSxvcmRlciksInNlbGwiPT09dHlwZT9hd2FpdCB1cGRhdGVBc2tNZXRyaWMob3JkZXIuc3ltYm9sKTphd2FpdCB1cGRhdGVCaWRNZXRyaWMob3JkZXIuc3ltYm9sKX19fTtjb25zdCBmaW5kTWF0Y2hpbmdTZWxsT3JkZXJzPWFzeW5jKG9yZGVyLHRva2VuUHJlY2lzaW9uKT0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCxzeW1ib2w6c3ltYm9sLHByaWNlRGVjOnByaWNlRGVjfT1vcmRlcixidXlPcmRlcj1vcmRlcjtsZXQgb2Zmc2V0PTAsdm9sdW1lVHJhZGVkPTA7YXdhaXQgcmVtb3ZlRXhwaXJlZE9yZGVycygic2VsbEJvb2siKTtsZXQgc2VsbE9yZGVyQm9vaz1hd2FpdCBhcGkuZGIuZmluZCgic2VsbEJvb2siLHtzeW1ib2w6c3ltYm9sLHByaWNlRGVjOnskbHRlOnByaWNlRGVjfX0sMWUzLG9mZnNldCxbe2luZGV4OiJwcmljZURlYyIsZGVzY2VuZGluZzohMX0se2luZGV4OiJfaWQiLGRlc2NlbmRpbmc6ITF9XSk7ZG97Y29uc3QgbmJPcmRlcnM9c2VsbE9yZGVyQm9vay5sZW5ndGg7bGV0IGluYz0wO2Zvcig7aW5jPG5iT3JkZXJzJiZhcGkuQmlnTnVtYmVyKGJ1eU9yZGVyLnF1YW50aXR5KS5ndCgwKTspe2NvbnN0IHNlbGxPcmRlcj1zZWxsT3JkZXJCb29rW2luY107aWYoYXBpLkJpZ051bWJlcihidXlPcmRlci5xdWFudGl0eSkubHRlKHNlbGxPcmRlci5xdWFudGl0eSkpe2xldCBxdHlUb2tlbnNUb1NlbmQ9YXBpLkJpZ051bWJlcihzZWxsT3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShidXlPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4KTtpZihhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoYnV5T3JkZXIudG9rZW5zTG9ja2VkKSYmKHF0eVRva2Vuc1RvU2VuZD1hcGkuQmlnTnVtYmVyKHNlbGxPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KGJ1eU9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKDgsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoMCkmJmFwaS5CaWdOdW1iZXIoYnV5T3JkZXIucXVhbnRpdHkpLmd0KDApLCJ0aGUgb3JkZXIgY2Fubm90IGJlIGZpbGxlZCIpKXtsZXQgcmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhhY2NvdW50LHN5bWJvbCxidXlPcmRlci5xdWFudGl0eSwidXNlciIpO3Jlcy5lcnJvcnMmJihhcGkuZGVidWcocmVzLmVycm9ycyksYXBpLmRlYnVnKCJUWElEOiAiK2J1eU9yZGVyLnR4SWQpLGFwaS5kZWJ1ZyhhY2NvdW50KSxhcGkuZGVidWcoc3ltYm9sKSxhcGkuZGVidWcoYnV5T3JkZXIucXVhbnRpdHkpKSxyZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKHNlbGxPcmRlci5hY2NvdW50LCJTV0FQLkhJVkUiLHF0eVRva2Vuc1RvU2VuZCwidXNlciIpLHJlcy5lcnJvcnMmJihhcGkuZGVidWcocmVzLmVycm9ycyksYXBpLmRlYnVnKCJUWElEOiAiK2J1eU9yZGVyLnR4SWQpLGFwaS5kZWJ1ZyhzZWxsT3JkZXIuYWNjb3VudCksYXBpLmRlYnVnKCJTV0FQLkhJVkUiKSxhcGkuZGVidWcocXR5VG9rZW5zVG9TZW5kKSk7Y29uc3QgcXR5TGVmdFNlbGxPcmRlcj1hcGkuQmlnTnVtYmVyKHNlbGxPcmRlci5xdWFudGl0eSkubWludXMoYnV5T3JkZXIucXVhbnRpdHkpLnRvRml4ZWQodG9rZW5QcmVjaXNpb24pLG5iVG9rZW5zVG9GaWxsT3JkZXI9YXBpLkJpZ051bWJlcihzZWxsT3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShxdHlMZWZ0U2VsbE9yZGVyKS50b0ZpeGVkKDgpO2FwaS5CaWdOdW1iZXIocXR5TGVmdFNlbGxPcmRlcikuZ3QoMCkmJmFwaS5CaWdOdW1iZXIobmJUb2tlbnNUb0ZpbGxPcmRlcikuZ3RlKCIwLjAwMDAwMDAxIik/KHNlbGxPcmRlci5xdWFudGl0eT1xdHlMZWZ0U2VsbE9yZGVyLGF3YWl0IGFwaS5kYi51cGRhdGUoInNlbGxCb29rIixzZWxsT3JkZXIpKTooYXBpLkJpZ051bWJlcihxdHlMZWZ0U2VsbE9yZGVyKS5ndCgwKSYmYXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKHNlbGxPcmRlci5hY2NvdW50LHN5bWJvbCxxdHlMZWZ0U2VsbE9yZGVyLCJ1c2VyIiksYXBpLmVtaXQoIm9yZGVyQ2xvc2VkIix7YWNjb3VudDpzZWxsT3JkZXIuYWNjb3VudCx0eXBlOiJzZWxsIix0eElkOnNlbGxPcmRlci50eElkfSksYXdhaXQgYXBpLmRiLnJlbW92ZSgic2VsbEJvb2siLHNlbGxPcmRlcikpO2NvbnN0IHRva2Vuc1RvVW5sb2NrPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIudG9rZW5zTG9ja2VkKS5taW51cyhxdHlUb2tlbnNUb1NlbmQpLnRvRml4ZWQoOCk7YXBpLkJpZ051bWJlcih0b2tlbnNUb1VubG9jaykuZ3QoMCkmJmF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhhY2NvdW50LCJTV0FQLkhJVkUiLHRva2Vuc1RvVW5sb2NrLCJ1c2VyIiksYXdhaXQgdXBkYXRlVHJhZGVzSGlzdG9yeSgiYnV5IixhY2NvdW50LHNlbGxPcmRlci5hY2NvdW50LHN5bWJvbCxidXlPcmRlci5xdWFudGl0eSxzZWxsT3JkZXIucHJpY2UscXR5VG9rZW5zVG9TZW5kLGJ1eU9yZGVyLnR4SWQsc2VsbE9yZGVyLnR4SWQpLHZvbHVtZVRyYWRlZD1hcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkucGx1cyhxdHlUb2tlbnNUb1NlbmQpLGJ1eU9yZGVyLnF1YW50aXR5PSIwIixhd2FpdCBhcGkuZGIucmVtb3ZlKCJidXlCb29rIixidXlPcmRlciksYXBpLmVtaXQoIm9yZGVyQ2xvc2VkIix7YWNjb3VudDpidXlPcmRlci5hY2NvdW50LHR5cGU6ImJ1eSIsdHhJZDpidXlPcmRlci50eElkfSl9fWVsc2V7bGV0IHF0eVRva2Vuc1RvU2VuZD1hcGkuQmlnTnVtYmVyKHNlbGxPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KHNlbGxPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4KTtpZihhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoYnV5T3JkZXIudG9rZW5zTG9ja2VkKSYmKHF0eVRva2Vuc1RvU2VuZD1hcGkuQmlnTnVtYmVyKHNlbGxPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KHNlbGxPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4LGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikpLGFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihxdHlUb2tlbnNUb1NlbmQpLmd0KDApJiZhcGkuQmlnTnVtYmVyKGJ1eU9yZGVyLnF1YW50aXR5KS5ndCgwKSwidGhlIG9yZGVyIGNhbm5vdCBiZSBmaWxsZWQiKSl7bGV0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYWNjb3VudCxzeW1ib2wsc2VsbE9yZGVyLnF1YW50aXR5LCJ1c2VyIik7cmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrYnV5T3JkZXIudHhJZCksYXBpLmRlYnVnKGFjY291bnQpLGFwaS5kZWJ1ZyhzeW1ib2wpLGFwaS5kZWJ1ZyhzZWxsT3JkZXIucXVhbnRpdHkpKSxyZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKHNlbGxPcmRlci5hY2NvdW50LCJTV0FQLkhJVkUiLHF0eVRva2Vuc1RvU2VuZCwidXNlciIpLHJlcy5lcnJvcnMmJihhcGkuZGVidWcocmVzLmVycm9ycyksYXBpLmRlYnVnKCJUWElEOiAiK2J1eU9yZGVyLnR4SWQpLGFwaS5kZWJ1ZyhzZWxsT3JkZXIuYWNjb3VudCksYXBpLmRlYnVnKCJTV0FQLkhJVkUiKSxhcGkuZGVidWcocXR5VG9rZW5zVG9TZW5kKSksYXdhaXQgYXBpLmRiLnJlbW92ZSgic2VsbEJvb2siLHNlbGxPcmRlciksYXBpLmVtaXQoIm9yZGVyQ2xvc2VkIix7YWNjb3VudDpzZWxsT3JkZXIuYWNjb3VudCx0eXBlOiJzZWxsIix0eElkOnNlbGxPcmRlci50eElkfSksYnV5T3JkZXIudG9rZW5zTG9ja2VkPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIudG9rZW5zTG9ja2VkKS5taW51cyhxdHlUb2tlbnNUb1NlbmQpLnRvRml4ZWQoOCksYnV5T3JkZXIucXVhbnRpdHk9YXBpLkJpZ051bWJlcihidXlPcmRlci5xdWFudGl0eSkubWludXMoc2VsbE9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKHRva2VuUHJlY2lzaW9uKTtjb25zdCBuYlRva2Vuc1RvRmlsbE9yZGVyPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShidXlPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4KTthcGkuQmlnTnVtYmVyKG5iVG9rZW5zVG9GaWxsT3JkZXIpLmx0KCIwLjAwMDAwMDAxIikmJihhd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYWNjb3VudCwiU1dBUC5ISVZFIixidXlPcmRlci50b2tlbnNMb2NrZWQsInVzZXIiKSxidXlPcmRlci5xdWFudGl0eT0iMCIsYXdhaXQgYXBpLmRiLnJlbW92ZSgiYnV5Qm9vayIsYnV5T3JkZXIpLGFwaS5lbWl0KCJvcmRlckNsb3NlZCIse2FjY291bnQ6YnV5T3JkZXIuYWNjb3VudCx0eXBlOiJidXkiLHR4SWQ6YnV5T3JkZXIudHhJZH0pKSxhd2FpdCB1cGRhdGVUcmFkZXNIaXN0b3J5KCJidXkiLGFjY291bnQsc2VsbE9yZGVyLmFjY291bnQsc3ltYm9sLHNlbGxPcmRlci5xdWFudGl0eSxzZWxsT3JkZXIucHJpY2UscXR5VG9rZW5zVG9TZW5kLGJ1eU9yZGVyLnR4SWQsc2VsbE9yZGVyLnR4SWQpLHZvbHVtZVRyYWRlZD1hcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkucGx1cyhxdHlUb2tlbnNUb1NlbmQpfX1pbmMrPTF9b2Zmc2V0Kz0xZTMsYXBpLkJpZ051bWJlcihidXlPcmRlci5xdWFudGl0eSkuZ3QoMCkmJihzZWxsT3JkZXJCb29rPWF3YWl0IGFwaS5kYi5maW5kKCJzZWxsQm9vayIse3N5bWJvbDpzeW1ib2wscHJpY2VEZWM6eyRsdGU6cHJpY2VEZWN9fSwxZTMsb2Zmc2V0LFt7aW5kZXg6InByaWNlRGVjIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKSl9d2hpbGUoc2VsbE9yZGVyQm9vay5sZW5ndGg+MCYmYXBpLkJpZ051bWJlcihidXlPcmRlci5xdWFudGl0eSkuZ3QoMCkpO2FwaS5CaWdOdW1iZXIoYnV5T3JkZXIucXVhbnRpdHkpLmd0KDApJiZhd2FpdCBhcGkuZGIudXBkYXRlKCJidXlCb29rIixidXlPcmRlciksYXBpLkJpZ051bWJlcih2b2x1bWVUcmFkZWQpLmd0KDApJiZhd2FpdCB1cGRhdGVWb2x1bWVNZXRyaWMoc3ltYm9sLHZvbHVtZVRyYWRlZCksYXdhaXQgdXBkYXRlQXNrTWV0cmljKHN5bWJvbCksYXdhaXQgdXBkYXRlQmlkTWV0cmljKHN5bWJvbCl9LGZpbmRNYXRjaGluZ0J1eU9yZGVycz1hc3luYyhvcmRlcix0b2tlblByZWNpc2lvbik9Pntjb25zdHthY2NvdW50OmFjY291bnQsc3ltYm9sOnN5bWJvbCxwcmljZURlYzpwcmljZURlY309b3JkZXIsc2VsbE9yZGVyPW9yZGVyO2xldCBvZmZzZXQ9MCx2b2x1bWVUcmFkZWQ9MDthd2FpdCByZW1vdmVFeHBpcmVkT3JkZXJzKCJidXlCb29rIik7bGV0IGJ1eU9yZGVyQm9vaz1hd2FpdCBhcGkuZGIuZmluZCgiYnV5Qm9vayIse3N5bWJvbDpzeW1ib2wscHJpY2VEZWM6eyRndGU6cHJpY2VEZWN9fSwxZTMsb2Zmc2V0LFt7aW5kZXg6InByaWNlRGVjIixkZXNjZW5kaW5nOiEwfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtkb3tjb25zdCBuYk9yZGVycz1idXlPcmRlckJvb2subGVuZ3RoO2xldCBpbmM9MDtmb3IoO2luYzxuYk9yZGVycyYmYXBpLkJpZ051bWJlcihzZWxsT3JkZXIucXVhbnRpdHkpLmd0KDApOyl7Y29uc3QgYnV5T3JkZXI9YnV5T3JkZXJCb29rW2luY107aWYoYXBpLkJpZ051bWJlcihzZWxsT3JkZXIucXVhbnRpdHkpLmx0ZShidXlPcmRlci5xdWFudGl0eSkpe2xldCBxdHlUb2tlbnNUb1NlbmQ9YXBpLkJpZ051bWJlcihidXlPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KHNlbGxPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4KTtpZihhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoYnV5T3JkZXIudG9rZW5zTG9ja2VkKSYmKHF0eVRva2Vuc1RvU2VuZD1hcGkuQmlnTnVtYmVyKGJ1eU9yZGVyLnByaWNlKS5tdWx0aXBsaWVkQnkoc2VsbE9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKDgsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoMCkmJmFwaS5CaWdOdW1iZXIoc2VsbE9yZGVyLnF1YW50aXR5KS5ndCgwKSwidGhlIG9yZGVyIGNhbm5vdCBiZSBmaWxsZWQiKSl7bGV0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYnV5T3JkZXIuYWNjb3VudCxzeW1ib2wsc2VsbE9yZGVyLnF1YW50aXR5LCJ1c2VyIik7cmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrc2VsbE9yZGVyLnR4SWQpLGFwaS5kZWJ1ZyhidXlPcmRlci5hY2NvdW50KSxhcGkuZGVidWcoc3ltYm9sKSxhcGkuZGVidWcoc2VsbE9yZGVyLnF1YW50aXR5KSkscmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhhY2NvdW50LCJTV0FQLkhJVkUiLHF0eVRva2Vuc1RvU2VuZCwidXNlciIpLHJlcy5lcnJvcnMmJihhcGkuZGVidWcocmVzLmVycm9ycyksYXBpLmRlYnVnKCJUWElEOiAiK3NlbGxPcmRlci50eElkKSxhcGkuZGVidWcoYWNjb3VudCksYXBpLmRlYnVnKCJTV0FQLkhJVkUiKSxhcGkuZGVidWcocXR5VG9rZW5zVG9TZW5kKSk7Y29uc3QgcXR5TGVmdEJ1eU9yZGVyPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIucXVhbnRpdHkpLm1pbnVzKHNlbGxPcmRlci5xdWFudGl0eSkudG9GaXhlZCh0b2tlblByZWNpc2lvbiksYnV5T3JkZXJ0b2tlbnNMb2NrZWQ9YXBpLkJpZ051bWJlcihidXlPcmRlci50b2tlbnNMb2NrZWQpLm1pbnVzKHF0eVRva2Vuc1RvU2VuZCkudG9GaXhlZCg4KSxuYlRva2Vuc1RvRmlsbE9yZGVyPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShxdHlMZWZ0QnV5T3JkZXIpLnRvRml4ZWQoOCk7YXBpLkJpZ051bWJlcihxdHlMZWZ0QnV5T3JkZXIpLmd0KDApJiZhcGkuQmlnTnVtYmVyKG5iVG9rZW5zVG9GaWxsT3JkZXIpLmd0ZSgiMC4wMDAwMDAwMSIpPyhidXlPcmRlci5xdWFudGl0eT1xdHlMZWZ0QnV5T3JkZXIsYnV5T3JkZXIudG9rZW5zTG9ja2VkPWJ1eU9yZGVydG9rZW5zTG9ja2VkLGF3YWl0IGFwaS5kYi51cGRhdGUoImJ1eUJvb2siLGJ1eU9yZGVyKSk6KGFwaS5CaWdOdW1iZXIoYnV5T3JkZXJ0b2tlbnNMb2NrZWQpLmd0KDApJiZhd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYnV5T3JkZXIuYWNjb3VudCwiU1dBUC5ISVZFIixidXlPcmRlcnRva2Vuc0xvY2tlZCwidXNlciIpLGFwaS5lbWl0KCJvcmRlckNsb3NlZCIse2FjY291bnQ6YnV5T3JkZXIuYWNjb3VudCx0eXBlOiJidXkiLHR4SWQ6YnV5T3JkZXIudHhJZH0pLGF3YWl0IGFwaS5kYi5yZW1vdmUoImJ1eUJvb2siLGJ1eU9yZGVyKSksYXdhaXQgdXBkYXRlVHJhZGVzSGlzdG9yeSgic2VsbCIsYnV5T3JkZXIuYWNjb3VudCxhY2NvdW50LHN5bWJvbCxzZWxsT3JkZXIucXVhbnRpdHksYnV5T3JkZXIucHJpY2UscXR5VG9rZW5zVG9TZW5kLGJ1eU9yZGVyLnR4SWQsc2VsbE9yZGVyLnR4SWQpLHZvbHVtZVRyYWRlZD1hcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkucGx1cyhxdHlUb2tlbnNUb1NlbmQpLHNlbGxPcmRlci5xdWFudGl0eT0wLGF3YWl0IGFwaS5kYi5yZW1vdmUoInNlbGxCb29rIixzZWxsT3JkZXIpLGFwaS5lbWl0KCJvcmRlckNsb3NlZCIse2FjY291bnQ6c2VsbE9yZGVyLmFjY291bnQsdHlwZToic2VsbCIsdHhJZDpzZWxsT3JkZXIudHhJZH0pfX1lbHNle2xldCBxdHlUb2tlbnNUb1NlbmQ9YXBpLkJpZ051bWJlcihidXlPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KGJ1eU9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKDgpO2lmKHF0eVRva2Vuc1RvU2VuZD5idXlPcmRlci50b2tlbnNMb2NrZWQmJihxdHlUb2tlbnNUb1NlbmQ9YXBpLkJpZ051bWJlcihidXlPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KGJ1eU9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKDgsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoMCkmJmFwaS5CaWdOdW1iZXIoc2VsbE9yZGVyLnF1YW50aXR5KS5ndCgwKSwidGhlIG9yZGVyIGNhbm5vdCBiZSBmaWxsZWQiKSl7bGV0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYnV5T3JkZXIuYWNjb3VudCxzeW1ib2wsYnV5T3JkZXIucXVhbnRpdHksInVzZXIiKTtyZXMuZXJyb3JzJiYoYXBpLmRlYnVnKHJlcy5lcnJvcnMpLGFwaS5kZWJ1ZygiVFhJRDogIitzZWxsT3JkZXIudHhJZCksYXBpLmRlYnVnKGJ1eU9yZGVyLmFjY291bnQpLGFwaS5kZWJ1ZyhzeW1ib2wpLGFwaS5kZWJ1ZyhidXlPcmRlci5xdWFudGl0eSkpLHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYWNjb3VudCwiU1dBUC5ISVZFIixxdHlUb2tlbnNUb1NlbmQsInVzZXIiKSxyZXMuZXJyb3JzJiYoYXBpLmRlYnVnKHJlcy5lcnJvcnMpLGFwaS5kZWJ1ZygiVFhJRDogIitzZWxsT3JkZXIudHhJZCksYXBpLmRlYnVnKGFjY291bnQpLGFwaS5kZWJ1ZygiU1dBUC5ISVZFIiksYXBpLmRlYnVnKHF0eVRva2Vuc1RvU2VuZCkpO2NvbnN0IGJ1eU9yZGVydG9rZW5zTG9ja2VkPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIudG9rZW5zTG9ja2VkKS5taW51cyhxdHlUb2tlbnNUb1NlbmQpLnRvRml4ZWQoOCk7YXBpLkJpZ051bWJlcihidXlPcmRlcnRva2Vuc0xvY2tlZCkuZ3QoMCkmJmF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhidXlPcmRlci5hY2NvdW50LCJTV0FQLkhJVkUiLGJ1eU9yZGVydG9rZW5zTG9ja2VkLCJ1c2VyIiksYXdhaXQgYXBpLmRiLnJlbW92ZSgiYnV5Qm9vayIsYnV5T3JkZXIpLGFwaS5lbWl0KCJvcmRlckNsb3NlZCIse2FjY291bnQ6YnV5T3JkZXIuYWNjb3VudCx0eXBlOiJidXkiLHR4SWQ6YnV5T3JkZXIudHhJZH0pLHNlbGxPcmRlci5xdWFudGl0eT1hcGkuQmlnTnVtYmVyKHNlbGxPcmRlci5xdWFudGl0eSkubWludXMoYnV5T3JkZXIucXVhbnRpdHkpLnRvRml4ZWQodG9rZW5QcmVjaXNpb24pO2NvbnN0IG5iVG9rZW5zVG9GaWxsT3JkZXI9YXBpLkJpZ051bWJlcihzZWxsT3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShzZWxsT3JkZXIucXVhbnRpdHkpLnRvRml4ZWQoOCk7YXBpLkJpZ051bWJlcihuYlRva2Vuc1RvRmlsbE9yZGVyKS5sdCgiMC4wMDAwMDAwMSIpJiYoYXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGFjY291bnQsc3ltYm9sLHNlbGxPcmRlci5xdWFudGl0eSwidXNlciIpLHNlbGxPcmRlci5xdWFudGl0eT0iMCIsYXdhaXQgYXBpLmRiLnJlbW92ZSgic2VsbEJvb2siLHNlbGxPcmRlciksYXBpLmVtaXQoIm9yZGVyQ2xvc2VkIix7YWNjb3VudDpzZWxsT3JkZXIuYWNjb3VudCx0eXBlOiJzZWxsIix0eElkOnNlbGxPcmRlci50eElkfSkpLGF3YWl0IHVwZGF0ZVRyYWRlc0hpc3RvcnkoInNlbGwiLGJ1eU9yZGVyLmFjY291bnQsYWNjb3VudCxzeW1ib2wsYnV5T3JkZXIucXVhbnRpdHksYnV5T3JkZXIucHJpY2UscXR5VG9rZW5zVG9TZW5kLGJ1eU9yZGVyLnR4SWQsc2VsbE9yZGVyLnR4SWQpLHZvbHVtZVRyYWRlZD1hcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkucGx1cyhxdHlUb2tlbnNUb1NlbmQpfX1pbmMrPTF9b2Zmc2V0Kz0xZTMsYXBpLkJpZ051bWJlcihzZWxsT3JkZXIucXVhbnRpdHkpLmd0KDApJiYoYnV5T3JkZXJCb29rPWF3YWl0IGFwaS5kYi5maW5kKCJidXlCb29rIix7c3ltYm9sOnN5bWJvbCxwcmljZURlYzp7JGd0ZTpwcmljZURlY319LDFlMyxvZmZzZXQsW3tpbmRleDoicHJpY2VEZWMiLGRlc2NlbmRpbmc6ITB9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pKX13aGlsZShidXlPcmRlckJvb2subGVuZ3RoPjAmJmFwaS5CaWdOdW1iZXIoc2VsbE9yZGVyLnF1YW50aXR5KS5ndCgwKSk7YXBpLkJpZ051bWJlcihzZWxsT3JkZXIucXVhbnRpdHkpLmd0KDApJiZhd2FpdCBhcGkuZGIudXBkYXRlKCJzZWxsQm9vayIsc2VsbE9yZGVyKSxhcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkuZ3QoMCkmJmF3YWl0IHVwZGF0ZVZvbHVtZU1ldHJpYyhzeW1ib2wsdm9sdW1lVHJhZGVkKSxhd2FpdCB1cGRhdGVBc2tNZXRyaWMoc3ltYm9sKSxhd2FpdCB1cGRhdGVCaWRNZXRyaWMoc3ltYm9sKX07YWN0aW9ucy5idXk9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCx0eElkOnR4SWQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxwcmljZTpwcmljZSxleHBpcmF0aW9uOmV4cGlyYXRpb24saXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxmaW5hbEFjY291bnQ9dm9pZCAwPT09YWNjb3VudHx8Im51bGwiIT09YXBpLnNlbmRlcj9hcGkuc2VuZGVyOmFjY291bnQsZmluYWxUeElkPXZvaWQgMD09PXR4SWR8fCJudWxsIiE9PWFwaS5zZW5kZXI/YXBpLnRyYW5zYWN0aW9uSWQ6dHhJZDtpZigxIT09QUNDT1VOVF9CTEFDS0xJU1RbZmluYWxBY2NvdW50XSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleXx8Im51bGwiPT09YXBpLnNlbmRlciwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocHJpY2UmJiJzdHJpbmciPT10eXBlb2YgcHJpY2UmJiFhcGkuQmlnTnVtYmVyKHByaWNlKS5pc05hTigpJiZzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiYiU1dBUC5ISVZFIiE9PXN5bWJvbCYmcXVhbnRpdHkmJiJzdHJpbmciPT10eXBlb2YgcXVhbnRpdHkmJiFhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5pc05hTigpJiZmaW5hbFR4SWQmJiJzdHJpbmciPT10eXBlb2YgZmluYWxUeElkJiZmaW5hbFR4SWQubGVuZ3RoPjAmJih2b2lkIDA9PT1leHBpcmF0aW9ufHxleHBpcmF0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKGV4cGlyYXRpb24pJiZleHBpcmF0aW9uPjApLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KHRva2VuJiZhcGkuQmlnTnVtYmVyKHByaWNlKS5ndCgwKSYmY291bnREZWNpbWFscyhwcmljZSk8PTgmJmNvdW50RGVjaW1hbHMocXVhbnRpdHkpPD10b2tlbi5wcmVjaXNpb24sImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG5iVG9rZW5zVG9Mb2NrPWFwaS5CaWdOdW1iZXIocHJpY2UpLm11bHRpcGxpZWRCeShxdWFudGl0eSkudG9GaXhlZCg4KTtpZihhcGkuYXNzZXJ0KGFwaS5CaWdOdW1iZXIobmJUb2tlbnNUb0xvY2spLmd0ZSgiMC4wMDAwMDAwMSIpLCJvcmRlciBjYW5ub3QgYmUgcGxhY2VkIGFzIGl0IGNhbm5vdCBiZSBmaWxsZWQiKSl7Y29uc3QgcmVzPWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXJUb0NvbnRyYWN0Iix7ZnJvbTpmaW5hbEFjY291bnQsc3ltYm9sOiJTV0FQLkhJVkUiLHF1YW50aXR5Om5iVG9rZW5zVG9Mb2NrLHRvOiJtYXJrZXQifSk7aWYodm9pZCAwPT09cmVzLmVycm9ycyYmcmVzLmV2ZW50cyYmdm9pZCAwIT09cmVzLmV2ZW50cy5maW5kKGVsPT4idG9rZW5zIj09PWVsLmNvbnRyYWN0JiYidHJhbnNmZXJUb0NvbnRyYWN0Ij09PWVsLmV2ZW50JiZlbC5kYXRhLmZyb209PT1maW5hbEFjY291bnQmJiJtYXJrZXQiPT09ZWwuZGF0YS50byYmZWwuZGF0YS5xdWFudGl0eT09PW5iVG9rZW5zVG9Mb2NrJiYiU1dBUC5ISVZFIj09PWVsLmRhdGEuc3ltYm9sKSl7Y29uc3QgdGltZXN0YW1wU2VjPWFwaS5CaWdOdW1iZXIobmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKS5nZXRUaW1lKCkpLmRpdmlkZWRCeSgxZTMpLnRvTnVtYmVyKCksb3JkZXI9e307b3JkZXIudHhJZD1maW5hbFR4SWQsb3JkZXIudGltZXN0YW1wPXRpbWVzdGFtcFNlYyxvcmRlci5hY2NvdW50PWZpbmFsQWNjb3VudCxvcmRlci5zeW1ib2w9c3ltYm9sLG9yZGVyLnF1YW50aXR5PWFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKSxvcmRlci5wcmljZT1hcGkuQmlnTnVtYmVyKHByaWNlKS50b0ZpeGVkKDgpLG9yZGVyLnByaWNlRGVjPXskbnVtYmVyRGVjaW1hbDpvcmRlci5wcmljZX0sb3JkZXIudG9rZW5zTG9ja2VkPW5iVG9rZW5zVG9Mb2NrLG9yZGVyLmV4cGlyYXRpb249dm9pZCAwPT09ZXhwaXJhdGlvbnx8ZXhwaXJhdGlvbj4yNTkyZTM/dGltZXN0YW1wU2VjKzI1OTJlMzp0aW1lc3RhbXBTZWMrZXhwaXJhdGlvbjtjb25zdCBvcmRlckluRGI9YXdhaXQgYXBpLmRiLmluc2VydCgiYnV5Qm9vayIsb3JkZXIpO2F3YWl0IGZpbmRNYXRjaGluZ1NlbGxPcmRlcnMob3JkZXJJbkRiLHRva2VuLnByZWNpc2lvbil9fX19fSxhY3Rpb25zLnNlbGw9YXN5bmMgcGF5bG9hZD0+e2NvbnN0e2FjY291bnQ6YWNjb3VudCx0eElkOnR4SWQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxwcmljZTpwcmljZSxleHBpcmF0aW9uOmV4cGlyYXRpb24saXNTaWduZWRXaXRoQWN0aXZlS2V5OmlzU2lnbmVkV2l0aEFjdGl2ZUtleX09cGF5bG9hZCxmaW5hbEFjY291bnQ9dm9pZCAwPT09YWNjb3VudHx8Im51bGwiIT09YXBpLnNlbmRlcj9hcGkuc2VuZGVyOmFjY291bnQsZmluYWxUeElkPXZvaWQgMD09PXR4SWR8fCJudWxsIiE9PWFwaS5zZW5kZXI/YXBpLnRyYW5zYWN0aW9uSWQ6dHhJZDtpZigxIT09QUNDT1VOVF9CTEFDS0xJU1RbZmluYWxBY2NvdW50XSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleXx8Im51bGwiPT09YXBpLnNlbmRlciwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJmFwaS5hc3NlcnQocHJpY2UmJiJzdHJpbmciPT10eXBlb2YgcHJpY2UmJiFhcGkuQmlnTnVtYmVyKHByaWNlKS5pc05hTigpJiZzeW1ib2wmJiJzdHJpbmciPT10eXBlb2Ygc3ltYm9sJiYiU1dBUC5ISVZFIiE9PXN5bWJvbCYmcXVhbnRpdHkmJiJzdHJpbmciPT10eXBlb2YgcXVhbnRpdHkmJiFhcGkuQmlnTnVtYmVyKHF1YW50aXR5KS5pc05hTigpJiZmaW5hbFR4SWQmJiJzdHJpbmciPT10eXBlb2YgZmluYWxUeElkJiZmaW5hbFR4SWQubGVuZ3RoPjAmJih2b2lkIDA9PT1leHBpcmF0aW9ufHxleHBpcmF0aW9uJiZOdW1iZXIuaXNJbnRlZ2VyKGV4cGlyYXRpb24pJiZleHBpcmF0aW9uPjApLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KHRva2VuJiZhcGkuQmlnTnVtYmVyKHByaWNlKS5ndCgwKSYmY291bnREZWNpbWFscyhwcmljZSk8PTgmJmNvdW50RGVjaW1hbHMocXVhbnRpdHkpPD10b2tlbi5wcmVjaXNpb24sImludmFsaWQgcGFyYW1zIikpe2NvbnN0IG5iVG9rZW5zVG9GaWxsT3JkZXI9YXBpLkJpZ051bWJlcihwcmljZSkubXVsdGlwbGllZEJ5KHF1YW50aXR5KS50b0ZpeGVkKDgpO2lmKGFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihuYlRva2Vuc1RvRmlsbE9yZGVyKS5ndGUoIjAuMDAwMDAwMDEiKSwib3JkZXIgY2Fubm90IGJlIHBsYWNlZCBhcyBpdCBjYW5ub3QgYmUgZmlsbGVkIikpe2NvbnN0IHJlcz1hd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoInRva2VucyIsInRyYW5zZmVyVG9Db250cmFjdCIse2Zyb206ZmluYWxBY2NvdW50LHN5bWJvbDpzeW1ib2wscXVhbnRpdHk6cXVhbnRpdHksdG86Im1hcmtldCJ9KTtpZih2b2lkIDA9PT1yZXMuZXJyb3JzJiZyZXMuZXZlbnRzJiZ2b2lkIDAhPT1yZXMuZXZlbnRzLmZpbmQoZWw9PiJ0b2tlbnMiPT09ZWwuY29udHJhY3QmJiJ0cmFuc2ZlclRvQ29udHJhY3QiPT09ZWwuZXZlbnQmJmVsLmRhdGEuZnJvbT09PWZpbmFsQWNjb3VudCYmIm1hcmtldCI9PT1lbC5kYXRhLnRvJiZlbC5kYXRhLnF1YW50aXR5PT09cXVhbnRpdHkmJmVsLmRhdGEuc3ltYm9sPT09c3ltYm9sKSl7Y29uc3QgdGltZXN0YW1wU2VjPWFwaS5CaWdOdW1iZXIobmV3IERhdGUoYXBpLmhpdmVCbG9ja1RpbWVzdGFtcCsiLjAwMFoiKS5nZXRUaW1lKCkpLmRpdmlkZWRCeSgxZTMpLnRvTnVtYmVyKCksb3JkZXI9e307b3JkZXIudHhJZD1maW5hbFR4SWQsb3JkZXIudGltZXN0YW1wPXRpbWVzdGFtcFNlYyxvcmRlci5hY2NvdW50PWZpbmFsQWNjb3VudCxvcmRlci5zeW1ib2w9c3ltYm9sLG9yZGVyLnF1YW50aXR5PWFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKSxvcmRlci5wcmljZT1hcGkuQmlnTnVtYmVyKHByaWNlKS50b0ZpeGVkKDgpLG9yZGVyLnByaWNlRGVjPXskbnVtYmVyRGVjaW1hbDpvcmRlci5wcmljZX0sb3JkZXIuZXhwaXJhdGlvbj12b2lkIDA9PT1leHBpcmF0aW9ufHxleHBpcmF0aW9uPjI1OTJlMz90aW1lc3RhbXBTZWMrMjU5MmUzOnRpbWVzdGFtcFNlYytleHBpcmF0aW9uO2NvbnN0IG9yZGVySW5EYj1hd2FpdCBhcGkuZGIuaW5zZXJ0KCJzZWxsQm9vayIsb3JkZXIpO2F3YWl0IGZpbmRNYXRjaGluZ0J1eU9yZGVycyhvcmRlckluRGIsdG9rZW4ucHJlY2lzaW9uKX19fX19LGFjdGlvbnMubWFya2V0QnV5PWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50OmFjY291bnQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLGZpbmFsQWNjb3VudD12b2lkIDA9PT1hY2NvdW50fHwibnVsbCIhPT1hcGkuc2VuZGVyP2FwaS5zZW5kZXI6YWNjb3VudDtpZigxIT09QUNDT1VOVF9CTEFDS0xJU1RbZmluYWxBY2NvdW50XSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleXx8Im51bGwiPT09YXBpLnNlbmRlciwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJiJTV0FQLkhJVkUiIT09c3ltYm9sJiZxdWFudGl0eSYmInN0cmluZyI9PXR5cGVvZiBxdWFudGl0eSYmIWFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLmd0KDApKXtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KHRva2VuJiZjb3VudERlY2ltYWxzKHF1YW50aXR5KTw9OCwiaW52YWxpZCBwYXJhbXMiKSl7Y29uc3QgcmVzdWx0PWF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgidG9rZW5zIiwidHJhbnNmZXJUb0NvbnRyYWN0Iix7ZnJvbTpmaW5hbEFjY291bnQsc3ltYm9sOiJTV0FQLkhJVkUiLHF1YW50aXR5OnF1YW50aXR5LHRvOiJtYXJrZXQifSk7aWYodm9pZCAwPT09cmVzdWx0LmVycm9ycyYmcmVzdWx0LmV2ZW50cyYmdm9pZCAwIT09cmVzdWx0LmV2ZW50cy5maW5kKGVsPT4idG9rZW5zIj09PWVsLmNvbnRyYWN0JiYidHJhbnNmZXJUb0NvbnRyYWN0Ij09PWVsLmV2ZW50JiZlbC5kYXRhLmZyb209PT1maW5hbEFjY291bnQmJiJtYXJrZXQiPT09ZWwuZGF0YS50byYmZWwuZGF0YS5xdWFudGl0eT09PXF1YW50aXR5JiYiU1dBUC5ISVZFIj09PWVsLmRhdGEuc3ltYm9sKSl7bGV0IGhpdmVSZW1haW5pbmc9cXVhbnRpdHksb2Zmc2V0PTAsdm9sdW1lVHJhZGVkPTA7YXdhaXQgcmVtb3ZlRXhwaXJlZE9yZGVycygic2VsbEJvb2siKTtsZXQgc2VsbE9yZGVyQm9vaz1hd2FpdCBhcGkuZGIuZmluZCgic2VsbEJvb2siLHtzeW1ib2w6c3ltYm9sfSwxZTMsb2Zmc2V0LFt7aW5kZXg6InByaWNlRGVjIixkZXNjZW5kaW5nOiExfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtkb3tjb25zdCBuYk9yZGVycz1zZWxsT3JkZXJCb29rLmxlbmd0aDtsZXQgaW5jPTA7Zm9yKDtpbmM8bmJPcmRlcnMmJmFwaS5CaWdOdW1iZXIoaGl2ZVJlbWFpbmluZykuZ3QoMCk7KXtjb25zdCBzZWxsT3JkZXI9c2VsbE9yZGVyQm9va1tpbmNdLHF0eVRva2Vuc1RvU2VuZD1hcGkuQmlnTnVtYmVyKGhpdmVSZW1haW5pbmcpLmRpdmlkZWRCeShzZWxsT3JkZXIucHJpY2UpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uLGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTik7aWYoYXBpLkJpZ051bWJlcihxdHlUb2tlbnNUb1NlbmQpLmx0ZShzZWxsT3JkZXIucXVhbnRpdHkpJiZhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoMCkpe2lmKGFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihxdHlUb2tlbnNUb1NlbmQpLmd0KDApJiZhcGkuQmlnTnVtYmVyKGhpdmVSZW1haW5pbmcpLmd0KDApLCJ0aGUgb3JkZXIgY2Fubm90IGJlIGZpbGxlZCIpKXtsZXQgcmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhmaW5hbEFjY291bnQsc3ltYm9sLHF0eVRva2Vuc1RvU2VuZCwidXNlciIpO3Jlcy5lcnJvcnMmJihhcGkuZGVidWcocmVzLmVycm9ycyksYXBpLmRlYnVnKCJUWElEOiAiK2FwaS50cmFuc2FjdGlvbklkKSxhcGkuZGVidWcoZmluYWxBY2NvdW50KSxhcGkuZGVidWcoc3ltYm9sKSxhcGkuZGVidWcocXR5VG9rZW5zVG9TZW5kKSkscmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhzZWxsT3JkZXIuYWNjb3VudCwiU1dBUC5ISVZFIixoaXZlUmVtYWluaW5nLCJ1c2VyIikscmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrYXBpLnRyYW5zYWN0aW9uSWQpLGFwaS5kZWJ1ZyhzZWxsT3JkZXIuYWNjb3VudCksYXBpLmRlYnVnKCJTV0FQLkhJVkUiKSxhcGkuZGVidWcoaGl2ZVJlbWFpbmluZykpO2NvbnN0IHF0eUxlZnRTZWxsT3JkZXI9YXBpLkJpZ051bWJlcihzZWxsT3JkZXIucXVhbnRpdHkpLm1pbnVzKHF0eVRva2Vuc1RvU2VuZCkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pLG5iVG9rZW5zVG9GaWxsT3JkZXI9YXBpLkJpZ051bWJlcihzZWxsT3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShxdHlMZWZ0U2VsbE9yZGVyKS50b0ZpeGVkKDgpO2FwaS5CaWdOdW1iZXIocXR5TGVmdFNlbGxPcmRlcikuZ3QoMCkmJmFwaS5CaWdOdW1iZXIobmJUb2tlbnNUb0ZpbGxPcmRlcikuZ3RlKCIwLjAwMDAwMDAxIik/KHNlbGxPcmRlci5xdWFudGl0eT1xdHlMZWZ0U2VsbE9yZGVyLGF3YWl0IGFwaS5kYi51cGRhdGUoInNlbGxCb29rIixzZWxsT3JkZXIpKTooYXBpLkJpZ051bWJlcihxdHlMZWZ0U2VsbE9yZGVyKS5ndCgwKSYmYXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKHNlbGxPcmRlci5hY2NvdW50LHN5bWJvbCxxdHlMZWZ0U2VsbE9yZGVyLCJ1c2VyIiksYXdhaXQgYXBpLmRiLnJlbW92ZSgic2VsbEJvb2siLHNlbGxPcmRlcikpLGF3YWl0IHVwZGF0ZVRyYWRlc0hpc3RvcnkoImJ1eSIsZmluYWxBY2NvdW50LHNlbGxPcmRlci5hY2NvdW50LHN5bWJvbCxxdHlUb2tlbnNUb1NlbmQsc2VsbE9yZGVyLnByaWNlLGhpdmVSZW1haW5pbmcsYXBpLnRyYW5zYWN0aW9uSWQsc2VsbE9yZGVyLnR4SWQpLHZvbHVtZVRyYWRlZD1hcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkucGx1cyhoaXZlUmVtYWluaW5nKSxoaXZlUmVtYWluaW5nPSIwIn19ZWxzZSBpZihhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoMCkpe2xldCBxdHlIaXZlVG9TZW5kPWFwaS5CaWdOdW1iZXIoc2VsbE9yZGVyLnByaWNlKS5tdWx0aXBsaWVkQnkoc2VsbE9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKDgpO2lmKGFwaS5CaWdOdW1iZXIocXR5SGl2ZVRvU2VuZCkuZ3QoaGl2ZVJlbWFpbmluZykmJihxdHlIaXZlVG9TZW5kPWFwaS5CaWdOdW1iZXIoc2VsbE9yZGVyLnByaWNlKS5tdWx0aXBsaWVkQnkoc2VsbE9yZGVyLnF1YW50aXR5KS50b0ZpeGVkKDgsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHF0eUhpdmVUb1NlbmQpLmd0KDApJiZhcGkuQmlnTnVtYmVyKGhpdmVSZW1haW5pbmcpLmd0KDApLCJ0aGUgb3JkZXIgY2Fubm90IGJlIGZpbGxlZCIpKXtsZXQgcmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhmaW5hbEFjY291bnQsc3ltYm9sLHNlbGxPcmRlci5xdWFudGl0eSwidXNlciIpO3Jlcy5lcnJvcnMmJihhcGkuZGVidWcocmVzLmVycm9ycyksYXBpLmRlYnVnKCJUWElEOiAiK2FwaS50cmFuc2FjdGlvbklkKSxhcGkuZGVidWcoZmluYWxBY2NvdW50KSxhcGkuZGVidWcoc3ltYm9sKSxhcGkuZGVidWcoc2VsbE9yZGVyLnF1YW50aXR5KSkscmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhzZWxsT3JkZXIuYWNjb3VudCwiU1dBUC5ISVZFIixxdHlIaXZlVG9TZW5kLCJ1c2VyIikscmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrYXBpLnRyYW5zYWN0aW9uSWQpLGFwaS5kZWJ1ZyhzZWxsT3JkZXIuYWNjb3VudCksYXBpLmRlYnVnKCJTV0FQLkhJVkUiKSxhcGkuZGVidWcocXR5SGl2ZVRvU2VuZCkpLGF3YWl0IGFwaS5kYi5yZW1vdmUoInNlbGxCb29rIixzZWxsT3JkZXIpLGhpdmVSZW1haW5pbmc9YXBpLkJpZ051bWJlcihoaXZlUmVtYWluaW5nKS5taW51cyhxdHlIaXZlVG9TZW5kKS50b0ZpeGVkKDgpLGF3YWl0IHVwZGF0ZVRyYWRlc0hpc3RvcnkoImJ1eSIsZmluYWxBY2NvdW50LHNlbGxPcmRlci5hY2NvdW50LHN5bWJvbCxzZWxsT3JkZXIucXVhbnRpdHksc2VsbE9yZGVyLnByaWNlLHF0eUhpdmVUb1NlbmQsYXBpLnRyYW5zYWN0aW9uSWQsc2VsbE9yZGVyLnR4SWQpLHZvbHVtZVRyYWRlZD1hcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkucGx1cyhxdHlIaXZlVG9TZW5kKX19aW5jKz0xfW9mZnNldCs9MWUzLGFwaS5CaWdOdW1iZXIoaGl2ZVJlbWFpbmluZykuZ3QoMCkmJihzZWxsT3JkZXJCb29rPWF3YWl0IGFwaS5kYi5maW5kKCJzZWxsQm9vayIse3N5bWJvbDpzeW1ib2x9LDFlMyxvZmZzZXQsW3tpbmRleDoicHJpY2VEZWMiLGRlc2NlbmRpbmc6ITF9LHtpbmRleDoiX2lkIixkZXNjZW5kaW5nOiExfV0pKX13aGlsZShzZWxsT3JkZXJCb29rLmxlbmd0aD4wJiZhcGkuQmlnTnVtYmVyKGhpdmVSZW1haW5pbmcpLmd0KDApKTthcGkuQmlnTnVtYmVyKGhpdmVSZW1haW5pbmcpLmd0KDApJiZhd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoZmluYWxBY2NvdW50LCJTV0FQLkhJVkUiLGhpdmVSZW1haW5pbmcsInVzZXIiKSxhcGkuQmlnTnVtYmVyKHZvbHVtZVRyYWRlZCkuZ3QoMCkmJmF3YWl0IHVwZGF0ZVZvbHVtZU1ldHJpYyhzeW1ib2wsdm9sdW1lVHJhZGVkKSxhd2FpdCB1cGRhdGVBc2tNZXRyaWMoc3ltYm9sKSxhd2FpdCB1cGRhdGVCaWRNZXRyaWMoc3ltYm9sKX19fX0sYWN0aW9ucy5tYXJrZXRTZWxsPWFzeW5jIHBheWxvYWQ9Pntjb25zdHthY2NvdW50OmFjY291bnQsc3ltYm9sOnN5bWJvbCxxdWFudGl0eTpxdWFudGl0eSxpc1NpZ25lZFdpdGhBY3RpdmVLZXk6aXNTaWduZWRXaXRoQWN0aXZlS2V5fT1wYXlsb2FkLGZpbmFsQWNjb3VudD12b2lkIDA9PT1hY2NvdW50fHwibnVsbCIhPT1hcGkuc2VuZGVyP2FwaS5zZW5kZXI6YWNjb3VudDtpZigxIT09QUNDT1VOVF9CTEFDS0xJU1RbZmluYWxBY2NvdW50XSYmYXBpLmFzc2VydCghMD09PWlzU2lnbmVkV2l0aEFjdGl2ZUtleXx8Im51bGwiPT09YXBpLnNlbmRlciwieW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5IikmJnN5bWJvbCYmInN0cmluZyI9PXR5cGVvZiBzeW1ib2wmJiJTV0FQLkhJVkUiIT09c3ltYm9sJiZxdWFudGl0eSYmInN0cmluZyI9PXR5cGVvZiBxdWFudGl0eSYmIWFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLmlzTmFOKCkmJmFwaS5CaWdOdW1iZXIocXVhbnRpdHkpLmd0KDApKXtjb25zdCB0b2tlbj1hd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoInRva2VucyIsInRva2VucyIse3N5bWJvbDpzeW1ib2x9KTtpZihhcGkuYXNzZXJ0KHRva2VuJiZjb3VudERlY2ltYWxzKHF1YW50aXR5KTw9dG9rZW4ucHJlY2lzaW9uLCJpbnZhbGlkIHBhcmFtcyIpKXtjb25zdCByZXN1bHQ9YXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCJ0b2tlbnMiLCJ0cmFuc2ZlclRvQ29udHJhY3QiLHtmcm9tOmZpbmFsQWNjb3VudCxzeW1ib2w6c3ltYm9sLHF1YW50aXR5OnF1YW50aXR5LHRvOiJtYXJrZXQifSk7aWYodm9pZCAwPT09cmVzdWx0LmVycm9ycyYmcmVzdWx0LmV2ZW50cyYmdm9pZCAwIT09cmVzdWx0LmV2ZW50cy5maW5kKGVsPT4idG9rZW5zIj09PWVsLmNvbnRyYWN0JiYidHJhbnNmZXJUb0NvbnRyYWN0Ij09PWVsLmV2ZW50JiZlbC5kYXRhLmZyb209PT1maW5hbEFjY291bnQmJiJtYXJrZXQiPT09ZWwuZGF0YS50byYmZWwuZGF0YS5xdWFudGl0eT09PXF1YW50aXR5JiZlbC5kYXRhLnN5bWJvbD09PXN5bWJvbCkpe2xldCB0b2tlbnNSZW1haW5pbmc9cXVhbnRpdHksb2Zmc2V0PTAsdm9sdW1lVHJhZGVkPTA7YXdhaXQgcmVtb3ZlRXhwaXJlZE9yZGVycygiYnV5Qm9vayIpO2xldCBidXlPcmRlckJvb2s9YXdhaXQgYXBpLmRiLmZpbmQoImJ1eUJvb2siLHtzeW1ib2w6c3ltYm9sfSwxZTMsb2Zmc2V0LFt7aW5kZXg6InByaWNlRGVjIixkZXNjZW5kaW5nOiEwfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKTtkb3tjb25zdCBuYk9yZGVycz1idXlPcmRlckJvb2subGVuZ3RoO2xldCBpbmM9MDtmb3IoO2luYzxuYk9yZGVycyYmYXBpLkJpZ051bWJlcih0b2tlbnNSZW1haW5pbmcpLmd0KDApOyl7Y29uc3QgYnV5T3JkZXI9YnV5T3JkZXJCb29rW2luY107aWYoYXBpLkJpZ051bWJlcih0b2tlbnNSZW1haW5pbmcpLmx0ZShidXlPcmRlci5xdWFudGl0eSkpe2xldCBxdHlUb2tlbnNUb1NlbmQ9YXBpLkJpZ051bWJlcihidXlPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KHRva2Vuc1JlbWFpbmluZykudG9GaXhlZCg4KTtpZihhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoYnV5T3JkZXIudG9rZW5zTG9ja2VkKSYmKHF0eVRva2Vuc1RvU2VuZD1hcGkuQmlnTnVtYmVyKGJ1eU9yZGVyLnByaWNlKS5tdWx0aXBsaWVkQnkodG9rZW5zUmVtYWluaW5nKS50b0ZpeGVkKDgsYXBpLkJpZ051bWJlci5ST1VORF9ET1dOKSksYXBpLmFzc2VydChhcGkuQmlnTnVtYmVyKHF0eVRva2Vuc1RvU2VuZCkuZ3QoMCkmJmFwaS5CaWdOdW1iZXIodG9rZW5zUmVtYWluaW5nKS5ndCgwKSwidGhlIG9yZGVyIGNhbm5vdCBiZSBmaWxsZWQiKSl7bGV0IHJlcz1hd2FpdCBhcGkudHJhbnNmZXJUb2tlbnMoYnV5T3JkZXIuYWNjb3VudCxzeW1ib2wsdG9rZW5zUmVtYWluaW5nLCJ1c2VyIik7cmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrYXBpLnRyYW5zYWN0aW9uSWQpLGFwaS5kZWJ1ZyhidXlPcmRlci5hY2NvdW50KSxhcGkuZGVidWcoc3ltYm9sKSxhcGkuZGVidWcodG9rZW5zUmVtYWluaW5nKSkscmVzPWF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhmaW5hbEFjY291bnQsIlNXQVAuSElWRSIscXR5VG9rZW5zVG9TZW5kLCJ1c2VyIikscmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrYXBpLnRyYW5zYWN0aW9uSWQpLGFwaS5kZWJ1ZyhmaW5hbEFjY291bnQpLGFwaS5kZWJ1ZygiU1dBUC5ISVZFIiksYXBpLmRlYnVnKHF0eVRva2Vuc1RvU2VuZCkpO2NvbnN0IHF0eUxlZnRCdXlPcmRlcj1hcGkuQmlnTnVtYmVyKGJ1eU9yZGVyLnF1YW50aXR5KS5taW51cyh0b2tlbnNSZW1haW5pbmcpLnRvRml4ZWQodG9rZW4ucHJlY2lzaW9uKSxidXlPcmRlcnRva2Vuc0xvY2tlZD1hcGkuQmlnTnVtYmVyKGJ1eU9yZGVyLnRva2Vuc0xvY2tlZCkubWludXMocXR5VG9rZW5zVG9TZW5kKS50b0ZpeGVkKDgpLG5iVG9rZW5zVG9GaWxsT3JkZXI9YXBpLkJpZ051bWJlcihidXlPcmRlci5wcmljZSkubXVsdGlwbGllZEJ5KHF0eUxlZnRCdXlPcmRlcikudG9GaXhlZCg4KTthcGkuQmlnTnVtYmVyKHF0eUxlZnRCdXlPcmRlcikuZ3QoMCkmJmFwaS5CaWdOdW1iZXIobmJUb2tlbnNUb0ZpbGxPcmRlcikuZ3RlKCIwLjAwMDAwMDAxIik/KGJ1eU9yZGVyLnF1YW50aXR5PXF0eUxlZnRCdXlPcmRlcixidXlPcmRlci50b2tlbnNMb2NrZWQ9YnV5T3JkZXJ0b2tlbnNMb2NrZWQsYXdhaXQgYXBpLmRiLnVwZGF0ZSgiYnV5Qm9vayIsYnV5T3JkZXIpKTooYXBpLkJpZ051bWJlcihidXlPcmRlcnRva2Vuc0xvY2tlZCkuZ3QoMCkmJmF3YWl0IGFwaS50cmFuc2ZlclRva2VucyhidXlPcmRlci5hY2NvdW50LCJTV0FQLkhJVkUiLGJ1eU9yZGVydG9rZW5zTG9ja2VkLCJ1c2VyIiksYXdhaXQgYXBpLmRiLnJlbW92ZSgiYnV5Qm9vayIsYnV5T3JkZXIpKSxhd2FpdCB1cGRhdGVUcmFkZXNIaXN0b3J5KCJzZWxsIixidXlPcmRlci5hY2NvdW50LGZpbmFsQWNjb3VudCxzeW1ib2wsdG9rZW5zUmVtYWluaW5nLGJ1eU9yZGVyLnByaWNlLHF0eVRva2Vuc1RvU2VuZCxidXlPcmRlci50eElkLGFwaS50cmFuc2FjdGlvbklkKSx2b2x1bWVUcmFkZWQ9YXBpLkJpZ051bWJlcih2b2x1bWVUcmFkZWQpLnBsdXMocXR5VG9rZW5zVG9TZW5kKSx0b2tlbnNSZW1haW5pbmc9MH19ZWxzZXtsZXQgcXR5VG9rZW5zVG9TZW5kPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShidXlPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4KTtpZihxdHlUb2tlbnNUb1NlbmQ+YnV5T3JkZXIudG9rZW5zTG9ja2VkJiYocXR5VG9rZW5zVG9TZW5kPWFwaS5CaWdOdW1iZXIoYnV5T3JkZXIucHJpY2UpLm11bHRpcGxpZWRCeShidXlPcmRlci5xdWFudGl0eSkudG9GaXhlZCg4LGFwaS5CaWdOdW1iZXIuUk9VTkRfRE9XTikpLGFwaS5hc3NlcnQoYXBpLkJpZ051bWJlcihxdHlUb2tlbnNUb1NlbmQpLmd0KDApJiZhcGkuQmlnTnVtYmVyKHRva2Vuc1JlbWFpbmluZykuZ3QoMCksInRoZSBvcmRlciBjYW5ub3QgYmUgZmlsbGVkIikpe2xldCByZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGJ1eU9yZGVyLmFjY291bnQsc3ltYm9sLGJ1eU9yZGVyLnF1YW50aXR5LCJ1c2VyIik7cmVzLmVycm9ycyYmKGFwaS5kZWJ1ZyhyZXMuZXJyb3JzKSxhcGkuZGVidWcoIlRYSUQ6ICIrYXBpLnRyYW5zYWN0aW9uSWQpLGFwaS5kZWJ1ZyhidXlPcmRlci5hY2NvdW50KSxhcGkuZGVidWcoc3ltYm9sKSxhcGkuZGVidWcoYnV5T3JkZXIucXVhbnRpdHkpKSxyZXM9YXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGZpbmFsQWNjb3VudCwiU1dBUC5ISVZFIixxdHlUb2tlbnNUb1NlbmQsInVzZXIiKSxyZXMuZXJyb3JzJiYoYXBpLmRlYnVnKHJlcy5lcnJvcnMpLGFwaS5kZWJ1ZygiVFhJRDogIithcGkudHJhbnNhY3Rpb25JZCksYXBpLmRlYnVnKGZpbmFsQWNjb3VudCksYXBpLmRlYnVnKCJTV0FQLkhJVkUiKSxhcGkuZGVidWcocXR5VG9rZW5zVG9TZW5kKSk7Y29uc3QgYnV5T3JkZXJ0b2tlbnNMb2NrZWQ9YXBpLkJpZ051bWJlcihidXlPcmRlci50b2tlbnNMb2NrZWQpLm1pbnVzKHF0eVRva2Vuc1RvU2VuZCkudG9GaXhlZCg4KTthcGkuQmlnTnVtYmVyKGJ1eU9yZGVydG9rZW5zTG9ja2VkKS5ndCgwKSYmYXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGJ1eU9yZGVyLmFjY291bnQsIlNXQVAuSElWRSIsYnV5T3JkZXJ0b2tlbnNMb2NrZWQsInVzZXIiKSxhd2FpdCBhcGkuZGIucmVtb3ZlKCJidXlCb29rIixidXlPcmRlciksdG9rZW5zUmVtYWluaW5nPWFwaS5CaWdOdW1iZXIodG9rZW5zUmVtYWluaW5nKS5taW51cyhidXlPcmRlci5xdWFudGl0eSkudG9GaXhlZCh0b2tlbi5wcmVjaXNpb24pLGF3YWl0IHVwZGF0ZVRyYWRlc0hpc3RvcnkoInNlbGwiLGJ1eU9yZGVyLmFjY291bnQsZmluYWxBY2NvdW50LHN5bWJvbCxidXlPcmRlci5xdWFudGl0eSxidXlPcmRlci5wcmljZSxxdHlUb2tlbnNUb1NlbmQsYnV5T3JkZXIudHhJZCxhcGkudHJhbnNhY3Rpb25JZCksdm9sdW1lVHJhZGVkPWFwaS5CaWdOdW1iZXIodm9sdW1lVHJhZGVkKS5wbHVzKHF0eVRva2Vuc1RvU2VuZCl9fWluYys9MX1vZmZzZXQrPTFlMyxhcGkuQmlnTnVtYmVyKHRva2Vuc1JlbWFpbmluZykuZ3QoMCkmJihidXlPcmRlckJvb2s9YXdhaXQgYXBpLmRiLmZpbmQoImJ1eUJvb2siLHtzeW1ib2w6c3ltYm9sfSwxZTMsb2Zmc2V0LFt7aW5kZXg6InByaWNlRGVjIixkZXNjZW5kaW5nOiEwfSx7aW5kZXg6Il9pZCIsZGVzY2VuZGluZzohMX1dKSl9d2hpbGUoYnV5T3JkZXJCb29rLmxlbmd0aD4wJiZhcGkuQmlnTnVtYmVyKHRva2Vuc1JlbWFpbmluZykuZ3QoMCkpO2FwaS5CaWdOdW1iZXIodG9rZW5zUmVtYWluaW5nKS5ndCgwKSYmYXdhaXQgYXBpLnRyYW5zZmVyVG9rZW5zKGZpbmFsQWNjb3VudCxzeW1ib2wsdG9rZW5zUmVtYWluaW5nLCJ1c2VyIiksYXBpLkJpZ051bWJlcih2b2x1bWVUcmFkZWQpLmd0KDApJiZhd2FpdCB1cGRhdGVWb2x1bWVNZXRyaWMoc3ltYm9sLHZvbHVtZVRyYWRlZCksYXdhaXQgdXBkYXRlQXNrTWV0cmljKHN5bWJvbCksYXdhaXQgdXBkYXRlQmlkTWV0cmljKHN5bWJvbCl9fX19Ow=="}}}

Sort:  

Beware the exploit lurking within Hive-Engine:

Hidden within Hive-Engine lies a devious flaw—a bug born of rounding errors. Exploit it effortlessly by manipulating transactions with a mere 0.00000001 SWAP.HIVE. In markets where spreads run narrow, your advantage grows.

Consider the SPS market, a prime specimen:
Sell 0.00000017 SPS at 0.02974381 SWAP.HIVE apiece, netting 5.0564477e-9. Hive-Engine rounds this up to 1e-8.
Simultaneously, purchase 0.00000049 SPS at 0.02999 SWAP.HIVE each, totaling 1.46951e-8, rounded down to 1e-8.

Thus, you sell 0.00000017 SPS and buy 0.00000049 SPS, with your SWAP.HIVE balance unchanged—yielding a profit of 3.2e-7 SPS per transaction.

Repeat this maneuver, and watch your profits grow exponentially.
Use this knowledge wisely.

Our diligent attempts to warn the developers about this exploit and present potential solutions repeatedly through various channels were met with silence.

Your attempts to exploit it yourself, plus this message, have now brought it to our attention. We will work on implementing a fix, either by putting in validation to prevent dust orders that would result in this rounding issue, or by increasing the minimum allowed order size.

I don't know what "various channels" you used to try to report this issue. We know of no attempts to do so. Simply reaching out to Aggroed or one of our active developers directly on Discord would have been a more constructive way of getting our attention than the approach you have evidently taken.

Discord is not a platform we support on grounds of privacy infringement. Correspondence was dispatched to the GitHub contributors with no responses. The absence of a publicly accessible security protocol necessitated proactive measures to garner attention.

With no response, we have no recourse but to release the source code to exploit this will be publicly released on Sunday July 28, 2024.

I told you we would fix it, and we have. Some time was needed to prepare the fix and discuss internally. Your aggressive demeanor is not appreciated.

This is the fix that has just been pushed live: https://github.com/hive-engine/hivesmartcontracts/pull/74