redibox-hook-job
Advanced tools
Comparing version 1.2.3 to 1.2.4
@@ -252,7 +252,11 @@ 'use strict'; | ||
if (job.options.noBind || this.options.noBind) { | ||
return handler(job).then(handleOK, handleError).catch(handleError); | ||
try { | ||
if (job.options.noBind || this.options.noBind) { | ||
return handler(job).then(handleOK, handleError).catch(handleError); | ||
} | ||
return handler.bind(job, job)(job).then(handleOK, handleError).catch(handleError); | ||
} catch (e) { | ||
return handleError(e); | ||
} | ||
return handler.bind(job, job)(job).then(handleOK, handleError).catch(handleError); | ||
} | ||
@@ -495,2 +499,2 @@ | ||
exports.default = Queue; | ||
//# sourceMappingURL=data:application/json;base64,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TlIsRUFPTCxJQVBLLENBT0EsTUFBTTtBQUNYLFVBQUksQ0FBQyxLQUFLLE9BQUwsQ0FBYSxPQUFkLElBQXlCLEtBQUssTUFBbEMsRUFBMEMsT0FBTyxtQkFBUSxPQUFSLEVBQVA7QUFDMUMsYUFBTyxtQkFBUSxLQUFSLENBQWMsS0FBSyxPQUFMLENBQWEsYUFBM0IsRUFBMEMsSUFBMUMsQ0FBK0MsS0FBSyxnQkFBcEQsQ0FBUDtBQUNELEtBVk0sQ0FBUDtBQVdEOztBQUVEOzs7OztBQUtBLFFBQU0sR0FBTixFQUFXO0FBQ1QsUUFBSSxLQUFLLElBQUwsQ0FBVSxPQUFWLENBQWtCLFNBQWxCLEVBQUosRUFBbUM7QUFDakMsYUFBUSxJQUFFLEtBQUssT0FBTCxDQUFhLFNBQVUsT0FBSSxLQUFLLElBQUssT0FBSSxHQUFJLEdBQXZEO0FBQ0Q7QUFDRCxXQUFRLElBQUUsS0FBSyxPQUFMLENBQWEsU0FBVSxNQUFHLEtBQUssSUFBSyxNQUFHLEdBQUksR0FBckQ7QUFDRDs7QUFFRDs7Ozs7QUFqZThDO2tCQUEzQixLIiwiZmlsZSI6InF1ZXVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEpvYiBmcm9tICcuL2pvYic7XG5pbXBvcnQgUHJvbWlzZSBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cyc7XG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0IHsgZGVlcEdldCwgaXNPYmplY3QsIGdldFRpbWVTdGFtcCwgdHJ5SlNPTlBhcnNlIH0gZnJvbSAncmVkaWJveCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFF1ZXVlIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHBhcmFtIGNvcmVcbiAgICogQHJldHVybnMge1F1ZXVlfVxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgY29yZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb3JlID0gY29yZTtcbiAgICB0aGlzLmNsaWVudCA9IGNvcmUuY2xpZW50O1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy50aHJvdHRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxvZyA9IHRoaXMuY29yZS5sb2c7XG4gICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lO1xuICAgIHRoaXMuaGFuZGxlciA9IG9wdGlvbnMuaGFuZGxlciB8fCBudWxsO1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLnF1ZXVlLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmNvcmUuY3JlYXRlQ2xpZW50KCdibG9jaycsIHRoaXMpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5sb2cudmVyYm9zZShgQmxvY2tpbmcgY2xpZW50IGZvciBxdWV1ZSAnJHt0aGlzLm5hbWV9JyBpcyByZWFkeS4gU3RhcnRpbmcgcXVldWUgcHJvY2Vzc29yLmApO1xuICAgICAgdGhpcy5iZWdpbldvcmtpbmcoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICdpZCcsICdqb2JzJywgJ3N0YWxsVGltZScsICdzdGFsbGluZycsICd3YWl0aW5nJywgJ2FjdGl2ZScsICdzdWNjZWVkZWQnLCAnZmFpbGVkJyxcbiAgICBdLm1hcChrZXkgPT4gdGhpcy50b0tleShrZXkpKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZGVsKC4uLmtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgY2hlY2tIZWFsdGgoKSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5jbGllbnQubXVsdGkoKVxuICAgICAgLmxsZW4odGhpcy50b0tleSgnd2FpdGluZycpKVxuICAgICAgLmxsZW4odGhpcy50b0tleSgnYWN0aXZlJykpXG4gICAgICAuc2NhcmQodGhpcy50b0tleSgnc3VjY2VlZGVkJykpXG4gICAgICAuc2NhcmQodGhpcy50b0tleSgnZmFpbGVkJykpXG4gICAgICAudGhlbihyZXN1bHRzID0+IHsgLyogZXNsaW50IGFycm93LWJvZHktc3R5bGU6IDAgKi9cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3YWl0aW5nOiByZXN1bHRzWzBdWzFdLFxuICAgICAgICAgIGFjdGl2ZTogcmVzdWx0c1sxXVsxXSxcbiAgICAgICAgICBzdWNjZWVkZWQ6IHJlc3VsdHNbMl1bMV0sXG4gICAgICAgICAgZmFpbGVkOiByZXN1bHRzWzNdWzFdLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBfZ2V0TmV4dEpvYigpIHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKGBHZXR0aW5nIG5leHQgam9iIGZvciBxdWV1ZSAnJHt0aGlzLm5hbWV9Jy5gKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnRzLmJsb2NrLmJycG9wbHB1c2goXG4gICAgICB0aGlzLnRvS2V5KCd3YWl0aW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCdhY3RpdmUnKSwgMFxuICAgICkudGhlbihqb2JJZCA9PlxuICAgICAgSm9iLmZyb21JZCh0aGlzLCBqb2JJZCkudGhlbihqb2IgPT4ge1xuICAgICAgICByZXR1cm4gam9iO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHBhcmFtIGpvYkVycm9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbG9nSm9iRmFpbHVyZShqb2IsIGpvYkVycm9yKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52LktVQkVSTkVURVNfUE9SVCB8fCBwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1NFUlZJQ0VfSE9TVCkge1xuICAgICAgLyogZXNsaW50IG5vLWNvbnNvbGU6IDAgKi9cbiAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIHR5cGU6ICdyZWRpYm94X2pvYl9mYWlsdXJlJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHJ1bnM6IGpvYi5kYXRhLnJ1bnMsXG4gICAgICAgICAgcXVldWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBzdGFjazogam9iRXJyb3Iuc3RhY2sgPyBqb2JFcnJvci5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgNSkgOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJycpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJy0tLS0tLS0tLS0tLS0tLSBSREIgSk9CIEVSUk9SL0ZBSUxVUkUgLS0tLS0tLS0tLS0tLS0tJyk7XG4gICAgICB0aGlzLmxvZy5lcnJvcihgSm9iOiAke2pvYi5kYXRhLnJ1bnN9YCB8fCB0aGlzLm5hbWUpO1xuICAgICAgaWYgKGpvYkVycm9yLnN0YWNrKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yKGpvYkVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5zbGljZSgwLCA1KSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZy5lcnJvcihqb2JFcnJvcik7XG4gICAgICB0aGlzLmxvZy5lcnJvcignLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7XG4gICAgICB0aGlzLmxvZy5lcnJvcignJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBfcnVuSm9iKGpvYikge1xuICAgIGlmICgham9iIHx8ICFqb2IuZGF0YSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGNvbnN0IHJ1bnMgPSBqb2IuZGF0YSAmJiBqb2IuZGF0YS5ydW5zICYmIEFycmF5LmlzQXJyYXkoam9iLmRhdGEucnVucykgPyBqb2IuZGF0YS5ydW5zWzBdIDogam9iLmRhdGEucnVucztcbiAgICBjb25zdCBoYW5kbGVyID0gKHR5cGVvZiB0aGlzLmhhbmRsZXIgPT09ICdzdHJpbmcnID9cbiAgICAgICAgZGVlcEdldChnbG9iYWwsIHRoaXMuaGFuZGxlcikgOiB0aGlzLmhhbmRsZXIpIHx8IGRlZXBHZXQoZ2xvYmFsLCBydW5zKTtcblxuICAgIGxldCBwcmV2ZW50U3RhbGxpbmdUaW1lb3V0O1xuICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUgYW4gXCJPS1wiIHJlc3BvbnNlIGZyb20gdGhlIHByb21pc2VcbiAgICBjb25zdCBoYW5kbGVPSyA9IGRhdGEgPT4ge1xuICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGFueSBtdWx0aXBsZSBjYWxsc1xuICAgICAgaWYgKGhhbmRsZWQpIHJldHVybiB2b2lkIDA7XG5cbiAgICAgIGNsZWFyVGltZW91dChwcmV2ZW50U3RhbGxpbmdUaW1lb3V0KTtcbiAgICAgIGhhbmRsZWQgPSB0cnVlO1xuXG4gICAgICAvLyBzZXQgdGhlIGRhdGEgYmFjayB0byBpbnRlcm5hbCBkYXRhXG4gICAgICBpZiAoam9iLl9pbnRlcm5hbERhdGEpIHtcbiAgICAgICAgam9iLmRhdGEgPSBqb2IuX2ludGVybmFsRGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSByZWxheSB0byBuZXh0IGpvYiBpZiB1c2VyIGRpZCBub3QgcmVzb2x2ZSAnZmFsc2UnIG9uIGN1cnJlbnQgam9iXG4gICAgICBpZiAoam9iLnR5cGUgPT09ICdyZWxheScgJiYgZGF0YSAhPT0gZmFsc2UpIHJldHVybiB0aGlzLl9maW5pc2hSZWxheUpvYihudWxsLCBkYXRhLCBqb2IpO1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFNpbmdsZUpvYihudWxsLCBkYXRhLCBqb2IpO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgYW55IGVycm9ycyByZXR1cm5lZFxuICAgIGNvbnN0IGhhbmRsZUVycm9yID0gam9iRXJyb3IgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHByZXZlbnRTdGFsbGluZ1RpbWVvdXQpO1xuXG4gICAgICAvLyBzaWxlbnRseSBpZ25vcmUgYW55IG11bHRpcGxlIGNhbGxzXG4gICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHRoZSBkYXRhIGJhY2sgdG8gaW50ZXJuYWwgam9iIGRhdGFcbiAgICAgIGlmIChqb2IuX2ludGVybmFsRGF0YSkge1xuICAgICAgICBqb2IuZGF0YSA9IGpvYi5faW50ZXJuYWxEYXRhO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IGxvZyB0aGUgZXJyb3IgaWYgbm8gbm90aWZ5RmFpbHVyZSBwdWJzdWIgc2V0XG4gICAgICBpZiAoKCFqb2IuZGF0YS5pbml0aWFsSm9iIHx8ICFqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkgJiYgIUFycmF5LmlzQXJyYXkoam9iLmRhdGEucnVucykpIHtcbiAgICAgICAgdGhpcy5fbG9nSm9iRmFpbHVyZShqb2IsIGpvYkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2Ioam9iRXJyb3IsIG51bGwsIGpvYik7XG4gICAgICByZXR1cm4gdGhpcy5fZmluaXNoU2luZ2xlSm9iKGpvYkVycm9yLCBudWxsLCBqb2IpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcmV2ZW50U3RhbGxpbmcgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNsaWVudC5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCwgKCkgPT4ge1xuICAgICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgICBwcmV2ZW50U3RhbGxpbmdUaW1lb3V0ID0gc2V0VGltZW91dChwcmV2ZW50U3RhbGxpbmcsIHRoaXMub3B0aW9ucy5zdGFsbEludGVydmFsIC8gMik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihcbiAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgIGBcIiR7am9iLmRhdGEucnVucyB8fCAnTm8gSm9iIEhhbmRsZXIgU3BlY2lmaWVkJ31cIiB3YXMgbm90IGZvdW5kLiBTa2lwcGluZyBqb2IuIFRvIGZpeCB0aGlzXG4gICAgICAgICAgICAgeW91IG11c3QgZWl0aGVyIHNwZWNpZnkgYSBoYW5kbGVyIGZ1bmN0aW9uIHZpYSBxdWV1ZS5wcm9jZXNzKCkgb3IgcHJvdmlkZSBhIHZhbGlkIGhhbmRsZXJcbiAgICAgICAgICAgICBub2RlIGdsb2JhbCBwYXRoIGluIHlvdXIgam9iIG9wdGlvbnMgJ2hhbmRsZXInLCBlLmcuIGlmIHlvdSBoYWQgYSBnbG9iYWwgZnVuY3Rpb24gaW5cbiAgICAgICAgICAgICdnbG9iYWwuc2FpbHMuc2VydmljZXMubXlzZXJ2aWNlJyB5b3UnZCBzcGVjaWZ5IHRoZSBoYW5kbGVyIGFzICdzYWlscy5zZXJ2aWNlcy5teXNlcnZpY2UubXlIYW5kbGVyJy5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcHJldmVudFN0YWxsaW5nKCk7IC8vIHN0YXJ0IHN0YWxsaW5nIG1vbml0b3JcblxuICAgIGpvYi5faW50ZXJuYWxEYXRhID0gam9iLmRhdGE7XG4gICAgam9iLmRhdGEgPSBqb2IuZGF0YS5kYXRhIHx8IGpvYi5kYXRhO1xuXG4gICAgaWYgKGpvYi5vcHRpb25zLnRpbWVvdXQpIHtcbiAgICAgIHNldFRpbWVvdXQoaGFuZGxlRXJyb3IuYmluZChudWxsLCBFcnJvcihgSm9iICR7am9iLmlkfSB0aW1lZCBvdXQgKCR7am9iLm9wdGlvbnMudGltZW91dH1tcylgKSksIGpvYi5vcHRpb25zLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIGlmIChqb2Iub3B0aW9ucy5ub0JpbmQgfHwgdGhpcy5vcHRpb25zLm5vQmluZCkge1xuICAgICAgcmV0dXJuIGhhbmRsZXIoam9iKS50aGVuKGhhbmRsZU9LLCBoYW5kbGVFcnJvcikuY2F0Y2goaGFuZGxlRXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBoYW5kbGVyLmJpbmQoam9iLCBqb2IpKGpvYikudGhlbihoYW5kbGVPSywgaGFuZGxlRXJyb3IpLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7e2pvYjoge2lkOiAqLCB3b3JrZXJfaWQ6ICgqfFN0cmluZ3xzdHJpbmcpLCBzdGF0dXM6IHN0cmluZ30sIGVycm9yOiAqLCBvdXRwdXQ6ICp9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgam9iOiB7XG4gICAgICAgIGlkOiBqb2IuaWQsXG4gICAgICAgIHdvcmtlcl9pZDogdGhpcy5jb3JlLmlkLFxuICAgICAgICBzdGF0dXM6IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJyxcbiAgICAgICAgLi4uam9iLmRhdGEsXG4gICAgICB9LFxuICAgICAgZXJyb3IsXG4gICAgICBvdXRwdXQ6IGRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcGFyYW0gbXVsdGlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF91cGRhdGVKb2JTdGF0dXMoZXJyb3IsIGRhdGEsIGpvYiwgbXVsdGkpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCc7XG5cbiAgICBtdWx0aS5scmVtKHRoaXMudG9LZXkoJ2FjdGl2ZScpLCAwLCBqb2IuaWQpO1xuICAgIG11bHRpLnNyZW0odGhpcy50b0tleSgnc3RhbGxpbmcnKSwgam9iLmlkKTtcblxuICAgIGlmIChzdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICBpZiAoam9iLm9wdGlvbnMucmV0cmllcyA+IDApIHtcbiAgICAgICAgam9iLm9wdGlvbnMucmV0cmllcyA9IGpvYi5vcHRpb25zLnJldHJpZXMgLSAxO1xuICAgICAgICBqb2Iuc3RhdHVzID0gJ3JldHJ5aW5nJztcbiAgICAgICAgbXVsdGkuaHNldCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCwgam9iLnRvRGF0YSgpKTtcbiAgICAgICAgbXVsdGkubHB1c2godGhpcy50b0tleSgnd2FpdGluZycpLCBqb2IuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgam9iLnN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICBtdWx0aS5oZGVsKHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkKTtcbiAgICAgICAgLy8gVE9ETyB0cmFjayBmYWlsdXJlcyBhbmQgdGhlaXIgZGF0YSBzb21ld2hlcmUgZWxzZSBmb3IgcmV2aWV3aW5nXG4gICAgICAgIC8vIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAgIC8vIG11bHRpLnNhZGQodGhpcy50b0tleSgnZmFpbGVkJyksIGpvYi5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGpvYi5zdGF0dXMgPSAnc3VjY2VlZGVkJztcbiAgICAgIG11bHRpLmhkZWwodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQpO1xuICAgICAgLy8gVE9ETyB0cmFjayBzdWNjZXNzZXMgYW5kIHRoZWlyIGRhdGEgc29tZXdoZXJlIGVsc2UgZm9yIHJldmlld2luZ1xuICAgICAgLy8gbXVsdGkuaHNldCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCwgam9iLnRvRGF0YSgpKTtcbiAgICAgIC8vIG11bHRpLnNhZGQodGhpcy50b0tleSgnc3VjY2VlZGVkJyksIGpvYi5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX2ZpbmlzaFNpbmdsZUpvYihlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgY29uc3QgbXVsdGkgPSB0aGlzLmNsaWVudC5tdWx0aSgpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJztcbiAgICB0aGlzLl91cGRhdGVKb2JTdGF0dXMoZXJyb3IsIGRhdGEsIGpvYiwgbXVsdGkpO1xuXG4gICAgLy8gZW1pdCBzdWNjZXNzIG9yIGZhaWx1cmUgZXZlbnQgaWYgd2UgaGF2ZSBsaXN0ZW5lcnNcbiAgICBpZiAoZXJyb3IgJiYgam9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUsIHRoaXMuX2NyZWF0ZUpvYkV2ZW50KGVycm9yLCBkYXRhLCBqb2IpKTtcbiAgICB9IGVsc2UgaWYgKGpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG11bHRpLmV4ZWMoZXJyTXVsdGkgPT4ge1xuICAgICAgICBpZiAoZXJyTXVsdGkpIHJldHVybiByZWplY3QoZXJyTXVsdGkpO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7IHN0YXR1cywgcmVzdWx0OiBlcnJvciB8fCBkYXRhIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGVzIGEgbXVsdGkgam9iIG9yIGNvbnRpbnVlcyB0byB0aGUgbmV4dCBzdGFnZS5cbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZmluaXNoUmVsYXlKb2IoZXJyb3IsIGRhdGEsIGpvYikge1xuICAgIGxldCBuZXh0UXVldWUgPSB0aGlzLm5hbWU7XG4gICAgY29uc3QgbmV4dEpvYiA9IGpvYi5kYXRhLnJ1bnNbMF07XG4gICAgY29uc3QgbXVsdGkgPSB0aGlzLmNsaWVudC5tdWx0aSgpO1xuICAgIGNvbnN0IGN1cnJlbnRKb2IgPSBqb2IuZGF0YS5ydW5zLnNoaWZ0KCk7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgZmlyc3Qgam9iIGluIHRoaXMgcmVsYXkgaW5zdGFuY2VcbiAgICBpZiAoIWpvYi5kYXRhLmluaXRpYWxKb2IpIHtcbiAgICAgIGpvYi5kYXRhLmluaXRpYWxKb2IgPSB0cnlKU09OUGFyc2Uoam9iLnRvRGF0YSgpKTtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBmaXJzdCBxdWV1ZSBpbiB0aGlzIHJlbGF5IGluc3RhbmNlXG4gICAgaWYgKCFqb2IuZGF0YS5pbml0aWFsUXVldWUpIHtcbiAgICAgIGpvYi5kYXRhLmluaXRpYWxRdWV1ZSA9IHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVKb2JTdGF0dXMoZXJyb3IsIGRhdGEsIGpvYiwgbXVsdGkpO1xuXG4gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byByZWxheSB0byBhbm90aGVyIGpvYlxuICAgIGlmICghKGpvYi5kYXRhLnJ1bnMubGVuZ3RoID09PSAwIHx8ICEhZXJyb3IpKSB7XG4gICAgICBpZiAoaXNPYmplY3QobmV4dEpvYikpIHtcbiAgICAgICAgbmV4dFF1ZXVlID0gbmV4dEpvYi5xdWV1ZTtcbiAgICAgICAgam9iLmRhdGEucnVuc1swXSA9IG5leHRKb2IucnVucztcbiAgICAgIH0gZWxzZSBpZiAoam9iLmRhdGEuaW5pdGlhbFF1ZXVlKSB7XG4gICAgICAgIG5leHRRdWV1ZSA9IGpvYi5kYXRhLmluaXRpYWxRdWV1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHNvbWUgZGVidWcgZGF0YSBmb3IgdGhlIG5leHQgam9iXG4gICAgICAvLyBzbyBpdCBjYW4gdGVsbCB3aGVyZSB0aGUgcmVsYXkgb3JpZ2luYXRlZCBmcm9tXG4gICAgICBqb2IuZGF0YS5mcm9tX2pvYiA9IGN1cnJlbnRKb2I7XG4gICAgICBqb2IuZGF0YS5mcm9tX3F1ZXVlID0gdGhpcy5uYW1lO1xuICAgICAgam9iLmRhdGEuZnJvbV90aW1lc3RhbXAgPSBnZXRUaW1lU3RhbXAoKTtcbiAgICAgIC8vIHJlbGF5IHJlc29sdmVkIGRhdGFcbiAgICAgIGpvYi5kYXRhLmRhdGEgPSBkYXRhO1xuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3JlLmhvb2tzLmpvYi5jcmVhdGUobmV4dFF1ZXVlLCBqb2IuZGF0YSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgbXVsdGkuZXhlYyhlcnJNdWx0aSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyTXVsdGkpIHJldHVybiByZWplY3QoZXJyTXVsdGkpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB3ZSd2ZSBqdXN0IGZpbmlzaGVkIHRoZSBsYXN0IGpvYiBpbiB0aGUgcmVsYXlcbiAgICAvLyBlbWl0IHN1Y2Nlc3Mgb3IgZmFpbHVyZSBldmVudCBpZiB3ZSBoYXZlIGxpc3RlbmVyc1xuICAgIGlmIChlcnJvciAmJiBqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSkge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5kYXRhLmluaXRpYWxKb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfSBlbHNlIGlmIChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5U3VjY2Vzcykge1xuICAgICAgdGhpcy5jb3JlLnB1YnN1Yi5wdWJsaXNoKGpvYi5kYXRhLmluaXRpYWxKb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJldHVybiBtdWx0aS5leGVjKGVyck11bHRpID0+IHtcbiAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25Mb2NhbFRpY2tDb21wbGV0ZSA9ICgpID0+IHtcbiAgICB0aGlzLnJ1bm5pbmctLTtcbiAgICB0aGlzLnF1ZXVlZC0tO1xuICAgIGlmICghdGhpcy5vcHRpb25zLnRocm90dGxlKSByZXR1cm4gc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG5cbiAgICByZXR1cm4gdGhpcy5jbGllbnQudGhyb3R0bGUoXG4gICAgICB0aGlzLnRvS2V5KCd0aHJvdHRsZScpLFxuICAgICAgdGhpcy5vcHRpb25zLnRocm90dGxlLmxpbWl0LFxuICAgICAgdGhpcy5vcHRpb25zLnRocm90dGxlLnNlY29uZHNcbiAgICApLnRoZW4odGhyb3R0bGUgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkVGhyb3R0bGUgPSB0aHJvdHRsZVswXSA9PT0gMTtcbiAgICAgIGlmICghc2hvdWxkVGhyb3R0bGUpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRocm90dGxlZCA9IHRydWU7XG4gICAgICBjb25zdCB0aW1lUmVtYWluaW5nID0gKHRocm90dGxlWzJdID09PSAwID8gMSA6IHRocm90dGxlWzJdKTtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYCcke3RoaXMubmFtZX0nIHF1ZXVlICByZWFjaGVkIGl0J3MgdGhyb3R0bGUgbGltaXQsIHJlc3VtaW5nIGluICR7dGltZVJlbWFpbmluZ30gc2Vjb25kcy5gKTtcbiAgICAgIHJldHVybiBzZXRUaW1lb3V0KHRoaXMuX3F1ZXVlVGljaywgdGltZVJlbWFpbmluZyAqIDEwMDApO1xuICAgIH0pLmNhdGNoKHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uTG9jYWxUaWNrRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICB0aGlzLnF1ZXVlZC0tO1xuICAgIHRoaXMubG9nLmVycm9yKGVycm9yKTtcbiAgICBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgfTtcblxuICBfdGhyb3R0bGVRdWV1ZSA9ICgpID0+IHtcblxuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9xdWV1ZVRpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMucGF1c2VkIHx8ICF0aGlzLm9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gICAgdGhpcy5xdWV1ZWQrKztcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLl9nZXROZXh0Sm9iKClcbiAgICAgIC50aGVuKGpvYiA9PiB7XG4gICAgICAgIHRoaXMucnVubmluZysrO1xuICAgICAgICAvLyBxdWV1ZSBtb3JlIGpvYnMgaWYgd2l0aGluIGxpbWl0XG4gICAgICAgIGlmICgodGhpcy5ydW5uaW5nICsgdGhpcy5xdWV1ZWQpIDwgdGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5KSB7XG4gICAgICAgICAgLy8gY29uY3VycmVuY3kgaXMgYSBsaXR0bGUgcG9pbnRsZXNzIHJpZ2h0IG5vdyBpZiB3ZSdyZSB0aHJvdHRsaW5nIGpvYnNcbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50aHJvdHRsZSkgc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fcnVuSm9iKGpvYikudGhlbih0aGlzLl9vbkxvY2FsVGlja0NvbXBsZXRlKS5jYXRjaCh0aGlzLl9vbkxvY2FsVGlja0NvbXBsZXRlKTtcbiAgICAgIH0pLmNhdGNoKHRoaXMuX29uTG9jYWxUaWNrRXJyb3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jlc3RhcnRQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgIHRoaXMuY2xpZW50cy5ibG9jay5vbmNlKCdyZWFkeScsIHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBxdWV1ZS5cbiAgICovXG4gIGJlZ2luV29ya2luZygpIHtcbiAgICBpZiAodGhpcy5zdGFydGVkIHx8ICF0aGlzLm9wdGlvbnMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgUXVldWUgJHt0aGlzLm5hbWV9IGlzIGN1cnJlbnRseSBkaXNhYmxlZC5gKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdGhpcy5xdWV1ZWQgPSAwO1xuICAgIHRoaXMucnVubmluZyA9IDA7XG4gICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcblxuICAgIHRoaXMubG9nLnZlcmJvc2UoYFF1ZXVlICcke3RoaXMubmFtZX0nIC0gc3RhcnRlZCB3aXRoIGEgY29uY3VycmVuY3kgb2YgJHt0aGlzLm9wdGlvbnMuY29uY3VycmVuY3l9LmApO1xuXG4gICAgdGhpcy5jbGllbnRzLmJsb2NrLm9uY2UoJ2Vycm9yJywgdGhpcy5fcmVzdGFydFByb2Nlc3NpbmcpO1xuICAgIHRoaXMuY2xpZW50cy5ibG9jay5vbmNlKCdjbG9zZScsIHRoaXMuX3Jlc3RhcnRQcm9jZXNzaW5nKTtcblxuICAgIHRoaXMuY2hlY2tTdGFsbGVkSm9icygpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5sb2cudmVyYm9zZSgnY2hlY2tTdGFsbGVkSm9icyBjb21wbGV0ZWQnKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fcXVldWVUaWNrKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBjaGVja1N0YWxsZWRKb2JzKCkge1xuICAgIHRoaXMubG9nLnZlcmJvc2UoJ2NoZWNrU3RhbGxlZEpvYnMnKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuY2hlY2tzdGFsbGVkam9icyhcbiAgICAgIHRoaXMudG9LZXkoJ3N0YWxsVGltZScpLFxuICAgICAgdGhpcy50b0tleSgnc3RhbGxpbmcnKSxcbiAgICAgIHRoaXMudG9LZXkoJ3dhaXRpbmcnKSxcbiAgICAgIHRoaXMudG9LZXkoJ2FjdGl2ZScpLFxuICAgICAgZ2V0VGltZVN0YW1wKCksXG4gICAgICB0aGlzLm9wdGlvbnMuc3RhbGxJbnRlcnZhbFxuICAgICkudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVkIHx8IHRoaXMucGF1c2VkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5kZWxheSh0aGlzLm9wdGlvbnMuc3RhbGxJbnRlcnZhbCkudGhlbih0aGlzLmNoZWNrU3RhbGxlZEpvYnMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBzdHJcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB0b0tleShzdHIpIHtcbiAgICBpZiAodGhpcy5jb3JlLmNsdXN0ZXIuaXNDbHVzdGVyKCkpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnMua2V5UHJlZml4fTp7JHt0aGlzLm5hbWV9fToke3N0cn1gO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zLmtleVByZWZpeH06JHt0aGlzLm5hbWV9OiR7c3RyfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBldmVudFByZWZpeCB0byBhbiBldmVudCBuYW1lXG4gICAqIEBwYXJhbSBldmVudE5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvRXZlbnROYW1lID0gZXZlbnROYW1lID0+IGBxdWV1ZToke3RoaXMubmFtZX06JHtldmVudE5hbWV9YDtcbn1cbiJdfQ== | ||
//# sourceMappingURL=data:application/json;base64,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WCxDQUhLLEVBSUwsS0FBSyxLQUFMLENBQVcsUUFBWCxDQUpLLEVBS0wsNEJBTEssRUFNTCxLQUFLLE9BQUwsQ0FBYSxhQU5SLEVBT0wsSUFQSyxDQU9BLE1BQU07QUFDWCxVQUFJLENBQUMsS0FBSyxPQUFMLENBQWEsT0FBZCxJQUF5QixLQUFLLE1BQWxDLEVBQTBDLE9BQU8sbUJBQVEsT0FBUixFQUFQO0FBQzFDLGFBQU8sbUJBQVEsS0FBUixDQUFjLEtBQUssT0FBTCxDQUFhLGFBQTNCLEVBQTBDLElBQTFDLENBQStDLEtBQUssZ0JBQXBELENBQVA7QUFDRCxLQVZNLENBQVA7QUFXRDs7QUFFRDs7Ozs7QUFLQSxRQUFNLEdBQU4sRUFBVztBQUNULFFBQUksS0FBSyxJQUFMLENBQVUsT0FBVixDQUFrQixTQUFsQixFQUFKLEVBQW1DO0FBQ2pDLGFBQVEsSUFBRSxLQUFLLE9BQUwsQ0FBYSxTQUFVLE9BQUksS0FBSyxJQUFLLE9BQUksR0FBSSxHQUF2RDtBQUNEO0FBQ0QsV0FBUSxJQUFFLEtBQUssT0FBTCxDQUFhLFNBQVUsTUFBRyxLQUFLLElBQUssTUFBRyxHQUFJLEdBQXJEO0FBQ0Q7O0FBRUQ7Ozs7O0FBcmU4QztrQkFBM0IsSyIsImZpbGUiOiJxdWV1ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBKb2IgZnJvbSAnLi9qb2InO1xuaW1wb3J0IFByb21pc2UgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMnO1xuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCB7IGRlZXBHZXQsIGlzT2JqZWN0LCBnZXRUaW1lU3RhbXAsIHRyeUpTT05QYXJzZSB9IGZyb20gJ3JlZGlib3gnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBRdWV1ZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSBjb3JlXG4gICAqIEByZXR1cm5zIHtRdWV1ZX1cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvcmUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29yZSA9IGNvcmU7XG4gICAgdGhpcy5jbGllbnQgPSBjb3JlLmNsaWVudDtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMudGhyb3R0bGVkID0gZmFsc2U7XG4gICAgdGhpcy5sb2cgPSB0aGlzLmNvcmUubG9nO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLmhhbmRsZXIgPSBvcHRpb25zLmhhbmRsZXIgfHwgbnVsbDtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cy5xdWV1ZSwgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5jb3JlLmNyZWF0ZUNsaWVudCgnYmxvY2snLCB0aGlzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYEJsb2NraW5nIGNsaWVudCBmb3IgcXVldWUgJyR7dGhpcy5uYW1lfScgaXMgcmVhZHkuIFN0YXJ0aW5nIHF1ZXVlIHByb2Nlc3Nvci5gKTtcbiAgICAgIHRoaXMuYmVnaW5Xb3JraW5nKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAnaWQnLCAnam9icycsICdzdGFsbFRpbWUnLCAnc3RhbGxpbmcnLCAnd2FpdGluZycsICdhY3RpdmUnLCAnc3VjY2VlZGVkJywgJ2ZhaWxlZCcsXG4gICAgXS5tYXAoa2V5ID0+IHRoaXMudG9LZXkoa2V5KSk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbCguLi5rZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIGNoZWNrSGVhbHRoKCkge1xuICAgIHJldHVybiB0aGlzXG4gICAgICAuY2xpZW50Lm11bHRpKClcbiAgICAgIC5sbGVuKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSlcbiAgICAgIC5sbGVuKHRoaXMudG9LZXkoJ2FjdGl2ZScpKVxuICAgICAgLnNjYXJkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpKVxuICAgICAgLnNjYXJkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpKVxuICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7IC8qIGVzbGludCBhcnJvdy1ib2R5LXN0eWxlOiAwICovXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2FpdGluZzogcmVzdWx0c1swXVsxXSxcbiAgICAgICAgICBhY3RpdmU6IHJlc3VsdHNbMV1bMV0sXG4gICAgICAgICAgc3VjY2VlZGVkOiByZXN1bHRzWzJdWzFdLFxuICAgICAgICAgIGZhaWxlZDogcmVzdWx0c1szXVsxXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX2dldE5leHRKb2IoKSB7XG4gICAgdGhpcy5sb2cudmVyYm9zZShgR2V0dGluZyBuZXh0IGpvYiBmb3IgcXVldWUgJyR7dGhpcy5uYW1lfScuYCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50cy5ibG9jay5icnBvcGxwdXNoKFxuICAgICAgdGhpcy50b0tleSgnd2FpdGluZycpLFxuICAgICAgdGhpcy50b0tleSgnYWN0aXZlJyksIDBcbiAgICApLnRoZW4oam9iSWQgPT5cbiAgICAgIEpvYi5mcm9tSWQodGhpcywgam9iSWQpLnRoZW4oam9iID0+IHtcbiAgICAgICAgcmV0dXJuIGpvYjtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gam9iXG4gICAqIEBwYXJhbSBqb2JFcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2xvZ0pvYkZhaWx1cmUoam9iLCBqb2JFcnJvcikge1xuICAgIGlmIChwcm9jZXNzLmVudi5LVUJFUk5FVEVTX1BPUlQgfHwgcHJvY2Vzcy5lbnYuS1VCRVJORVRFU19TRVJWSUNFX0hPU1QpIHtcbiAgICAgIC8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICB0eXBlOiAncmVkaWJveF9qb2JfZmFpbHVyZScsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBydW5zOiBqb2IuZGF0YS5ydW5zLFxuICAgICAgICAgIHF1ZXVlOiB0aGlzLm5hbWUsXG4gICAgICAgICAgc3RhY2s6IGpvYkVycm9yLnN0YWNrID8gam9iRXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDAsIDUpIDogW10sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCcnKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCctLS0tLS0tLS0tLS0tLS0gUkRCIEpPQiBFUlJPUi9GQUlMVVJFIC0tLS0tLS0tLS0tLS0tLScpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEpvYjogJHtqb2IuZGF0YS5ydW5zfWAgfHwgdGhpcy5uYW1lKTtcbiAgICAgIGlmIChqb2JFcnJvci5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZy5lcnJvcihqb2JFcnJvci5zdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgNSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2cuZXJyb3Ioam9iRXJyb3IpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpO1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJycpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgX3J1bkpvYihqb2IpIHtcbiAgICBpZiAoIWpvYiB8fCAham9iLmRhdGEpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBjb25zdCBydW5zID0gam9iLmRhdGEgJiYgam9iLmRhdGEucnVucyAmJiBBcnJheS5pc0FycmF5KGpvYi5kYXRhLnJ1bnMpID8gam9iLmRhdGEucnVuc1swXSA6IGpvYi5kYXRhLnJ1bnM7XG4gICAgY29uc3QgaGFuZGxlciA9ICh0eXBlb2YgdGhpcy5oYW5kbGVyID09PSAnc3RyaW5nJyA/XG4gICAgICAgIGRlZXBHZXQoZ2xvYmFsLCB0aGlzLmhhbmRsZXIpIDogdGhpcy5oYW5kbGVyKSB8fCBkZWVwR2V0KGdsb2JhbCwgcnVucyk7XG5cbiAgICBsZXQgcHJldmVudFN0YWxsaW5nVGltZW91dDtcbiAgICBsZXQgaGFuZGxlZCA9IGZhbHNlO1xuXG4gICAgLy8gSGFuZGxlIGFuIFwiT0tcIiByZXNwb25zZSBmcm9tIHRoZSBwcm9taXNlXG4gICAgY29uc3QgaGFuZGxlT0sgPSBkYXRhID0+IHtcbiAgICAgIC8vIHNpbGVudGx5IGlnbm9yZSBhbnkgbXVsdGlwbGUgY2FsbHNcbiAgICAgIGlmIChoYW5kbGVkKSByZXR1cm4gdm9pZCAwO1xuXG4gICAgICBjbGVhclRpbWVvdXQocHJldmVudFN0YWxsaW5nVGltZW91dCk7XG4gICAgICBoYW5kbGVkID0gdHJ1ZTtcblxuICAgICAgLy8gc2V0IHRoZSBkYXRhIGJhY2sgdG8gaW50ZXJuYWwgZGF0YVxuICAgICAgaWYgKGpvYi5faW50ZXJuYWxEYXRhKSB7XG4gICAgICAgIGpvYi5kYXRhID0gam9iLl9pbnRlcm5hbERhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgcmVsYXkgdG8gbmV4dCBqb2IgaWYgdXNlciBkaWQgbm90IHJlc29sdmUgJ2ZhbHNlJyBvbiBjdXJyZW50IGpvYlxuICAgICAgaWYgKGpvYi50eXBlID09PSAncmVsYXknICYmIGRhdGEgIT09IGZhbHNlKSByZXR1cm4gdGhpcy5fZmluaXNoUmVsYXlKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hTaW5nbGVKb2IobnVsbCwgZGF0YSwgam9iKTtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGFueSBlcnJvcnMgcmV0dXJuZWRcbiAgICBjb25zdCBoYW5kbGVFcnJvciA9IGpvYkVycm9yID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChwcmV2ZW50U3RhbGxpbmdUaW1lb3V0KTtcblxuICAgICAgLy8gc2lsZW50bHkgaWdub3JlIGFueSBtdWx0aXBsZSBjYWxsc1xuICAgICAgaWYgKGhhbmRsZWQpIHtcbiAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgaGFuZGxlZCA9IHRydWU7XG5cbiAgICAgIC8vIHNldCB0aGUgZGF0YSBiYWNrIHRvIGludGVybmFsIGpvYiBkYXRhXG4gICAgICBpZiAoam9iLl9pbnRlcm5hbERhdGEpIHtcbiAgICAgICAgam9iLmRhdGEgPSBqb2IuX2ludGVybmFsRGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gb25seSBsb2cgdGhlIGVycm9yIGlmIG5vIG5vdGlmeUZhaWx1cmUgcHVic3ViIHNldFxuICAgICAgaWYgKCgham9iLmRhdGEuaW5pdGlhbEpvYiB8fCAham9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpICYmICFBcnJheS5pc0FycmF5KGpvYi5kYXRhLnJ1bnMpKSB7XG4gICAgICAgIHRoaXMuX2xvZ0pvYkZhaWx1cmUoam9iLCBqb2JFcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChqb2IudHlwZSA9PT0gJ3JlbGF5JykgcmV0dXJuIHRoaXMuX2ZpbmlzaFJlbGF5Sm9iKGpvYkVycm9yLCBudWxsLCBqb2IpO1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbmlzaFNpbmdsZUpvYihqb2JFcnJvciwgbnVsbCwgam9iKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJldmVudFN0YWxsaW5nID0gKCkgPT4ge1xuICAgICAgdGhpcy5jbGllbnQuc3JlbSh0aGlzLnRvS2V5KCdzdGFsbGluZycpLCBqb2IuaWQsICgpID0+IHtcbiAgICAgICAgaWYgKCFoYW5kbGVkKSB7XG4gICAgICAgICAgcHJldmVudFN0YWxsaW5nVGltZW91dCA9IHNldFRpbWVvdXQocHJldmVudFN0YWxsaW5nLCB0aGlzLm9wdGlvbnMuc3RhbGxJbnRlcnZhbCAvIDIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICByZXR1cm4gaGFuZGxlRXJyb3IoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgXCIke2pvYi5kYXRhLnJ1bnMgfHwgJ05vIEpvYiBIYW5kbGVyIFNwZWNpZmllZCd9XCIgd2FzIG5vdCBmb3VuZC4gU2tpcHBpbmcgam9iLiBUbyBmaXggdGhpc1xuICAgICAgICAgICAgIHlvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IGEgaGFuZGxlciBmdW5jdGlvbiB2aWEgcXVldWUucHJvY2VzcygpIG9yIHByb3ZpZGUgYSB2YWxpZCBoYW5kbGVyXG4gICAgICAgICAgICAgbm9kZSBnbG9iYWwgcGF0aCBpbiB5b3VyIGpvYiBvcHRpb25zICdoYW5kbGVyJywgZS5nLiBpZiB5b3UgaGFkIGEgZ2xvYmFsIGZ1bmN0aW9uIGluXG4gICAgICAgICAgICAnZ2xvYmFsLnNhaWxzLnNlcnZpY2VzLm15c2VydmljZScgeW91J2Qgc3BlY2lmeSB0aGUgaGFuZGxlciBhcyAnc2FpbHMuc2VydmljZXMubXlzZXJ2aWNlLm15SGFuZGxlcicuYFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHByZXZlbnRTdGFsbGluZygpOyAvLyBzdGFydCBzdGFsbGluZyBtb25pdG9yXG5cbiAgICBqb2IuX2ludGVybmFsRGF0YSA9IGpvYi5kYXRhO1xuICAgIGpvYi5kYXRhID0gam9iLmRhdGEuZGF0YSB8fCBqb2IuZGF0YTtcblxuICAgIGlmIChqb2Iub3B0aW9ucy50aW1lb3V0KSB7XG4gICAgICBzZXRUaW1lb3V0KGhhbmRsZUVycm9yLmJpbmQobnVsbCwgRXJyb3IoYEpvYiAke2pvYi5pZH0gdGltZWQgb3V0ICgke2pvYi5vcHRpb25zLnRpbWVvdXR9bXMpYCkpLCBqb2Iub3B0aW9ucy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGpvYi5vcHRpb25zLm5vQmluZCB8fCB0aGlzLm9wdGlvbnMubm9CaW5kKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVyKGpvYikudGhlbihoYW5kbGVPSywgaGFuZGxlRXJyb3IpLmNhdGNoKGhhbmRsZUVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhhbmRsZXIuYmluZChqb2IsIGpvYikoam9iKS50aGVuKGhhbmRsZU9LLCBoYW5kbGVFcnJvcikuY2F0Y2goaGFuZGxlRXJyb3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHJldHVybnMge3tqb2I6IHtpZDogKiwgd29ya2VyX2lkOiAoKnxTdHJpbmd8c3RyaW5nKSwgc3RhdHVzOiBzdHJpbmd9LCBlcnJvcjogKiwgb3V0cHV0OiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBpZDogam9iLmlkLFxuICAgICAgICB3b3JrZXJfaWQ6IHRoaXMuY29yZS5pZCxcbiAgICAgICAgc3RhdHVzOiBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIC4uLmpvYi5kYXRhLFxuICAgICAgfSxcbiAgICAgIGVycm9yLFxuICAgICAgb3V0cHV0OiBkYXRhLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGVycm9yXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSBqb2JcbiAgICogQHBhcmFtIG11bHRpXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3IgPyAnZmFpbGVkJyA6ICdzdWNjZWVkZWQnO1xuXG4gICAgbXVsdGkubHJlbSh0aGlzLnRvS2V5KCdhY3RpdmUnKSwgMCwgam9iLmlkKTtcbiAgICBtdWx0aS5zcmVtKHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksIGpvYi5pZCk7XG5cbiAgICBpZiAoc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgaWYgKGpvYi5vcHRpb25zLnJldHJpZXMgPiAwKSB7XG4gICAgICAgIGpvYi5vcHRpb25zLnJldHJpZXMgPSBqb2Iub3B0aW9ucy5yZXRyaWVzIC0gMTtcbiAgICAgICAgam9iLnN0YXR1cyA9ICdyZXRyeWluZyc7XG4gICAgICAgIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAgIG11bHRpLmxwdXNoKHRoaXMudG9LZXkoJ3dhaXRpbmcnKSwgam9iLmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvYi5zdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgbXVsdGkuaGRlbCh0aGlzLnRvS2V5KCdqb2JzJyksIGpvYi5pZCk7XG4gICAgICAgIC8vIFRPRE8gdHJhY2sgZmFpbHVyZXMgYW5kIHRoZWlyIGRhdGEgc29tZXdoZXJlIGVsc2UgZm9yIHJldmlld2luZ1xuICAgICAgICAvLyBtdWx0aS5oc2V0KHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkLCBqb2IudG9EYXRhKCkpO1xuICAgICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ2ZhaWxlZCcpLCBqb2IuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBqb2Iuc3RhdHVzID0gJ3N1Y2NlZWRlZCc7XG4gICAgICBtdWx0aS5oZGVsKHRoaXMudG9LZXkoJ2pvYnMnKSwgam9iLmlkKTtcbiAgICAgIC8vIFRPRE8gdHJhY2sgc3VjY2Vzc2VzIGFuZCB0aGVpciBkYXRhIHNvbWV3aGVyZSBlbHNlIGZvciByZXZpZXdpbmdcbiAgICAgIC8vIG11bHRpLmhzZXQodGhpcy50b0tleSgnam9icycpLCBqb2IuaWQsIGpvYi50b0RhdGEoKSk7XG4gICAgICAvLyBtdWx0aS5zYWRkKHRoaXMudG9LZXkoJ3N1Y2NlZWRlZCcpLCBqb2IuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIGpvYlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIF9maW5pc2hTaW5nbGVKb2IoZXJyb3IsIGRhdGEsIGpvYikge1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5jbGllbnQubXVsdGkoKTtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvciA/ICdmYWlsZWQnIDogJ3N1Y2NlZWRlZCc7XG4gICAgdGhpcy5fdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKTtcblxuICAgIC8vIGVtaXQgc3VjY2VzcyBvciBmYWlsdXJlIGV2ZW50IGlmIHdlIGhhdmUgbGlzdGVuZXJzXG4gICAgaWYgKGVycm9yICYmIGpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2Iub3B0aW9ucy5ub3RpZnlGYWlsdXJlLCB0aGlzLl9jcmVhdGVKb2JFdmVudChlcnJvciwgZGF0YSwgam9iKSk7XG4gICAgfSBlbHNlIGlmIChqb2Iub3B0aW9ucy5ub3RpZnlTdWNjZXNzKSB7XG4gICAgICB0aGlzLmNvcmUucHVic3ViLnB1Ymxpc2goam9iLm9wdGlvbnMubm90aWZ5U3VjY2VzcywgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtdWx0aS5leGVjKGVyck11bHRpID0+IHtcbiAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoeyBzdGF0dXMsIHJlc3VsdDogZXJyb3IgfHwgZGF0YSB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlcyBhIG11bHRpIGpvYiBvciBjb250aW51ZXMgdG8gdGhlIG5leHQgc3RhZ2UuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gam9iXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZpbmlzaFJlbGF5Sm9iKGVycm9yLCBkYXRhLCBqb2IpIHtcbiAgICBsZXQgbmV4dFF1ZXVlID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IG5leHRKb2IgPSBqb2IuZGF0YS5ydW5zWzBdO1xuICAgIGNvbnN0IG11bHRpID0gdGhpcy5jbGllbnQubXVsdGkoKTtcbiAgICBjb25zdCBjdXJyZW50Sm9iID0gam9iLmRhdGEucnVucy5zaGlmdCgpO1xuICAgIGNvbnN0IHN0YXR1cyA9IGVycm9yID8gJ2ZhaWxlZCcgOiAnc3VjY2VlZGVkJztcblxuICAgIC8vIGtlZXAgYSByZWNvcmQgb2YgdGhlIGZpcnN0IGpvYiBpbiB0aGlzIHJlbGF5IGluc3RhbmNlXG4gICAgaWYgKCFqb2IuZGF0YS5pbml0aWFsSm9iKSB7XG4gICAgICBqb2IuZGF0YS5pbml0aWFsSm9iID0gdHJ5SlNPTlBhcnNlKGpvYi50b0RhdGEoKSk7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgZmlyc3QgcXVldWUgaW4gdGhpcyByZWxheSBpbnN0YW5jZVxuICAgIGlmICgham9iLmRhdGEuaW5pdGlhbFF1ZXVlKSB7XG4gICAgICBqb2IuZGF0YS5pbml0aWFsUXVldWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlSm9iU3RhdHVzKGVycm9yLCBkYXRhLCBqb2IsIG11bHRpKTtcblxuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmVsYXkgdG8gYW5vdGhlciBqb2JcbiAgICBpZiAoIShqb2IuZGF0YS5ydW5zLmxlbmd0aCA9PT0gMCB8fCAhIWVycm9yKSkge1xuICAgICAgaWYgKGlzT2JqZWN0KG5leHRKb2IpKSB7XG4gICAgICAgIG5leHRRdWV1ZSA9IG5leHRKb2IucXVldWU7XG4gICAgICAgIGpvYi5kYXRhLnJ1bnNbMF0gPSBuZXh0Sm9iLnJ1bnM7XG4gICAgICB9IGVsc2UgaWYgKGpvYi5kYXRhLmluaXRpYWxRdWV1ZSkge1xuICAgICAgICBuZXh0UXVldWUgPSBqb2IuZGF0YS5pbml0aWFsUXVldWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBzb21lIGRlYnVnIGRhdGEgZm9yIHRoZSBuZXh0IGpvYlxuICAgICAgLy8gc28gaXQgY2FuIHRlbGwgd2hlcmUgdGhlIHJlbGF5IG9yaWdpbmF0ZWQgZnJvbVxuICAgICAgam9iLmRhdGEuZnJvbV9qb2IgPSBjdXJyZW50Sm9iO1xuICAgICAgam9iLmRhdGEuZnJvbV9xdWV1ZSA9IHRoaXMubmFtZTtcbiAgICAgIGpvYi5kYXRhLmZyb21fdGltZXN0YW1wID0gZ2V0VGltZVN0YW1wKCk7XG4gICAgICAvLyByZWxheSByZXNvbHZlZCBkYXRhXG4gICAgICBqb2IuZGF0YS5kYXRhID0gZGF0YTtcblxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29yZS5ob29rcy5qb2IuY3JlYXRlKG5leHRRdWV1ZSwgam9iLmRhdGEpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIG11bHRpLmV4ZWMoZXJyTXVsdGkgPT4ge1xuICAgICAgICAgICAgaWYgKGVyck11bHRpKSByZXR1cm4gcmVqZWN0KGVyck11bHRpKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gd2UndmUganVzdCBmaW5pc2hlZCB0aGUgbGFzdCBqb2IgaW4gdGhlIHJlbGF5XG4gICAgLy8gZW1pdCBzdWNjZXNzIG9yIGZhaWx1cmUgZXZlbnQgaWYgd2UgaGF2ZSBsaXN0ZW5lcnNcbiAgICBpZiAoZXJyb3IgJiYgam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeUZhaWx1cmUpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5RmFpbHVyZSwgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH0gZWxzZSBpZiAoam9iLmRhdGEuaW5pdGlhbEpvYi5vcHRpb25zLm5vdGlmeVN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuY29yZS5wdWJzdWIucHVibGlzaChqb2IuZGF0YS5pbml0aWFsSm9iLm9wdGlvbnMubm90aWZ5U3VjY2VzcywgdGhpcy5fY3JlYXRlSm9iRXZlbnQoZXJyb3IsIGRhdGEsIGpvYikpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbXVsdGkuZXhlYyhlcnJNdWx0aSA9PiB7XG4gICAgICAgIGlmIChlcnJNdWx0aSkgcmV0dXJuIHJlamVjdChlcnJNdWx0aSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHsgc3RhdHVzLCByZXN1bHQ6IGVycm9yIHx8IGRhdGEgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX29uTG9jYWxUaWNrQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgdGhpcy5ydW5uaW5nLS07XG4gICAgdGhpcy5xdWV1ZWQtLTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy50aHJvdHRsZSkgcmV0dXJuIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRocm90dGxlKFxuICAgICAgdGhpcy50b0tleSgndGhyb3R0bGUnKSxcbiAgICAgIHRoaXMub3B0aW9ucy50aHJvdHRsZS5saW1pdCxcbiAgICAgIHRoaXMub3B0aW9ucy50aHJvdHRsZS5zZWNvbmRzXG4gICAgKS50aGVuKHRocm90dGxlID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZFRocm90dGxlID0gdGhyb3R0bGVbMF0gPT09IDE7XG4gICAgICBpZiAoIXNob3VsZFRocm90dGxlKSB7XG4gICAgICAgIHRoaXMudGhyb3R0bGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzZXRJbW1lZGlhdGUodGhpcy5fcXVldWVUaWNrKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50aHJvdHRsZWQgPSB0cnVlO1xuICAgICAgY29uc3QgdGltZVJlbWFpbmluZyA9ICh0aHJvdHRsZVsyXSA9PT0gMCA/IDEgOiB0aHJvdHRsZVsyXSk7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKGAnJHt0aGlzLm5hbWV9JyBxdWV1ZSAgcmVhY2hlZCBpdCdzIHRocm90dGxlIGxpbWl0LCByZXN1bWluZyBpbiAke3RpbWVSZW1haW5pbmd9IHNlY29uZHMuYCk7XG4gICAgICByZXR1cm4gc2V0VGltZW91dCh0aGlzLl9xdWV1ZVRpY2ssIHRpbWVSZW1haW5pbmcgKiAxMDAwKTtcbiAgICB9KS5jYXRjaCh0aGlzLl9xdWV1ZVRpY2spO1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vbkxvY2FsVGlja0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5xdWV1ZWQtLTtcbiAgICB0aGlzLmxvZy5lcnJvcihlcnJvcik7XG4gICAgc2V0SW1tZWRpYXRlKHRoaXMuX3F1ZXVlVGljayk7XG4gIH07XG5cbiAgX3Rocm90dGxlUXVldWUgPSAoKSA9PiB7XG5cbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcXVldWVUaWNrID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnBhdXNlZCB8fCAhdGhpcy5vcHRpb25zLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICAgIHRoaXMucXVldWVkKys7XG4gICAgcmV0dXJuIHRoaXNcbiAgICAgIC5fZ2V0TmV4dEpvYigpXG4gICAgICAudGhlbihqb2IgPT4ge1xuICAgICAgICB0aGlzLnJ1bm5pbmcrKztcbiAgICAgICAgLy8gcXVldWUgbW9yZSBqb2JzIGlmIHdpdGhpbiBsaW1pdFxuICAgICAgICBpZiAoKHRoaXMucnVubmluZyArIHRoaXMucXVldWVkKSA8IHRoaXMub3B0aW9ucy5jb25jdXJyZW5jeSkge1xuICAgICAgICAgIC8vIGNvbmN1cnJlbmN5IGlzIGEgbGl0dGxlIHBvaW50bGVzcyByaWdodCBub3cgaWYgd2UncmUgdGhyb3R0bGluZyBqb2JzXG4gICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudGhyb3R0bGUpIHNldEltbWVkaWF0ZSh0aGlzLl9xdWV1ZVRpY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkpvYihqb2IpLnRoZW4odGhpcy5fb25Mb2NhbFRpY2tDb21wbGV0ZSkuY2F0Y2godGhpcy5fb25Mb2NhbFRpY2tDb21wbGV0ZSk7XG4gICAgICB9KS5jYXRjaCh0aGlzLl9vbkxvY2FsVGlja0Vycm9yKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZXN0YXJ0UHJvY2Vzc2luZyA9ICgpID0+IHtcbiAgICB0aGlzLmNsaWVudHMuYmxvY2sub25jZSgncmVhZHknLCB0aGlzLl9xdWV1ZVRpY2spO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdGFydCB0aGUgcXVldWUuXG4gICAqL1xuICBiZWdpbldvcmtpbmcoKSB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCB8fCAhdGhpcy5vcHRpb25zLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYFF1ZXVlICR7dGhpcy5uYW1lfSBpcyBjdXJyZW50bHkgZGlzYWJsZWQuYCk7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cblxuICAgIHRoaXMucXVldWVkID0gMDtcbiAgICB0aGlzLnJ1bm5pbmcgPSAwO1xuICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG5cbiAgICB0aGlzLmxvZy52ZXJib3NlKGBRdWV1ZSAnJHt0aGlzLm5hbWV9JyAtIHN0YXJ0ZWQgd2l0aCBhIGNvbmN1cnJlbmN5IG9mICR7dGhpcy5vcHRpb25zLmNvbmN1cnJlbmN5fS5gKTtcblxuICAgIHRoaXMuY2xpZW50cy5ibG9jay5vbmNlKCdlcnJvcicsIHRoaXMuX3Jlc3RhcnRQcm9jZXNzaW5nKTtcbiAgICB0aGlzLmNsaWVudHMuYmxvY2sub25jZSgnY2xvc2UnLCB0aGlzLl9yZXN0YXJ0UHJvY2Vzc2luZyk7XG5cbiAgICB0aGlzLmNoZWNrU3RhbGxlZEpvYnMoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoJ2NoZWNrU3RhbGxlZEpvYnMgY29tcGxldGVkJyk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXVlVGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgY2hlY2tTdGFsbGVkSm9icygpIHtcbiAgICB0aGlzLmxvZy52ZXJib3NlKCdjaGVja1N0YWxsZWRKb2JzJyk7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LmNoZWNrc3RhbGxlZGpvYnMoXG4gICAgICB0aGlzLnRvS2V5KCdzdGFsbFRpbWUnKSxcbiAgICAgIHRoaXMudG9LZXkoJ3N0YWxsaW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCd3YWl0aW5nJyksXG4gICAgICB0aGlzLnRvS2V5KCdhY3RpdmUnKSxcbiAgICAgIGdldFRpbWVTdGFtcCgpLFxuICAgICAgdGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWxcbiAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLnBhdXNlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuIFByb21pc2UuZGVsYXkodGhpcy5vcHRpb25zLnN0YWxsSW50ZXJ2YWwpLnRoZW4odGhpcy5jaGVja1N0YWxsZWRKb2JzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gc3RyXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgdG9LZXkoc3RyKSB7XG4gICAgaWYgKHRoaXMuY29yZS5jbHVzdGVyLmlzQ2x1c3RlcigpKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5vcHRpb25zLmtleVByZWZpeH06eyR7dGhpcy5uYW1lfX06JHtzdHJ9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMub3B0aW9ucy5rZXlQcmVmaXh9OiR7dGhpcy5uYW1lfToke3N0cn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZXZlbnRQcmVmaXggdG8gYW4gZXZlbnQgbmFtZVxuICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0b0V2ZW50TmFtZSA9IGV2ZW50TmFtZSA9PiBgcXVldWU6JHt0aGlzLm5hbWV9OiR7ZXZlbnROYW1lfWA7XG59XG4iXX0= |
{ | ||
"name": "redibox-hook-job", | ||
"description": "Advanced redibox powered jobs and queues", | ||
"version": "1.2.3", | ||
"version": "1.2.4", | ||
"main": "lib/index.js", | ||
@@ -6,0 +6,0 @@ "author": "Mike Diarmid", |
151022
2056