From 15fdb323e133f3eb5d4a03528f3d10bc450463ef Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Fri, 25 Oct 2019 09:47:01 -0700 Subject: [PATCH] 1. Updated getLibInfo to include libc version and hwcap 2. Updated X11 Library finder, to skip hw specific libraries if more than one specified --- microscript/ILibDuktape_Polyfills.c | 11 ++--- modules/monitor-info.js | 70 +++++++++++++++++------------ 2 files changed, 47 insertions(+), 34 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 7d9b863..e12851f 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2015,11 +2015,11 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) #endif // monitor-info: Refer to modules/monitor-info.js - char *_monitorinfo = ILibMemory_Allocate(54153, 0, NULL, NULL); - memcpy_s(_monitorinfo + 0, 30944, "LyoNCkNvcHlyaWdodCAyMDE4IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgcHJvbWlzZSA9IHJlcXVpcmUoJ3Byb21pc2UnKTsNCnZhciBQUG9zaXRpb24gPSA0Ow0KdmFyIFBTaXplID0gODsNCnZhciBQTWluU2l6ZSA9IDEgPDwgNDsNCnZhciBQTWF4U2l6ZSA9IDEgPDwgNTsNCnZhciBfTkVUX1dNX1NUQVRFX1JFTU9WRSA9IDA7ICAgIC8vIHJlbW92ZS91bnNldCBwcm9wZXJ0eQ0KdmFyIF9ORVRfV01fU1RBVEVfQUREID0gMTsgICAgLy8gYWRkL3NldCBwcm9wZXJ0eQ0KdmFyIF9ORVRfV01fU1RBVEVfVE9HR0xFID0gMjsgICAgLy8gdG9nZ2xlIHByb3BlcnR5DQp2YXIgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrID0gKDEgPDwgMjApOw0KdmFyIFN1YnN0cnVjdHVyZU5vdGlmeU1hc2sgPSAoMSA8PCAxOSk7DQp2YXIgUHJvcE1vZGVSZXBsYWNlID0gMDsNCnZhciBYQV9BVE9NID0gNDsNCnZhciBNV01fSElOVFNfRlVOQ1RJT05TID0gKDEgPDwgMCk7DQp2YXIgTVdNX0hJTlRTX0RFQ09SQVRJT05TID0gKDEgPDwgMSk7DQp2YXIgQ2xpZW50TWVzc2FnZSA9IDMzOw0KDQpmdW5jdGlvbiBnZXRMaWJJbmZvKGxpYm5hbWUpDQp7DQogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2xpbnV4JykgeyB0aHJvdyAoJ09ubHkgc3VwcG9ydGVkIG9uIGxpbnV4Jyk7IH0NCg0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOw0KICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBsZGNvbmZpZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgIHZhciBsZGNvbmZpZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOw0KDQogICAgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOw0KICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUobGRjb25maWcgKyAiIC1wIHwgZ3JlcCAnIiArIGxpYm5hbWUgKyAiLnNvLicgfCB0ciAnXFxuJyAnXicgfCBhd2sgLUZeICd7IHByaW50ZiBcIltcIjsgZm9yKGk9MTtpPD1ORjsrK2kpIHsiICsgJyBzcGxpdCgkaSwgcGxhdCwgIikiKTsgc3BsaXQocGxhdFsxXSwgcGxhdDIsICIoIik7IHNwbGl0KHBsYXQyWzJdLCBpZm8sICIsIik7IHg9c3BsaXQoJGksIHRvaywgIiAiKTsgaWYodG9rWzFdIT0iIikgeyBwcmludGYgIiVze1xcImxpYlxcIjogXFwiJXNcXCIsIFxcInBhdGhcXCI6IFxcIiVzXFwiLCBcXCJpbmZvXFwiOiBcXCIlc1xcIn0iLCAoaSE9MT8iLCI6IiIpLCB0b2tbMV0sIHRva1t4XSwgaWZvWzJdOyB9fSBwcmludGYgIl0iOyB9XCdcbmV4aXRcbicpOw0KDQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICB2YXIgdiA9IEpTT04ucGFyc2UoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkpOw0KICAgIHJldHVybiAodik7DQp9DQoNCmZ1bmN0aW9uIG1vbml0b3JpbmZvKCkNCnsNCiAgICB0aGlzLl9PYmplY3RJRCA9ICdtb25pdG9yLWluZm8nOw0KICAgIHRoaXMuX2dtID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7DQoNCiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnd2luMzInKQ0KICAgIHsNCiAgICAgICAgdGhpcy5fdXNlcjMyID0gdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoJ3VzZXIzMi5kbGwnKTsNCiAgICAgICAgdGhpcy5fdXNlcjMyLkNyZWF0ZU1ldGhvZCgnRW51bURpc3BsYXlNb25pdG9ycycpOw0KICAgICAgICB0aGlzLl9rZXJuZWwzMiA9IHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsNCiAgICAgICAgdGhpcy5fa2VybmVsMzIuQ3JlYXRlTWV0aG9kKCdHZXRMYXN0RXJyb3InKTsNCg0KICAgICAgICB0aGlzLmdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGluZm8gPSB0aGlzOw0KICAgICAgICAgICAgcmV0dXJuIChuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZXIsIHJlamVjdG9yKSB7DQogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8gPSB7IHJlc29sdmVyOiByZXNvbHZlciwgcmVqZWN0b3I6IHJlamVjdG9yLCBzZWxmOiBpbmZvLCBjYWxsYmFjazogaW5mby5fZ20uR2V0R2VuZXJpY0dsb2JhbENhbGxiYWNrKDQpIH07DQogICAgICAgICAgICAgICAgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2suaW5mbyA9IHRoaXMuX21vbml0b3JpbmZvOw0KICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmR3RGF0YSA9IGluZm8uX2dtLk9iamVjdFRvUHRyKHRoaXMuX21vbml0b3JpbmZvKTsNCg0KICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLnJlc3VsdHMgPSBbXTsNCiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5vbignR2xvYmFsQ2FsbGJhY2snLCBmdW5jdGlvbiBPbk1vbml0b3JJbmZvKGhtb24sIGhkYywgciwgdXNlcikgew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5PYmplY3RUb1B0cl9WZXJpZnkodGhpcy5pbmZvLCB1c2VyKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJiID0gci5EZXJlZigwLCAxNikudG9CdWZmZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHsgbGVmdDogcmIucmVhZEludDMyTEUoMCksIHRvcDogcmIucmVhZEludDMyTEUoNCksIHJpZ2h0OiByYi5yZWFkSW50MzJMRSg4KSwgYm90dG9tOiByYi5yZWFkSW50MzJMRSgxMikgfSk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gdGhpcy5pbmZvLnNlbGYuX2dtLkNyZWF0ZUludGVnZXIoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHIuVmFsID0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgIGlmIChpbmZvLl91c2VyMzIuRW51bURpc3BsYXlNb25pdG9ycygwLCAwLCB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjaywgdGhpcy5fbW9uaXRvcmluZm8uZHdEYXRhKS5WYWwgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICByZWplY3RvcignTGFzdEVycm9yPScgKyBpbmZvLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IoKS5WYWwpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICByZXNvbHZlcih0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5yZXN1bHRzKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIH0pKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQogICAgew0KICAgICAgICAvLyBGaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvLCBpcyBkZXRlcm1pbmUgd2hlcmUgdGhlIFgxMSBsaWJyYXJpZXMgYXJlDQoNCiAgICAgICAgLy8gU3VmZmljaWVudCBhY2Nlc3MgcmlnaHRzIHRvIHVzZSBsZGNvbmZpZw0KICAgICAgICB2YXIgeDExaW5mbyA9IGdldExpYkluZm8oJ2xpYlgxMScpOw0KICAgICAgICB2YXIgeHRzdGluZm8gPSBnZXRMaWJJbmZvKCdsaWJYdHN0Jyk7DQogICAgICAgIHZhciB4ZXh0aW5mbyA9IGdldExpYkluZm8oJ2xpYlhleHQnKTsNCiAgICAgICAgdmFyIHhmaXhlc2luZm8gPSBnZXRMaWJJbmZvKCdsaWJYZml4ZXMnKTsNCiAgICAgICAgdmFyIGl4Ow0KDQogICAgICAgIGZvciAoaXggaW4geDExaW5mbykNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeDExaW5mb1tpeF0ucGF0aCk7DQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiB4MTFpbmZvW2l4XS5wYXRoIH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGV4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZvciAoaXggaW4geHRzdGluZm8pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHh0c3RpbmZvW2l4XS5wYXRoKTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHh0c3RpbmZvW2l4XS5wYXRoIH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGV4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZvciAoaXggaW4geGV4dGluZm8pDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHhleHRpbmZvW2l4XS5wYXRoKTsNCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHhleHRpbmZvW2l4XS5wYXRoIH0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2F0Y2ggKGV4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGZvciAoaXggaW4geGZpeGVzaW5mbykNCiAgICAgICAgew0KICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeGZpeGVzaW5mb1tpeF0ucGF0aCk7DQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHhmaXhlc2luZm9baXhdLnBhdGggfSk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjYXRjaCAoZXgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICB9DQogICAgICAgIH0gICANCg0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFMSUInXSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFMSUInXSB9KTsgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFUU1QnXSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFUU1QnXSB9KTsgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFFWFQnXSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFFWFQnXSB9KTsgfQ0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFGSVhFUyddKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiBwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRklYRVMnXSB9KTsgfQ0KICAgICAgICB9DQogICAgICAgIGNhdGNoKGV4KQ0KICAgICAgICB7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpDQogICAgew0KCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWDExJylbMF0/cmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYMTEnKVswXS5sb2NhdGlvbjogdW5kZWZpbmVkIH0pOw0KCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdLmxvY2F0aW9uOnVuZGVmaW5lZCB9KTsNCgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhleHQnKVswXSA/IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGV4dCcpWzBdLmxvY2F0aW9uIDogdW5kZWZpbmVkIH0pOw0KCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUZJWEVTJywgeyB2YWx1ZTogcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYZml4ZXMnKVswXSA/IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGZpeGVzJylbMF0ubG9jYXRpb24gOiB1bmRlZmluZWQgfSk7DQogICAgfQ0KDQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnbGludXgnIHx8IHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnKQ0KICAgIHsNCiAgICAgICAgdGhpcy5NT1RJRl9GTEFHUyA9IA0KICAgICAgICB7DQogICAgICAgICAgICBNV01fRlVOQ19BTEwgICAgICAgIDogKDEgPDwgMCkgLA0KICAgICAgICAgICAgTVdNX0ZVTkNfUkVTSVpFICAgICA6ICgxIDw8IDEpICwNCiAgICAgICAgICAgIE1XTV9GVU5DX01PVkUgICAgICAgOiAoMSA8PCAyKSAsDQogICAgICAgICAgICBNV01fRlVOQ19NSU5JTUlaRSAgIDogKDEgPDwgMykgLA0KICAgICAgICAgICAgTVdNX0ZVTkNfTUFYSU1JWkUgICA6ICgxIDw8IDQpICwNCiAgICAgICAgICAgIE1XTV9GVU5DX0NMT1NFICAgICAgOiAoMSA8PCA1KSANCiAgICAgICAgfTsNCg0KDQogICAgICAgIGlmICh0aGlzLkxvY2F0aW9uX1gxMUxJQiAmJiB0aGlzLkxvY2F0aW9uX1gxMVRTVCAmJiB0aGlzLkxvY2F0aW9uX1gxMUVYVCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIGNoID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uICgpIHsgfSk7DQogICAgICAgICAgICBjaC5zdGRvdXQuc3RyID0gJyc7IGNoLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgICAgICAgICBjaC5zdGRpbi53cml0ZSgncHMgLWUgfCBncmVwIFhcbmV4aXRcbicpOw0KICAgICAgICAgICAgY2gud2FpdEV4aXQoKTsNCiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAna3ZtX3gxMV9zdXBwb3J0JywgeyB2YWx1ZTogY2guc3Rkb3V0LnN0ci50cmltKCkgPT0gJycgPyBmYWxzZSA6IHRydWUgfSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2t2bV94MTFfc3VwcG9ydCcsIHsgdmFsdWU6IGZhbHNlIH0pOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAodGhpcy5Mb2NhdGlvbl9YMTFMSUIpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRoaXMuX1gxMSA9IHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHRoaXMuTG9jYXRpb25fWDExTElCKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDaGFuZ2VQcm9wZXJ0eScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENsb3NlRGlzcGxheScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENvbm5lY3Rpb25OdW1iZXInKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDb252ZXJ0U2VsZWN0aW9uJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlR0MnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVXaW5kb3cnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVTaW1wbGVXaW5kb3cnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEZWZhdWx0Q29sb3JtYXAnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hEZWZhdWx0U2NyZWVuJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVzdHJveVdpbmRvdycpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERyYXdMaW5lJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGlzcGxheUhlaWdodCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERpc3BsYXlXaWR0aCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZldGNoTmFtZScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEZsdXNoJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRnJlZScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWENyZWF0ZUdDJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYR2V0QXRvbU5hbWUnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hHZXRXaW5kb3dQcm9wZXJ0eScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEludGVybkF0b20nKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hNYXBXaW5kb3cnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoeyBtZXRob2Q6ICdYTmV4dEV2ZW50JywgdGhyZWFkRGlzcGF0Y2g6IHRydWUgfSk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKHsgbWV0aG9kOiAnWE5leHRFdmVudCcsIG5ld05hbWU6ICdYTmV4dEV2ZW50U3luYycgfSk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYT3BlbkRpc3BsYXknKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hQZW5kaW5nJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYUm9vdFdpbmRvdycpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNlbGVjdElucHV0Jyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2NyZWVuQ291bnQnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTY3JlZW5PZkRpc3BsYXknKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZWxlY3RJbnB1dCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNlbmRFdmVudCcpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldEZvcmVncm91bmQnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRGdW5jdGlvbicpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldExpbmVBdHRyaWJ1dGVzJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0Tm9ybWFsSGludHMnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRTZWxlY3Rpb25Pd25lcicpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFN1YndpbmRvd01vZGUnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXRXTVByb3RvY29scycpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFN0b3JlTmFtZScpOw0KICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFN5bmMnKTsNCiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hCbGFja1BpeGVsJyk7DQogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYV2hpdGVQaXhlbCcpOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy5pc1VuaXR5ID0gZnVuY3Rpb24gaXNVbml0eSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHJldHVybiAocHJvY2Vzcy5lbnZbJ1hER19DVVJSRU5UX0RFU0tUT1AnXSA9PSAnVW5pdHknKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMudW5EZWNvcmF0ZVdpbmRvdyA9IGZ1bmN0aW9uIHVuRGVjb3JhdGVXaW5kb3coZGlzcGxheSwgd2luZG93KQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgTXdtSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg0MCk7DQogICAgICAgICAgICB2YXIgbXdtSGludHNQcm9wZXJ0eSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX01PVElGX1dNX0hJTlRTJyksIDApOw0KICAgICAgICAgICAgTXdtSGludHMuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDEgPDwgMSk7DQogICAgICAgICAgICB0aGlzLl9YMTEuWENoYW5nZVByb3BlcnR5KGRpc3BsYXksIHdpbmRvdywgbXdtSGludHNQcm9wZXJ0eSwgbXdtSGludHNQcm9wZXJ0eSwgMzIsIDAsIE13bUhpbnRzLCA1KTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLnNldEFsbG93ZWRBY3Rpb25zID0gZnVuY3Rpb24gc2V0QWxsb3dlZEFjdGlvbnMoZGlzcGxheSwgd2luZG93LCBmbGFncykNCiAgICAgICAgew0KICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICBNV01fSElOVFNfRlVOQ1RJT05TID0gKDFMIDw8IDApLA0KICAgICAgICAgICAgICAgIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICAoMUwgPDwgMSksDQoNCiAgICAgICAgICAgICAgICBNV01fRlVOQ19BTEwgPSAoMUwgPDwgMCksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfUkVTSVpFID0gKDFMIDw8IDEpLA0KICAgICAgICAgICAgICAgIE1XTV9GVU5DX01PVkUgPSAoMUwgPDwgMiksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTUlOSU1JWkUgPSAoMUwgPDwgMyksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTUFYSU1JWkUgPSAoMUwgPDwgNCksDQogICAgICAgICAgICAgICAgTVdNX0ZVTkNfQ0xPU0UgPSAoMUwgPDwgNSkNCiAgICAgICAgICAgICovDQoNCiAgICAgICAgICAgIHZhciBNd21IaW50cyA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDQwKTsNCiAgICAgICAgICAgIHZhciBtd21IaW50c1Byb3BlcnR5ID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTU9USUZfV01fSElOVFMnKSwgMCk7DQoNCiAgICAgICAgICAg", 16000); - memcpy_s(_monitorinfo + 16000, 14944, "IE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShNV01fSElOVFNfRlVOQ1RJT05TKTsNCiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoZmxhZ3MpOw0KDQogICAgICAgICAgICB0aGlzLl9YMTEuWENoYW5nZVByb3BlcnR5KGRpc3BsYXksIHdpbmRvdywgbXdtSGludHNQcm9wZXJ0eSwgbXdtSGludHNQcm9wZXJ0eSwgMzIsIFByb3BNb2RlUmVwbGFjZSwgTXdtSGludHMsIDUpOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuc2V0V2luZG93U2l6ZUhpbnRzID0gZnVuY3Rpb24gc2V0V2luZG93U2l6ZUhpbnRzKGRpc3BsYXksIHdpbmRvdywgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCkNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHNpemVIaW50cyA9IHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKDgwKTsNCiAgICAgICAgICAgIHZhciBzcGVjID0gUFBvc2l0aW9uIHwgUFNpemU7DQogICAgICAgICAgICBpZiAobWluV2lkdGggIT0gbnVsbCAmJiBtaW5IZWlnaHQgIT0gbnVsbCkgeyBzcGVjIHw9IFBNaW5TaXplOyB9DQogICAgICAgICAgICBpZiAobWF4V2lkdGggIT0gbnVsbCAmJiBtYXhIZWlnaHQgIT0gbnVsbCkgeyBzcGVjIHw9IFBNYXhTaXplOyB9DQoNCiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoc3BlYyk7DQogICAgICAgICAgICBzaXplSGludHMuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh4KTsNCiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSArIDQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh5KTsNCiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSArIDgsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh3aWR0aCk7DQogICAgICAgICAgICBzaXplSGludHMuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgKyAxMiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKGhlaWdodCk7DQogICAgICAgICAgICBpZiAobWluV2lkdGggIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgKyAxNiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1pbldpZHRoKTsgfQ0KICAgICAgICAgICAgaWYgKG1pbkhlaWdodCAhPSBudWxsKSB7IHNpemVIaW50cy5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSArIDIwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWluSGVpZ2h0KTsgfQ0KICAgICAgICAgICAgaWYgKG1heFdpZHRoICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplICsgMjQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShtYXhXaWR0aCk7IH0NCiAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgKyAyOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1heEhlaWdodCk7IH0NCg0KICAgICAgICAgICAgdGhpcy5fWDExLlhTZXROb3JtYWxIaW50cyhkaXNwbGF5LCB3aW5kb3csIHNpemVIaW50cyk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5zZXRBbHdheXNPblRvcCA9IGZ1bmN0aW9uIHNldEFsd2F5c09uVG9wKGRpc3BsYXksIHJvb3RXaW5kb3csIHdpbmRvdykNCiAgICAgICAgew0KICAgICAgICAgICAgdmFyIHdtTmV0V21TdGF0ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURScpLCAxKTsNCiAgICAgICAgICAgIHZhciB3bVN0YXRlQWJvdmUgPSB0aGlzLl9YMTEuWEludGVybkF0b20oZGlzcGxheSwgdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoJ19ORVRfV01fU1RBVEVfQUJPVkUnKSwgMSk7DQoNCiAgICAgICAgICAgIHZhciB4Y2xpZW50ID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoOTYpOw0KICAgICAgICAgICAgeGNsaWVudC5EZXJlZigwLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzMpOyAgICAgICAgICAgICAgICAgICAvLyBDbGllbnRNZXNzYWdlIHR5cGUNCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgPT0gOCA/IDQ4IDogMjQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMik7ICAgLy8gRm9ybWF0IDMyDQogICAgICAgICAgICB3bU5ldFdtU3RhdGUucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSA9PSA4ID8gNDAgOiAyMCwgdGhpcy5fZ20uUG9pbnRlclNpemUpLnRvQnVmZmVyKCkpOyAvLyBtZXNzYWdlX3R5cGUNCiAgICAgICAgICAgIHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgPT0gOCA/IDU2IDogMjgsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoX05FVF9XTV9TVEFURV9BREQpOyAgIC8vIGRhdGEubFswXQ0KICAgICAgICAgICAgd21TdGF0ZUFib3ZlLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgPT0gOCA/IDY0IDogMzIsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsgIC8vIGRhdGEubFsxXQ0KICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgPT0gOCA/IDMyIDogMTYsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsgICAgICAgLy8gd2luZG93DQogICAgICAgICAgICB0aGlzLl9YMTEuWFNlbmRFdmVudChkaXNwbGF5LCByb290V2luZG93LCAwLCBTdWJzdHJ1Y3R1cmVSZWRpcmVjdE1hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrLCB4Y2xpZW50KTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmhpZGVXaW5kb3dJY29uID0gZnVuY3Rpb24gaGlkZVdpbmRvd0ljb24oZGlzcGxheSwgcm9vdFdpbmRvdywgd2luZG93KQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgd21OZXRXbVN0YXRlID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFJyksIDEpOw0KICAgICAgICAgICAgdmFyIHdtU3RhdGVTa2lwID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFX1NLSVBfVEFTS0JBUicpLCAxKTsNCg0KICAgICAgICAgICAgdmFyIHhjbGllbnQgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg5Nik7DQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsaWVudE1lc3NhZ2UgdHlwZQ0KICAgICAgICAgICAgeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZT09OD80ODoyNCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKDMyKTsgICAvLyBGb3JtYXQgMzINCiAgICAgICAgICAgIHdtTmV0V21TdGF0ZS5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplPT04PzQwOjIwLCB0aGlzLl9nbS5Qb2ludGVyU2l6ZSkudG9CdWZmZXIoKSk7IC8vIG1lc3NhZ2VfdHlwZQ0KICAgICAgICAgICAgeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZT09OD81NjoyOCwgdGhpcy5fZ20uUG9pbnRlclNpemUpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShfTkVUX1dNX1NUQVRFX0FERCk7ICAgLy8gZGF0YS5sWzBdDQogICAgICAgICAgICB3bVN0YXRlU2tpcC5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplPT04PzY0OjMyLCB0aGlzLl9nbS5Qb2ludGVyU2l6ZSkudG9CdWZmZXIoKSk7ICAvLyBkYXRhLmxbMV0NCg0KICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemU9PTg/MzI6MTYsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsgICAgICAgLy8gd2luZG93DQogICAgICAgICAgICB0aGlzLl9YMTEuWFNlbmRFdmVudChkaXNwbGF5LCByb290V2luZG93LCAwLCBTdWJzdHJ1Y3R1cmVSZWRpcmVjdE1hc2sgfCBTdWJzdHJ1Y3R1cmVOb3RpZnlNYXNrLCB4Y2xpZW50KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHRoaXMuZ2V0SW5mbyA9IGZ1bmN0aW9uIGdldEluZm8oKQ0KICAgICAgICB7DQogICAgICAgICAgICB2YXIgaW5mbyA9IHRoaXM7DQogICAgICAgICAgICB2YXIgcmV0ID0gbmV3IHByb21pc2UoZnVuY3Rpb24gKHJlcywgcmVqKSB7IHRoaXMuX3JlcyA9IHJlczsgdGhpcy5fcmVqID0gcmVqOyB9KTsNCiAgICAgICAgICAgIHJldC5wYXJlbnQgPSB0aGlzOw0KDQogICAgICAgICAgICBpZiAoIXByb2Nlc3MuZW52LlhBVVRIT1JJVFkgfHwgIXByb2Nlc3MuZW52LkRJU1BMQVkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdmFyIHhpbmZvID0gdGhpcy5nZXRYSW5mbyhyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0VWlkKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSkpOw0KICAgICAgICAgICAgICAgIHByb2Nlc3Muc2V0ZW52KCdYQVVUSE9SSVRZJywgeGluZm8ueGF1dGhvcml0eSk7DQogICAgICAgICAgICAgICAgcHJvY2Vzcy5zZXRlbnYoJ0RJU1BMQVknLCB4aW5mby5kaXNwbGF5KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBpbmZvLl9YMTEuWE9wZW5EaXNwbGF5KGluZm8uX2dtLkNyZWF0ZVZhcmlhYmxlKHByb2Nlc3MuZW52LkRJU1BMQVkpKTsNCiAgICAgICAgICAgIGlmIChkaXNwbGF5LlZhbCA9PSAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJlcXVpcmUoJ2ZzJykud3JpdGVGaWxlU3luYygnL3Zhci90bXAvYWdlbnRTbGF2ZScsICdYT3BlbkRpc3BsYXkgRmFpbGVkJywgeyBmbGFnczogJ2EnIH0pOw0KICAgICAgICAgICAgICAgIHJldC5fcmVqKCdYT3BlbkRpc3BsYXkgRmFpbGVkJyk7DQogICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB2YXIgc2NyZWVuQ291bnQgPSBpbmZvLl9YMTEuWFNjcmVlbkNvdW50KGRpc3BsYXkpLlZhbDsNCiAgICAgICAgICAgIHZhciBpZm8gPSBbXTsNCiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8c2NyZWVuQ291bnQ7KytpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBzY3JlZW4gPSBpbmZvLl9YMTEuWFNjcmVlbk9mRGlzcGxheShkaXNwbGF5LCBpKTsNCiAgICAgICAgICAgICAgICBpZm8ucHVzaCh7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IGluZm8uX1gxMS5YRGlzcGxheVdpZHRoKGRpc3BsYXksIGkpLlZhbCwgYm90dG9tOiBpbmZvLl9YMTEuWERpc3BsYXlIZWlnaHQoZGlzcGxheSwgaSkuVmFsLCBzY3JlZW46IHNjcmVlbiwgc2NyZWVuSWQ6IGksIGRpc3BsYXk6IGRpc3BsYXkgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXQuX3JlcyhpZm8pOw0KDQogICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5nZXRYSW5mbyA9IGZ1bmN0aW9uIGdldFhJbmZvKGNvbnNvbGV1aWQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHZhciByZXQgPSBudWxsOw0KICAgICAgICAgICAgdmFyIHVuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKGNvbnNvbGV1aWQpOw0KICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsNCiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsNCiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAiICsgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2ZyZWVic2QnPyItYXggIjoiIikgKyAiLWUgLW8gdXNlciIgKyAocHJvY2Vzcy5wbGF0Zm9ybT09J2xpbnV4Jz8iOjk5OSI6IiIpICsgIiAtbyB0dHkgLW8gY29tbWFuZCB8IGdyZXAgWCB8IGF3ayAneyBzcGxpdCgkMCwgYSwgXCItYXV0aFwiKTsgc3BsaXQoYVsyXSwgYiwgXCIgXCIpOyBpZigkMT09XCIiICsgdW5hbWUgKyAiXCIgJiYgYlsxXSE9XCJcIikgeyBwcmludGYgXCIlcywlcywlc1wiLCQxLCQyLGJbMV0gfSB9J1xuZXhpdFxuIik7DQogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KICAgICAgICAgICAgdmFyIHRva2VucyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnNwbGl0KCcsJyk7DQogICAgICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PSAzKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHJldCA9IHsgdHR5OiB0b2tlbnNbMV0sIHhhdXRob3JpdHk6IHRva2Vuc1syXSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKHJldCA9PSBudWxsKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIFRoaXMgTGludXggRGlzdHJvIGRvZXMgbm90IHNwYXduIGFuIFhTZXJ2ZXIgaW5zdGFuY2UgaW4gdGhlIHVzZXIgc2Vzc2lvbiwgdGhhdCBzcGVjaWZpZXMgdGhlIFhBVVRIT1JJVFkuDQogICAgICAgICAgICAgICAgLy8gU28gd2UncmUgZ29pbmcgdG8gYnJ1dGUgZm9yY2UgaXQsIGJ5IGVudW1lcmF0aW5nIGFsbCBwcm9jZXNzZXMgb3duZWQgYnkgdGhpcyB1c2VyLCBhbmQgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzDQogICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAiICsgKHByb2Nlc3MucGxhdGZvcm09PSdmcmVlYnNkJz8iLWF4ICI6IiIpICsgIi1lIC1vIHBpZCAtbyB1c2VyIHwgZ3JlcCAiICsgdW5hbWUgKyAiIHwgYXdrICd7IHByaW50ICQxIH0nXG5leGl0XG4iKTsNCiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOw0KDQogICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2hpbGQuc3Rkb3V0LnN0ci5zcGxpdCgnXG4nKTsNCiAgICAgICAgICAgICAgICBmb3IodmFyIG4gaW4gbGluZXMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7DQogICAgICAgICAgICAgICAgICAgIGlmKGxuLmxlbmd0aD4wKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRFbnZGcm9tUGlkKGxuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGUuWEFVVEhPUklUWSAmJiBlLkRJU1BMQVkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0geyB0dHk6ICc/JywgeGF1dGhvcml0eTogZS5YQVVUSE9SSVRZLCBkaXNwbGF5OiBlLkRJU1BMQVksIGV4cG9ydEVudjogZXhwb3J0RW52IH07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmKHJldCA9PSBudWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBYQVVUSE9SSVRZIGFuZCBESVNQTEFZLCBzbyBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LCBsZXRzIGp1c3QgbG9vayBmb3IgRElTUExBWQ0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIGxpbmVzKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG4gPSBsaW5lc1tuXS50cmltKCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG4ubGVuZ3RoID4gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS5nZXRFbnZGcm9tUGlkKGxuKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5ESVNQTEFZKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0geyB0dHk6ICc/JywgZGlzcGxheTogZS5ESVNQTEFZLCBleHBvcnRFbnY6IGV4cG9ydEVudiB9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZmluZCAkRElTUExBWSBieSBsb29raW5nIGF0IGFsbCB0aGUgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgdHR5IGFzIHRoZSBYU2VydmVyIGluc3RhbmNlIGZvciB0aGlzIHVzZXIgc2Vzc2lvbg0KICAgICAgICAgICAgICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7DQogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOw0KICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAtZSAtbyB0dHkgLW8gcGlkIC1vIHVzZXI6OTk5OSB8IGdyZXAgIiArIHJldC50dHkgKyAiIHwgZ3JlcCAiICsgdW5hbWUgKyAiIHwgYXdrICd7IHByaW50ICQyIH0nIFxuZXhpdFxuIik7DQogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsNCg0KICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7DQogICAgICAgICAgICAgICAgdmFyIHBzLCBwc3gsIHYsIHZzID0gMDsNCiAgICAgICAgICAgICAgICBmb3IodmFyIHggaW4gbGluZXMpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBpZihsaW5lc1t4XS50cmltKCkubGVuZ3RoPjApDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzID0gcmVxdWlyZSgnZnMnKS5yZWFkRmlsZVN5bmMoJy9wcm9jLycgKyBsaW5lc1t4XS50cmltKCkgKyAnL2Vudmlyb24nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKHBzZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIHZzID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihwc3g9MDtwc3g8cHMubGVuZ3RoOysrcHN4KQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwc1twc3hdID09IDApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gcHMuc2xpY2UodnMsIHBzeCkudG9TdHJpbmcoKS5zcGxpdCgnPScpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodlswXSA9PSAnRElTUExBWScpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5kaXNwbGF5ID0gdlsxXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cyA9IHBzeCArIDE7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIChyZXQpOw0KICAgICAgICB9Ow0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZXhwb3J0RW52KCkNCnsNCiAgICB2YXIgciA9DQogICAgICAgIHsNCiAgICAgICAgICAgIFhBVVRIT1JJVFk6IHRoaXMueGF1dGhvcml0eT90aGlzLnhhdXRob3JpdHk6IiIsIERJU1BMQVk6IHRoaXMuZGlzcGxheSwNCiAgICAgICAgICAgIExvY2F0aW9uX1gxMUxJQjogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTG9jYXRpb25fWDExTElCLA0KICAgICAgICAgICAgTG9jYXRpb25fWDExVFNUOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5Mb2NhdGlvbl9YMTFUU1QsDQogICAgICAgICAgICBMb2NhdGlvbl9YMTFFWFQ6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLkxvY2F0aW9uX1gxMUVYVCwNCiAgICAgICAgICAgIExvY2F0aW9uX1gxMUZJWEVTOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5Mb2NhdGlvbl9YMTFGSVhFUw0KICAgICAgICB9Ow0KICAgIHJldHVybiAocik7DQp9DQoNCmlmIChwcm9jZXNzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKQ0Kew0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1vbml0b3JpbmZvKCk7DQp9DQoNCmlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpDQp7DQogICAgbW9kdWxlLmV4cG9ydHMuZ2V0TGliSW5mbyA9IGdldExpYkluZm87DQp9DQo=", 14944); - ILibBase64DecodeEx((unsigned char*)_monitorinfo, 30944, (unsigned char*)_monitorinfo + 30944); - duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "monitor-info"); duk_push_string(ctx, _monitorinfo + 30944); + char *_monitorinfo = ILibMemory_Allocate(54866, 0, NULL, NULL); + memcpy_s(_monitorinfo + 0, 31352, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnZhciBwcm9taXNlID0gcmVxdWlyZSgncHJvbWlzZScpOwp2YXIgUFBvc2l0aW9uID0gNDsKdmFyIFBTaXplID0gODsKdmFyIFBNaW5TaXplID0gMSA8PCA0Owp2YXIgUE1heFNpemUgPSAxIDw8IDU7CnZhciBfTkVUX1dNX1NUQVRFX1JFTU9WRSA9IDA7ICAgIC8vIHJlbW92ZS91bnNldCBwcm9wZXJ0eQp2YXIgX05FVF9XTV9TVEFURV9BREQgPSAxOyAgICAvLyBhZGQvc2V0IHByb3BlcnR5CnZhciBfTkVUX1dNX1NUQVRFX1RPR0dMRSA9IDI7ICAgIC8vIHRvZ2dsZSBwcm9wZXJ0eQp2YXIgU3Vic3RydWN0dXJlUmVkaXJlY3RNYXNrID0gKDEgPDwgMjApOwp2YXIgU3Vic3RydWN0dXJlTm90aWZ5TWFzayA9ICgxIDw8IDE5KTsKdmFyIFByb3BNb2RlUmVwbGFjZSA9IDA7CnZhciBYQV9BVE9NID0gNDsKdmFyIE1XTV9ISU5UU19GVU5DVElPTlMgPSAoMSA8PCAwKTsKdmFyIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICgxIDw8IDEpOwp2YXIgQ2xpZW50TWVzc2FnZSA9IDMzOwoKZnVuY3Rpb24gZ2V0TGliSW5mbyhsaWJuYW1lKQp7CiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPSAnbGludXgnKSB7IHRocm93ICgnT25seSBzdXBwb3J0ZWQgb24gbGludXgnKTsgfQoKICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICBjaGlsZC5zdGRpbi53cml0ZSgid2hlcmVpcyBsZGNvbmZpZyB8IGF3ayAneyBwcmludCAkMiB9J1xuZXhpdFxuIik7CiAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgIHZhciBsZGNvbmZpZyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwoKICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgIGNoaWxkLnN0ZGluLndyaXRlKGxkY29uZmlnICsgIiAtcCB8IGdyZXAgJyIgKyBsaWJuYW1lICsgIi5zby4nIHwgdHIgJ1xcbicgJ14nIHwgYXdrIC1GXiAneyBwcmludGYgXCJbXCI7IGZvcihpPTE7aTw9TkY7KytpKSB7IiArICcgc3BsaXQoJGksIHBsYXQsICIpIik7IHNwbGl0KHBsYXRbMV0sIHBsYXQyLCAiKCIpOyBpZm94PXNwbGl0KHBsYXQyWzJdLCBpZm8sICIsIik7IGxpYmM9IiI7IGh3Y2FwPSIwIjsgZm9yKGlmb2k9MTtpZm9pPD1pZm94OysraWZvaSkgeyBpZihzcGxpdChpZm9baWZvaV0sIGpuaywgImxpYmMiKT09MikgeyBsaWJjPWlmb1tpZm9pXTsgfSBpZihzcGxpdChpZm9baWZvaV0sIGpuaywgImh3Y2FwOiIpPT0yKSB7IHNwbGl0KGlmb1tpZm9pXSwgam5rLCAiMHgiKTsgaHdjYXA9am5rWzJdOyB9ICAgfSAgICAgIHg9c3BsaXQoJGksIHRvaywgIiAiKTsgaWYodG9rWzFdIT0iIikgeyBwcmludGYgIiVze1xcImxpYlxcIjogXFwiJXNcXCIsIFxcInBhdGhcXCI6IFxcIiVzXFwiLCBcXCJod2NhcFxcIjogXFwiJXNcXCIsIFxcImxpYmNcXCI6IFxcIiVzXFwifSIsIChpIT0xPyIsIjoiIiksIHRva1sxXSwgdG9rW3hdLCBod2NhcCwgbGliYzsgfX0gcHJpbnRmICJdIjsgfVwnXG5leGl0XG4nKTsKCiAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgdmFyIHYgPSBKU09OLnBhcnNlKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsKICAgIHJldHVybiAodik7Cn0KCmZ1bmN0aW9uIG1vbml0b3JpbmZvKCkKewogICAgdGhpcy5fT2JqZWN0SUQgPSAnbW9uaXRvci1pbmZvJzsKICAgIHRoaXMuX2dtID0gcmVxdWlyZSgnX0dlbmVyaWNNYXJzaGFsJyk7CgogICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ3dpbjMyJykKICAgIHsKICAgICAgICB0aGlzLl91c2VyMzIgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSgndXNlcjMyLmRsbCcpOwogICAgICAgIHRoaXMuX3VzZXIzMi5DcmVhdGVNZXRob2QoJ0VudW1EaXNwbGF5TW9uaXRvcnMnKTsKICAgICAgICB0aGlzLl9rZXJuZWwzMiA9IHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KCdrZXJuZWwzMi5kbGwnKTsKICAgICAgICB0aGlzLl9rZXJuZWwzMi5DcmVhdGVNZXRob2QoJ0dldExhc3RFcnJvcicpOwoKICAgICAgICB0aGlzLmdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBpbmZvID0gdGhpczsKICAgICAgICAgICAgcmV0dXJuIChuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZXIsIHJlamVjdG9yKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mbyA9IHsgcmVzb2x2ZXI6IHJlc29sdmVyLCByZWplY3RvcjogcmVqZWN0b3IsIHNlbGY6IGluZm8sIGNhbGxiYWNrOiBpbmZvLl9nbS5HZXRHZW5lcmljR2xvYmFsQ2FsbGJhY2soNCkgfTsKICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLmluZm8gPSB0aGlzLl9tb25pdG9yaW5mbzsKICAgICAgICAgICAgICAgIHRoaXMuX21vbml0b3JpbmZvLmR3RGF0YSA9IGluZm8uX2dtLk9iamVjdFRvUHRyKHRoaXMuX21vbml0b3JpbmZvKTsKCiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5yZXN1bHRzID0gW107CiAgICAgICAgICAgICAgICB0aGlzLl9tb25pdG9yaW5mby5jYWxsYmFjay5vbignR2xvYmFsQ2FsbGJhY2snLCBmdW5jdGlvbiBPbk1vbml0b3JJbmZvKGhtb24sIGhkYywgciwgdXNlcikgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLk9iamVjdFRvUHRyX1ZlcmlmeSh0aGlzLmluZm8sIHVzZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYiA9IHIuRGVyZWYoMCwgMTYpLnRvQnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHsgbGVmdDogcmIucmVhZEludDMyTEUoMCksIHRvcDogcmIucmVhZEludDMyTEUoNCksIHJpZ2h0OiByYi5yZWFkSW50MzJMRSg4KSwgYm90dG9tOiByYi5yZWFkSW50MzJMRSgxMikgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMuaW5mby5zZWxmLl9nbS5DcmVhdGVJbnRlZ2VyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHIuVmFsID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoaW5mby5fdXNlcjMyLkVudW1EaXNwbGF5TW9uaXRvcnMoMCwgMCwgdGhpcy5fbW9uaXRvcmluZm8uY2FsbGJhY2ssIHRoaXMuX21vbml0b3JpbmZvLmR3RGF0YSkuVmFsID09IDApIHsKICAgICAgICAgICAgICAgICAgICByZWplY3RvcignTGFzdEVycm9yPScgKyBpbmZvLl9rZXJuZWwzMi5HZXRMYXN0RXJyb3IoKS5WYWwpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc29sdmVyKHRoaXMuX21vbml0b3JpbmZvLmNhbGxiYWNrLnJlc3VsdHMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSkpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykKICAgIHsKICAgICAgICAvLyBGaXJzdCB0aGluZyB3ZSBuZWVkIHRvIGRvLCBpcyBkZXRlcm1pbmUgd2hlcmUgdGhlIFgxMSBsaWJyYXJpZXMgYXJlCgogICAgICAgIC8vIFN1ZmZpY2llbnQgYWNjZXNzIHJpZ2h0cyB0byB1c2UgbGRjb25maWcKICAgICAgICB2YXIgeDExaW5mbyA9IGdldExpYkluZm8oJ2xpYlgxMScpOwogICAgICAgIHZhciB4dHN0aW5mbyA9IGdldExpYkluZm8oJ2xpYlh0c3QnKTsKICAgICAgICB2YXIgeGV4dGluZm8gPSBnZXRMaWJJbmZvKCdsaWJYZXh0Jyk7CiAgICAgICAgdmFyIHhmaXhlc2luZm8gPSBnZXRMaWJJbmZvKCdsaWJYZml4ZXMnKTsKICAgICAgICB2YXIgaXg7CgogICAgICAgIGZvciAoaXggaW4geDExaW5mbykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh4MTFpbmZvLmxlbmd0aCA9PSAxIHx8IHgxMWluZm9baXhdLmh3Y2FwID09ICIwIikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHgxMWluZm9baXhdLnBhdGgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExTElCJywgeyB2YWx1ZTogeDExaW5mb1tpeF0ucGF0aCB9KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChpeCBpbiB4dHN0aW5mbykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh4dHN0aW5mby5sZW5ndGggPT0gMSB8fCB4dHN0aW5mb1tpeF0uaHdjYXAgPT0gIjAiKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ20uQ3JlYXRlTmF0aXZlUHJveHkoeHRzdGluZm9baXhdLnBhdGgpOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogeHRzdGluZm9baXhdLnBhdGggfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGV4KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaXggaW4geGV4dGluZm8pCiAgICAgICAgewogICAgICAgICAgICBpZiAoeGV4dGluZm8ubGVuZ3RoID09IDEgfHwgeGV4dGluZm9baXhdLmh3Y2FwID09ICIwIikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dtLkNyZWF0ZU5hdGl2ZVByb3h5KHhleHRpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHhleHRpbmZvW2l4XS5wYXRoIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChleCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGl4IGluIHhmaXhlc2luZm8pCiAgICAgICAgewogICAgICAgICAgICBpZiAoeGZpeGVzaW5mby5sZW5ndGggPT0gMSB8fCB4Zml4ZXNpbmZvW2l4XS5od2NhcCA9PSAiMCIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdHJ5DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSh4Zml4ZXNpbmZvW2l4XS5wYXRoKTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUZJWEVTJywgeyB2YWx1ZTogeGZpeGVzaW5mb1tpeF0ucGF0aCB9KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaCAoZXgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0KICAgICAgICB9ICAgCgogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFMSUInXSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUxJQicsIHsgdmFsdWU6IHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFMSUInXSB9KTsgfQogICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMVRTVCddKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExVFNUJywgeyB2YWx1ZTogcHJvY2Vzcy5lbnZbJ0xvY2F0aW9uX1gxMVRTVCddIH0pOyB9CiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRVhUJ10pIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFFWFQnLCB7IHZhbHVlOiBwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRVhUJ10gfSk7IH0KICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52WydMb2NhdGlvbl9YMTFGSVhFUyddKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnTG9jYXRpb25fWDExRklYRVMnLCB7IHZhbHVlOiBwcm9jZXNzLmVudlsnTG9jYXRpb25fWDExRklYRVMnXSB9KTsgfQogICAgICAgIH0KICAgICAgICBjYXRjaChleCkKICAgICAgICB7CiAgICAgICAgfQogICAgfQogICAgaWYocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCcpCiAgICB7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFMSUInLCB7IHZhbHVlOiByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlgxMScpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWDExJylbMF0ubG9jYXRpb246IHVuZGVmaW5lZCB9KTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMVRTVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdP3JlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWHRzdCcpWzBdLmxvY2F0aW9uOnVuZGVmaW5lZCB9KTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ0xvY2F0aW9uX1gxMUVYVCcsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGV4dCcpWzBdID8gcmVxdWlyZSgnbGliLWZpbmRlcicpKCdsaWJYZXh0JylbMF0ubG9jYXRpb24gOiB1bmRlZmluZWQgfSk7CgkgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdMb2NhdGlvbl9YMTFGSVhFUycsIHsgdmFsdWU6IHJlcXVpcmUoJ2xpYi1maW5kZXInKSgnbGliWGZpeGVzJylbMF0gPyByZXF1aXJlKCdsaWItZmluZGVyJykoJ2xpYlhmaXhlcycpWzBdLmxvY2F0aW9uIDogdW5kZWZpbmVkIH0pOwogICAgfQoKICAgIGlmKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JyB8fCBwcm9jZXNzLnBsYXRmb3JtID09ICdmcmVlYnNkJykKICAgIHsKICAgICAgICB0aGlzLk1PVElGX0ZMQUdTID0gCiAgICAgICAgewogICAgICAgICAgICBNV01fRlVOQ19BTEwgICAgICAgIDogKDEgPDwgMCkgLAogICAgICAgICAgICBNV01fRlVOQ19SRVNJWkUgICAgIDogKDEgPDwgMSkgLAogICAgICAgICAgICBNV01fRlVOQ19NT1ZFICAgICAgIDogKDEgPDwgMikgLAogICAgICAgICAgICBNV01fRlVOQ19NSU5JTUlaRSAgIDogKDEgPDwgMykgLAogICAgICAgICAgICBNV01fRlVOQ19NQVhJTUlaRSAgIDogKDEgPDwgNCkgLAogICAgICAgICAgICBNV01fRlVOQ19DTE9TRSAgICAgIDogKDEgPDwgNSkgCiAgICAgICAgfTsKCgogICAgICAgIGlmICh0aGlzLkxvY2F0aW9uX1gxMUxJQiAmJiB0aGlzLkxvY2F0aW9uX1gxMVRTVCAmJiB0aGlzLkxvY2F0aW9uX1gxMUVYVCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgIGNoLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uICgpIHsgfSk7CiAgICAgICAgICAgIGNoLnN0ZG91dC5zdHIgPSAnJzsgY2guc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2guc3RkaW4ud3JpdGUoJ3BzIC1lIHwgZ3JlcCBYXG5leGl0XG4nKTsKICAgICAgICAgICAgY2gud2FpdEV4aXQoKTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrdm1feDExX3N1cHBvcnQnLCB7IHZhbHVlOiBjaC5zdGRvdXQuc3RyLnRyaW0oKSA9PSAnJyA/IGZhbHNlIDogdHJ1ZSB9KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdrdm1feDExX3N1cHBvcnQnLCB7IHZhbHVlOiBmYWxzZSB9KTsKICAgICAgICB9CgoKICAgICAgICBpZiAodGhpcy5Mb2NhdGlvbl9YMTFMSUIpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLl9YMTEgPSB0aGlzLl9nbS5DcmVhdGVOYXRpdmVQcm94eSh0aGlzLkxvY2F0aW9uX1gxMUxJQik7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDaGFuZ2VQcm9wZXJ0eScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ2xvc2VEaXNwbGF5Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDb25uZWN0aW9uTnVtYmVyJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDb252ZXJ0U2VsZWN0aW9uJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVHQycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlV2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hDcmVhdGVTaW1wbGVXaW5kb3cnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERlZmF1bHRDb2xvcm1hcCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVmYXVsdFNjcmVlbicpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRGVzdHJveVdpbmRvdycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRHJhd0xpbmUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERpc3BsYXlIZWlnaHQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWERpc3BsYXlXaWR0aCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRmV0Y2hOYW1lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hGbHVzaCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYRnJlZScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYQ3JlYXRlR0MnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEdldEF0b21OYW1lJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hHZXRXaW5kb3dQcm9wZXJ0eScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYSW50ZXJuQXRvbScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYTWFwV2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoeyBtZXRob2Q6ICdYTmV4dEV2ZW50JywgdGhyZWFkRGlzcGF0Y2g6IHRydWUgfSk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoeyBtZXRob2Q6ICdYTmV4dEV2ZW50JywgbmV3TmFtZTogJ1hOZXh0RXZlbnRTeW5jJyB9KTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWE9wZW5EaXNwbGF5Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hQZW5kaW5nJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hSb290V2luZG93Jyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZWxlY3RJbnB1dCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2NyZWVuQ291bnQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNjcmVlbk9mRGlzcGxheScpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2VsZWN0SW5wdXQnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNlbmRFdmVudCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0Rm9yZWdyb3VuZCcpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0RnVuY3Rpb24nKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldExpbmVBdHRyaWJ1dGVzJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTZXROb3JtYWxIaW50cycpOwogICAgICAgICAgICB0aGlzLl9YMTEuQ3JlYXRlTWV0aG9kKCdYU2V0U2VsZWN0aW9uT3duZXInKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFN1YndpbmRvd01vZGUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFNldFdNUHJvdG9jb2xzJyk7CiAgICAgICAgICAgIHRoaXMuX1gxMS5DcmVhdGVNZXRob2QoJ1hTdG9yZU5hbWUnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFN5bmMnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWEJsYWNrUGl4ZWwnKTsKICAgICAgICAgICAgdGhpcy5fWDExLkNyZWF0ZU1ldGhvZCgnWFdoaXRlUGl4ZWwnKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuaXNVbml0eSA9IGZ1bmN0aW9uIGlzVW5pdHkoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIChwcm9jZXNzLmVudlsnWERHX0NVUlJFTlRfREVTS1RPUCddID09ICdVbml0eScpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy51bkRlY29yYXRlV2luZG93ID0gZnVuY3Rpb24gdW5EZWNvcmF0ZVdpbmRvdyhkaXNwbGF5LCB3aW5kb3cpCiAgICAgICAgewogICAgICAgICAgICB2YXIgTXdtSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg0MCk7CiAgICAgICAgICAgIHZhciBtd21IaW50c1Byb3BlcnR5ID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTU9USUZfV01fSElOVFMnKSwgMCk7CiAgICAgICAgICAgIE13bUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgxIDw8IDEpOwogICAgICAgICAgICB0aGlzLl9YMTEuWENoYW5nZVByb3BlcnR5KGRpc3BsYXksIHdpbmRvdywgbXdtSGludHNQcm9wZXJ0eSwgbXdtSGludHNQcm9wZXJ0eSwgMzIsIDAsIE13bUhpbnRzLCA1KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZXRBbGxvd2VkQWN0aW9ucyA9IGZ1bmN0aW9uIHNldEFsbG93ZWRBY3Rpb25zKGRpc3BsYXksIHdpbmRvdywgZmxhZ3MpCiAgICAgICAgewogICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgTVdNX0hJTlRTX0ZVTkNUSU9OUyA9ICgxTCA8PCAwKSwKICAg", 16000); + memcpy_s(_monitorinfo + 16000, 15352, "ICAgICAgICAgICAgIE1XTV9ISU5UU19ERUNPUkFUSU9OUyA9ICAoMUwgPDwgMSksCgogICAgICAgICAgICAgICAgTVdNX0ZVTkNfQUxMID0gKDFMIDw8IDApLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfUkVTSVpFID0gKDFMIDw8IDEpLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTU9WRSA9ICgxTCA8PCAyKSwKICAgICAgICAgICAgICAgIE1XTV9GVU5DX01JTklNSVpFID0gKDFMIDw8IDMpLAogICAgICAgICAgICAgICAgTVdNX0ZVTkNfTUFYSU1JWkUgPSAoMUwgPDwgNCksCiAgICAgICAgICAgICAgICBNV01fRlVOQ19DTE9TRSA9ICgxTCA8PCA1KQogICAgICAgICAgICAqLwoKICAgICAgICAgICAgdmFyIE13bUhpbnRzID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoNDApOwogICAgICAgICAgICB2YXIgbXdtSGludHNQcm9wZXJ0eSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX01PVElGX1dNX0hJTlRTJyksIDApOwoKICAgICAgICAgICAgTXdtSGludHMuRGVyZWYoMCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKE1XTV9ISU5UU19GVU5DVElPTlMpOwogICAgICAgICAgICBNd21IaW50cy5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKGZsYWdzKTsKCiAgICAgICAgICAgIHRoaXMuX1gxMS5YQ2hhbmdlUHJvcGVydHkoZGlzcGxheSwgd2luZG93LCBtd21IaW50c1Byb3BlcnR5LCBtd21IaW50c1Byb3BlcnR5LCAzMiwgUHJvcE1vZGVSZXBsYWNlLCBNd21IaW50cywgNSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2V0V2luZG93U2l6ZUhpbnRzID0gZnVuY3Rpb24gc2V0V2luZG93U2l6ZUhpbnRzKGRpc3BsYXksIHdpbmRvdywgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgbWF4V2lkdGgsIG1heEhlaWdodCkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzaXplSGludHMgPSB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSg4MCk7CiAgICAgICAgICAgIHZhciBzcGVjID0gUFBvc2l0aW9uIHwgUFNpemU7CiAgICAgICAgICAgIGlmIChtaW5XaWR0aCAhPSBudWxsICYmIG1pbkhlaWdodCAhPSBudWxsKSB7IHNwZWMgfD0gUE1pblNpemU7IH0KICAgICAgICAgICAgaWYgKG1heFdpZHRoICE9IG51bGwgJiYgbWF4SGVpZ2h0ICE9IG51bGwpIHsgc3BlYyB8PSBQTWF4U2l6ZTsgfQoKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShzcGVjKTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplLCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoeCk7CiAgICAgICAgICAgIHNpemVIaW50cy5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSArIDQsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSh5KTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplICsgOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKHdpZHRoKTsKICAgICAgICAgICAgc2l6ZUhpbnRzLkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplICsgMTIsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShoZWlnaHQpOwogICAgICAgICAgICBpZiAobWluV2lkdGggIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgKyAxNiwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1pbldpZHRoKTsgfQogICAgICAgICAgICBpZiAobWluSGVpZ2h0ICE9IG51bGwpIHsgc2l6ZUhpbnRzLkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplICsgMjAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShtaW5IZWlnaHQpOyB9CiAgICAgICAgICAgIGlmIChtYXhXaWR0aCAhPSBudWxsKSB7IHNpemVIaW50cy5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSArIDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUobWF4V2lkdGgpOyB9CiAgICAgICAgICAgIGlmIChtYXhIZWlnaHQgIT0gbnVsbCkgeyBzaXplSGludHMuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgKyAyOCwgNCkudG9CdWZmZXIoKS53cml0ZVVJbnQzMkxFKG1heEhlaWdodCk7IH0KCiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2V0Tm9ybWFsSGludHMoZGlzcGxheSwgd2luZG93LCBzaXplSGludHMpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNldEFsd2F5c09uVG9wID0gZnVuY3Rpb24gc2V0QWx3YXlzT25Ub3AoZGlzcGxheSwgcm9vdFdpbmRvdywgd2luZG93KQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHdtTmV0V21TdGF0ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURScpLCAxKTsKICAgICAgICAgICAgdmFyIHdtU3RhdGVBYm92ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURV9BQk9WRScpLCAxKTsKCiAgICAgICAgICAgIHZhciB4Y2xpZW50ID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoOTYpOwogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMyk7ICAgICAgICAgICAgICAgICAgIC8vIENsaWVudE1lc3NhZ2UgdHlwZQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplID09IDggPyA0OCA6IDI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzIpOyAgIC8vIEZvcm1hdCAzMgogICAgICAgICAgICB3bU5ldFdtU3RhdGUucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSA9PSA4ID8gNDAgOiAyMCwgdGhpcy5fZ20uUG9pbnRlclNpemUpLnRvQnVmZmVyKCkpOyAvLyBtZXNzYWdlX3R5cGUKICAgICAgICAgICAgeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZSA9PSA4ID8gNTYgOiAyOCwgdGhpcy5fZ20uUG9pbnRlclNpemUpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShfTkVUX1dNX1NUQVRFX0FERCk7ICAgLy8gZGF0YS5sWzBdCiAgICAgICAgICAgIHdtU3RhdGVBYm92ZS5wb2ludGVyQnVmZmVyKCkuY29weSh4Y2xpZW50LkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplID09IDggPyA2NCA6IDMyLCB0aGlzLl9nbS5Qb2ludGVyU2l6ZSkudG9CdWZmZXIoKSk7ICAvLyBkYXRhLmxbMV0KICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemUgPT0gOCA/IDMyIDogMTYsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsgICAgICAgLy8gd2luZG93CiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2VuZEV2ZW50KGRpc3BsYXksIHJvb3RXaW5kb3csIDAsIFN1YnN0cnVjdHVyZVJlZGlyZWN0TWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2ssIHhjbGllbnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLmhpZGVXaW5kb3dJY29uID0gZnVuY3Rpb24gaGlkZVdpbmRvd0ljb24oZGlzcGxheSwgcm9vdFdpbmRvdywgd2luZG93KQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHdtTmV0V21TdGF0ZSA9IHRoaXMuX1gxMS5YSW50ZXJuQXRvbShkaXNwbGF5LCB0aGlzLl9nbS5DcmVhdGVWYXJpYWJsZSgnX05FVF9XTV9TVEFURScpLCAxKTsKICAgICAgICAgICAgdmFyIHdtU3RhdGVTa2lwID0gdGhpcy5fWDExLlhJbnRlcm5BdG9tKGRpc3BsYXksIHRoaXMuX2dtLkNyZWF0ZVZhcmlhYmxlKCdfTkVUX1dNX1NUQVRFX1NLSVBfVEFTS0JBUicpLCAxKTsKCiAgICAgICAgICAgIHZhciB4Y2xpZW50ID0gdGhpcy5fZ20uQ3JlYXRlVmFyaWFibGUoOTYpOwogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKDAsIDQpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRSgzMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsaWVudE1lc3NhZ2UgdHlwZQogICAgICAgICAgICB4Y2xpZW50LkRlcmVmKHRoaXMuX2dtLlBvaW50ZXJTaXplPT04PzQ4OjI0LCA0KS50b0J1ZmZlcigpLndyaXRlVUludDMyTEUoMzIpOyAgIC8vIEZvcm1hdCAzMgogICAgICAgICAgICB3bU5ldFdtU3RhdGUucG9pbnRlckJ1ZmZlcigpLmNvcHkoeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZT09OD80MDoyMCwgdGhpcy5fZ20uUG9pbnRlclNpemUpLnRvQnVmZmVyKCkpOyAvLyBtZXNzYWdlX3R5cGUKICAgICAgICAgICAgeGNsaWVudC5EZXJlZih0aGlzLl9nbS5Qb2ludGVyU2l6ZT09OD81NjoyOCwgdGhpcy5fZ20uUG9pbnRlclNpemUpLnRvQnVmZmVyKCkud3JpdGVVSW50MzJMRShfTkVUX1dNX1NUQVRFX0FERCk7ICAgLy8gZGF0YS5sWzBdCiAgICAgICAgICAgIHdtU3RhdGVTa2lwLnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemU9PTg/NjQ6MzIsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsgIC8vIGRhdGEubFsxXQoKICAgICAgICAgICAgd2luZG93LnBvaW50ZXJCdWZmZXIoKS5jb3B5KHhjbGllbnQuRGVyZWYodGhpcy5fZ20uUG9pbnRlclNpemU9PTg/MzI6MTYsIHRoaXMuX2dtLlBvaW50ZXJTaXplKS50b0J1ZmZlcigpKTsgICAgICAgLy8gd2luZG93CiAgICAgICAgICAgIHRoaXMuX1gxMS5YU2VuZEV2ZW50KGRpc3BsYXksIHJvb3RXaW5kb3csIDAsIFN1YnN0cnVjdHVyZVJlZGlyZWN0TWFzayB8IFN1YnN0cnVjdHVyZU5vdGlmeU1hc2ssIHhjbGllbnQpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5nZXRJbmZvID0gZnVuY3Rpb24gZ2V0SW5mbygpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaW5mbyA9IHRoaXM7CiAgICAgICAgICAgIHZhciByZXQgPSBuZXcgcHJvbWlzZShmdW5jdGlvbiAocmVzLCByZWopIHsgdGhpcy5fcmVzID0gcmVzOyB0aGlzLl9yZWogPSByZWo7IH0pOwogICAgICAgICAgICByZXQucGFyZW50ID0gdGhpczsKCiAgICAgICAgICAgIGlmICghcHJvY2Vzcy5lbnYuWEFVVEhPUklUWSB8fCAhcHJvY2Vzcy5lbnYuRElTUExBWSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHhpbmZvID0gdGhpcy5nZXRYSW5mbyhyZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0VWlkKHJlcXVpcmUoJ3VzZXItc2Vzc2lvbnMnKS53aG9hbWkoKSkpOwogICAgICAgICAgICAgICAgcHJvY2Vzcy5zZXRlbnYoJ1hBVVRIT1JJVFknLCB4aW5mby54YXV0aG9yaXR5KTsKICAgICAgICAgICAgICAgIHByb2Nlc3Muc2V0ZW52KCdESVNQTEFZJywgeGluZm8uZGlzcGxheSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gaW5mby5fWDExLlhPcGVuRGlzcGxheShpbmZvLl9nbS5DcmVhdGVWYXJpYWJsZShwcm9jZXNzLmVudi5ESVNQTEFZKSk7CiAgICAgICAgICAgIGlmIChkaXNwbGF5LlZhbCA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXF1aXJlKCdmcycpLndyaXRlRmlsZVN5bmMoJy92YXIvdG1wL2FnZW50U2xhdmUnLCAnWE9wZW5EaXNwbGF5IEZhaWxlZCcsIHsgZmxhZ3M6ICdhJyB9KTsKICAgICAgICAgICAgICAgIHJldC5fcmVqKCdYT3BlbkRpc3BsYXkgRmFpbGVkJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBzY3JlZW5Db3VudCA9IGluZm8uX1gxMS5YU2NyZWVuQ291bnQoZGlzcGxheSkuVmFsOwogICAgICAgICAgICB2YXIgaWZvID0gW107CiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8c2NyZWVuQ291bnQ7KytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgc2NyZWVuID0gaW5mby5fWDExLlhTY3JlZW5PZkRpc3BsYXkoZGlzcGxheSwgaSk7CiAgICAgICAgICAgICAgICBpZm8ucHVzaCh7IGxlZnQ6IDAsIHRvcDogMCwgcmlnaHQ6IGluZm8uX1gxMS5YRGlzcGxheVdpZHRoKGRpc3BsYXksIGkpLlZhbCwgYm90dG9tOiBpbmZvLl9YMTEuWERpc3BsYXlIZWlnaHQoZGlzcGxheSwgaSkuVmFsLCBzY3JlZW46IHNjcmVlbiwgc2NyZWVuSWQ6IGksIGRpc3BsYXk6IGRpc3BsYXkgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0Ll9yZXMoaWZvKTsKCiAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5nZXRYSW5mbyA9IGZ1bmN0aW9uIGdldFhJbmZvKGNvbnNvbGV1aWQpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmV0ID0gbnVsbDsKICAgICAgICAgICAgdmFyIHVuYW1lID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldFVzZXJuYW1lKGNvbnNvbGV1aWQpOwogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzICIgKyAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZnJlZWJzZCc/Ii1heCAiOiIiKSArICItZSAtbyB1c2VyIiArIChwcm9jZXNzLnBsYXRmb3JtPT0nbGludXgnPyI6OTk5IjoiIikgKyAiIC1vIHR0eSAtbyBjb21tYW5kIHwgZ3JlcCBYIHwgYXdrICd7IHNwbGl0KCQwLCBhLCBcIi1hdXRoXCIpOyBzcGxpdChhWzJdLCBiLCBcIiBcIik7IGlmKCQxPT1cIiIgKyB1bmFtZSArICJcIiAmJiBiWzFdIT1cIlwiKSB7IHByaW50ZiBcIiVzLCVzLCVzXCIsJDEsJDIsYlsxXSB9IH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgdmFyIHRva2VucyA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpLnNwbGl0KCcsJyk7CiAgICAgICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldCA9IHsgdHR5OiB0b2tlbnNbMV0sIHhhdXRob3JpdHk6IHRva2Vuc1syXSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHJldCA9PSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBUaGlzIExpbnV4IERpc3RybyBkb2VzIG5vdCBzcGF3biBhbiBYU2VydmVyIGluc3RhbmNlIGluIHRoZSB1c2VyIHNlc3Npb24sIHRoYXQgc3BlY2lmaWVzIHRoZSBYQVVUSE9SSVRZLgogICAgICAgICAgICAgICAgLy8gU28gd2UncmUgZ29pbmcgdG8gYnJ1dGUgZm9yY2UgaXQsIGJ5IGVudW1lcmF0aW5nIGFsbCBwcm9jZXNzZXMgb3duZWQgYnkgdGhpcyB1c2VyLCBhbmQgaW5zcGVjdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInBzICIgKyAocHJvY2Vzcy5wbGF0Zm9ybT09J2ZyZWVic2QnPyItYXggIjoiIikgKyAiLWUgLW8gcGlkIC1vIHVzZXIgfCBncmVwICIgKyB1bmFtZSArICIgfCBhd2sgJ3sgcHJpbnQgJDEgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKCiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjaGlsZC5zdGRvdXQuc3RyLnNwbGl0KCdcbicpOwogICAgICAgICAgICAgICAgZm9yKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBsbiA9IGxpbmVzW25dLnRyaW0oKTsKICAgICAgICAgICAgICAgICAgICBpZihsbi5sZW5ndGg+MCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldEVudkZyb21QaWQobG4pOwogICAgICAgICAgICAgICAgICAgICAgICBpZihlLlhBVVRIT1JJVFkgJiYgZS5ESVNQTEFZKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB7IHR0eTogJz8nLCB4YXV0aG9yaXR5OiBlLlhBVVRIT1JJVFksIGRpc3BsYXk6IGUuRElTUExBWSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHJldCA9PSBudWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgWEFVVEhPUklUWSBhbmQgRElTUExBWSwgc28gYXMgYSBsYXN0IGRpdGNoIGVmZm9ydCwgbGV0cyBqdXN0IGxvb2sgZm9yIERJU1BMQVkKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIGxpbmVzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxuID0gbGluZXNbbl0udHJpbSgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG4ubGVuZ3RoID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSByZXF1aXJlKCd1c2VyLXNlc3Npb25zJykuZ2V0RW52RnJvbVBpZChsbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5ESVNQTEFZKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHsgdHR5OiAnPycsIGRpc3BsYXk6IGUuRElTUExBWSwgZXhwb3J0RW52OiBleHBvcnRFbnYgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgJERJU1BMQVkgYnkgbG9va2luZyBhdCBhbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIHR0eSBhcyB0aGUgWFNlcnZlciBpbnN0YW5jZSBmb3IgdGhpcyB1c2VyIHNlc3Npb24KICAgICAgICAgICAgICAgIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJwcyAtZSAtbyB0dHkgLW8gcGlkIC1vIHVzZXI6OTk5OSB8IGdyZXAgIiArIHJldC50dHkgKyAiIHwgZ3JlcCAiICsgdW5hbWUgKyAiIHwgYXdrICd7IHByaW50ICQyIH0nIFxuZXhpdFxuIik7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoaWxkLnN0ZG91dC5zdHIuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICAgICB2YXIgcHMsIHBzeCwgdiwgdnMgPSAwOwogICAgICAgICAgICAgICAgZm9yKHZhciB4IGluIGxpbmVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmKGxpbmVzW3hdLnRyaW0oKS5sZW5ndGg+MCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcyA9IHJlcXVpcmUoJ2ZzJykucmVhZEZpbGVTeW5jKCcvcHJvYy8nICsgbGluZXNbeF0udHJpbSgpICsgJy9lbnZpcm9uJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gocHNlKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2cyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihwc3g9MDtwc3g8cHMubGVuZ3RoOysrcHN4KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNbcHN4XSA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBwcy5zbGljZSh2cywgcHN4KS50b1N0cmluZygpLnNwbGl0KCc9Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZbMF0gPT0gJ0RJU1BMQVknKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LmRpc3BsYXkgPSB2WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzID0gcHN4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgICAgfTsKICAgIH0KfQoKZnVuY3Rpb24gZXhwb3J0RW52KCkKewogICAgdmFyIHIgPQogICAgICAgIHsKICAgICAgICAgICAgWEFVVEhPUklUWTogdGhpcy54YXV0aG9yaXR5P3RoaXMueGF1dGhvcml0eToiIiwgRElTUExBWTogdGhpcy5kaXNwbGF5LAogICAgICAgICAgICBMb2NhdGlvbl9YMTFMSUI6IHJlcXVpcmUoJ21vbml0b3ItaW5mbycpLkxvY2F0aW9uX1gxMUxJQiwKICAgICAgICAgICAgTG9jYXRpb25fWDExVFNUOiByZXF1aXJlKCdtb25pdG9yLWluZm8nKS5Mb2NhdGlvbl9YMTFUU1QsCiAgICAgICAgICAgIExvY2F0aW9uX1gxMUVYVDogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTG9jYXRpb25fWDExRVhULAogICAgICAgICAgICBMb2NhdGlvbl9YMTFGSVhFUzogcmVxdWlyZSgnbW9uaXRvci1pbmZvJykuTG9jYXRpb25fWDExRklYRVMKICAgICAgICB9OwogICAgcmV0dXJuIChyKTsKfQoKaWYgKHByb2Nlc3MucGxhdGZvcm0gIT0gJ2RhcndpbicpCnsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IG1vbml0b3JpbmZvKCk7Cn0KCmlmIChwcm9jZXNzLnBsYXRmb3JtID09ICdsaW51eCcpCnsKICAgIG1vZHVsZS5leHBvcnRzLmdldExpYkluZm8gPSBnZXRMaWJJbmZvOwp9Cv==", 15352); + ILibBase64DecodeEx((unsigned char*)_monitorinfo, 31352, (unsigned char*)_monitorinfo + 31352); + duk_push_global_object(ctx); duk_get_prop_string(ctx, -1, "addModule"); duk_swap_top(ctx, -2); duk_push_string(ctx, "monitor-info"); duk_push_string(ctx, _monitorinfo + 31352); duk_pcall_method(ctx, 2); duk_pop(ctx); free(_monitorinfo); @@ -2038,6 +2038,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) #if defined(_POSIX) && !defined(__APPLE__) && !defined(_FREEBSD) duk_peval_string_noresult(ctx, "addModule('linux-dbus', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KCnRyeSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJwZWVrIiwgeyB2YWx1ZTogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMubGVuZ3RoID4gMCA/IHRoaXNbdGhpcy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZCk7IH0gfSk7IH0gY2F0Y2ggKGUpIHsgfQoKCgpmdW5jdGlvbiBkYnVzKGFkZHJlc3MsIHVpZCkKewogICAgdGhpcy5fT2JqZWN0SUQgPSAnbGludXgtZGJ1cyc7CiAgICByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzLCB0cnVlKQogICAgICAgIC5jcmVhdGVFdmVudCgnc2lnbmFsJyk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgInVpZCIsIHsgdmFsdWU6IHVpZCB9KTsKICAgIHRoaXMuX2NoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCIvYmluL3NoIiwgWyJzaCJdLCB7IHR5cGU6IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5TcGF3blR5cGVzLlRFUk0sIHVpZDogdWlkID09IG51bGwgPyAtMSA6IHVpZCB9KTsKICAgIHRoaXMuX2NoaWxkLnN0ZGluLndyaXRlKCdkYnVzLW1vbml0b3IgLS1zZXNzaW9uICJ0eXBlPVwnc2lnbmFsXCcsIGludGVyZmFjZT1cJycgKyBhZGRyZXNzICsgJ1wnIiB8ICggd2hpbGUgcmVhZCBYOyBkbyBlY2hvICIkWCI7IGRvbmUgKVxuJyk7CiAgICB0aGlzLl9jaGlsZC5zdGRvdXQuZGJ1cyA9IHRoaXM7CiAgICB0aGlzLl9jaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspCiAgICB7CiAgICAgICAgLy8gUGFyc2UgREJVUyBEYXRhCiAgICAgICAgaWYgKCF0aGlzLnJlYWR5KSB7IHRoaXMucmVhZHkgPSB0cnVlOyByZXR1cm47IH0KCiAgICAgICAgdmFyIGxpbmVzID0gW107CiAgICAgICAgdmFyIHRva2VucyA9IGNodW5rLnRvU3RyaW5nKCkuc3BsaXQoJ1xyXG4nKTsKICAgICAgICBmb3IgKHZhciBpIGluIHRva2VucykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh0b2tlbnNbaV0gPT0gJycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIEVuZCBvZiByZWNvcmQKICAgICAgICAgICAgICAgIHRoaXMuZGJ1cy5wcmVQYXJzZVJlY29yZHMobGluZXMpOwogICAgICAgICAgICAgICAgbGluZXMgPSBbXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxpbmVzLnB1c2godG9rZW5zW2ldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwogICAgdGhpcy5wcmVQYXJzZVJlY29yZHMgPSBmdW5jdGlvbiAobGluZXMpCiAgICB7CiAgICAgICAgdmFyIHJlY29yZCA9IFtdOwogICAgICAgIGZvciAodmFyIGkgaW4gbGluZXMpCiAgICAgICAgewogICAgICAgICAgICBpZihsaW5lc1tpXS5zdGFydHNXaXRoKCdzaWduYWwgJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKHJlY29yZC5sZW5ndGg+MCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlUmVjb3JkcyhyZWNvcmQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVjb3JkID0gW107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVjb3JkLnB1c2gobGluZXNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAocmVjb3JkLmxlbmd0aCA+IDApCiAgICAgICAgewogICAgICAgICAgICB0aGlzLnBhcnNlUmVjb3JkcyhyZWNvcmQpOwogICAgICAgIH0KICAgIH0KICAgIHRoaXMucGFyc2VSZWNvcmRzID0gZnVuY3Rpb24gKGxpbmVzKQogICAgewogICAgICAgIGlmIChsaW5lc1swXS5zdGFydHNXaXRoKCdzaWduYWwgJykpCiAgICAgICAgewogICAgICAgICAgICB2YXIgc2lnbmFsID0ge307CiAgICAgICAgICAgIHZhciBzaWd0b2tlbnMgPSBsaW5lc1swXS5zcGxpdCgnICcpOwogICAgICAgICAgICBzaWd0b2tlbnMuc2hpZnQoKTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc2lndG9rZW5zKSB7CiAgICAgICAgICAgICAgICB2YXIgc2lnaXRlbXMgPSBzaWd0b2tlbnNbaV0uc3BsaXQoJz0nKTsKICAgICAgICAgICAgICAgIGlmIChzaWdpdGVtcy5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgICAgIHNpZ25hbFtzaWdpdGVtc1swXV0gPSBzaWdpdGVtc1sxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGluZXMuc2hpZnQoKTsKICAgICAgICAgICAgc2lnbmFsLmRhdGEgPSBsaW5lczsKCiAgICAgICAgICAgIHRoaXMucGFyc2VTaWduYWwoc2lnbmFsKTsKICAgICAgICB9CiAgICB9CiAgICB0aGlzLnBhcnNlU2lnbmFsID0gZnVuY3Rpb24oc2lnbmFsKQogICAgewogICAgICAgIHZhciBkYXRhID0gc2lnbmFsLmRhdGE7CiAgICAgICAgc2lnbmFsLmRhdGEgPSBbXTsKCiAgICAgICAgZm9yKHZhciBpPTA7IGk8ZGF0YS5sZW5ndGg7ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkYXRhW2ldLnN0YXJ0c1dpdGgoJ2FycmF5ICcpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzaWduYWwuZGF0YS5wdXNoKFtdKTsKICAgICAgICAgICAgICAgIGZvcihpPWkrMTsgaTxkYXRhLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VTaWduYWwyKGRhdGFbaV0sIHNpZ25hbC5kYXRhLnBlZWsoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlU2lnbmFsMihkYXRhW2ldLCBzaWduYWwuZGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuZW1pdCgnc2lnbmFsJywgc2lnbmFsKTsKICAgIH0KICAgIHRoaXMucGFyc2VTaWduYWwyID0gZnVuY3Rpb24gKGlucHV0U3RyLCBvdXRBcnJheSkKICAgIHsKICAgICAgICBpZihpbnB1dFN0ci5zdGFydHNXaXRoKCdzdHJpbmcgJykpCiAgICAgICAgewogICAgICAgICAgICBvdXRBcnJheS5wdXNoKEpTT04ucGFyc2UoaW5wdXRTdHIuc2xpY2UoNykpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihpbnB1dFN0ci5zdGFydHNXaXRoKCdib29sZWFuICcpKQogICAgICAgIHsKICAgICAgICAgICAgb3V0QXJyYXkucHVzaChKU09OLnBhcnNlKGlucHV0U3RyLnNsaWNlKDgpKSk7CiAgICAgICAgfQogICAgfQp9Cgptb2R1bGUuZXhwb3J0cyA9IGRidXM7Cm1vZHVsZS5leHBvcnRzLmhhc1NlcnZpY2UgPSBmdW5jdGlvbiBoYXNTZXJ2aWNlKG5hbWUpDQp7DQogICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCiAgICBjaGlsZC5zdGRlcnIuc3RyID0gJyc7IGNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQogICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOyBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB0aGlzLnN0ciArPSBjLnRvU3RyaW5nKCk7IH0pOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdjYXQgL3Vzci9zaGFyZS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIHwgZ3JlcCAiJyArIG5hbWUgKyAnIiB8IGF3ayAtRj0gXCd7IGlmKCAkMj09IicgKyBuYW1lICsgJyIgKSB7IHByaW50ICQyOyB9IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpICE9ICcnKTsNCn07Cv==', 'base64').toString());"); duk_peval_string_noresult(ctx, "addModule('linux-gnome-helpers', Buffer.from('DQoNCmZ1bmN0aW9uIGdub21lX2dldFByb3h5U2V0dGluZ3ModWlkKQ0Kew0KICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSwgeyBlbnY6IHsgSE9NRTogcmVxdWlyZSgndXNlci1zZXNzaW9ucycpLmdldEhvbWVGb2xkZXIodWlkKSB9fSk7DQogICAgY2hpbGQuc3RkZXJyLnN0ciA9ICcnOyBjaGlsZC5zdGRlcnIub24oJ2RhdGEnLCBmdW5jdGlvbiAoYykgeyB9KTsNCiAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7IGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IHRoaXMuc3RyICs9IGMudG9TdHJpbmcoKTsgfSk7DQoNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgnZ3NldHRpbmdzIGxpc3QtcmVjdXJzaXZlbHkgb3JnLmdub21lLnN5c3RlbS5wcm94eSB8IHRyICJcXG4iICJcXHwiIHwgdHIgIlxcXCciICJcXGAiIHwgYXdrIFwneyBjb3VudD1zcGxpdCgkMCwgcmVzLCAifCIpOycpDQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2ZvcihhPTA7YTxjb3VudDsrK2EpJyk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3snKTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgnc3BsaXQocmVzW2FdLCBtb2RlY2hlY2ssICIgIik7Jyk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ2lmKG1vZGVjaGVja1syXSA9PSAibW9kZSIpJyk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ3snKTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgnc3BsaXQobW9kZWNoZWNrWzNdLCBwcngsICJgIik7IG1vZGUgPSBwcnhbMl07Jyk7DQogICAgY2hpbGQuc3RkaW4ud3JpdGUoJ30nKTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgnaWYobW9kZWNoZWNrWzFdPT0ib3JnLmdub21lLnN5c3RlbS5wcm94eS5odHRwIiAmJiBtb2RlY2hlY2tbMl09PSJob3N0IikgeyBzcGxpdChtb2RlY2hlY2tbM10sIGhzdCwgImAiKTsgaG9zdCA9IGhzdFsyXTsgfScpOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdpZihtb2RlY2hlY2tbMV09PSJvcmcuZ25vbWUuc3lzdGVtLnByb3h5Lmh0dHAiICYmIG1vZGVjaGVja1syXT09InBvcnQiKSB7IHBvcnQgPSBtb2RlY2hlY2tbM107IH0nKTsNCiAgICBjaGlsZC5zdGRpbi53cml0ZSgnfScpOw0KICAgIGNoaWxkLnN0ZGluLndyaXRlKCdwcmludGYgIntcXCJtb2RlXFwiOiBcXCIlc1xcIiwgXFwiaG9zdFxcIjogXFwiJXNcXCIsIFxcInBvcnRcXCI6ICVzfSIsIG1vZGUsIGhvc3QsIHBvcnQ7IH1cJ1xuZXhpdFxuJyk7DQogICAgY2hpbGQud2FpdEV4aXQoKTsNCiAgICANCiAgICB0cnkNCiAgICB7DQogICAgICAgIHJldHVybiAoSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSkpOw0KICAgIH0NCiAgICBjYXRjaChlKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICh7fSk7DQogICAgfQ0KfQ0KDQpzd2l0Y2gocHJvY2Vzcy5wbGF0Zm9ybSkNCnsNCiAgICBjYXNlICdsaW51eCc6DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0geyBnZXRQcm94eVNldHRpbmdzOiBnbm9tZV9nZXRQcm94eVNldHRpbmdzIH0NCiAgICAgICAgYnJlYWs7DQp9', 'base64').toString());"); + duk_peval_string_noresult(ctx, "addModule('linux-cpuflags', Buffer.from('LyoKQ29weXJpZ2h0IDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8NCg0KdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsNCmNoaWxkLnN0ZG91dC5zdHIgPSAnJzsgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGMpIHsgdGhpcy5zdHIgKz0gYy50b1N0cmluZygpOyB9KTsNCmNoaWxkLnN0ZGluLndyaXRlKCJjYXQgL3Byb2MvY3B1aW5mbyB8IGdyZXAgZmxhZ3MgfCB0ciAnXFxuJyAnficgfCBhd2sgLUZ+ICd7IHByaW50ZiAiICsgJyJbIjsgZm9yKGk9MTtpPD1ORi0xOysraSkgeyBzcGxpdCgkaSwgbGluZSwgIjoiKTsgeD1zcGxpdChsaW5lWzJdLCB2YWxzLCAiICIpOyBwcmludGYgIiVzeyIsIChpIT0xPyIsIjoiIik7IGZvcihqPTE7ajw9eDsrK2opIHsgcHJpbnRmICIlc1xcIiVzXFwiOiAxIiwgKGohPTE/IiwiOiIiKSwgdmFsc1tqXTsgIH0gcHJpbnRmICJ9IjsgIH0gcHJpbnRmICJdIjsgfVwnXG5leGl0XG4nKTsNCmNoaWxkLnN0ZGVyci5vbignZGF0YScsIGZ1bmN0aW9uIChjKSB7IH0pOw0KY2hpbGQud2FpdEV4aXQoKTsNCg0KaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gJ2xpbnV4JykNCnsNCiAgICB0cnkNCiAgICB7DQogICAgICAgIG1vZHVsZS5leHBvcnRzID0gSlNPTi5wYXJzZShjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7DQogICAgfQ0KICAgIGNhdGNoICh4KQ0KICAgIHsNCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBudWxsOw0KICAgIH0NCn0NCmVsc2UNCnsNCiAgICBtb2R1bGUuZXhwb3J0cyA9IG51bGw7DQp9DQoNCv==', 'base64').toString());"); #endif char *_servicemanager = ILibMemory_Allocate(286686, 0, NULL, NULL); memcpy_s(_servicemanager + 0, 163820, "LyoKQ29weXJpZ2h0IDIwMTggSW50ZWwgQ29ycG9yYXRpb24KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKi8KdmFyIHByb21pc2UgPSByZXF1aXJlKCdwcm9taXNlJyk7CgpmdW5jdGlvbiBmYWlsdXJlQWN0aW9uVG9JbnRlZ2VyKGFjdGlvbikKewogICAgdmFyIHJldDsKICAgIHN3aXRjaChhY3Rpb24pCiAgICB7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICBjYXNlICdOT05FJzoKICAgICAgICAgICAgcmV0PTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ1NFUlZJQ0VfUkVTVEFSVCc6CiAgICAgICAgICAgIHJldD0xOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdSRUJPT1QnOgogICAgICAgICAgICByZXQ9MjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4ocmV0KTsKfQoKZnVuY3Rpb24gZXh0cmFjdEZpbGVOYW1lKGZpbGVQYXRoKQp7CiAgICBpZiAodHlwZW9mIChmaWxlUGF0aCkgPT0gJ3N0cmluZycpCiAgICB7CiAgICAgICAgdmFyIHRva2VucyA9IGZpbGVQYXRoLnNwbGl0KCdcXCcpLmpvaW4oJy8nKS5zcGxpdCgnLycpOwogICAgICAgIHZhciBuYW1lOwoKICAgICAgICB3aGlsZSAoKG5hbWUgPSB0b2tlbnMucG9wKCkpID09ICcnKTsKICAgICAgICByZXR1cm4gKG5hbWUpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJldHVybihmaWxlUGF0aC5uZXdOYW1lKQogICAgfQp9CmZ1bmN0aW9uIGV4dHJhY3RGaWxlU291cmNlKGZpbGVQYXRoKQp7CiAgICByZXR1cm4gKHR5cGVvZiAoZmlsZVBhdGgpID09ICdzdHJpbmcnID8gZmlsZVBhdGggOiBmaWxlUGF0aC5zb3VyY2UpOwp9CgpmdW5jdGlvbiBwYXJzZVNlcnZpY2VTdGF0dXModG9rZW4pCnsKICAgIHZhciBqID0ge307CiAgICB2YXIgc2VydmljZVR5cGUgPSB0b2tlbi5EZXJlZigwLCA0KS5JbnRWYWw7CiAgICBqLmlzRmlsZVN5c3RlbURyaXZlciA9ICgoc2VydmljZVR5cGUgJiAweDAwMDAwMDAyKSA9PSAweDAwMDAwMDAyKTsKICAgIGouaXNLZXJuZWxEcml2ZXIgPSAoKHNlcnZpY2VUeXBlICYgMHgwMDAwMDAwMSkgPT0gMHgwMDAwMDAwMSk7CiAgICBqLmlzU2hhcmVkUHJvY2VzcyA9ICgoc2VydmljZVR5cGUgJiAweDAwMDAwMDIwKSA9PSAweDAwMDAwMDIwKTsKICAgIGouaXNPd25Qcm9jZXNzID0gKChzZXJ2aWNlVHlwZSAmIDB4MDAwMDAwMTApID09IDB4MDAwMDAwMTApOwogICAgai5pc0ludGVyYWN0aXZlID0gKChzZXJ2aWNlVHlwZSAmIDB4MDAwMDAxMDApID09IDB4MDAwMDAxMDApOwogICAgai53YWl0SGludCA9IHRva2VuLkRlcmVmKCg2ICogNCksIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCk7CiAgICBzd2l0Y2ggKHRva2VuLkRlcmVmKCgxICogNCksIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCkpCiAgICB7CiAgICAgICAgY2FzZSAweDAwMDAwMDA1OgogICAgICAgICAgICBqLnN0YXRlID0gJ0NPTlRJTlVFX1BFTkRJTkcnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MDAwMDAwMDY6CiAgICAgICAgICAgIGouc3RhdGUgPSAnUEFVU0VfUEVORElORyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgwMDAwMDAwNzoKICAgICAgICAgICAgai5zdGF0ZSA9ICdQQVVTRUQnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4MDAwMDAwMDQ6CiAgICAgICAgICAgIGouc3RhdGUgPSAnUlVOTklORyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgwMDAwMDAwMjoKICAgICAgICAgICAgai5zdGF0ZSA9ICdTVEFSVF9QRU5ESU5HJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAweDAwMDAwMDAzOgogICAgICAgICAgICBqLnN0YXRlID0gJ1NUT1BfUEVORElORyc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMHgwMDAwMDAwMToKICAgICAgICAgICAgai5zdGF0ZSA9ICdTVE9QUEVEJzsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICB2YXIgY29udHJvbHNBY2NlcHRlZCA9IHRva2VuLkRlcmVmKCgyICogNCksIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCk7CiAgICBqLmNvbnRyb2xzQWNjZXB0ZWQgPSBbXTsKICAgIGlmICgoY29udHJvbHNBY2NlcHRlZCAmIDB4MDAwMDAwMTApID09IDB4MDAwMDAwMTApCiAgICB7CiAgICAgICAgai5jb250cm9sc0FjY2VwdGVkLnB1c2goJ1NFUlZJQ0VfQ09OVFJPTF9ORVRCSU5EQUREJyk7CiAgICAgICAgai5jb250cm9sc0FjY2VwdGVkLnB1c2goJ1NFUlZJQ0VfQ09OVFJPTF9ORVRCSU5EUkVNT1ZFJyk7CiAgICAgICAgai5jb250cm9sc0FjY2VwdGVkLnB1c2goJ1NFUlZJQ0VfQ09OVFJPTF9ORVRCSU5ERU5BQkxFJyk7CiAgICAgICAgai5jb250cm9sc0FjY2VwdGVkLnB1c2goJ1NFUlZJQ0VfQ09OVFJPTF9ORVRCSU5ERElTQUJMRScpOwogICAgfQogICAgaWYgKChjb250cm9sc0FjY2VwdGVkICYgMHgwMDAwMDAwOCkgPT0gMHgwMDAwMDAwOCkgeyBqLmNvbnRyb2xzQWNjZXB0ZWQucHVzaCgnU0VSVklDRV9DT05UUk9MX1BBUkFNQ0hBTkdFJyk7IH0KICAgIGlmICgoY29udHJvbHNBY2NlcHRlZCAmIDB4MDAwMDAwMDIpID09IDB4MDAwMDAwMDIpIHsgai5jb250cm9sc0FjY2VwdGVkLnB1c2goJ1NFUlZJQ0VfQ09OVFJPTF9QQVVTRScpOyBqLmNvbnRyb2xzQWNjZXB0ZWQucHVzaCgnU0VSVklDRV9DT05UUk9MX0NPTlRJTlVFJyk7IH0KICAgIGlmICgoY29udHJvbHNBY2NlcHRlZCAmIDB4MDAwMDAxMDApID09IDB4MDAwMDAxMDApIHsgai5jb250cm9sc0FjY2VwdGVkLnB1c2goJ1NFUlZJQ0VfQ09OVFJPTF9QUkVTSFVURE9XTicpOyB9CiAgICBpZiAoKGNvbnRyb2xzQWNjZXB0ZWQgJiAweDAwMDAwMDA0KSA9PSAweDAwMDAwMDA0KSB7IGouY29udHJvbHNBY2NlcHRlZC5wdXNoKCdTRVJWSUNFX0NPTlRST0xfU0hVVERPV04nKTsgfQogICAgaWYgKChjb250cm9sc0FjY2VwdGVkICYgMHgwMDAwMDAwMSkgPT0gMHgwMDAwMDAwMSkgeyBqLmNvbnRyb2xzQWNjZXB0ZWQucHVzaCgnU0VSVklDRV9DT05UUk9MX1NUT1AnKTsgfQogICAgaWYgKChjb250cm9sc0FjY2VwdGVkICYgMHgwMDAwMDAyMCkgPT0gMHgwMDAwMDAyMCkgeyBqLmNvbnRyb2xzQWNjZXB0ZWQucHVzaCgnU0VSVklDRV9DT05UUk9MX0hBUkRXQVJFUFJPRklMRUNIQU5HRScpOyB9CiAgICBpZiAoKGNvbnRyb2xzQWNjZXB0ZWQgJiAweDAwMDAwMDQwKSA9PSAweDAwMDAwMDQwKSB7IGouY29udHJvbHNBY2NlcHRlZC5wdXNoKCdTRVJWSUNFX0NPTlRST0xfUE9XRVJFVkVOVCcpOyB9CiAgICBpZiAoKGNvbnRyb2xzQWNjZXB0ZWQgJiAweDAwMDAwMDgwKSA9PSAweDAwMDAwMDgwKSB7IGouY29udHJvbHNBY2NlcHRlZC5wdXNoKCdTRVJWSUNFX0NPTlRST0xfU0VTU0lPTkNIQU5HRScpOyB9CiAgICBqLnBpZCA9IHRva2VuLkRlcmVmKCg3ICogNCksIDQpLnRvQnVmZmVyKCkucmVhZFVJbnQzMkxFKCk7CiAgICByZXR1cm4gKGopOwp9CgppZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PSAnZGFyd2luJykKewogICAgZnVuY3Rpb24gZ2V0T1NWZXJzaW9uKCkKICAgIHsKICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgIGNoaWxkLnN0ZG91dC5zdHIgPSAnJzsKICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoInN3X3ZlcnMgfCBncmVwIFByb2R1Y3RWZXJzaW9uIHwgYXdrICd7IHByaW50ICQyIH0nXG5leGl0XG4iKTsKICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwoKICAgICAgICAvL2NoaWxkLnN0ZG91dC5zdHIgPSAnMTAuOSc7CgogICAgICAgIHZhciByZXQgPSB7IHJhdzogY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkuc3BsaXQoJy4nKSwgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLnJhdy5qb2luKCcuJykpOyB9IH07CiAgICAgICAgcmV0LmNvbXBhcmVUbyA9IGZ1bmN0aW9uIGNvbXBhcmVUbyh2YWwpCiAgICAgICAgewogICAgICAgICAgICB2YXIgcmF3ID0gKHR5cGVvZiAodmFsKSA9PSAnc3RyaW5nJykgPyB2YWwuc3BsaXQoJy4nKSA6IHZhbC5yYXc7IGlmICghcmF3KSB7IHRocm93ICgnSW52YWxpZCBwYXJhbWV0ZXInKTsgfQogICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMucmF3LmpvaW4oJy4nKS5zcGxpdCgnLicpOwoKICAgICAgICAgICAgdmFyIHIgPSBudWxsLCBzID0gbnVsbDsKICAgICAgICAgICAgd2hpbGUgKHNlbGYubGVuZ3RoID4gMCAmJiByYXcubGVuZ3RoID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcyA9IHBhcnNlSW50KHNlbGYuc2hpZnQoKSk7IHIgPSBwYXJzZUludChyYXcuc2hpZnQoKSk7CiAgICAgICAgICAgICAgICBpZiAocyA8IHIpIHsgcmV0dXJuICgtMSk7IH0KICAgICAgICAgICAgICAgIGlmIChzID4gcikgeyByZXR1cm4gKDEpOyB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNlbGYubGVuZ3RoID09IHJhdy5sZW5ndGgpIHsgcmV0dXJuICgwKTsgfQogICAgICAgICAgICBpZiAoc2VsZi5sZW5ndGggPCByYXcubGVuZ3RoKSB7IHJldHVybiAoLTEpOyB9IGVsc2UgeyByZXR1cm4gKDEpOyB9ICAgIAogICAgICAgIH0KICAgICAgICByZXR1cm4gKHJldCk7CiAgICB9OwoKCiAgICBmdW5jdGlvbiBmZXRjaFBsaXN0KGZvbGRlciwgbmFtZSwgdXNlcmlkKQogICAgewogICAgICAgIGlmIChmb2xkZXIuZW5kc1dpdGgoJy8nKSkgeyBmb2xkZXIgPSBmb2xkZXIuc3Vic3RyaW5nKDAsIGZvbGRlci5sZW5ndGggLSAxKTsgfQogICAgICAgIHZhciByZXQgPSB7IG5hbWU6IG5hbWUsIGNsb3NlOiBmdW5jdGlvbiAoKSB7IH0sIF91aWQ6IHVzZXJpZCB9OwogICAgICAgIGlmICghcmVxdWlyZSgnZnMnKS5leGlzdHNTeW5jKGZvbGRlciArICcvJyArIG5hbWUgKyAnLnBsaXN0JykpCiAgICAgICAgewogICAgICAgICAgICAvLyBCZWZvcmUgd2UgdGhyb3cgaW4gdGhlIHRvd2VsLCBsZXQncyBlbnVtZXJhdGUgYWxsIHRoZSBwbGlzdCBmaWxlcywgYW5kIHNlZSBpZiBvbmUgaGFzIGEgbWF0Y2hpbmcgbGFiZWwKICAgICAgICAgICAgdmFyIGZpbGVzID0gcmVxdWlyZSgnZnMnKS5yZWFkZGlyU3luYyhmb2xkZXIpOwogICAgICAgICAgICBmb3IgKHZhciBmaWxlIGluIGZpbGVzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7IHRoaXMuc3RyICs9IGNodW5rLnRvU3RyaW5nKCk7IH0pOwogICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImNhdCAiICsgZm9sZGVyICsgJy8nICsgZmlsZXNbZmlsZV0gKyAiIHwgdHIgJ1xuJyAnXC4nIHwgYXdrICd7IHNwbGl0KCQwLCBhLCBcIjxrZXk+TGFiZWw8L2tleT5cIik7IHNwbGl0KGFbMl0sIGIsIFwiPC9zdHJpbmc+XCIpOyBzcGxpdChiWzFdLCBjLCBcIjxzdHJpbmc+XCIpOyBwcmludCBjWzJdOyB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICAgICAgaWYgKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpID09IG5hbWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0Lm5hbWUgPSBmaWxlc1tmaWxlXS5lbmRzV2l0aCgnLnBsaXN0JykgPyBmaWxlc1tmaWxlXS5zdWJzdHJpbmcoMCwgZmlsZXNbZmlsZV0ubGVuZ3RoIC0gNikgOiBmaWxlc1tmaWxlXTsKICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAnYWxpYXMnLCB7IHZhbHVlOiBuYW1lIH0pOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICdwbGlzdCcsIHsgdmFsdWU6IGZvbGRlciArICcvJyArIGZpbGVzW2ZpbGVdIH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXQubmFtZSA9PSBuYW1lKSB7IHRocm93ICgnICcgKyAoZm9sZGVyLnNwbGl0KCdMYXVuY2hEYWVtb24nKS5sZW5ndGg+MSA/ICdMYXVuY2hEYWVtb24nIDogJ0xhdW5jaEFnZW50JykgKyAnICgnICsgbmFtZSArICcpIE5PVCBGT1VORCcpOyB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICdwbGlzdCcsIHsgdmFsdWU6IGZvbGRlciArICcvJyArIG5hbWUgKyAnLnBsaXN0JyB9KTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwgJ2FsaWFzJywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiY2F0ICIgKyByZXQucGxpc3QgKyAiIHwgdHIgJ1xuJyAnXC4nIHwgYXdrICd7IHNwbGl0KCQwLCBhLCBcIjxrZXk+TGFiZWw8L2tleT5cIik7IHNwbGl0KGFbMl0sIGIsIFwiPC9zdHJpbmc+XCIpOyBzcGxpdChiWzFdLCBjLCBcIjxzdHJpbmc+XCIpOyBwcmludCBjWzJdOyB9J1xuZXhpdFxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAnZGFlbW9uJywgeyB2YWx1ZTogcmV0LnBsaXN0LnNwbGl0KCcvTGF1bmNoRGFlbW9ucy8nKS5sZW5ndGggPiAxID8gdHJ1ZSA6IGZhbHNlIH0pOwoKICAgICAgICByZXQuYXBwV29ya2luZ0RpcmVjdG9yeSA9IGZ1bmN0aW9uIGFwcFdvcmtpbmdEaXJlY3RvcnkoKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNGaWxlKCcvYmluL3NoJywgWydzaCddKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQub24oJ2RhdGEnLCBmdW5jdGlvbiAoY2h1bmspIHsgdGhpcy5zdHIgKz0gY2h1bmsudG9TdHJpbmcoKTsgfSk7CiAgICAgICAgICAgIGNoaWxkLnN0ZGluLndyaXRlKCJjYXQgIiArIHRoaXMucGxpc3QgKyAiIHwgdHIgJ1xuJyAnXC4nIHwgYXdrICd7IHNwbGl0KCQwLCBhLCBcIjxrZXk+V29ya2luZ0RpcmVjdG9yeTwva2V5PlwiKTsgc3BsaXQoYVsyXSwgYiwgXCI8L3N0cmluZz5cIik7IHNwbGl0KGJbMV0sIGMsIFwiPHN0cmluZz5cIik7IHByaW50IGNbMl07IH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgY2hpbGQud2FpdEV4aXQoKTsKICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9IGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpOwoKICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLmVuZHNXaXRoKCcvJykgPyBjaGlsZC5zdGRvdXQuc3RyLnN1YnN0cmluZygwLCBjaGlsZC5zdGRvdXQuc3RyLmxlbmd0aCAtIDEpIDogY2hpbGQuc3Rkb3V0LnN0cik7CiAgICAgICAgfTsKICAgICAgICByZXQuYXBwTG9jYXRpb24gPSBmdW5jdGlvbiBhcHBMb2NhdGlvbigpCiAgICAgICAgewogICAgICAgICAgICB2YXIgY2hpbGQgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY0ZpbGUoJy9iaW4vc2gnLCBbJ3NoJ10pOwogICAgICAgICAgICBjaGlsZC5zdGRvdXQuc3RyID0gJyc7CiAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoImNhdCAiICsgdGhpcy5wbGlzdCArICIgfCB0ciAnXG4nICdcLicgfCBhd2sgJ3sgc3BsaXQoJDAsIGEsIFwiPGtleT5Qcm9ncmFtQXJndW1lbnRzPC9rZXk+XCIpOyBzcGxpdChhWzJdLCBiLCBcIjwvc3RyaW5nPlwiKTsgc3BsaXQoYlsxXSwgYywgXCI8c3RyaW5nPlwiKTsgcHJpbnQgY1syXTsgfSdcbmV4aXRcbiIpOwogICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICByZXR1cm4gKGNoaWxkLnN0ZG91dC5zdHIudHJpbSgpKTsKICAgICAgICB9OwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXQsICdfcnVuQXRMb2FkJywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gQXV0by1TdGFydGluZyBzZXJ2aWNlLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0byBpbXBsZW1lbnQgJ3N0YXJ0JwogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiY2F0ICIgKyByZXQucGxpc3QgKyAiIHwgdHIgJ1xuJyAnXC4nIHwgYXdrICd7IHNwbGl0KCQwLCBhLCBcIjxrZXk+UnVuQXRMb2FkPC9rZXk+XCIpOyBzcGxpdChhWzJdLCBiLCBcIi8+XCIpOyBzcGxpdChiWzFdLCBjLCBcIjxcIik7IHByaW50IGNbMl07IH0nXG5leGl0XG4iKTsKICAgICAgICAgICAgICAgICAgICBjaGlsZC53YWl0RXhpdCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hpbGQuc3Rkb3V0LnN0ci50cmltKCkudG9VcHBlckNhc2UoKSA9PSAiVFJVRSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmV0LCAnc3RhcnRUeXBlJywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kYWVtb24pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuX3J1bkF0TG9hZCA/ICdBVVRPX1NUQVJUJyA6ICdERU1BTkRfU1RBUlQnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnQVVUT19TVEFSVCcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJldCwgIl9rZWVwQWxpdmUiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZCA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjRmlsZSgnL2Jpbi9zaCcsIFsnc2gnXSk7CiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3Rkb3V0LnN0ciA9ICcnOwogICAgICAgICAgICAgICAgICAgIGNoaWxkLnN0ZG91dC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykgeyB0aGlzLnN0ciArPSBjaHVuay50b1N0cmluZygpOyB9KTsKICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiY2F0ICIgKyByZXQucGxpc3QgKyAiIHwgdHIgJ1xuJyAnXC4nIHwgYXdrICd7c3BsaXQoJDAsIGEsIFwiPGtleT5LZWVwQWxpdmU8L2tleT5cIik7IHNwbGl0KGFbMl0sIGIsIFwiPFwiKTsgc3BsaXQoYlsyXSwgYywgXCI+XCIpOyAiKTsKICAgICAgICAgICAgICAgICAgICBjaGlsZC5zdGRpbi53cml0ZSgiIGlmKGNbMV09PVwiZGljdFwiKXsgc3BsaXQoYVsyXSwgZCwgXCI8L2RpY3Q+XCIpOyBpZihzcGxpdChkWzFdLCB0cnV2YWwsIFwiPHRydWUvPlwiKT4xKSB7IHNwbGl0KHRydXZhbFsxXSwga24xLCBcIjxrZXk+XCIpOyBzcGxpdChrbjFbMl0sIGtuMiwgXCI8L2tleT5cIik7IHByaW50IGtuMlsxXTsgfSB9Iik7CiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoIiBlbHNlIHsgc3BsaXQoY1sxXSwga2EsIFwiL1wiKTsgaWYoa2FbMV09PVwidHJ1ZVwiKSB7cHJpbnQgXCJBTFdBWVNcIjt9IH0gfSdcbmV4aXRcbiIpOwogICAgICAgICAgICAgICAgICAgIGNoaWxkLndhaXRFeGl0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGlsZC5zdGRvdXQuc3RyLnRyaW0oKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIHJldC5nZXRQSUQgPSBmdW5jdGlvbiBnZXRQSUQodWlkLCBhc1N0cmluZykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBvcHRpb25zID0gdW5kZWZpbmVkOwogICAgICAgICAgICB2YXIgY29tbWFuZDsKICAgICAgICAgICAgaWYgKHRoaXMuX3VpZCAhPSBudWxsKSB7IHVpZCA9IHRoaXMuX3VpZDsgfQoKICAgICAgICAgICAgaWYgKGdldE9TVmVyc2lvbigpLmNvbXBhcmVUbygnMTAuMTAnKSA8IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAibGF1bmNoY3RsIGxpc3QgfCBncmVwICciICsgdGhpcy5hbGlhcyArICInIHwgYXdrICd7IGlmKCQzPT1cIiIgKyB0aGlzLmFsaWFzICsgIlwiKXtwcmludCAkMTt9fSdcbmV4aXRcbiI7CiAgICAgICAgICAgICAgICBvcHRpb25zID0geyB1aWQ6IHVpZCB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHVpZCA9PSBudWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAnbGF1bmNoY3RsIHByaW50IHN5c3RlbSB8IGdyZXAgIicgKyB0aGlzLmFsaWFzICsgJyIgfCBhd2sgXCd7IGlmKHNwbGl0KCQwLCB0bXAsICIgIik9PTMpIHsgaWYoJDM9PSInICsgdGhpcy5hbGlhcyArICciKSB7IHByaW50ICQxOyB9IH19XCdcbmV4aXRcbic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg", 16000); diff --git a/modules/monitor-info.js b/modules/monitor-info.js index c11f300..211e4c3 100644 --- a/modules/monitor-info.js +++ b/modules/monitor-info.js @@ -45,7 +45,7 @@ function getLibInfo(libname) child = require('child_process').execFile('/bin/sh', ['sh']); child.stdout.str = ''; child.stdout.on('data', function (chunk) { this.str += chunk.toString(); }); - child.stdin.write(ldconfig + " -p | grep '" + libname + ".so.' | tr '\\n' '^' | awk -F^ '{ printf \"[\"; for(i=1;i<=NF;++i) {" + ' split($i, plat, ")"); split(plat[1], plat2, "("); split(plat2[2], ifo, ","); x=split($i, tok, " "); if(tok[1]!="") { printf "%s{\\"lib\\": \\"%s\\", \\"path\\": \\"%s\\", \\"info\\": \\"%s\\"}", (i!=1?",":""), tok[1], tok[x], ifo[2]; }} printf "]"; }\'\nexit\n'); + child.stdin.write(ldconfig + " -p | grep '" + libname + ".so.' | tr '\\n' '^' | awk -F^ '{ printf \"[\"; for(i=1;i<=NF;++i) {" + ' split($i, plat, ")"); split(plat[1], plat2, "("); ifox=split(plat2[2], ifo, ","); libc=""; hwcap="0"; for(ifoi=1;ifoi<=ifox;++ifoi) { if(split(ifo[ifoi], jnk, "libc")==2) { libc=ifo[ifoi]; } if(split(ifo[ifoi], jnk, "hwcap:")==2) { split(ifo[ifoi], jnk, "0x"); hwcap=jnk[2]; } } x=split($i, tok, " "); if(tok[1]!="") { printf "%s{\\"lib\\": \\"%s\\", \\"path\\": \\"%s\\", \\"hwcap\\": \\"%s\\", \\"libc\\": \\"%s\\"}", (i!=1?",":""), tok[1], tok[x], hwcap, libc; }} printf "]"; }\'\nexit\n'); child.waitExit(); var v = JSON.parse(child.stdout.str.trim()); @@ -108,50 +108,62 @@ function monitorinfo() for (ix in x11info) { - try - { - this._gm.CreateNativeProxy(x11info[ix].path); - Object.defineProperty(this, 'Location_X11LIB', { value: x11info[ix].path }); - break; - } - catch (ex) + if (x11info.length == 1 || x11info[ix].hwcap == "0") { + try + { + this._gm.CreateNativeProxy(x11info[ix].path); + Object.defineProperty(this, 'Location_X11LIB', { value: x11info[ix].path }); + break; + } + catch (ex) + { + } } } for (ix in xtstinfo) { - try - { - this._gm.CreateNativeProxy(xtstinfo[ix].path); - Object.defineProperty(this, 'Location_X11TST', { value: xtstinfo[ix].path }); - break; - } - catch (ex) + if (xtstinfo.length == 1 || xtstinfo[ix].hwcap == "0") { + try + { + this._gm.CreateNativeProxy(xtstinfo[ix].path); + Object.defineProperty(this, 'Location_X11TST', { value: xtstinfo[ix].path }); + break; + } + catch (ex) + { + } } } for (ix in xextinfo) { - try - { - this._gm.CreateNativeProxy(xextinfo[ix].path); - Object.defineProperty(this, 'Location_X11EXT', { value: xextinfo[ix].path }); - break; - } - catch (ex) + if (xextinfo.length == 1 || xextinfo[ix].hwcap == "0") { + try + { + this._gm.CreateNativeProxy(xextinfo[ix].path); + Object.defineProperty(this, 'Location_X11EXT', { value: xextinfo[ix].path }); + break; + } + catch (ex) + { + } } } for (ix in xfixesinfo) { - try - { - this._gm.CreateNativeProxy(xfixesinfo[ix].path); - Object.defineProperty(this, 'Location_X11FIXES', { value: xfixesinfo[ix].path }); - break; - } - catch (ex) + if (xfixesinfo.length == 1 || xfixesinfo[ix].hwcap == "0") { + try + { + this._gm.CreateNativeProxy(xfixesinfo[ix].path); + Object.defineProperty(this, 'Location_X11FIXES', { value: xfixesinfo[ix].path }); + break; + } + catch (ex) + { + } } }