UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

231 lines (230 loc) 24.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ export class DateTimeUtils { /** * @param {?} date1 * @param {?} date2 * @return {?} */ static diffDate(date1, date2) { let /** @type {?} */ result = []; if (date1 === null || typeof date1 === 'undefined') { return result; } if (date2 === null || typeof date2 === 'undefined') { return result; } let /** @type {?} */ diff = (date2.getTime() - date1.getTime()) / 1000; diff = Math.abs(Math.floor(diff)); let /** @type {?} */ days = Math.floor(diff / (24 * 60 * 60)); let /** @type {?} */ leftSec = diff - days * 24 * 60 * 60; let /** @type {?} */ hrs = Math.floor(leftSec / (60 * 60)); leftSec = leftSec - hrs * 60 * 60; let /** @type {?} */ min = Math.floor(leftSec / (60)); leftSec = leftSec - min * 60; result.push(days); // days result.push(hrs); // hrs result.push(min); // min result.push(leftSec); // leftSec return result; } /** * @param {?} date1 * @param {?} date2 * @return {?} */ static diffDateInHour(date1, date2) { if (date1 === null || typeof date1 === 'undefined') { return 0; } if (date2 === null || typeof date2 === 'undefined') { return 0; } let /** @type {?} */ hours = Math.abs(date1.getTime() - date2.getTime()) / (60 * 60 * 1000); return hours; } /** * @param {?} data * @return {?} */ static getDateFromAny(data) { let /** @type {?} */ resolveDate = null; if (data !== null && typeof data !== 'undefined') { if (typeof data === 'string') { // If arg "pattern" is provided, put it at the first of the list to // try to resolve with the given "pattern" first. try { resolveDate = Date.parseExact(data, DateTimeUtils.PATTERNS); } catch (/** @type {?} */ err) { } if (resolveDate === null || typeof resolveDate === 'undefined') { try { resolveDate = Date.parse(data); } catch (/** @type {?} */ err) { } } } else if (typeof data === 'number') { try { resolveDate = new Date(data); } catch (/** @type {?} */ err) { } } else if (typeof data === 'object') { if (data instanceof Date) { resolveDate = new Date(data.getTime()); } } } return resolveDate; } /** * @param {?} date * @return {?} */ static getTimeMessage(date) { if (date === null || typeof date === 'undefined') { return ""; } let /** @type {?} */ now = new Date(); return this.getCompareTimeMessage(date, now); } /** * @param {?} compareTo * @param {?} date * @return {?} */ static getCompareTimeMessage(compareTo, date) { if (compareTo === null || typeof compareTo === 'undefined') { return ""; } if (date === null || typeof date === 'undefined') { return ""; } let /** @type {?} */ result = ""; // time since message was sent in seconds let /** @type {?} */ seconds = (date.getTime() - compareTo.getTime()) / 1000; let /** @type {?} */ min = seconds / 60; let /** @type {?} */ hour = min / 60; let /** @type {?} */ days = hour / 24; let /** @type {?} */ weeks = days / 7; let /** @type {?} */ months = weeks / 4; let /** @type {?} */ years = months / 12; // format string if (seconds < 15) { // < 15 secs result = 'Just now'; } else if (seconds < 60) { // < 1 min result = 'Within a minute ago'; } else if (seconds < 300) { // < 5 mins result = 'A few minutes ago'; } else if (seconds < 3600) { // < 1 hour result = Math.floor(min) + ' minutes ago'; } else if (seconds < 86400) { // < 1 day result = 'About ' + Math.floor(hour) + ' hours ago'; } else if (seconds < 172800) { // < 2 days result = 'Yesterday'; } else if (seconds < 604800) { // < 7 days result = Math.floor(days) + ' days ago'; } else if (seconds < 691200) { // < 8 days result = 'A week ago'; } else if (seconds < 2628000) { // < 1 month result = Math.floor(weeks) + ' weeks ago'; } else if (seconds < 5256000) { // < 2 months result = 'A month ago'; } else if (seconds < 31536000) { // < 12 months result = Math.floor(months) + ' months ago'; } else if (seconds < 63072000) { // < 2 years result = 'A year ago'; } else if (seconds >= 63072000) { // >= 2 years result = Math.floor(years) + ' years ago'; } return result; } /** * @param {?} timeZone * @return {?} */ static parseTimeZone(timeZone) { let /** @type {?} */ isHasAddOrSub; let /** @type {?} */ isHasColon; let /** @type {?} */ tzDiff = 0; timeZone = timeZone.replace(/\./g, ":"); isHasAddOrSub = /^(\+|\-)/i.test(timeZone); // + or - isHasColon = /(\:)/i.test(timeZone); // : let /** @type {?} */ addOrSubIndex = -1; let /** @type {?} */ operationStr = ""; if (isHasAddOrSub) { let /** @type {?} */ addIndex = timeZone.indexOf("+"); let /** @type {?} */ subIndex = timeZone.indexOf("-"); if (addIndex !== -1) { addOrSubIndex = addIndex; } else { addOrSubIndex = subIndex; } if (addOrSubIndex !== -1) { operationStr = timeZone.substring(0, addOrSubIndex + 1); } } try { let /** @type {?} */ tz; let /** @type {?} */ colon = ":"; if (isHasColon) { let /** @type {?} */ stHour = addOrSubIndex + 1; let /** @type {?} */ edHour = timeZone.indexOf(colon); let /** @type {?} */ stMin = edHour + 1; let /** @type {?} */ edMin = timeZone.length; let /** @type {?} */ hour = Number(timeZone.substring(stHour, edHour)); let /** @type {?} */ min = Number(timeZone.substring(stMin, edMin)); tz = Number(operationStr + (hour * 100 + min)); } else { tz = Number(timeZone); } tzDiff = isNaN(tz) ? 0 : tz; } catch (/** @type {?} */ e) { } return tzDiff; } } DateTimeUtils.PATTERNS = [ "yyyy-MM-dd'T'HH:mm:ssZ", "dd/MM/yyyy", "yyyy-MM-dd" ]; function DateTimeUtils_tsickle_Closure_declarations() { /** @type {?} */ DateTimeUtils.PATTERNS; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWVVdGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL3NoYXJlL3V0aWxzL0RhdGVUaW1lVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE1BQU07Ozs7OztJQWlCRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQVcsRUFBRSxLQUFXO1FBRTdDLHFCQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDMUIsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDZjtRQUNELEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2Y7UUFFRCxxQkFBSSxJQUFJLEdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzlELElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVsQyxxQkFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQscUJBQUksT0FBTyxHQUFXLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFFakQscUJBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxHQUFHLE9BQU8sR0FBRyxHQUFH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Q0FBQztnQkFDTixFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZCO1lBRUQsTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDN0I7UUFBQyxLQUFLLENBQUEsQ0FBQyxpQkFBQSxDQUFDLEVBQUMsQ0FBQztTQUNWO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQTs7O3lCQTNNb0I7SUFFakMsd0JBQXdCO0lBU3hCLFlBQVk7SUFDWixZQUFZO0NBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgRGF0ZVRpbWVVdGlscyB7XG5cbiAgcHVibGljIHN0YXRpYyBQQVRURVJOUzogc3RyaW5nW10gPSBbXG4gICAgLy8gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnWidcIiwgXG4gICAgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NaXCIsXG4gICAgLy8gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIiwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTJ1onXCIsXG4gICAgLy8gXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTWlwiLCBcInl5eXktTU0tZGQgSEg6bW06c3NcIixcbiAgICAvLyBcIk1NL2RkL3l5eXkgSEg6bW06c3NcIiwgXCJNTS9kZC95eXl5J1QnSEg6bW06c3MuU1NTJ1onXCIsXG4gICAgLy8gXCJNTS9kZC95eXl5J1QnSEg6bW06c3MuU1NTWlwiLCBcIk1NL2RkL3l5eXknVCdISDptbTpzcy5TU1NcIixcbiAgICAvLyBcIk1NL2RkL3l5eXknVCdISDptbTpzc1pcIiwgXCJNTS9kZC95eXl5J1QnSEg6bW06c3NcIixcbiAgICAvLyBcInl5eXk6TU06ZGQgSEg6bW06c3NcIiwgXCJ5eXl5TU1kZFwiLFxuICAgIC8vIFwieXl5eS1NTS1kZFRISDptbTpzcy5zc3NaXCIsIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLnNzc1pcIiwgXCJkZC9NTS95eXl5IEhIOm1tOnNzXCIsXG4gICAgLy8gXCJ5eXl5LU1NLWRkVEhIOm1tOnNzLlNTU1pcIiwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTWlwiLCBcInl5eXktTU0tZGQgSEg6bW06c3NcIixcbiAgICBcImRkL01NL3l5eXlcIixcbiAgICBcInl5eXktTU0tZGRcIl07XG5cblxuICBwdWJsaWMgc3RhdGljIGRpZmZEYXRlKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IG51bWJlcltdIHtcblxuICAgIGxldCByZXN1bHQ6IG51bWJlcltdID0gW107XG4gICAgaWYgKGRhdGUxID09PSBudWxsIHx8IHR5cGVvZiBkYXRlMSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmIChkYXRlMiA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0ZTIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBkaWZmOiBudW1iZXIgPSAoZGF0ZTIuZ2V0VGltZSgpIC0gZGF0ZTEuZ2V0VGltZSgpKSAvIDEwMDA7XG4gICAgZGlmZiA9IE1hdGguYWJzKE1hdGguZmxvb3IoZGlmZikpO1xuXG4gICAgbGV0IGRheXM6IG51bWJlciA9IE1hdGguZmxvb3IoZGlmZiAvICgyNCAqIDYwICogNjApKTtcbiAgICBsZXQgbGVmdFNlYzogbnVtYmVyID0gZGlmZiAtIGRheXMgKiAyNCAqIDYwICogNjA7XG5cbiAgICBsZXQgaHJzOiBudW1iZXIgPSBNYXRoLmZsb29yKGxlZnRTZWMgLyAoNjAgKiA2MCkpO1xuICAgIGxlZnRTZWMgPSBsZWZ0U2VjIC0gaHJzICogNjAgKiA2MDtcblxuICAgIGxldCBtaW46IG51bWJlciA9IE1hdGguZmxvb3IobGVmdFNlYyAvICg2MCkpO1xuICAgIGxlZnRTZWMgPSBsZWZ0U2VjIC0gbWluICogNjA7XG5cblxuICAgIHJlc3VsdC5wdXNoKGRheXMpOy8vIGRheXNcbiAgICByZXN1bHQucHVzaChocnMpOy8vIGhyc1xuICAgIHJlc3VsdC5wdXNoKG1pbik7Ly8gbWluXG4gICAgcmVzdWx0LnB1c2gobGVmdFNlYyk7Ly8gbGVmdFNlY1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGlmZkRhdGVJbkhvdXIoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogbnVtYmVyIHtcbiAgICBpZiAoZGF0ZTEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGUxID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGlmIChkYXRlMiA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0ZTIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBsZXQgaG91cnMgPSBNYXRoLmFicyhkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCkpIC8gKDYwICogNjAgKiAxMDAwKTtcblxuICAgIHJldHVybiBob3VycztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZUZyb21BbnkoZGF0YTogYW55KTogRGF0ZSB7XG4gICAgbGV0IHJlc29sdmVEYXRlOiBEYXRlID0gbnVsbDtcblxuICAgIGlmIChkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBJZiBhcmcgXCJwYXR0ZXJuXCIgaXMgcHJvdmlkZWQsIHB1dCBpdCBhdCB0aGUgZmlyc3Qgb2YgdGhlIGxpc3QgdG9cbiAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgd2l0aCB0aGUgZ2l2ZW4gXCJwYXR0ZXJuXCIgZmlyc3QuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZURhdGUgPSBEYXRlLnBhcnNlRXhhY3QoZGF0YSwgRGF0ZVRpbWVVdGlscy5QQVRURVJOUyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc29sdmVEYXRlID09PSBudWxsIHx8IHR5cGVvZiByZXNvbHZlRGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZURhdGUgPSBEYXRlLnBhcnNlKGRhdGEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXNvbHZlRGF0ZSA9IG5ldyBEYXRlKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgcmVzb2x2ZURhdGUgPSBuZXcgRGF0ZShkYXRhLmdldFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZURhdGU7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFRpbWVNZXNzYWdlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGlmIChkYXRlID09PSBudWxsIHx8IHR5cGVvZiBkYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRDb21wYXJlVGltZU1lc3NhZ2UoZGF0ZSwgbm93KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29tcGFyZVRpbWVNZXNzYWdlKGNvbXBhcmVUbzogRGF0ZSwgZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbXBhcmVUbyA9PT0gbnVsbCB8fCB0eXBlb2YgY29tcGFyZVRvID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgaWYgKGRhdGUgPT09IG51bGwgfHwgdHlwZW9mIGRhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICAvLyB0aW1lIHNpbmNlIG1lc3NhZ2Ugd2FzIHNlbnQgaW4gc2Vjb25kc1xuICAgIGxldCBzZWNvbmRzID0gKGRhdGUuZ2V0VGltZSgpIC0gY29tcGFyZVRvLmdldFRpbWUoKSkgLyAxMDAwO1xuICAgIGxldCBtaW4gPSBzZWNvbmRzIC8gNjA7XG4gICAgbGV0IGhvdXIgPSBtaW4gLyA2MDtcbiAgICBsZXQgZGF5cyA9IGhvdXIgLyAyNDtcbiAgICBsZXQgd2Vla3MgPSBkYXlzIC8gNztcbiAgICBsZXQgbW9udGhzID0gd2Vla3MgLyA0O1xuICAgIGxldCB5ZWFycyA9IG1vbnRocyAvIDEyO1xuXG4gICAgLy8gZm9ybWF0IHN0cmluZ1xuICAgIGlmIChzZWNvbmRzIDwgMTUpIHsgLy8gPCAxNSBzZWNzXG4gICAgICByZXN1bHQgPSAnSnVzdCBub3cnO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDYwKSB7IC8vIDwgMSBtaW5cbiAgICAgIHJlc3VsdCA9ICdXaXRoaW4gYSBtaW51dGUgYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAzMDApIHsgLy8gPCA1IG1pbnNcbiAgICAgIHJlc3VsdCA9ICdBIGZldyBtaW51dGVzIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMzYwMCkgeyAvLyA8IDEgaG91clxuICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcihtaW4pICsgJyBtaW51dGVzIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgODY0MDApIHsgLy8gPCAxIGRheVxuICAgICAgcmVzdWx0ID0gJ0Fib3V0ICcgKyBNYXRoLmZsb29yKGhvdXIpICsgJyBob3VycyBhZ28nO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDE3MjgwMCkgeyAvLyA8IDIgZGF5c1xuICAgICAgcmVzdWx0ID0gJ1llc3RlcmRheSc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjA0ODAwKSB7IC8vIDwgNyBkYXlzXG4gICAgICByZXN1bHQgPSBNYXRoLmZsb29yKGRheXMpICsgJyBkYXlzIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjkxMjAwKSB7IC8vIDwgOCBkYXlzXG4gICAgICByZXN1bHQgPSAnQSB3ZWVrIGFnbyc7XG4gICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMjYyODAwMCkgeyAvLyA8IDEgbW9udGhcbiAgICAgIHJlc3VsdCA9IE1hdGguZmxvb3Iod2Vla3MpICsgJyB3ZWVrcyBhZ28nO1xuICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDUyNTYwMDApIHsgLy8gPCAyIG1vbnRoc1xuICAgICAgcmVzdWx0ID0gJ0EgbW9udGggYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCAzMTUzNjAwMCkgeyAvLyA8IDEyIG1vbnRoc1xuICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcihtb250aHMpICsgJyBtb250aHMgYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA2MzA3MjAwMCkgeyAvLyA8IDIgeWVhcnNcbiAgICAgIHJlc3VsdCA9ICdBIHllYXIgYWdvJztcbiAgICB9IGVsc2UgaWYgKHNlY29uZHMgPj0gNjMwNzIwMDApIHsgLy8gPj0gMiB5ZWFyc1xuICAgICAgcmVzdWx0ID0gTWF0aC5mbG9vcih5ZWFycykgKyAnIHllYXJzIGFnbyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VUaW1lWm9uZSh0aW1lWm9uZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaXNIYXNBZGRPclN1YjogYm9vbGVhbjtcbiAgICBsZXQgaXNIYXNDb2xvbjogYm9vbGVhbjtcbiAgICBsZXQgdHpEaWZmOiBudW1iZXIgPSAwO1xuXG4gICAgdGltZVpvbmUgPSB0aW1lWm9uZS5yZXBsYWNlKC9cXC4vZywgXCI6XCIpO1xuXG4gICAgaXNIYXNBZGRPclN1YiA9IC9eKFxcK3xcXC0pL2kudGVzdCh0aW1lWm9uZSk7IC8vICsgb3IgLVxuICAgIGlzSGFzQ29sb24gPSAvKFxcOikvaS50ZXN0KHRpbWVab25lKTsgLy8gOlxuXG4gICAgbGV0IGFkZE9yU3ViSW5kZXggPSAtMTtcbiAgICBsZXQgb3BlcmF0aW9uU3RyOiBzdHJpbmcgPSBcIlwiO1xuXG4gICAgaWYoaXNIYXNBZGRPclN1Yikge1xuICAgICAgbGV0IGFkZEluZGV4OiBudW1iZXIgPSB0aW1lWm9uZS5pbmRleE9mKFwiK1wiKTtcbiAgICAgIGxldCBzdWJJbmRleDogbnVtYmVyID0gdGltZVpvbmUuaW5kZXhPZihcIi1cIik7XG5cbiAgICAgIGlmKGFkZEluZGV4ICE9PSAtMSkge1xuICAgICAgICBhZGRPclN1YkluZGV4ID0gYWRkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRPclN1YkluZGV4ID0gc3ViSW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGlmKGFkZE9yU3ViSW5kZXggIT09IC0xKXtcbiAgICAgICAgb3BlcmF0aW9uU3RyID0gdGltZVpvbmUuc3Vic3RyaW5nKDAsIGFkZE9yU3ViSW5kZXgrMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ejogbnVtYmVyO1xuICAgICAgbGV0IGNvbG9uID0gXCI6XCI7XG5cbiAgICAgIGlmKGlzSGFzQ29sb24pIHtcbiAgICAgICAgbGV0IHN0SG91cjogbnVtYmVyID0gYWRkT3JTdWJJbmRleCArIDE7XG4gICAgICAgIGxldCBlZEhvdXI6IG51bWJlciA9IHRpbWVab25lLmluZGV4T2YoY29sb24pO1xuXG4gICAgICAgIGxldCBzdE1pbjogbnVtYmVyID0gZWRIb3VyICsxO1xuICAgICAgICBsZXQgZWRNaW46IG51bWJlciA9IHRpbWVab25lLmxlbmd0aDtcblxuICAgICAgICBsZXQgaG91cjogbnVtYmVyID0gTnVtYmVyKHRpbWVab25lLnN1YnN0cmluZyhzdEhvdXIsIGVkSG91cikpO1xuICAgICAgICBsZXQgbWluOiBudW1iZXIgPSBOdW1iZXIodGltZVpvbmUuc3Vic3RyaW5nKHN0TWluLCBlZE1pbikpO1xuICAgICAgICB0eiA9IE51bWJlcihvcGVyYXRpb25TdHIgKyAoaG91ciAqIDEwMCArIG1pbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHogPSBOdW1iZXIodGltZVpvbmUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0ekRpZmYgPSBpc05hTih0eikgPyAwIDogdHo7XG4gICAgfSBjYXRjaChlKXtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpEaWZmXG4gIH1cbn1cbiJdfQ==