diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 51bf0ca..56a4725 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2169,12 +2169,12 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) free(_taskscheduler); // message-box, refer to modules/message-box.js - char *_messagebox = ILibMemory_Allocate(67607, 0, NULL, NULL); - memcpy_s(_messagebox + 0, 38632, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQoNCmNvbnN0IE1CX0RFRkJVVFRPTjEgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfREVGQlVUVE9OMiAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7DQpjb25zdCBNQl9ERUZCVVRUT04zICAgICAgICAgICAgID0gMHgwMDAwMDIwMDsNCmNvbnN0IE1CX0lDT05IQU5EICAgICAgICAgICAgICAgPSAweDAwMDAwMDEwOw0KY29uc3QgTUJfSUNPTlFVRVNUSU9OICAgICAgICAgICA9IDB4MDAwMDAwMjA7DQpjb25zdCBNQl9JQ09ORVhDTEFNQVRJT04gICAgICAgID0gMHgwMDAwMDAzMDsNCmNvbnN0IE1CX0lDT05BU1RFUklTSyAgICAgICAgICAgPSAweDAwMDAwMDQwOw0KDQpjb25zdCBJRE9LICAgICA9IDE7DQpjb25zdCBJRENBTkNFTCA9IDI7DQpjb25zdCBJREFCT1JUICA9IDM7DQpjb25zdCBJRFJFVFJZICA9IDQ7DQpjb25zdCBJRElHTk9SRSA9IDU7DQpjb25zdCBJRFlFUyAgICA9IDY7DQpjb25zdCBJRE5PICAgICA9IDc7DQoNCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOw0KdmFyIGNoaWxkU2NyaXB0ID0gIlwNCiAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykub24oJ2RhdGEnLCBmdW5jdGlvbiAoailcDQogICAgICAgIHtcDQogICAgICAgICAgICBzd2l0Y2goai5jb21tYW5kKVwNCiAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgY2FzZSAnbWVzc2FnZUJveCc6XA0KICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpXA0KICAgICAgICAgICAgICAgICAgICB7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnTWVzc2FnZUJveEEnKTtcDQogICAgICAgICAgICAgICAgICAgICAgICB1c2VyMzIuTWVzc2FnZUJveEEuYXN5bmMoMCwgR00uQ3JlYXRlVmFyaWFibGUoai5jYXB0aW9uKSwgR00uQ3JlYXRlVmFyaWFibGUoai50aXRsZSksIGoubGF5b3V0KS50aGVuKFwNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHIpXA0KICAgICAgICAgICAgICAgICAgICAgICAge1wNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goci5WYWwpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElET0sudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRENBTkNFTC50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElEQUJPUlQudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFJFVFJZLnRvU3RyaW5nKCkgKyAiOlwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICsgSURJR05PUkUudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFlFUy50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKHIuVmFsKTtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZCgiICsgSUROTy50b1N0cmluZygpICsgIik7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7XA0KICAgICAgICAgICAgICAgICAgICB9XA0KICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICB9XA0KICAgICAgICB9KTtcDQogICAgIjsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAobGF5b3V0ID09IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9ZRVNOTyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1Byb2Nlc3NJZFRvU2Vzc2lvbklkJyk7DQogICAgICAgIHZhciBwc2lkID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgIGlmIChrZXJuZWwzMi5Qcm9jZXNzSWRUb1Nlc3Npb25JZChwcm9jZXNzLnBpZCwgcHNpZCkuVmFsID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdJbnRlcm5hbCBFcnJvcicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkgeyB0aW1lb3V0ID0gMTA7IH0NCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHZhciBvcHRpb25zID0geyBleGVjdXRpb25UaW1lb3V0OiB0aW1lb3V0IH07DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG9wdGlvbnMuc2Vzc2lvbklkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb25JZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpIHsgZGVsZXRlIG9wdGlvbnMuc2Vzc2lvbklkOyB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuX3RpdGxlID0gdGl0bGU7DQogICAgICAgIHJldC5fY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC5fY29udGFpbmVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKG9wdGlvbnMpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2NvbnRhaW5lci5vbignZGF0YScsIGZ1bmN0aW9uIChqKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihqID09IElEWUVTIHx8IGogPT0gSURPSykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdEZW5pZWQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RpbWVvdXQnKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLkV4ZWN1dGVTdHJpbmcoY2hpbGRTY3JpcHQpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5zZW5kKHsgY29tbWFuZDogJ21lc3NhZ2VCb3gnLCBjYXB0aW9uOiBjYXB0aW9uLCB0aXRsZTogdGl0bGUsIGxheW91dDogbGF5b3V0IH0pOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpmdW5jdGlvbiBsaW51eF9tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd6ZW5pdHknLA0KICAgICAgICB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQogICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09ICcnICYmIHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL3Vzci9sb2NhbC9iaW4vemVuaXR5JykpIHsgbG9jYXRpb24gPSAnL3Vzci9sb2NhbC9iaW4vemVuaXR5JzsgfQ0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJykgeyByZXR1cm4gKG51bGwpOyB9DQoNCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0geyBwYXRoOiBsb2NhdGlvbiwgdGltZW91dDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidGltZW91dCIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUobG9jYXRpb24gKyAnIC0taGVscC1hbGwgfCBncmVwIHRpbWVvdXRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGUpIHsgY29uc29sZS5sb2coZSk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidmVyc2lvbiIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoWzIsIDE2XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgIGlmICghdGhpcy56ZW5pdHkpDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tkaWFsb2cnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3htZXNzYWdlJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeG1lc3NhZ2UgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gbnVsbCA6IHsgcGF0aDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgfSkoKQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm90aWZ5c2VuZCcsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIG5vdGlmeS1zZW5kIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAodGltZW91dCA9PSBudWxsKSB7IHRpbWVvdXQgPSAxMDsgfQ0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgdmFyIHVpZDsgICAgDQogICAgICAgIHZhciB4aW5mbzsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh4aW5mbyA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignVGhpcyBzeXN0ZW0gY2Fubm90IGRpc3BsYXkgYSB1c2VyIGRpYWxvZyBib3ggd2hlbiBhIHVzZXIgaXMgbm90IGxvZ2dlZCBpbicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuemVuaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBHTk9NRS9aRU5JVFkNCiAgICAgICAgICAgIGlmICh0aGlzLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dD09bnVsbD8nLS1xdWVzdGlvbic6Jy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD0nICsgdGltZW91dF0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgbGF5b3V0ID09IG51bGwgPyAnLS1xdWVz", 16000); - memcpy_s(_messagebox + 16000, 22632, "dGlvbicgOiAnLS13YXJuaW5nJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0ICogMTAwMCwgcmV0LmNoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHRoaXMua2RpYWxvZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2ZyZWVic2QnICYmIHByb2Nlc3MuZW52WydESVNQTEFZJ10pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQ9PW51bGw/Jy0teWVzbm8nOictLW1zZ2JveCcsIGNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgIGlmICgheGluZm8gfHwgIXhpbmZvLmRpc3BsYXkgfHwgIXhpbmZvLnhhdXRob3JpdHkpIHsgcmV0Ll9yZWooJ0ludGVyYWwgRXJyb3IsIGNvdWxkIG5vdCBkZXRlcm1pbmUgWDExL1hERyBlbnYnKTsgcmV0dXJuIChyZXQpOyB9DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQgPT0gbnVsbCA/ICctLXllc25vJyA6ICctLW1zZ2JveCcsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgIGMua2lsbCgpOw0KICAgICAgICAgICAgfSwgdGltZW91dCAqIDEwMDAsIHJldC5jaGlsZCk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICh0aGlzLnhtZXNzYWdlKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyB0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0DQogICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy54bWVzc2FnZS5wYXRoLCBbJ3htZXNzYWdlJywgJy1jZW50ZXInLCAnLWJ1dHRvbnMnLCBsYXlvdXQgPT0gbnVsbCA/ICdObzoxLFllczoyJyA6ICdPSzoyJywgJy10aW1lb3V0JywgdGltZW91dC50b1N0cmluZygpLCAnLWRlZmF1bHQnLCBsYXlvdXQ9PW51bGw/J05vJzonT0snLCAnLXRpdGxlJywgdGl0bGUsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7ICB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQoNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKGNvZGUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZWooJ1VuYWJsZSB0byBjcmVhdGUgZGlhbG9nIGJveCcpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykNCnsNCiAgICBmdW5jdGlvbiB0cmFuc2xhdGVPYmplY3Qob2JqKQ0KICAgIHsNCiAgICAgICAgdmFyIGogPSBKU09OLnN0cmluZ2lmeShvYmopOw0KICAgICAgICB2YXIgYiA9IEJ1ZmZlci5hbGxvYyhqLmxlbmd0aCArIDQpOw0KICAgICAgICBiLndyaXRlVUludDMyTEUoai5sZW5ndGggKyA0KTsNCiAgICAgICAgQnVmZmVyLmZyb20oaikuY29weShiLCA0KTsNCiAgICAgICAgcmV0dXJuIChiKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIG1hY29zX21lc3NhZ2VCb3goKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsNCiAgICB0aGlzLl9pbml0SVBDQmFzZSA9IGZ1bmN0aW9uIF9pbml0SVBDQmFzZSgpDQogICAgew0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0LnBhdGggPSAnL3Zhci90bXAvJyArIHByb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSArICdfZXYnOw0KICAgICAgICB2YXIgbjsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBuID0gMDsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKHJldC5wYXRoICsgbikpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICArK247DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0LnBhdGggPSByZXQucGF0aCArIG47DQogICAgICAgIHJldC50bXBTZXJ2aWNlTmFtZSA9ICdtZXNoTm90aWZpY2F0aW9uU2VydmVyJyArIG47DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOyByZXQuY2FwdGlvbiA9IGNhcHRpb247IHJldC50aW1lb3V0ID0gdGltZW91dDsgcmV0LmxheW91dCA9IGxheW91dDsNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RJQUxPRyc6DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocC50aW1lb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdUSU1FT1VUJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnV0dG9uID09ICdZZXMnIHx8IHAuYnV0dG9uID09ICdPSycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcyhwLmJ1dHRvbik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIGMud3JpdGUodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpdGxlOiB0aGlzLnJldC50aXRsZSwgY2FwdGlvbjogdGhpcy5yZXQuY2FwdGlvbiwgaWNvbjogJ2NhdXRpb24nLCBidXR0b25zOiB0aGlzLnJldC5sYXlvdXQ9PW51bGw/WyciWWVzIicsICciTm8iJ106WyciT0siJ10sIGJ1dHRvbkRlZmF1bHQ6IHRoaXMucmV0LmxheW91dD09bnVsbD8yOjEsIHRpbWVvdXQ6IHRoaXMucmV0LnRpbWVvdXQgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLmxvY2sgPSBmdW5jdGlvbiBsb2NrKCkNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgY2FwdGlvbikNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0LnRpdGxlID0gdGl0bGU7IHJldC5jYXB0aW9uID0gY2FwdGlvbjsgDQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24gfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0Q2xpZW50ID0gZnVuY3Rpb24gc3RhcnRDbGllbnQob3B0aW9ucykNCiAgICB7DQogICAgICAgIC8vIENyZWF0ZSB0aGUgQ2xpZW50DQogICAgICAgIGNvbnNvbGUubG9nKCdTdGFydGluZyBDbGllbnQuLi4nKTsNCg0KICAgICAgICBvcHRpb25zLm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICBvcHRpb25zLnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHRoaXMuY2xpZW50ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlQ29ubmVjdGlvbihvcHRpb25zKTsNCiAgICAgICAgdGhpcy5jbGllbnQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICB0aGlzLmNsaWVudC5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvTWVudVxcIEV4dHJhcy9Vc2VyLm1lbnUvQ29udGVudHMvUmVzb3VyY2VzL0NHU2Vzc2lvbiAtc3VzcGVuZFxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0xPQ0snLCBzdGF0dXM6IDAgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ05PVElGWSc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgbm90aWZpY2F0aW9uICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIlwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5f", 16000); - memcpy_s(_messagebox + 32000, 6632, "c2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICB2YXIgdGltZW91dCA9IHAudGltZW91dCA/ICgnIGdpdmluZyB1cCBhZnRlciAnICsgcC50aW1lb3V0KSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IHAuaWNvbiA/ICgnd2l0aCBpY29uICcgKyBwLmljb24pIDogJyc7DQogICAgICAgICAgICAgICAgICAgIHZhciBidXR0b25zID0gcC5idXR0b25zID8gKCdidXR0b25zIHsnICsgcC5idXR0b25zLnRvU3RyaW5nKCkgKyAnfScpIDogJyc7DQogICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbkRlZmF1bHQgIT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucyArPSAoJyBkZWZhdWx0IGJ1dHRvbiAnICsgcC5idXR0b25EZWZhdWx0KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgZGlhbG9nICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIiAnICsgaWNvbiArICcgJyArIGJ1dHRvbnMgKyB0aW1lb3V0ICsgJ1wnIHwgYXdrIFwneyBjPXNwbGl0KCQwLCB0b2tlbnMsICIsIik7IHNwbGl0KHRva2Vuc1sxXSwgdmFsLCAiOiIpOyBpZihjPT0xKSB7IHByaW50IHZhbFsyXSB9IGVsc2UgeyBzcGxpdCh0b2tlbnNbMl0sIGd1LCAiOiIpOyBpZihndVsyXT09InRydWUiKSB7IHByaW50ICJfVElNRU9VVF8iIH0gZWxzZSB7IHByaW50IHZhbFsyXSAgfSAgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3RkZXJyLnN0ciAhPSAnJyAmJiAhdGhpcy5fc2hlbGwuc3RkZXJyLnN0ci5pbmNsdWRlcygnT3BlbkdMJykpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hlbGwuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0RJQUxPRycsIHRpbWVvdXQ6IHRydWUgfSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCBidXR0b246IHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuY2xpZW50Lm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSkub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsgdGhpcy51bmluc3RhbGwoKTsgfSk7DQogICAgICAgIHRoaXMuY2xpZW50LnVuaW5zdGFsbCA9IGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIC8vIE5lZWQgdG8gdW5pbnN0YWxsIG91cnNlbHZlcw0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHByb2Nlc3MuZXhlY1BhdGgsIFtwcm9jZXNzLmV4ZWNQYXRoLnNwbGl0KCcvJykucG9wKCksICctZXhlYycsICJ2YXIgcz1yZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KCciICsgdGhpcy5fb3B0aW9ucy5zZXJ2aWNlICsgIicsICIgKyB0aGlzLl9vcHRpb25zLnVpZCArICIpOyBzLnVubG9hZCgpOyByZXF1aXJlKCdmcycpLnVubGlua1N5bmMocy5wbGlzdCk7cHJvY2Vzcy5leGl0KCk7Il0sIHsgZGV0YWNoZWQ6IHRydWUsIHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLkRFVEFDSEVEIH0pOw0KICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgfTsNCiAgICAgICAgcmV0dXJuICh0aGlzLmNsaWVudCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlciA9IGZ1bmN0aW9uIHN0YXJ0TWVzc2FnZVNlcnZlcihvcHRpb25zKQ0KICAgIHsNCiAgICAgICAgaWYgKHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYyhvcHRpb25zLnBhdGgpKSB7IHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyhvcHRpb25zLnBhdGgpOyB9DQogICAgICAgIG9wdGlvbnMud3JpdGFibGVBbGwgPSB0cnVlOw0KDQogICAgICAgIHZhciByZXQgPSByZXF1aXJlKCduZXQnKS5jcmVhdGVTZXJ2ZXIoKTsNCiAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHJldC5vc3ZlcnNpb24gPSByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5nZXRPU1ZlcnNpb24oKTsNCiAgICAgICAgcmV0Ll9vcHRpb25zID0gb3B0aW9uczsNCiAgICAgICAgcmV0LnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAob2JqKQ0KICAgICAgICB7DQogICAgICAgICAgICBvYmouY2xvc2UoKTsNCiAgICAgICAgICAgIG9iai5fb3B0aW9ucy5fcmVqKCdDb25uZWN0aW9uIHRpbWVvdXQnKTsNCiAgICAgICAgfSwgNTAwMCwgcmV0KTsNCiAgICAgICAgcmV0Lmxpc3RlbihvcHRpb25zKTsNCiAgICAgICAgcmV0Lm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5vbignficsIGZ1bmN0aW9uICgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyh0aGlzLl9vcHRpb25zLnBhdGgpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmluc3RhbGxMYXVuY2hBZ2VudCgNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLnRtcFNlcnZpY2VOYW1lLCBzZXJ2aWNlUGF0aDogcHJvY2Vzcy5leGVjUGF0aCwgc3RhcnRUeXBlOiAnQVVUT19TVEFSVCcsIHVpZDogcmV0LnVpZCwNCiAgICAgICAgICAgICAgICBzZXNzaW9uVHlwZXM6IFsnQXF1YSddLCBwYXJhbWV0ZXJzOiBbJy1leGVjJywgInJlcXVpcmUoJ21lc3NhZ2UtYm94Jykuc3RhcnRDbGllbnQoeyBwYXRoOiAnIiArIG9wdGlvbnMucGF0aCArICInLCBzZXJ2aWNlOiAnIiArIG9wdGlvbnMudG1wU2VydmljZU5hbWUgKyAiJyB9KS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyBwcm9jZXNzLmV4aXQoKTsgfSk7Il0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICByZXF1aXJlKCdzZXJ2aWNlLW1hbmFnZXInKS5tYW5hZ2VyLmdldExhdW5jaEFnZW50KG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHJldC51aWQpLmxvYWQoKTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICd3aW4zMic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnbGludXgnOg0KICAgIGNhc2UgJ2ZyZWVic2QnOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBsaW51eF9tZXNzYWdlQm94KCk7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2Rhcndpbic6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1hY29zX21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQp9DQoNCg0KDQoNCg0KDQo=", 6632); - ILibBase64DecodeEx((unsigned char*)_messagebox, 38632, (unsigned char*)_messagebox + 38632); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 38632); + char *_messagebox = ILibMemory_Allocate(71743, 0, NULL, NULL); + memcpy_s(_messagebox + 0, 40996, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQoNCmNvbnN0IE1CX09LICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfT0tDQU5DRUwgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDE7DQpjb25zdCBNQl9BQk9SVFJFVFJZSUdOT1JFICAgICAgID0gMHgwMDAwMDAwMjsNCmNvbnN0IE1CX1lFU05PQ0FOQ0VMICAgICAgICAgICAgPSAweDAwMDAwMDAzOw0KY29uc3QgTUJfWUVTTk8gICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7DQpjb25zdCBNQl9SRVRSWUNBTkNFTCAgICAgICAgICAgID0gMHgwMDAwMDAwNTsNCmNvbnN0IE1CX1RPUE1PU1QgICAgICAgICAgICAgICAgPSAweDAwMDQwMDAwOw0KY29uc3QgTUJfU0VURk9SRUdST1VORCAgICAgICAgICA9IDB4MDAwMTAwMDA7DQoNCmNvbnN0IE1CX0RFRkJVVFRPTjEgICAgICAgICAgICAgPSAweDAwMDAwMDAwOw0KY29uc3QgTUJfREVGQlVUVE9OMiAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7DQpjb25zdCBNQl9ERUZCVVRUT04zICAgICAgICAgICAgID0gMHgwMDAwMDIwMDsNCmNvbnN0IE1CX0lDT05IQU5EICAgICAgICAgICAgICAgPSAweDAwMDAwMDEwOw0KY29uc3QgTUJfSUNPTlFVRVNUSU9OICAgICAgICAgICA9IDB4MDAwMDAwMjA7DQpjb25zdCBNQl9JQ09ORVhDTEFNQVRJT04gICAgICAgID0gMHgwMDAwMDAzMDsNCmNvbnN0IE1CX0lDT05BU1RFUklTSyAgICAgICAgICAgPSAweDAwMDAwMDQwOw0KDQpjb25zdCBJRE9LICAgICA9IDE7DQpjb25zdCBJRENBTkNFTCA9IDI7DQpjb25zdCBJREFCT1JUICA9IDM7DQpjb25zdCBJRFJFVFJZICA9IDQ7DQpjb25zdCBJRElHTk9SRSA9IDU7DQpjb25zdCBJRFlFUyAgICA9IDY7DQpjb25zdCBJRE5PICAgICA9IDc7DQoNCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOw0KdmFyIGNoaWxkU2NyaXB0ID0gIlwNCiAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykub24oJ2RhdGEnLCBmdW5jdGlvbiAoailcDQogICAgICAgIHtcDQogICAgICAgICAgICBzd2l0Y2goai5jb21tYW5kKVwNCiAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgY2FzZSAnbWVzc2FnZUJveCc6XA0KICAgICAgICAgICAgICAgICAgICBpZihwcm9jZXNzLnBsYXRmb3JtID09ICd3aW4zMicpXA0KICAgICAgICAgICAgICAgICAgICB7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdNID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXIzMiA9IEdNLkNyZWF0ZU5hdGl2ZVByb3h5KCd1c2VyMzIuZGxsJyk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjMyLkNyZWF0ZU1ldGhvZCgnTWVzc2FnZUJveEEnKTtcDQogICAgICAgICAgICAgICAgICAgICAgICB1c2VyMzIuTWVzc2FnZUJveEEuYXN5bmMoMCwgR00uQ3JlYXRlVmFyaWFibGUoai5jYXB0aW9uKSwgR00uQ3JlYXRlVmFyaWFibGUoai50aXRsZSksIGoubGF5b3V0KS50aGVuKFwNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHIpXA0KICAgICAgICAgICAgICAgICAgICAgICAge1wNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goci5WYWwpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElET0sudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRENBTkNFTC50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiArIElEQUJPUlQudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFJFVFJZLnRvU3RyaW5nKCkgKyAiOlwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICsgSURJR05PUkUudG9TdHJpbmcoKSArICI6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgKyBJRFlFUy50b1N0cmluZygpICsgIjpcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdTY3JpcHRDb250YWluZXInKS5zZW5kKHIuVmFsKTtcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuc2VuZCgiICsgSUROTy50b1N0cmluZygpICsgIik7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KCk7XA0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7XA0KICAgICAgICAgICAgICAgICAgICB9XA0KICAgICAgICAgICAgICAgICAgICBicmVhaztcDQogICAgICAgICAgICB9XA0KICAgICAgICB9KTtcDQogICAgIjsNCg0KZnVuY3Rpb24gbWVzc2FnZUJveCgpDQp7DQogICAgdGhpcy5fT2JqZWN0SUQgPSAnbWVzc2FnZS1ib3gnOw0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAobGF5b3V0ID09IG51bGwpDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9ZRVNOTyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIGxheW91dCA9IChNQl9PSyB8IE1CX0RFRkJVVFRPTjIgfCBNQl9JQ09ORVhDTEFNQVRJT04gfCBNQl9UT1BNT1NUKTsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgR00gPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKTsNCiAgICAgICAgdmFyIGtlcm5lbDMyID0gR00uQ3JlYXRlTmF0aXZlUHJveHkoJ2tlcm5lbDMyLmRsbCcpOw0KICAgICAgICBrZXJuZWwzMi5DcmVhdGVNZXRob2QoJ1Byb2Nlc3NJZFRvU2Vzc2lvbklkJyk7DQogICAgICAgIHZhciBwc2lkID0gR00uQ3JlYXRlVmFyaWFibGUoNCk7DQogICAgICAgIGlmIChrZXJuZWwzMi5Qcm9jZXNzSWRUb1Nlc3Npb25JZChwcm9jZXNzLnBpZCwgcHNpZCkuVmFsID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdJbnRlcm5hbCBFcnJvcicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkgeyB0aW1lb3V0ID0gMTA7IH0NCiAgICAgICAgdmFyIHJldCA9IG5ldyBwcm9taXNlKGZ1bmN0aW9uIChyZXMsIHJlaikgeyB0aGlzLl9yZXMgPSByZXM7IHRoaXMuX3JlaiA9IHJlajsgfSk7DQogICAgICAgIHZhciBvcHRpb25zID0geyBleGVjdXRpb25UaW1lb3V0OiB0aW1lb3V0IH07DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIG9wdGlvbnMuc2Vzc2lvbklkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnNlc3Npb25JZCA9PSBwc2lkLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpIHsgZGVsZXRlIG9wdGlvbnMuc2Vzc2lvbklkOyB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2goZWUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKCdObyBsb2dnZWQgb24gdXNlcnMnKTsNCiAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgfQ0KICAgICAgICByZXQuX3RpdGxlID0gdGl0bGU7DQogICAgICAgIHJldC5fY2FwdGlvbiA9IGNhcHRpb247DQogICAgICAgIHJldC5fY29udGFpbmVyID0gcmVxdWlyZSgnU2NyaXB0Q29udGFpbmVyJykuQ3JlYXRlKG9wdGlvbnMpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5wcm9taXNlID0gcmV0Ow0KICAgICAgICByZXQuX2NvbnRhaW5lci5vbignZGF0YScsIGZ1bmN0aW9uIChqKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihqID09IElEWUVTIHx8IGogPT0gSURPSykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdEZW5pZWQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLm9uKCdleGl0JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ1RpbWVvdXQnKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldC5fY29udGFpbmVyLkV4ZWN1dGVTdHJpbmcoY2hpbGRTY3JpcHQpOw0KICAgICAgICByZXQuX2NvbnRhaW5lci5zZW5kKHsgY29tbWFuZDogJ21lc3NhZ2VCb3gnLCBjYXB0aW9uOiBjYXB0aW9uLCB0aXRsZTogdGl0bGUsIGxheW91dDogbGF5b3V0IH0pOw0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCn0NCg0KDQpmdW5jdGlvbiBsaW51eF9tZXNzYWdlQm94KCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtZXNzYWdlLWJveCc7DQogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICd6ZW5pdHknLA0KICAgICAgICB7DQogICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyB6ZW5pdHkgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gY2hpbGQuc3Rkb3V0LnN0ci50cmltKCk7DQogICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09ICcnICYmIHJlcXVpcmUoJ2ZzJykuZXhpc3RzU3luYygnL3Vzci9sb2NhbC9iaW4vemVuaXR5JykpIHsgbG9jYXRpb24gPSAnL3Vzci9sb2NhbC9iaW4vemVuaXR5JzsgfQ0KICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAnJykgeyByZXR1cm4gKG51bGwpOyB9DQoNCiAgICAgICAgICAgICAgICB2YXIgcmV0ID0geyBwYXRoOiBsb2NhdGlvbiwgdGltZW91dDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidGltZW91dCIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUobG9jYXRpb24gKyAnIC0taGVscC1hbGwgfCBncmVwIHRpbWVvdXRcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGUpIHsgY29uc29sZS5sb2coZSk7IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAidmVyc2lvbiIsIHsNCiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWlkLCB4aW5mbzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbyh1aWQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKDApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhpbmZvID09IG51bGwpIHsgcmV0dXJuIChmYWxzZSk7IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZShsb2NhdGlvbiArICcgLS12ZXJzaW9uIHwgYXdrIC1GLiBcJ3sgcHJpbnRmICJbJXMsICVzXVxcbiIsICQxLCAkMjsgfSBcJ1xuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoWzIsIDE2XSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICB9KSgpDQogICAgICAgIH0pOw0KICAgIGlmICghdGhpcy56ZW5pdHkpDQogICAgew0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2tkaWFsb2cnLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhbHVlOiAoZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBrZGlhbG9nIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3htZXNzYWdlJywNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YWx1ZTogKGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIndoZXJlaXMgeG1lc3NhZ2UgfCBhd2sgJ3sgcHJpbnQgJDIgfSdcbmV4aXRcbiIpOw0KICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09ICcnID8gbnVsbCA6IHsgcGF0aDogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkgfSk7DQogICAgICAgICAgICAgICAgfSkoKQ0KICAgICAgICAgICAgfSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbm90aWZ5c2VuZCcsDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFsdWU6IChmdW5jdGlvbiAoKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJ3aGVyZWlzIG5vdGlmeS1zZW5kIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IG51bGwgOiB7IHBhdGg6IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpIH0pOw0KICAgICAgICAgICAgICAgIH0pKCkNCiAgICAgICAgICAgIH0pOw0KICAgIH0NCg0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICBpZiAodGltZW91dCA9PSBudWxsKSB7IHRpbWVvdXQgPSAxMDsgfQ0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgdmFyIHVpZDsgICAgDQogICAgICAgIHZhciB4aW5mbzsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgdWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgICAgIHhpbmZvID0gcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0WEluZm8odWlkKTsNCiAgICAgICAgfQ0KICAgICAgICBjYXRjaChlKQ0KICAgICAgICB7DQogICAgICAgICAgICB1aWQgPSAwOw0KICAgICAgICAgICAgeGluZm8gPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5nZXRYSW5mbygwKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICh4aW5mbyA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQuX3JlaignVGhpcyBzeXN0ZW0gY2Fubm90IGRpc3BsYXkgYSB1c2VyIGRpYWxvZyBib3ggd2hlbiBhIHVzZXIgaXMgbm90IGxvZ2dlZCBpbicpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRoaXMuemVuaXR5KQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyBHTk9NRS9aRU5JVFkNCiAgICAgICAgICAgIGlmICh0aGlzLnplbml0eS50aW1lb3V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSh0aGlzLnplbml0eS5wYXRoLCBbJ3plbml0eScsIGxheW91dD09bnVsbD8nLS1xdWVzdGlvbic6Jy0td2FybmluZycsICctLXRpdGxlPScgKyB0aXRsZSwgJy0tdGV4dD0nICsgY2FwdGlvbiwgJy0tdGltZW91dD0nICsgdGltZW91dF0sIHsgdWlkOiB1aWQsIGVudjogeyBYQVVUSE9SSVRZOiB4aW5mby54YXV0aG9yaXR5ID8geGluZm8ueGF1dGhvcml0eSA6ICIiLCBESVNQTEFZOiB4aW5mby5kaXNwbGF5IH0gfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMuemVuaXR5LnBhdGgsIFsnemVuaXR5JywgbGF5b3V0ID09IG51bGwgPyAnLS1xdWVz", 16000); + memcpy_s(_messagebox + 16000, 24996, "dGlvbicgOiAnLS13YXJuaW5nJywgJy0tdGl0bGU9JyArIHRpdGxlLCAnLS10ZXh0PScgKyBjYXB0aW9uXSwgeyB1aWQ6IHVpZCwgZW52OiB7IFhBVVRIT1JJVFk6IHhpbmZvLnhhdXRob3JpdHkgPyB4aW5mby54YXV0aG9yaXR5IDogIiIsIERJU1BMQVk6IHhpbmZvLmRpc3BsYXkgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKGMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjLnByb21pc2UuX3JlaigndGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBjLmtpbGwoKTsNCiAgICAgICAgICAgICAgICB9LCB0aW1lb3V0ICogMTAwMCwgcmV0LmNoaWxkKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgfSk7DQogICAgICAgICAgICByZXQuY2hpbGQub24oJ2V4aXQnLCBmdW5jdGlvbiAoY29kZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0KSB7IGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpOyB9DQogICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHRoaXMua2RpYWxvZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2ZyZWVic2QnICYmIHByb2Nlc3MuZW52WydESVNQTEFZJ10pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQ9PW51bGw/Jy0teWVzbm8nOictLW1zZ2JveCcsIGNhcHRpb25dKTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgeGRnID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmZpbmRFbnYodWlkLCAnWERHX1JVTlRJTUVfRElSJyk7IGlmICh4ZGcgPT0gbnVsbCkgeyB4ZGcgPSAnJzsgfQ0KICAgICAgICAgICAgICAgIGlmICgheGluZm8gfHwgIXhpbmZvLmRpc3BsYXkgfHwgIXhpbmZvLnhhdXRob3JpdHkpIHsgcmV0Ll9yZWooJ0ludGVyYWwgRXJyb3IsIGNvdWxkIG5vdCBkZXRlcm1pbmUgWDExL1hERyBlbnYnKTsgcmV0dXJuIChyZXQpOyB9DQogICAgICAgICAgICAgICAgcmV0LmNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKHRoaXMua2RpYWxvZy5wYXRoLCBbJ2tkaWFsb2cnLCAnLS10aXRsZScsIHRpdGxlLCBsYXlvdXQgPT0gbnVsbCA/ICctLXllc25vJyA6ICctLW1zZ2JveCcsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgRElTUExBWTogeGluZm8uZGlzcGxheSwgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSwgWERHX1JVTlRJTUVfRElSOiB4ZGcgfSB9KTsNCiAgICAgICAgICAgICAgICByZXQuY2hpbGQucHJvbWlzZSA9IHJldDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldC5jaGlsZC50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjLnRpbWVvdXQgPSBudWxsOw0KICAgICAgICAgICAgICAgIGMua2lsbCgpOw0KICAgICAgICAgICAgfSwgdGltZW91dCAqIDEwMDAsIHJldC5jaGlsZCk7DQogICAgICAgICAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVvdXQpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTsNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignZGVuaWVkJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCd0aW1lb3V0Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmICh0aGlzLnhtZXNzYWdlKQ0KICAgICAgICB7DQogICAgICAgICAgICAvLyB0aXRsZSwgY2FwdGlvbiwgdGltZW91dCwgbGF5b3V0DQogICAgICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUodGhpcy54bWVzc2FnZS5wYXRoLCBbJ3htZXNzYWdlJywgJy1jZW50ZXInLCAnLWJ1dHRvbnMnLCBsYXlvdXQgPT0gbnVsbCA/ICdObzoxLFllczoyJyA6ICdPSzoyJywgJy10aW1lb3V0JywgdGltZW91dC50b1N0cmluZygpLCAnLWRlZmF1bHQnLCBsYXlvdXQ9PW51bGw/J05vJzonT0snLCAnLXRpdGxlJywgdGl0bGUsIGNhcHRpb25dLCB7IHVpZDogdWlkLCBlbnY6IHsgWEFVVEhPUklUWTogeGluZm8ueGF1dGhvcml0eSA/IHhpbmZvLnhhdXRob3JpdHkgOiAiIiwgRElTUExBWTogeGluZm8uZGlzcGxheSB9IH0pOw0KICAgICAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7ICB9KTsNCiAgICAgICAgICAgIHJldC5jaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyAgfSk7DQoNCiAgICAgICAgICAgIHJldC5jaGlsZC5wcm9taXNlID0gcmV0Ow0KICAgICAgICAgICAgcmV0LmNoaWxkLm9uKCdleGl0JywgZnVuY3Rpb24gKGNvZGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3dpdGNoKGNvZGUpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKCdkZW5pZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ3RpbWVvdXQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0Ll9yZWooJ1VuYWJsZSB0byBjcmVhdGUgZGlhbG9nIGJveCcpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykNCnsNCiAgICBmdW5jdGlvbiB0cmFuc2xhdGVPYmplY3Qob2JqKQ0KICAgIHsNCiAgICAgICAgdmFyIGogPSBKU09OLnN0cmluZ2lmeShvYmopOw0KICAgICAgICB2YXIgYiA9IEJ1ZmZlci5hbGxvYyhqLmxlbmd0aCArIDQpOw0KICAgICAgICBiLndyaXRlVUludDMyTEUoai5sZW5ndGggKyA0KTsNCiAgICAgICAgQnVmZmVyLmZyb20oaikuY29weShiLCA0KTsNCiAgICAgICAgcmV0dXJuIChiKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIG1hY29zX21lc3NhZ2VCb3goKQ0Kew0KICAgIHRoaXMuX09iamVjdElEID0gJ21lc3NhZ2UtYm94JzsNCiAgICB0aGlzLl9pbml0SVBDQmFzZSA9IGZ1bmN0aW9uIF9pbml0SVBDQmFzZSgpDQogICAgew0KICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKGUpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5fcmVqKGUpOw0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0LnBhdGggPSAnL3Zhci90bXAvJyArIHByb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSArICdfZXYnOw0KICAgICAgICB2YXIgbjsNCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChlKQ0KICAgICAgICB7DQogICAgICAgICAgICBuID0gMDsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKHJldC5wYXRoICsgbikpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgbiA9IHJlcXVpcmUoJ3RscycpLmdlbmVyYXRlUmFuZG9tSW50ZWdlcignMScsICc5OTk5OScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGUpIHsNCiAgICAgICAgICAgICAgICArK247DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0LnBhdGggPSByZXQucGF0aCArIG47DQogICAgICAgIHJldC50bXBTZXJ2aWNlTmFtZSA9ICdtZXNoTm90aWZpY2F0aW9uU2VydmVyJyArIG47DQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KICAgIA0KICAgIHRoaXMuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHRpdGxlLCBjYXB0aW9uLCB0aW1lb3V0LCBsYXlvdXQpDQogICAgew0KICAgICAgICAvLyBTdGFydCBMb2NhbCBTZXJ2ZXINCiAgICAgICAgdmFyIHJldCA9IHRoaXMuX2luaXRJUENCYXNlKCk7DQogICAgICAgIHJldC50aXRsZSA9IHRpdGxlOyByZXQuY2FwdGlvbiA9IGNhcHRpb247IHJldC50aW1lb3V0ID0gdGltZW91dDsNCiAgICAgICAgaWYgKGxheW91dCA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICByZXQubGF5b3V0ID0gWydZZXMnLCAnTm8nXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmKHR5cGVvZihsYXlvdXQpIT0nb2JqZWN0JykNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0LmxheW91dCA9IFsnT0snXTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldC5sYXlvdXQgPSBsYXlvdXQ7DQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LmxheW91dCwgInVzZXIiLCB7IHZhbHVlOiB0cnVlIH0pOw0KICAgICAgICB9DQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAudGltZW91dCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlaignVElNRU9VVCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLmJ1dHRvbiA9PSAnWWVzJyB8fCBwLmJ1dHRvbiA9PSAnT0snIHx8IHRoaXMucHJvbWlzZS5sYXlvdXQudXNlcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVzKHAuYnV0dG9uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWooJ2RlbmllZCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgZm9yICh2YXIgeCBpbiB0aGlzLnJldC5sYXlvdXQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5yZXQubGF5b3V0W3hdID0gJyInICsgdGhpcy5yZXQubGF5b3V0W3hdICsgJyInOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgdGl0bGU6IHRoaXMucmV0LnRpdGxlLCBjYXB0aW9uOiB0aGlzLnJldC5jYXB0aW9uLCBpY29uOiAnY2F1dGlvbicsIGJ1dHRvbnM6IHRoaXMucmV0LmxheW91dCwgYnV0dG9uRGVmYXVsdDogdGhpcy5yZXQubGF5b3V0W3RoaXMucmV0LmxheW91dC5sZW5ndGgtMV0sIHRpbWVvdXQ6IHRoaXMucmV0LnRpbWVvdXQgfSkpOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0LmNsb3NlID0gZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAodGhpcy5zZXJ2ZXIpIHsgdGhpcy5zZXJ2ZXIuY2xvc2UoKTsgfQ0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLmxvY2sgPSBmdW5jdGlvbiBsb2NrKCkNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0LnNlcnZlciA9IHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyKHJldCk7DQogICAgICAgIHJldC5zZXJ2ZXIucmV0ID0gcmV0Ow0KICAgICAgICByZXQuc2VydmVyLm9uKCdjb25uZWN0aW9uJywgZnVuY3Rpb24gKGMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBjOw0KICAgICAgICAgICAgYy5wcm9taXNlID0gdGhpcy5yZXQ7DQogICAgICAgICAgICBjLm9uKCdkYXRhJywgZnVuY3Rpb24gKGJ1ZmZlcikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLmxlbiA8IDQgfHwgYnVmZmVyLnJlYWRVSW50MzJMRSgwKSA+IGJ1ZmZlci5sZW4pIHsgdGhpcy51bnNoaWZ0KGJ1ZmZlcik7IH0NCiAgICAgICAgICAgICAgICB2YXIgcCA9IEpTT04ucGFyc2UoYnVmZmVyLnNsaWNlKDQsIGJ1ZmZlci5yZWFkVUludDMyTEUoMCkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRVJST1InOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZWoocC5yZWFzb24pOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlLl9yZXMoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgYy53cml0ZSh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTE9DSycgfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSh0aXRsZSwgY2FwdGlvbikNCiAgICB7DQogICAgICAgIC8vIFN0YXJ0IExvY2FsIFNlcnZlcg0KICAgICAgICB2YXIgcmV0ID0gdGhpcy5faW5pdElQQ0Jhc2UoKTsNCiAgICAgICAgcmV0LnRpdGxlID0gdGl0bGU7IHJldC5jYXB0aW9uID0gY2FwdGlvbjsgDQogICAgICAgIHJldC5zZXJ2ZXIgPSB0aGlzLnN0YXJ0TWVzc2FnZVNlcnZlcihyZXQpOw0KICAgICAgICByZXQuc2VydmVyLnJldCA9IHJldDsNCiAgICAgICAgcmV0LnNlcnZlci5vbignY29ubmVjdGlvbicsIGZ1bmN0aW9uIChjKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gYzsNCiAgICAgICAgICAgIGMucHJvbWlzZSA9IHRoaXMucmV0Ow0KICAgICAgICAgICAgYy5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW4gPCA0IHx8IGJ1ZmZlci5yZWFkVUludDMyTEUoMCkgPiBidWZmZXIubGVuKSB7IHRoaXMudW5zaGlmdChidWZmZXIpOyB9DQogICAgICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHAuY29tbWFuZCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VSUk9SJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZS5fcmVqKHAucmVhc29uKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICdOT1RJRlknOg0KDQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2UuX3JlcygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBjLndyaXRlKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdOT1RJRlknLCB0aXRsZTogdGhpcy5yZXQudGl0bGUsIGNhcHRpb246IHRoaXMucmV0LmNhcHRpb24gfSkpOw0KICAgICAgICB9KTsNCg0KICAgICAgICByZXR1cm4gKHJldCk7DQogICAgfTsNCiAgICB0aGlzLnN0YXJ0Q2xpZW50ID0gZnVuY3Rpb24gc3RhcnRDbGllbnQob3B0aW9ucykNCiAgICB7DQogICAgICAgIC8vIENyZWF0ZSB0aGUgQ2xpZW50DQogICAgICAgIGNvbnNvbGUubG9nKCdTdGFydGluZyBDbGllbnQuLi4nKTsNCg0KICAgICAgICBvcHRpb25zLm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICBvcHRpb25zLnVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHRoaXMuY2xpZW50ID0gcmVxdWlyZSgnbmV0JykuY3JlYXRlQ29ubmVjdGlvbihvcHRpb25zKTsNCiAgICAgICAgdGhpcy5jbGllbnQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICB0aGlzLmNsaWVudC5vbignZGF0YScsIGZ1bmN0aW9uIChidWZmZXIpDQogICAgICAgIHsNCiAgICAgICAgICAgIGlmIChidWZmZXIubGVuIDwgNCB8fCBidWZmZXIucmVhZFVJbnQzMkxFKDApID4gYnVmZmVyLmxlbikgeyB0aGlzLnVuc2hpZnQoYnVmZmVyKTsgfQ0KICAgICAgICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKGJ1ZmZlci5zbGljZSg0LCBidWZmZXIucmVhZFVJbnQzMkxFKDApKS50b1N0cmluZygpKTsNCiAgICAgICAgICAgIHN3aXRjaCAocC5jb21tYW5kKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGNhc2UgJ0xPQ0snOg0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyID0gJyc7IHRoaXMuX3NoZWxsLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3RkaW4ud3JpdGUoJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvTWVudVxcIEV4dHJhcy9Vc2VyLm1lbnUvQ29udGVudHMvUmVzb3VyY2VzL0NHU2Vzc2lvbiAtc3VzcGVuZFxuZXhpdFxuJyk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zaGVsbC5zdGRlcnIuc3RyICE9ICcnKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0xPQ0snLCBzdGF0dXM6IDAgfSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg", 16000); + memcpy_s(_messagebox + 32000, 8996, "ICAgICAgICAgICAgIGNhc2UgJ05PVElGWSc6DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgbm90aWZpY2F0aW9uICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIlwnXG5leGl0XG4nKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwud2FpdEV4aXQoKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdFUlJPUicsIHJlYXNvbjogdGhpcy5fc2hlbGwuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnTk9USUZZJywgc3RhdHVzOiAwIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdESUFMT0cnOg0KICAgICAgICAgICAgICAgICAgICB2YXIgdGltZW91dCA9IHAudGltZW91dCA/ICgnIGdpdmluZyB1cCBhZnRlciAnICsgcC50aW1lb3V0KSA6ICcnOw0KICAgICAgICAgICAgICAgICAgICB2YXIgaWNvbiA9IHAuaWNvbiA/ICgnd2l0aCBpY29uICcgKyBwLmljb24pIDogJyc7DQoNCiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1dHRvbnMgPSBwLmJ1dHRvbnMgPyAoJ2J1dHRvbnMgeycgKyBwLmJ1dHRvbnMudG9TdHJpbmcoKSArICd9JykgOiAnJzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHAuYnV0dG9uRGVmYXVsdCAhPSBudWxsKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zICs9ICgnIGRlZmF1bHQgYnV0dG9uICcgKyBwLmJ1dHRvbkRlZmF1bHQpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC50aGF0ID0gdGhpczsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hlbGwuc3Rkb3V0LnN0ciA9ICcnOyB0aGlzLl9zaGVsbC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgPSAnJzsgdGhpcy5fc2hlbGwuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5zdGRpbi53cml0ZSgnb3Nhc2NyaXB0IC1lIFwndGVsbCBjdXJyZW50IGFwcGxpY2F0aW9uIHRvIGRpc3BsYXkgZGlhbG9nICInICsgcC5jYXB0aW9uICsgJyIgd2l0aCB0aXRsZSAiJyArIHAudGl0bGUgKyAnIiAnICsgaWNvbiArICcgJyArIGJ1dHRvbnMgKyB0aW1lb3V0ICsgJ1wnIHwgYXdrIFwneyBjPXNwbGl0KCQwLCB0b2tlbnMsICIsIik7IHNwbGl0KHRva2Vuc1sxXSwgdmFsLCAiOiIpOyBpZihjPT0xKSB7IHByaW50IHZhbFsyXSB9IGVsc2UgeyBzcGxpdCh0b2tlbnNbMl0sIGd1LCAiOiIpOyBpZihndVsyXT09InRydWUiKSB7IHByaW50ICJfVElNRU9VVF8iIH0gZWxzZSB7IHByaW50IHZhbFsyXSAgfSAgfSB9XCdcbmV4aXRcbicpOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaGVsbC5vbignZXhpdCcsIGZ1bmN0aW9uICgpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ZGVyci5zdHIgIT0gJycgJiYgIXRoaXMuc3RkZXJyLnN0ci5pbmNsdWRlcygnT3BlbkdMJykpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0LmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRVJST1InLCByZWFzb246IHRoaXMuc3RkZXJyLnN0ciB9KSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3Rkb3V0LnN0ci50cmltKCkgPT0gJ19USU1FT1VUXycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQuZW5kKHRyYW5zbGF0ZU9iamVjdCh7IGNvbW1hbmQ6ICdESUFMT0cnLCB0aW1lb3V0OiB0cnVlIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aGF0LmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgYnV0dG9uOiB0aGlzLnN0ZG91dC5zdHIudHJpbSgpIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRoYXQuX3NoZWxsID0gbnVsbDsNCiAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NoZWxsKSB7IHRoaXMuX3NoZWxsLmtpbGwoKTsgfQ0KICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAvL3RoaXMuX3NoZWxsLndhaXRFeGl0KCk7DQogICAgICAgICAgICAgICAgICAgIC8vaWYgKHRoaXMuX3NoZWxsLnN0ZGVyci5zdHIgIT0gJycgJiYgIXRoaXMuX3NoZWxsLnN0ZGVyci5zdHIuaW5jbHVkZXMoJ09wZW5HTCcpKQ0KICAgICAgICAgICAgICAgICAgICAvL3sNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgdGhpcy5lbmQodHJhbnNsYXRlT2JqZWN0KHsgY29tbWFuZDogJ0VSUk9SJywgcmVhc29uOiB0aGlzLl9zaGVsbC5zdGRlcnIuc3RyIH0pKTsNCiAgICAgICAgICAgICAgICAgICAgLy99DQogICAgICAgICAgICAgICAgICAgIC8vZWxzZQ0KICAgICAgICAgICAgICAgICAgICAvL3sNCiAgICAgICAgICAgICAgICAgICAgLy8gICAgaWYgKHRoaXMuX3NoZWxsLnN0ZG91dC5zdHIudHJpbSgpID09ICdfVElNRU9VVF8nKQ0KICAgICAgICAgICAgICAgICAgICAvLyAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgdGltZW91dDogdHJ1ZSB9KSk7DQogICAgICAgICAgICAgICAgICAgIC8vICAgIH0NCiAgICAgICAgICAgICAgICAgICAgLy8gICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAvLyAgICB7DQogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzLmVuZCh0cmFuc2xhdGVPYmplY3QoeyBjb21tYW5kOiAnRElBTE9HJywgYnV0dG9uOiB0aGlzLl9zaGVsbC5zdGRvdXQuc3RyLnRyaW0oKSB9KSk7DQogICAgICAgICAgICAgICAgICAgIC8vICAgIH0NCiAgICAgICAgICAgICAgICAgICAgLy99DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICAgICAgdGhpcy5jbGllbnQub24oJ2Vycm9yJywgZnVuY3Rpb24gKCkgeyB0aGlzLnVuaW5zdGFsbCgpOyB9KS5vbignZW5kJywgZnVuY3Rpb24gKCkgeyB0aGlzLnVuaW5zdGFsbCgpOyB9KTsNCiAgICAgICAgdGhpcy5jbGllbnQudW5pbnN0YWxsID0gZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgLy8gTmVlZCB0byB1bmluc3RhbGwgb3Vyc2VsdmVzDQogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSwgJy1leGVjJywgInZhciBzPXJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQoJyIgKyB0aGlzLl9vcHRpb25zLnNlcnZpY2UgKyAiJywgIiArIHRoaXMuX29wdGlvbnMudWlkICsgIik7IHMudW5sb2FkKCk7IHJlcXVpcmUoJ2ZzJykudW5saW5rU3luYyhzLnBsaXN0KTtwcm9jZXNzLmV4aXQoKTsiXSwgeyBkZXRhY2hlZDogdHJ1ZSwgdHlwZTogcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLlNwYXduVHlwZXMuREVUQUNIRUQgfSk7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICB9Ow0KICAgICAgICByZXR1cm4gKHRoaXMuY2xpZW50KTsNCiAgICB9Ow0KICAgIHRoaXMuc3RhcnRNZXNzYWdlU2VydmVyID0gZnVuY3Rpb24gc3RhcnRNZXNzYWdlU2VydmVyKG9wdGlvbnMpDQogICAgew0KICAgICAgICBpZiAocmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKG9wdGlvbnMucGF0aCkpIHsgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKG9wdGlvbnMucGF0aCk7IH0NCiAgICAgICAgb3B0aW9ucy53cml0YWJsZUFsbCA9IHRydWU7DQoNCiAgICAgICAgdmFyIHJldCA9IHJlcXVpcmUoJ25ldCcpLmNyZWF0ZVNlcnZlcigpOw0KICAgICAgICByZXQudWlkID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmNvbnNvbGVVaWQoKTsNCiAgICAgICAgcmV0Lm9zdmVyc2lvbiA9IHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLmdldE9TVmVyc2lvbigpOw0KICAgICAgICByZXQuX29wdGlvbnMgPSBvcHRpb25zOw0KICAgICAgICByZXQudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIChvYmopDQogICAgICAgIHsNCiAgICAgICAgICAgIG9iai5jbG9zZSgpOw0KICAgICAgICAgICAgb2JqLl9vcHRpb25zLl9yZWooJ0Nvbm5lY3Rpb24gdGltZW91dCcpOw0KICAgICAgICB9LCA1MDAwLCByZXQpOw0KICAgICAgICByZXQubGlzdGVuKG9wdGlvbnMpOw0KICAgICAgICByZXQub24oJ2Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoYykNCiAgICAgICAgew0KICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0Lm9uKCd+JywgZnVuY3Rpb24gKCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmVxdWlyZSgnZnMnKS51bmxpbmtTeW5jKHRoaXMuX29wdGlvbnMucGF0aCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuaW5zdGFsbExhdW5jaEFnZW50KA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMudG1wU2VydmljZU5hbWUsIHNlcnZpY2VQYXRoOiBwcm9jZXNzLmV4ZWNQYXRoLCBzdGFydFR5cGU6ICdBVVRPX1NUQVJUJywgdWlkOiByZXQudWlkLA0KICAgICAgICAgICAgICAgIHNlc3Npb25UeXBlczogWydBcXVhJ10sIHBhcmFtZXRlcnM6IFsnLWV4ZWMnLCAicmVxdWlyZSgnbWVzc2FnZS1ib3gnKS5zdGFydENsaWVudCh7IHBhdGg6ICciICsgb3B0aW9ucy5wYXRoICsgIicsIHNlcnZpY2U6ICciICsgb3B0aW9ucy50bXBTZXJ2aWNlTmFtZSArICInIH0pLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KTsiXQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0TGF1bmNoQWdlbnQob3B0aW9ucy50bXBTZXJ2aWNlTmFtZSwgcmV0LnVpZCkubG9hZCgpOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9Ow0KfQ0KDQoNCnN3aXRjaChwcm9jZXNzLnBsYXRmb3JtKQ0Kew0KICAgIGNhc2UgJ3dpbjMyJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCiAgICBjYXNlICdsaW51eCc6DQogICAgY2FzZSAnZnJlZWJzZCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IGxpbnV4X21lc3NhZ2VCb3goKTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgbWFjb3NfbWVzc2FnZUJveCgpOw0KICAgICAgICBicmVhazsNCn0NCg0KDQoNCg0KDQoNCg==", 8996); + ILibBase64DecodeEx((unsigned char*)_messagebox, 40996, (unsigned char*)_messagebox + 40996); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "message-box"); duk_push_string(ctx, _messagebox + 40996); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_messagebox); @@ -2189,11 +2189,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) // notifybar-desktop, refer to modules/notifybar-desktop.js - char *_notifybardesktop = ILibMemory_Allocate(31691, 0, NULL, NULL); - memcpy_s(_notifybardesktop + 0, 18108, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHRyc2l6ZSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplOw0KdmFyIENsaWVudE1lc3NhZ2UgPSAzMzsNCg0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9jaGVjayh0aXRsZSwgdHNpZCkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW0odGl0bGUsIHRzaWQpKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHdpbmRvd3Nfbm90aWZ5YmFyX3N5c3RlbSh0aXRsZSwgdHNpZCkNCnsNCiAgICB2YXIgcmV0ID0ge307DQoNCiAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuZXhpdCgpO30pOyIpLnRvU3RyaW5nKCdiYXNlNjQnKTsNCg0KICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgIC5hZGRNZXRob2QoJ2Nsb3NlJywgZnVuY3Rpb24gY2xvc2UoKSB7IHRoaXMuY2hpbGQua2lsbCgpOyB9KTsNCg0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnXFwnKS5wb3AoKSwgJy1iNjRleGVjJywgc2NyaXB0XSwgeyB0eXBlOiAxLCB1aWQ6IHRzaWQgfSk7DQogICAgcmV0LmNoaWxkLnBhcmVudCA9IHJldDsNCiAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucGFyZW50LmVtaXQoJ2Nsb3NlJywgY29kZSk7IH0pOw0KDQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkNCnsNCiAgICB2YXIgTWVzc2FnZVB1bXA7DQogICAgdmFyIHJldDsNCg0KICAgIE1lc3NhZ2VQdW1wID0gcmVxdWlyZSgnd2luLW1lc3NhZ2UtcHVtcCcpOw0KICAgIHJldCA9IHsgX09iamVjdElEOiAnbm90aWZ5YmFyLWRlc2t0b3AuV2luZG93cycsIHRpdGxlOiB0aXRsZSwgX3B1bXBzOiBbXSwgX3Byb21pc2U6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKSB9Ow0KDQogICAgcmV0Ll9wcm9taXNlLm5vdGlmeWJhciA9IHJldDsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wdW1wcy5sZW5ndGg7ICsraSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9wdW1wc1tpXS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2V4aXQnKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9wdW1wc1tpXS5jbG9zZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fcHVtcHMgPSBbXTsNCiAgICAgICAgfSk7DQoNCiAgICByZXQuX3Byb21pc2UudGhlbihmdW5jdGlvbiAobSkNCiAgICB7DQogICAgICAgIHZhciBvZmZzZXQ7DQogICAgICAgIHZhciBiYXJXaWR0aCwgbW9uV2lkdGgsIG9mZnNldCwgYmFySGVpZ2h0LCBtb25IZWlnaHQ7DQoNCiAgICAgICAgZm9yICh2YXIgaSBpbiBtKQ0KICAgICAgICB7DQogICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNb25pdG9yOiAnICsgaSArICcgPSBXaWR0aFsnICsgKG1baV0ucmlnaHQgLSBtW2ldLmxlZnQpICsgJ10nKTsNCiAgICAgICAgICAgIG1vbldpZHRoID0gKG1baV0ucmlnaHQgLSBtW2ldLmxlZnQpOw0KICAgICAgICAgICAgbW9uSGVpZ2h0ID0gKG1baV0uYm90dG9tIC0gbVtpXS50b3ApOw0KICAgICAgICAgICAgYmFyV2lkdGggPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC4zMCk7DQogICAgICAgICAgICBiYXJIZWlnaHQgPSBNYXRoLmZsb29yKG1vbkhlaWdodCAqIDAuMDM1KTsNCiAgICAgICAgICAgIG9mZnNldCA9IE1hdGguZmxvb3IobW9uV2lkdGggKiAwLjUwKSAtIE1hdGguZmxvb3IoYmFyV2lkdGggKiAwLjUwKTsNCiAgICAgICAgICAgIHN0YXJ0ID0gbVtpXS5sZWZ0ICsgb2Zmc2V0Ow0KICAgICAgICAgICAgdmFyIG9wdGlvbnMgPQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93Og0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5zdHlsZXM6IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19WSVNJQkxFIHwgTWVzc2FnZVB1bXAuV2luZG93U3R5bGVzLldTX0JPUkRFUiB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19DQVBUSU9OIHwgTWVzc2FnZVB1bXAuV2luZG93U3R5bGVzLldTX1NZU01FTlUsDQogICAgICAgICAgICAgICAgICAgICAgICB4OiBzdGFydCwgeTogbVtpXS50b3AsIGxlZnQ6IG1baV0ubGVmdCwgcmlnaHQ6IG1baV0ucmlnaHQsIHdpZHRoOiBiYXJXaWR0aCwgaGVpZ2h0OiBiYXJIZWlnaHQsIHRpdGxlOiB0aGlzLm5vdGlmeWJhci50aXRsZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnB1c2gobmV3IE1lc3NhZ2VQdW1wKG9wdGlvbnMpKTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkubm90aWZ5YmFyID0gdGhpcy5ub3RpZnliYXI7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm9uKCdod25kJywgZnVuY3Rpb24gKGgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fSEFORExFID0gaDsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnBlZWsoKS5vbignZXhpdCcsIGZ1bmN0aW9uIChoKQ0KICAgICAgICAgICAgeyAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm90aWZ5YmFyLl9wdW1wcy5sZW5ndGg7ICsraSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wc1tpXS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2V4aXQnKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzW2ldLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLmVtaXQoJ2Nsb3NlJyk7DQogICAgICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzID0gW107DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbldpbmRvd3NNZXNzYWdlKG1zZykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAobXNnLm1lc3NhZ2UgPT0gMTMzKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiV01fTkNQQUlOVCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobXNnLm1lc3NhZ2UgPT0gNzApICAgLy8gV2UgYXJlIGludGVyY2VwdGluZyBXTV9XSU5ET1dQT1NDSEFOR0lORyB0byBESVNBQkxFIG1vdmluZyB0aGUgd2luZG93DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fSEFORExFKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwdHJzaXplKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBtc2cubHBhcmFtX3Jhdy5EZXJlZigyNCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSB8IDB4MDAwMjsgLy8gU2V0IFNXUF9OT01PVkUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5scGFyYW1fcmF3LkRlcmVmKDgsIDQpLnRvQnVmZmVyKCkucmVhZEludDMyTEUoKSA8IHRoaXMuX29wdGlvbnMud2luZG93LmxlZnQgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc2cubHBhcmFtX3Jhdy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgKyB0aGlzLl9vcHRpb25zLndpbmRvdy53aWR0aCkgPj0gdGhpcy5fb3B0aW9ucy53aW5kb3cucmlnaHQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2FsbG93IHRoaXMgbW92ZSwgYmVjYXVzZSBpdCB3aWxsIGdvIG91dCBvZiBib3VuZHMgb2YgdGhlIGN1cnJlbnQgbW9uaXRvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShmbGFncyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyB0aGUgbW92ZSwgYnV0IG9ubHkgb24gdGhlIFgtYXhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMTIsIDQpLnRvQnVmZmVyKCkud3JpdGVJbnQzMkxFKHRoaXMuX29wdGlvbnMud2luZG93LnkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBtc2cubHBhcmFtX3Jhdy5EZXJlZigzMiwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSB8IDB4MDAwMiAgLy8gU2V0IFNXUF9OT01PVkUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5scGFyYW1fcmF3LkRlcmVmKDE2LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgPCB0aGlzLl9vcHRpb25zLndpbmRvdy5sZWZ0IHx8IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1zZy5scGFyYW1fcmF3LkRlcmVmKDE2LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgKyB0aGlzLl9vcHRpb25zLndpbmRvdy53aWR0aCkgPj0gdGhpcy5fb3B0aW9ucy53aW5kb3cucmlnaHQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2FsbG93IHRoaXMgbW92ZSwgYmVjYXVzZSBpdCB3aWxsIGdvIG91dCBvZiBib3VuZHMgb2YgdGhlIGN1cnJlbnQgbW9uaXRvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMzIsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShmbGFncyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyB0aGUgbW92ZSwgYnV0IG9ubHkgb24gdGhlIFgtYXhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjAsIDQpLnRvQnVmZmVyKCkud3JpdGVJbnQzMkxFKHRoaXMuX29wdGlvbnMud2luZG93LnkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KDQpmdW5jdGlvbiB4X25vdGlmeWJhcl9jaGVjayh0aXRsZSkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuU2VsZigpIT0wIHx8IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkgPT0gMCkNCiAgICB7DQogICAgICAgIHJldHVybiAoeF9ub3RpZnliYXIodGl0bGUpKTsgLy8gTm8gRGlzcGF0Y2hpbmcgbmVjZXNzYXJ5DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIC8vIFdlIGFyZSByb290LCBzbyB3ZSBzaG91bGQgdHJ5IHRvIHNwYXduIGEgY2hpbGQgaW50byB0aGUgdXNlcidzIGRlc2t0b3ANCiAgICAgICAgdmFyIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgIA0KICAgICAgICBpZiAoIXhpbmZvKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aHJvdygnWFNlcnZlciBJbml0aWFsaXphdGlvbiBFcnJvcicpDQogICAgICAgIH0NCiAgICAgICAgdmFyIHJldCA9IHt9Ow0KICAgICAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuZXhpdCgpO30pOyIpLnRvU3RyaW5nKCdiYXNlNjQnKTsNCg0KICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgICAgIC5hZGRNZXRob2QoJ2Nsb3NlJywgZnVuY3Rpb24gY2xvc2UoKSB7IHRoaXMuY2hpbGQua2lsbCgpOyB9KTsNCg0KICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSwgJy1iNjRleGVjJywgc2NyaXB0XSwgeyB1aWQ6IHVpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICAgICAgcmV0LmNoaWxkLnBhcmVudCA9IHJldDsNCiAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucGFyZW50LmVtaXQoJ2Nsb3NlJywgY29kZSk7IH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHhfbm90aWZ5YmFyKHRpdGxlKQ0Kew0KICAgIHJldCA9IHsgX09iamVjdElEOiAnbm90aWZ5YmFyLWRlc2t0b3AuWCcsIHRpdGxlOiB0aXRsZSwgX3dpbmRvd3M6IFtdLCBfcHJvbWlzZTogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpLCBtb25pdG9yczogW10sIHdvcmtzcGFjZXM6IHt9IH07DQoNCiAgICByZXQuX3Byb21pc2Uubm90aWZ5YmFyID0gcmV0Ow0KICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgIC5hZGRNZXRob2QoJ2Nsb3NlJywgZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgIH0pOw0KDQogICAgcmV0Ll9wcm9taXNlLmNyZWF0ZUJhcnMgPSBmdW5jdGlvbiAobSkNCiAgICB7DQogICAgICAgIGZvciAodmFyIGkgaW4gbSkNCiAgICAgICAgew0KICAgICAgICAgICAgbW9uV2lkdGggPSAobVtpXS5yaWdodCAtIG1baV0ubGVmdCk7DQogICAgICAgICAgICBtb25IZWlnaHQgPSAobVtpXS5ib3R0b20gLSBtW2ldLnRvcCk7DQogICAgICAgICAgICBiYXJXaWR0aCA9IE1hdGguZmxvb3IobW9uV2lkdGggKiAwLjMwKTsNCiAgICAgICAgICAgIGJhckhlaWdodCA9IE1hdGguZmxvb3IobW9uSGVpZ2h0ICogMC4wMzUpOw0KICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihtb25XaWR0aCAqIDAuNTApIC0gTWF0aC5mbG9vcihiYXJXaWR0aCAqIDAuNTApOw0KICAgICAgICAgICAgc3RhcnQgPSBtW2ldLmxlZnQgKyBvZmZzZXQ7DQoNCiAgICAgICAgICAgIHZhciB3aGl0ZSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFdoaXRlUGl4ZWwobVtpXS5kaXNwbGF5LCBtW2ldLnNjcmVlbklkKS5WYWw7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wdXNoKHsNCiAgICAgICAgICAgICAgICByb290OiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhSb290V2luZG93KG1baV0uZGlzcGxheSwgbVtpXS5zY3JlZW5JZCksDQogICAgICAgICAgICAgICAgZGlzcGxheTogbVtpXS5kaXNwbGF5LCBpZDogbVtpXS5zY3JlZWRJZA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhDcmVhdGVTaW1wbGVXaW5kb3cobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkucm9vdCwgc3RhcnQsIDAsIGJhcldpZHRoLCAxLCAwLCB3aGl0ZSwgd2hpdGUpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YU3RvcmVOYW1lKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlVmFyaWFibGUodGhpcy5ub3RpZnliYXIudGl0bGUpKTsNCg0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuc2V0V2luZG93U2l6ZUhpbnRzKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgc3RhcnQsIDAsIGJhcldpZHRoLCAxLCBiYXJXaWR0aCwgMSwgYmFyV2lkdGgsIDEpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuaGlkZVdpbmRvd0ljb24obVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkucm9vdCwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhcik7DQoNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLnNldEFsbG93ZWRBY3Rpb25zKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTU9USUZfRkxBR1MuTVdNX0ZVTkNfQ0xPU0UpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuc2V0QWx3YXlzT25Ub3AobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkucm9vdCwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhcik7DQoNCg0KICAgICAgICAgICAgdmFyIHdtX2RlbGV0ZV93aW5kb3dfYXRvbSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWEludGVybkF0b20obVtpXS5kaXNwbGF5LCByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSgnV01fREVMRVRFX1dJTkRPVycpLCAwKS5WYWw7DQogICAgICAgICAgICB2YXIgYXRvbXMgPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSg0KTsNCiAgICAgICAgICAgIGF0b21zLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh3bV9kZWxldGVfd2luZG93X2F0b20pOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YU2V0V01Qcm90b2NvbHMobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyLCBhdG9tcywgMSk7DQoNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWE1hcFdpbmRvdyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YRmx1c2gobVtpXS5kaXNwbGF5KTsNCg0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWENvbm5lY3Rpb25OdW1iZXIobVtpXS5kaXNwbGF5KS5WYWwsIHsgcmVhZHNldDogdHJ1ZSB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQuYXRvbSA9IHdtX2RlbGV0ZV93aW5kb3dfYXRvbTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQucmV0ID0gdGhpcy5ub3RpZnliYXI7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbVtpXS5kaXNwbGF5Ow0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudC5vbigncmVhZHNldCcsIGZ1bmN0aW9uIChmZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgWEUgPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICB3aGlsZSAocmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhOZXh0RXZlbnRTeW5jKHRoaXMuX2Rpc3BsYXksIFhFKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKFhFLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgPT0gQ2xpZW50TWVzc2FnZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaWVudFR5cGUgPSBYRS5EZXJlZihyZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5Qb2ludGVyU2l6ZSA9PSA4ID8gNTYgOiAyOCwgNCkudG9C", 16000); - memcpy_s(_notifybardesktop + 16000, 2108, "dWZmZXIoKS5yZWFkVUludDMyTEUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnRUeXBlID09IHRoaXMuYXRvbSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykucmVtb3ZlRGVzY3JpcHRvcihmZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YQ2xvc2VEaXNwbGF5KHRoaXMuX2Rpc3BsYXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5lbWl0KCdjbG9zZScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5fd2luZG93cy5jbGVhcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9Ow0KICAgIHJldC5fcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChtKQ0KICAgIHsNCiAgICAgICAgdmFyIG9mZnNldDsNCiAgICAgICAgdmFyIGJhcldpZHRoLCBtb25XaWR0aCwgb2Zmc2V0LCBiYXJIZWlnaHQsIG1vbkhlaWdodDsNCiAgICAgICAgdGhpcy5ub3RpZnliYXIubW9uaXRvcnMgPSBtOw0KICAgICAgICBpZiAobS5sZW5ndGggPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgd3MgPSBtWzBdLmRpc3BsYXkuZ2V0Q3VycmVudFdvcmtzcGFjZSgpOw0KDQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci53b3Jrc3BhY2VzW3dzXSA9IHRydWU7DQogICAgICAgICAgICB0aGlzLmNyZWF0ZUJhcnMobSk7DQogICAgICAgICAgICBtWzBdLmRpc3BsYXkuX25vdGlmeUJhciA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgbVswXS5kaXNwbGF5Lm9uKCd3b3Jrc3BhY2VDaGFuZ2VkJywgZnVuY3Rpb24gKHcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoIXRoaXMuX25vdGlmeUJhci53b3Jrc3BhY2VzW3ddKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5QmFyLndvcmtzcGFjZXNbd10gPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlCYXIuX3Byb21pc2UuY3JlYXRlQmFycyh0aGlzLl9ub3RpZnlCYXIubW9uaXRvcnMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgDQogICAgfSk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQoNCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd3Nfbm90aWZ5YmFyX2NoZWNrOw0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5zeXN0ZW0gPSB3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW07DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2xpbnV4JzoNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB4X25vdGlmeWJhcl9jaGVjazsNCiAgICAgICAgYnJlYWs7DQp9DQoNCg0K", 2108); - ILibBase64DecodeEx((unsigned char*)_notifybardesktop, 18108, (unsigned char*)_notifybardesktop + 18108); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "notifybar-desktop"); duk_push_string(ctx, _notifybardesktop + 18108); + char *_notifybardesktop = ILibMemory_Allocate(32964, 0, NULL, NULL); + memcpy_s(_notifybardesktop + 0, 18836, "LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHRyc2l6ZSA9IHJlcXVpcmUoJ19HZW5lcmljTWFyc2hhbCcpLlBvaW50ZXJTaXplOw0KdmFyIENsaWVudE1lc3NhZ2UgPSAzMzsNCg0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9jaGVjayh0aXRsZSwgdHNpZCkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0UHJvY2Vzc093bmVyTmFtZShwcm9jZXNzLnBpZCkudHNpZCA9PSAwKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW0odGl0bGUsIHRzaWQpKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHdpbmRvd3Nfbm90aWZ5YmFyX3N5c3RlbSh0aXRsZSwgdHNpZCkNCnsNCiAgICB2YXIgcmV0ID0ge307DQoNCiAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuZXhpdCgpO30pOyIpLnRvU3RyaW5nKCdiYXNlNjQnKTsNCg0KICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgIC5hZGRNZXRob2QoJ2Nsb3NlJywgZnVuY3Rpb24gY2xvc2UoKSB7IHRoaXMuY2hpbGQua2lsbCgpOyB9KTsNCg0KICAgIHJldC5jaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZShwcm9jZXNzLmV4ZWNQYXRoLCBbcHJvY2Vzcy5leGVjUGF0aC5zcGxpdCgnXFwnKS5wb3AoKSwgJy1iNjRleGVjJywgc2NyaXB0XSwgeyB0eXBlOiAxLCB1aWQ6IHRzaWQgfSk7DQogICAgcmV0LmNoaWxkLnBhcmVudCA9IHJldDsNCiAgICByZXQuY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgcmV0LmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucGFyZW50LmVtaXQoJ2Nsb3NlJywgY29kZSk7IH0pOw0KDQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiB3aW5kb3dzX25vdGlmeWJhcl9sb2NhbCh0aXRsZSkNCnsNCiAgICB2YXIgTWVzc2FnZVB1bXA7DQogICAgdmFyIHJldDsNCg0KICAgIE1lc3NhZ2VQdW1wID0gcmVxdWlyZSgnd2luLW1lc3NhZ2UtcHVtcCcpOw0KICAgIHJldCA9IHsgX09iamVjdElEOiAnbm90aWZ5YmFyLWRlc2t0b3AuV2luZG93cycsIHRpdGxlOiB0aXRsZSwgX3B1bXBzOiBbXSwgX3Byb21pc2U6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldEluZm8oKSB9Ow0KDQogICAgcmV0Ll9wcm9taXNlLm5vdGlmeWJhciA9IHJldDsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9wdW1wcy5sZW5ndGg7ICsraSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9wdW1wc1tpXS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2V4aXQnKTsNCiAgICAgICAgICAgICAgICB0aGlzLl9wdW1wc1tpXS5jbG9zZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fcHVtcHMgPSBbXTsNCiAgICAgICAgfSk7DQoNCiAgICByZXQuX3Byb21pc2UudGhlbihmdW5jdGlvbiAobSkNCiAgICB7DQogICAgICAgIHZhciBvZmZzZXQ7DQogICAgICAgIHZhciBiYXJXaWR0aCwgbW9uV2lkdGgsIG9mZnNldCwgYmFySGVpZ2h0LCBtb25IZWlnaHQ7DQoNCiAgICAgICAgZm9yICh2YXIgaSBpbiBtKQ0KICAgICAgICB7DQogICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNb25pdG9yOiAnICsgaSArICcgPSBXaWR0aFsnICsgKG1baV0ucmlnaHQgLSBtW2ldLmxlZnQpICsgJ10nKTsNCiAgICAgICAgICAgIG1vbldpZHRoID0gKG1baV0ucmlnaHQgLSBtW2ldLmxlZnQpOw0KICAgICAgICAgICAgbW9uSGVpZ2h0ID0gKG1baV0uYm90dG9tIC0gbVtpXS50b3ApOw0KICAgICAgICAgICAgYmFyV2lkdGggPSBNYXRoLmZsb29yKG1vbldpZHRoICogMC4zMCk7DQogICAgICAgICAgICBiYXJIZWlnaHQgPSBNYXRoLmZsb29yKG1vbkhlaWdodCAqIDAuMDM1KTsNCiAgICAgICAgICAgIG9mZnNldCA9IE1hdGguZmxvb3IobW9uV2lkdGggKiAwLjUwKSAtIE1hdGguZmxvb3IoYmFyV2lkdGggKiAwLjUwKTsNCiAgICAgICAgICAgIHN0YXJ0ID0gbVtpXS5sZWZ0ICsgb2Zmc2V0Ow0KICAgICAgICAgICAgdmFyIG9wdGlvbnMgPQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgd2luZG93Og0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB3aW5zdHlsZXM6IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19WSVNJQkxFIHwgTWVzc2FnZVB1bXAuV2luZG93U3R5bGVzLldTX0JPUkRFUiB8IE1lc3NhZ2VQdW1wLldpbmRvd1N0eWxlcy5XU19DQVBUSU9OIHwgTWVzc2FnZVB1bXAuV2luZG93U3R5bGVzLldTX1NZU01FTlUsDQogICAgICAgICAgICAgICAgICAgICAgICB4OiBzdGFydCwgeTogbVtpXS50b3AsIGxlZnQ6IG1baV0ubGVmdCwgcmlnaHQ6IG1baV0ucmlnaHQsIHdpZHRoOiBiYXJXaWR0aCwgaGVpZ2h0OiBiYXJIZWlnaHQsIHRpdGxlOiB0aGlzLm5vdGlmeWJhci50aXRsZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnB1c2gobmV3IE1lc3NhZ2VQdW1wKG9wdGlvbnMpKTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkubm90aWZ5YmFyID0gdGhpcy5ub3RpZnliYXI7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fcHVtcHMucGVlaygpLm9uKCdod25kJywgZnVuY3Rpb24gKGgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fSEFORExFID0gaDsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzLnBlZWsoKS5vbignZXhpdCcsIGZ1bmN0aW9uIChoKQ0KICAgICAgICAgICAgeyAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm90aWZ5YmFyLl9wdW1wcy5sZW5ndGg7ICsraSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wc1tpXS5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2V4aXQnKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzW2ldLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLmVtaXQoJ2Nsb3NlJyk7DQogICAgICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3B1bXBzID0gW107DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl9wdW1wcy5wZWVrKCkub24oJ21lc3NhZ2UnLCBmdW5jdGlvbiBvbldpbmRvd3NNZXNzYWdlKG1zZykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAobXNnLm1lc3NhZ2UgPT0gMTMzKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiV01fTkNQQUlOVCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobXNnLm1lc3NhZ2UgPT0gNzApICAgLy8gV2UgYXJlIGludGVyY2VwdGluZyBXTV9XSU5ET1dQT1NDSEFOR0lORyB0byBESVNBQkxFIG1vdmluZyB0aGUgd2luZG93DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fSEFORExFKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwdHJzaXplKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBtc2cubHBhcmFtX3Jhdy5EZXJlZigyNCwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSB8IDB4MDAwMjsgLy8gU2V0IFNXUF9OT01PVkUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5scGFyYW1fcmF3LkRlcmVmKDgsIDQpLnRvQnVmZmVyKCkucmVhZEludDMyTEUoKSA8IHRoaXMuX29wdGlvbnMud2luZG93LmxlZnQgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtc2cubHBhcmFtX3Jhdy5EZXJlZig4LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgKyB0aGlzLl9vcHRpb25zLndpbmRvdy53aWR0aCkgPj0gdGhpcy5fb3B0aW9ucy53aW5kb3cucmlnaHQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2FsbG93IHRoaXMgbW92ZSwgYmVjYXVzZSBpdCB3aWxsIGdvIG91dCBvZiBib3VuZHMgb2YgdGhlIGN1cnJlbnQgbW9uaXRvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShmbGFncyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyB0aGUgbW92ZSwgYnV0IG9ubHkgb24gdGhlIFgtYXhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMTIsIDQpLnRvQnVmZmVyKCkud3JpdGVJbnQzMkxFKHRoaXMuX29wdGlvbnMud2luZG93LnkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBtc2cubHBhcmFtX3Jhdy5EZXJlZigzMiwgNCkudG9CdWZmZXIoKS5yZWFkVUludDMyTEUoKSB8IDB4MDAwMiAgLy8gU2V0IFNXUF9OT01PVkUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5scGFyYW1fcmF3LkRlcmVmKDE2LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgPCB0aGlzLl9vcHRpb25zLndpbmRvdy5sZWZ0IHx8IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1zZy5scGFyYW1fcmF3LkRlcmVmKDE2LCA0KS50b0J1ZmZlcigpLnJlYWRJbnQzMkxFKCkgKyB0aGlzLl9vcHRpb25zLndpbmRvdy53aWR0aCkgPj0gdGhpcy5fb3B0aW9ucy53aW5kb3cucmlnaHQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpc2FsbG93IHRoaXMgbW92ZSwgYmVjYXVzZSBpdCB3aWxsIGdvIG91dCBvZiBib3VuZHMgb2YgdGhlIGN1cnJlbnQgbW9uaXRvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMzIsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShmbGFncyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGxvdyB0aGUgbW92ZSwgYnV0IG9ubHkgb24gdGhlIFgtYXhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmxwYXJhbV9yYXcuRGVyZWYoMjAsIDQpLnRvQnVmZmVyKCkud3JpdGVJbnQzMkxFKHRoaXMuX29wdGlvbnMud2luZG93LnkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9KTsNCg0KICAgIHJldHVybiAocmV0KTsNCn0NCg0KDQpmdW5jdGlvbiB4X25vdGlmeWJhcl9jaGVjayh0aXRsZSkNCnsNCiAgICBpZihyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuU2VsZigpIT0wIHx8IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCkgPT0gMCkNCiAgICB7DQogICAgICAgIHJldHVybiAoeF9ub3RpZnliYXIodGl0bGUpKTsgLy8gTm8gRGlzcGF0Y2hpbmcgbmVjZXNzYXJ5DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgIC8vIFdlIGFyZSByb290LCBzbyB3ZSBzaG91bGQgdHJ5IHRvIHNwYXduIGEgY2hpbGQgaW50byB0aGUgdXNlcidzIGRlc2t0b3ANCiAgICAgICAgdmFyIHVpZCA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5jb25zb2xlVWlkKCk7DQogICAgICAgIHZhciB4aW5mbyA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLmdldFhJbmZvKHVpZCk7DQogICAgICAgIA0KICAgICAgICBpZiAoIXhpbmZvKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aHJvdygnWFNlcnZlciBJbml0aWFsaXphdGlvbiBFcnJvcicpDQogICAgICAgIH0NCiAgICAgICAgdmFyIHJldCA9IHt9Ow0KICAgICAgICB2YXIgc2NyaXB0ID0gQnVmZmVyLmZyb20oInJlcXVpcmUoJ25vdGlmeWJhci1kZXNrdG9wJykoJyIgKyB0aXRsZSArICInKS5vbignY2xvc2UnLCBmdW5jdGlvbigpe3Byb2Nlc3MuZXhpdCgpO30pOyIpLnRvU3RyaW5nKCdiYXNlNjQnKTsNCg0KICAgICAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgICAgICAuY3JlYXRlRXZlbnQoJ2Nsb3NlJykNCiAgICAgICAgICAgIC5hZGRNZXRob2QoJ2Nsb3NlJywgZnVuY3Rpb24gY2xvc2UoKSB7IHRoaXMuY2hpbGQua2lsbCgpOyB9KTsNCg0KICAgICAgICByZXQuY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUocHJvY2Vzcy5leGVjUGF0aCwgW3Byb2Nlc3MuZXhlY1BhdGguc3BsaXQoJy8nKS5wb3AoKSwgJy1iNjRleGVjJywgc2NyaXB0XSwgeyB1aWQ6IHVpZCwgZW52OiB4aW5mby5leHBvcnRFbnYoKSB9KTsNCiAgICAgICAgcmV0LmNoaWxkLnBhcmVudCA9IHJldDsNCiAgICAgICAgcmV0LmNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KICAgICAgICByZXQuY2hpbGQuc3RkZXJyLm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgfSk7DQogICAgICAgIHJldC5jaGlsZC5vbignZXhpdCcsIGZ1bmN0aW9uIChjb2RlKSB7IHRoaXMucGFyZW50LmVtaXQoJ2Nsb3NlJywgY29kZSk7IH0pOw0KDQogICAgICAgIHJldHVybiAocmV0KTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIHhfbm90aWZ5YmFyKHRpdGxlKQ0Kew0KICAgIHJldCA9IHsgX09iamVjdElEOiAnbm90aWZ5YmFyLWRlc2t0b3AuWCcsIHRpdGxlOiB0aXRsZSwgX3dpbmRvd3M6IFtdLCBfcHJvbWlzZTogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuZ2V0SW5mbygpLCBtb25pdG9yczogW10sIHdvcmtzcGFjZXM6IHt9IH07DQoNCiAgICByZXQuX3Byb21pc2Uubm90aWZ5YmFyID0gcmV0Ow0KICAgIHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlci5jYWxsKHJldCwgdHJ1ZSkNCiAgICAgICAgLmNyZWF0ZUV2ZW50KCdjbG9zZScpDQogICAgICAgIC5hZGRNZXRob2QoJ2Nsb3NlJywgZnVuY3Rpb24gY2xvc2UoKQ0KICAgICAgICB7DQogICAgICAgIH0pOw0KDQogICAgcmV0Ll9wcm9taXNlLmNyZWF0ZUJhcnMgPSBmdW5jdGlvbiAobSkNCiAgICB7DQogICAgICAgIGZvciAodmFyIGkgaW4gbSkNCiAgICAgICAgew0KICAgICAgICAgICAgbW9uV2lkdGggPSAobVtpXS5yaWdodCAtIG1baV0ubGVmdCk7DQogICAgICAgICAgICBtb25IZWlnaHQgPSAobVtpXS5ib3R0b20gLSBtW2ldLnRvcCk7DQogICAgICAgICAgICBiYXJXaWR0aCA9IE1hdGguZmxvb3IobW9uV2lkdGggKiAwLjMwKTsNCiAgICAgICAgICAgIGJhckhlaWdodCA9IE1hdGguZmxvb3IobW9uSGVpZ2h0ICogMC4wMzUpOw0KICAgICAgICAgICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihtb25XaWR0aCAqIDAuNTApIC0gTWF0aC5mbG9vcihiYXJXaWR0aCAqIDAuNTApOw0KICAgICAgICAgICAgc3RhcnQgPSBtW2ldLmxlZnQgKyBvZmZzZXQ7DQoNCiAgICAgICAgICAgIHZhciB3aGl0ZSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWFdoaXRlUGl4ZWwobVtpXS5kaXNwbGF5LCBtW2ldLnNjcmVlbklkKS5WYWw7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wdXNoKHsNCiAgICAgICAgICAgICAgICByb290OiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhSb290V2luZG93KG1baV0uZGlzcGxheSwgbVtpXS5zY3JlZW5JZCksDQogICAgICAgICAgICAgICAgZGlzcGxheTogbVtpXS5kaXNwbGF5LCBpZDogbVtpXS5zY3JlZWRJZA0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIgPSByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhDcmVhdGVTaW1wbGVXaW5kb3cobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkucm9vdCwgc3RhcnQsIDAsIGJhcldpZHRoLCAxLCAwLCB3aGl0ZSwgd2hpdGUpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YU3RvcmVOYW1lKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJykuQ3JlYXRlVmFyaWFibGUodGhpcy5ub3RpZnliYXIudGl0bGUpKTsNCg0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuc2V0V2luZG93U2l6ZUhpbnRzKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgc3RhcnQsIDAsIGJhcldpZHRoLCAxLCBiYXJXaWR0aCwgMSwgYmFyV2lkdGgsIDEpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuaGlkZVdpbmRvd0ljb24obVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkucm9vdCwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhcik7DQoNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLnNldEFsbG93ZWRBY3Rpb25zKG1baV0uZGlzcGxheSwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhciwgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTU9USUZfRkxBR1MuTVdNX0ZVTkNfQ0xPU0UpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuc2V0QWx3YXlzT25Ub3AobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkucm9vdCwgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLm5vdGlmeWJhcik7DQoNCg0KICAgICAgICAgICAgdmFyIHdtX2RlbGV0ZV93aW5kb3dfYXRvbSA9IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWEludGVybkF0b20obVtpXS5kaXNwbGF5LCByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSgnV01fREVMRVRFX1dJTkRPVycpLCAwKS5WYWw7DQogICAgICAgICAgICB2YXIgYXRvbXMgPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSg0KTsNCiAgICAgICAgICAgIGF0b21zLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh3bV9kZWxldGVfd2luZG93X2F0b20pOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YU2V0V01Qcm90b2NvbHMobVtpXS5kaXNwbGF5LCB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkubm90aWZ5YmFyLCBhdG9tcywgMSk7DQoNCiAgICAgICAgICAgIHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWE1hcFdpbmRvdyhtW2ldLmRpc3BsYXksIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5ub3RpZnliYXIpOw0KICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YRmx1c2gobVtpXS5kaXNwbGF5KTsNCg0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudCA9IHJlcXVpcmUoJ0Rlc2NyaXB0b3JFdmVudHMnKS5hZGREZXNjcmlwdG9yKHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLl9YMTEuWENvbm5lY3Rpb25OdW1iZXIobVtpXS5kaXNwbGF5KS5WYWwsIHsgcmVhZHNldDogdHJ1ZSB9KTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQuYXRvbSA9IHdtX2RlbGV0ZV93aW5kb3dfYXRvbTsNCiAgICAgICAgICAgIHRoaXMubm90aWZ5YmFyLl93aW5kb3dzLnBlZWsoKS5EZXNjcmlwdG9yRXZlbnQucmV0ID0gdGhpcy5ub3RpZnliYXI7DQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci5fd2luZG93cy5wZWVrKCkuRGVzY3JpcHRvckV2ZW50Ll9kaXNwbGF5ID0gbVtpXS5kaXNwbGF5Ow0KICAgICAgICAgICAgdGhpcy5ub3RpZnliYXIuX3dpbmRvd3MucGVlaygpLkRlc2NyaXB0b3JFdmVudC5vbigncmVhZHNldCcsIGZ1bmN0aW9uIChmZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB2YXIgWEUgPSByZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5DcmVhdGVWYXJpYWJsZSgxMDI0KTsNCiAgICAgICAgICAgICAgICB3aGlsZSAocmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YUGVuZGluZyh0aGlzLl9kaXNwbGF5KS5WYWwpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5fWDExLlhOZXh0RXZlbnRTeW5jKHRoaXMuX2Rpc3BsYXksIFhFKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKFhFLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkgPT0gQ2xpZW50TWVzc2FnZSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaWVudFR5cGUgPSBYRS5EZXJlZihyZXF1aXJlKCdfR2VuZXJpY01hcnNoYWwnKS5Qb2ludGVyU2l6ZSA9PSA4ID8gNTYgOiAyOCwgNCkudG9C", 16000); + memcpy_s(_notifybardesktop + 16000, 2836, "dWZmZXIoKS5yZWFkVUludDMyTEUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnRUeXBlID09IHRoaXMuYXRvbSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCdEZXNjcmlwdG9yRXZlbnRzJykucmVtb3ZlRGVzY3JpcHRvcihmZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuX1gxMS5YQ2xvc2VEaXNwbGF5KHRoaXMuX2Rpc3BsYXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5lbWl0KCdjbG9zZScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5fd2luZG93cy5jbGVhcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICB9Ow0KICAgIHJldC5fcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChtKQ0KICAgIHsNCiAgICAgICAgdmFyIG9mZnNldDsNCiAgICAgICAgdmFyIGJhcldpZHRoLCBtb25XaWR0aCwgb2Zmc2V0LCBiYXJIZWlnaHQsIG1vbkhlaWdodDsNCiAgICAgICAgdGhpcy5ub3RpZnliYXIubW9uaXRvcnMgPSBtOw0KICAgICAgICBpZiAobS5sZW5ndGggPiAwKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgd3MgPSBtWzBdLmRpc3BsYXkuZ2V0Q3VycmVudFdvcmtzcGFjZSgpOw0KDQogICAgICAgICAgICB0aGlzLm5vdGlmeWJhci53b3Jrc3BhY2VzW3dzXSA9IHRydWU7DQogICAgICAgICAgICB0aGlzLmNyZWF0ZUJhcnMobSk7DQogICAgICAgICAgICBtWzBdLmRpc3BsYXkuX25vdGlmeUJhciA9IHRoaXMubm90aWZ5YmFyOw0KICAgICAgICAgICAgbVswXS5kaXNwbGF5Lm9uKCd3b3Jrc3BhY2VDaGFuZ2VkJywgZnVuY3Rpb24gKHcpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYoIXRoaXMuX25vdGlmeUJhci53b3Jrc3BhY2VzW3ddKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5QmFyLndvcmtzcGFjZXNbd10gPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlCYXIuX3Byb21pc2UuY3JlYXRlQmFycyh0aGlzLl9ub3RpZnlCYXIubW9uaXRvcnMpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgDQogICAgfSk7DQogICAgcmV0dXJuIChyZXQpOw0KfQ0KDQpmdW5jdGlvbiBtYWNvc19tZXNzYWdlYm94KHRpdGxlKQ0Kew0KICAgIHZhciByZXQgPSB7fTsNCiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbChyZXQsIHRydWUpDQogICAgICAgIC5jcmVhdGVFdmVudCgnY2xvc2UnKQ0KICAgICAgICAuYWRkTWV0aG9kKCdjbG9zZScsIGZ1bmN0aW9uIGNsb3NlKCkgeyB0aGlzLl9tZXNzYWdlQm94LmNsb3NlKCk7IH0pOw0KICAgIHJldC5fbWVzc2FnZUJveCA9IHJlcXVpcmUoJ21lc3NhZ2UtYm94JykuY3JlYXRlKCcnLCB0aXRsZSwgMCwgWydEaXNjb25uZWN0J10pOw0KICAgIHJldC5fbWVzc2FnZUJveC50aGF0ID0gcmV0Ow0KICAgIHJldC5fbWVzc2FnZUJveC50aGVuKGZ1bmN0aW9uICgpIHsgdGhpcy50aGF0LmVtaXQoJ2Nsb3NlJyk7IH0sIGZ1bmN0aW9uICgpIHsgdGhpcy50aGF0LmVtaXQoJ2Nsb3NlJyk7IH0pOw0KICAgIHJldHVybiAocmV0KTsNCn0NCg0Kc3dpdGNoKHByb2Nlc3MucGxhdGZvcm0pDQp7DQogICAgY2FzZSAnd2luMzInOg0KICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd3Nfbm90aWZ5YmFyX2NoZWNrOw0KICAgICAgICBtb2R1bGUuZXhwb3J0cy5zeXN0ZW0gPSB3aW5kb3dzX25vdGlmeWJhcl9zeXN0ZW07DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgJ2xpbnV4JzoNCiAgICBjYXNlICdmcmVlYnNkJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB4X25vdGlmeWJhcl9jaGVjazsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAnZGFyd2luJzoNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtYWNvc19tZXNzYWdlYm94Ow0KICAgICAgICBicmVhazsNCn0NCg0KDQo=", 2836); + ILibBase64DecodeEx((unsigned char*)_notifybardesktop, 18836, (unsigned char*)_notifybardesktop + 18836); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "notifybar-desktop"); duk_push_string(ctx, _notifybardesktop + 18836); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_notifybardesktop); diff --git a/modules/message-box.js b/modules/message-box.js index 3937791..9a3d460 100644 --- a/modules/message-box.js +++ b/modules/message-box.js @@ -450,7 +450,20 @@ function macos_messageBox() { // Start Local Server var ret = this._initIPCBase(); - ret.title = title; ret.caption = caption; ret.timeout = timeout; ret.layout = layout; + ret.title = title; ret.caption = caption; ret.timeout = timeout; + if (layout == null) + { + ret.layout = ['Yes', 'No']; + } + else if(typeof(layout)!='object') + { + ret.layout = ['OK']; + } + else + { + ret.layout = layout; + Object.defineProperty(ret.layout, "user", { value: true }); + } ret.server = this.startMessageServer(ret); ret.server.ret = ret; ret.server.on('connection', function (c) @@ -473,7 +486,7 @@ function macos_messageBox() } else { - if (p.button == 'Yes' || p.button == 'OK') + if (p.button == 'Yes' || p.button == 'OK' || this.promise.layout.user) { this.promise._res(p.button); } @@ -485,9 +498,16 @@ function macos_messageBox() break; } }); - c.write(translateObject({ command: 'DIALOG', title: this.ret.title, caption: this.ret.caption, icon: 'caution', buttons: this.ret.layout==null?['"Yes"', '"No"']:['"OK"'], buttonDefault: this.ret.layout==null?2:1, timeout: this.ret.timeout })); + for (var x in this.ret.layout) + { + this.ret.layout[x] = '"' + this.ret.layout[x] + '"'; + } + c.write(translateObject({ command: 'DIALOG', title: this.ret.title, caption: this.ret.caption, icon: 'caution', buttons: this.ret.layout, buttonDefault: this.ret.layout[this.ret.layout.length-1], timeout: this.ret.timeout })); }); - + ret.close = function close() + { + if (this.server) { this.server.close(); } + }; return (ret); }; this.lock = function lock() @@ -598,31 +618,57 @@ function macos_messageBox() case 'DIALOG': var timeout = p.timeout ? (' giving up after ' + p.timeout) : ''; var icon = p.icon ? ('with icon ' + p.icon) : ''; + var buttons = p.buttons ? ('buttons {' + p.buttons.toString() + '}') : ''; if (p.buttonDefault != null) { buttons += (' default button ' + p.buttonDefault) } this._shell = require('child_process').execFile('/bin/sh', ['sh']); + this._shell.that = this; this._shell.stdout.str = ''; this._shell.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); this._shell.stderr.str = ''; this._shell.stderr.on('data', function (chunk) { this.str += chunk.toString(); }); this._shell.stdin.write('osascript -e \'tell current application to display dialog "' + p.caption + '" with title "' + p.title + '" ' + icon + ' ' + buttons + timeout + '\' | awk \'{ c=split($0, tokens, ","); split(tokens[1], val, ":"); if(c==1) { print val[2] } else { split(tokens[2], gu, ":"); if(gu[2]=="true") { print "_TIMEOUT_" } else { print val[2] } } }\'\nexit\n'); - this._shell.waitExit(); - if (this._shell.stderr.str != '' && !this._shell.stderr.str.includes('OpenGL')) + this._shell.on('exit', function () { - this.end(translateObject({ command: 'ERROR', reason: this._shell.stderr.str })); - } - else - { - if (this._shell.stdout.str.trim() == '_TIMEOUT_') + if (this.stderr.str != '' && !this.stderr.str.includes('OpenGL')) { - this.end(translateObject({ command: 'DIALOG', timeout: true })); + this.that.end(translateObject({ command: 'ERROR', reason: this.stderr.str })); } else { - this.end(translateObject({ command: 'DIALOG', button: this._shell.stdout.str.trim() })); + if (this.stdout.str.trim() == '_TIMEOUT_') + { + this.that.end(translateObject({ command: 'DIALOG', timeout: true })); + } + else + { + this.that.end(translateObject({ command: 'DIALOG', button: this.stdout.str.trim() })); + } } - } + this.that._shell = null; + }); + this.on('close', function () + { + if (this._shell) { this._shell.kill(); } + }); + + //this._shell.waitExit(); + //if (this._shell.stderr.str != '' && !this._shell.stderr.str.includes('OpenGL')) + //{ + // this.end(translateObject({ command: 'ERROR', reason: this._shell.stderr.str })); + //} + //else + //{ + // if (this._shell.stdout.str.trim() == '_TIMEOUT_') + // { + // this.end(translateObject({ command: 'DIALOG', timeout: true })); + // } + // else + // { + // this.end(translateObject({ command: 'DIALOG', button: this._shell.stdout.str.trim() })); + // } + //} break; default: break; diff --git a/modules/notifybar-desktop.js b/modules/notifybar-desktop.js index a114318..6f90416 100644 --- a/modules/notifybar-desktop.js +++ b/modules/notifybar-desktop.js @@ -291,7 +291,17 @@ function x_notifybar(title) return (ret); } - +function macos_messagebox(title) +{ + var ret = {}; + require('events').EventEmitter.call(ret, true) + .createEvent('close') + .addMethod('close', function close() { this._messageBox.close(); }); + ret._messageBox = require('message-box').create('', title, 0, ['Disconnect']); + ret._messageBox.that = ret; + ret._messageBox.then(function () { this.that.emit('close'); }, function () { this.that.emit('close'); }); + return (ret); +} switch(process.platform) { @@ -303,6 +313,9 @@ switch(process.platform) case 'freebsd': module.exports = x_notifybar_check; break; + case 'darwin': + module.exports = macos_messagebox; + break; }