UNPKG

linux-mobile-connection

Version:
192 lines (190 loc) 25.4 kB
var pathExists = require("path-exists"); var Promise = require("bluebird"); var timerdaemon = require("timerdaemon"); var Wvdial = require("wvdialjs"); var testConnection = require('promise-test-connection'); var merge = require("json-add"); var lsusbdev = require('lsusbdev'); var verb = require('verbo'); function setfordev(provider, options) { var mobilemodem = new Wvdial(options.wvdialFile); return new Promise(function (resolve, reject) { if (pathExists.sync('/sys/bus/usb/devices/' + options.dev)) { lsusbdev().then(function (data) { for (var i = 0; i < data.length; i++) { var usb = data[i]; if (usb.type == 'serial' && usb.hub == options.dev) { if (pathExists.sync(options.wvdialFile)) { mobilemodem.setUsb(usb.dev).then(function () { resolve(true); }).catch(function (err) { reject(err); }); } else { mobilemodem.configure(provider).then(function () { mobilemodem.setUsb(usb.dev).then(function () { resolve(true); }).catch(function (err) { reject(err); console.log('here8'); }); }).catch(function (err) { reject(err); }); } ; } else { reject("err"); } ; } ; }); } else { reject({ error: "Wrong device" }); } ; }); } ; function goconnect(provider, options) { var mobilemodem = new Wvdial(options.wvdialFile); return new Promise(function (resolve, reject) { if (options.dev) { setfordev(provider, options).then(function () { mobilemodem.connect().then(function () { resolve(true); }).catch(function (err) { reject(err); }); }).catch(function (err) { reject(err); }); } else { mobilemodem.configure(provider).then(function () { mobilemodem.connect().then(function () { resolve(true); }).catch(function (err) { reject(err); }); }).catch(function (err) { reject(err); }); } ; }); } ; ; ; ; module.exports = function (provider, opt) { return new Promise(function (resolve, reject) { var options = { verbose: true, wvdialFile: "/etc/wvdial.conf", dev: false, ifOffline: true, retry: true }; if (opt) { merge(options, opt); } ; if (provider && provider.apn) { if (options.retry && options.ifOffline) { if (options.dev) { setfordev(provider, options).then(function () { goconnect(provider, options).then(function () { reject({ running: false, daemonized: true }); }).catch(function (err) { reject(err); }); timerdaemon.post(240000, function () { testConnection().catch(function () { goconnect(provider, options); }); }); }).catch(function (err) { reject(err); }); } else { goconnect(provider, options).then(function () { reject({ running: false, daemonized: true }); }).catch(function (err) { reject(err); }); timerdaemon.post(240000, function () { testConnection().catch(function () { goconnect(provider, options); }); }); } ; } else { if (options.ifOffline) { if (options.dev) { setfordev(provider, options).then(function () { testConnection().then(function () { reject({ online: true }); }).catch(function () { goconnect(provider, options).then(function (data) { resolve(data); }).catch(function (err) { reject(err); }); }); }).catch(function (err) { reject(err); }); } else { testConnection().then(function () { reject({ online: true }); }).catch(function () { goconnect(provider, options).then(function (data) { resolve(data); }).catch(function (err) { reject(err); }); }); } } else { if (options.dev) { setfordev(provider, options).then(function () { goconnect(provider, options).then(function (answer) { resolve(answer); }).catch(function (err) { reject(err); }); }).catch(function (err) { reject(err); }); } else { goconnect(provider, options).then(function (answer) { resolve(answer); }).catch(function (err) { reject(err); }); } ; } ; } ; } else { reject({ error: "You must provide a valid Apn" }); } ; }); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbInNldGZvcmRldiIsImdvY29ubmVjdCJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBWSxVQUFVLFdBQU0sYUFBYSxDQUFDLENBQUE7QUFDMUMsSUFBWSxPQUFPLFdBQU0sVUFBVSxDQUFDLENBQUE7QUFDcEMsSUFBWSxXQUFXLFdBQU0sYUFBYSxDQUFDLENBQUE7QUFFM0MsSUFBTyxNQUFNLFdBQVcsVUFBVSxDQUFDLENBQUM7QUFDcEMsSUFBTyxjQUFjLFdBQVcseUJBQXlCLENBQUMsQ0FBQztBQUMzRCxJQUFPLEtBQUssV0FBVyxVQUFVLENBQUMsQ0FBQztBQUNuQyxJQUFPLFFBQVEsV0FBVyxVQUFVLENBQUMsQ0FBQztBQUV0QyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFNUIsbUJBQW1CLFFBQWtCLEVBQUUsT0FBa0I7SUFDckRBLElBQUlBLFdBQVdBLEdBQUdBLElBQUlBLE1BQU1BLENBQUNBLE9BQU9BLENBQUNBLFVBQVVBLENBQUNBLENBQUNBO0lBRWpEQSxNQUFNQSxDQUFDQSxJQUFJQSxPQUFPQSxDQUFVQSxVQUFTQSxPQUFPQSxFQUFFQSxNQUFNQTtRQUVoRCxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekQsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVMsSUFBK0U7Z0JBQ3BHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ25DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxPQUFP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Q0FBQyxJQUFJLENBQUM7NEJBQzlCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVMsTUFBTTtnQ0FDN0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNwQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBUyxHQUFHO2dDQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ2hCLENBQUMsQ0FBQyxDQUFBO3dCQUNOLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFTLEdBQUc7NEJBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDaEIsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDSixTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFTLE1BQU07NEJBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTt3QkFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVMsR0FBRzs0QkFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dCQUNmLENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUM7b0JBQUEsQ0FBQztnQkFDTixDQUFDO2dCQUFBLENBQUM7WUFDTixDQUFDO1lBQUEsQ0FBQztRQUNOLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxDQUFDLENBQUE7UUFDckQsQ0FBQztRQUFBLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGhFeGlzdHMgZnJvbSBcInBhdGgtZXhpc3RzXCI7XG5pbXBvcnQgKiBhcyBQcm9taXNlIGZyb20gXCJibHVlYmlyZFwiO1xuaW1wb3J0ICogYXMgdGltZXJkYWVtb24gZnJvbSBcInRpbWVyZGFlbW9uXCI7XG5cbmltcG9ydCBXdmRpYWwgPSByZXF1aXJlKFwid3ZkaWFsanNcIik7XG5pbXBvcnQgdGVzdENvbm5lY3Rpb24gPSByZXF1aXJlKCdwcm9taXNlLXRlc3QtY29ubmVjdGlvbicpO1xuaW1wb3J0IG1lcmdlID0gcmVxdWlyZShcImpzb24tYWRkXCIpO1xuaW1wb3J0IGxzdXNiZGV2ID0gcmVxdWlyZSgnbHN1c2JkZXYnKTtcblxubGV0IHZlcmIgPSByZXF1aXJlKCd2ZXJibycpO1xuXG5mdW5jdGlvbiBzZXRmb3JkZXYocHJvdmlkZXI6SVByb3ZpZGVyLCBvcHRpb25zOklDbGFzc0NvbmYpIHtcbiAgICBsZXQgbW9iaWxlbW9kZW0gPSBuZXcgV3ZkaWFsKG9wdGlvbnMud3ZkaWFsRmlsZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cbiAgICAgICAgaWYgKHBhdGhFeGlzdHMuc3luYygnL3N5cy9idXMvdXNiL2RldmljZXMvJyArIG9wdGlvbnMuZGV2KSkge1xuXG4gICAgICAgICAgICBsc3VzYmRldigpLnRoZW4oZnVuY3Rpb24oZGF0YTogW3sgdHlwZTogc3RyaW5nLCBkZXY6IHN0cmluZywgcHJvZHVjdDogc3RyaW5nLCBodWI6IHN0cmluZywgaWQ6IHN0cmluZyB9XSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdXNiID0gZGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVzYi50eXBlID09ICdzZXJpYWwnICYmIHVzYi5odWIgPT0gb3B0aW9ucy5kZXYpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhFeGlzdHMuc3luYyhvcHRpb25zLnd2ZGlhbEZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlbW9kZW0uc2V0VXNiKHVzYi5kZXYpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlbW9kZW0uY29uZmlndXJlKHByb3ZpZGVyKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2JpbGVtb2RlbS5zZXRVc2IodXNiLmRldikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnaGVyZTgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiZXJyXCIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdCh7IGVycm9yOiBcIldyb25nIGRldmljZVwiIH0pO1xuICAgICAgICB9O1xuXG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBnb2Nvbm5lY3QocHJvdmlkZXI6SVByb3ZpZGVyLCBvcHRpb25zOklDbGFzc0NvbmYpIHtcblxuICAgIGxldCBtb2JpbGVtb2RlbSA9IG5ldyBXdmRpYWwob3B0aW9ucy53dmRpYWxGaWxlKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblxuICAgICAgICBpZiAob3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICAgIHNldGZvcmRldihwcm92aWRlciwgb3B0aW9ucykudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBtb2JpbGVtb2RlbS5jb25uZWN0KCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vYmlsZW1vZGVtLmNvbmZpZ3VyZShwcm92aWRlcikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBtb2JpbGVtb2RlbS5jb25uZWN0KCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH07XG4gICAgfSk7XG59O1xuXG5cbmludGVyZmFjZSBJQ2xhc3NDb25mIHtcbiAgICB2ZXJib3NlOiBib29sZWFuO1xuICAgIHd2ZGlhbEZpbGU6IHN0cmluZztcbiAgICBkZXY6IGFueTtcbiAgICBpZk9mZmxpbmU6IGJvb2xlYW47XG4gICAgcmV0cnk6IGJvb2xlYW47XG59O1xuXG5pbnRlcmZhY2UgSUNsYXNzT3B0IHtcbiAgICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgICB3dmRpYWxGaWxlPzogc3RyaW5nO1xuICAgIGRldj86IGFueTtcbiAgICBpZk9mZmxpbmU/OiBib29sZWFuO1xuICAgIHJldHJ5PzogYm9vbGVhbjtcbn07XG5cbmludGVyZmFjZSBJUHJvdmlkZXIge1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGFwbjogc3RyaW5nO1xuICAgIHBob25lPzogc3RyaW5nXG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG59O1xuXG5cbmV4cG9ydCA9IGZ1bmN0aW9uKHByb3ZpZGVyOiBJUHJvdmlkZXIsIG9wdDogSUNsYXNzT3B0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXG4gICAgICAgIGxldCBvcHRpb25zOiBJQ2xhc3NDb25mID0ge1xuICAgICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgICAgIHd2ZGlhbEZpbGU6IFwiL2V0Yy93dmRpYWwuY29uZlwiLFxuICAgICAgICAgICAgZGV2OiBmYWxzZSxcbiAgICAgICAgICAgIGlmT2ZmbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5OiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gIG9wdGlvbnMucmV0cnlNYXg9MTA7XG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIG1lcmdlKG9wdGlvbnMsIG9wdCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChwcm92aWRlciAmJiBwcm92aWRlci5hcG4pIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJldHJ5ICYmIG9wdGlvbnMuaWZPZmZsaW5lKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGV2KSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzZXRmb3JkZXYocHJvdmlkZXIsIG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnb2Nvbm5lY3QocHJvdmlkZXIsIG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHsgcnVubmluZzogZmFsc2UsIGRhZW1vbml6ZWQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJkYWVtb24ucG9zdCgyNDAwMDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25uZWN0aW9uKCkuY2F0Y2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvY29ubmVjdChwcm92aWRlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZ29jb25uZWN0KHByb3ZpZGVyLCBvcHRpb25zKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHsgcnVubmluZzogZmFsc2UsIGRhZW1vbml6ZWQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgdGltZXJkYWVtb24ucG9zdCgyNDAwMDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbm5lY3Rpb24oKS5jYXRjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2Nvbm5lY3QocHJvdmlkZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmlmT2ZmbGluZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Zm9yZGV2KHByb3ZpZGVyLCBvcHRpb25zKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb25uZWN0aW9uKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHsgb25saW5lOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2Nvbm5lY3QocHJvdmlkZXIsIG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbm5lY3Rpb24oKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCh7IG9ubGluZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvY29ubmVjdChwcm92aWRlciwgb3B0aW9ucykudGhlbihmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5kZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldGZvcmRldihwcm92aWRlciwgb3B0aW9ucykudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb2Nvbm5lY3QocHJvdmlkZXIsIG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24oYW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYW5zd2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnb2Nvbm5lY3QocHJvdmlkZXIsIG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24oYW5zd2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhbnN3ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoeyBlcnJvcjogXCJZb3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgQXBuXCIgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=